[Distutils] Compiling extensions with MingW32 / python.org binary
Michael Droettboom
mdboom at jhu.edu
Wed Jan 14 15:38:34 EST 2004
Michael Droettboom wrote:
> M.-A. Lemburg wrote:
>
>> Michael Droettboom wrote:
>>
>>> Moore, Paul wrote:
>>>
>>>> From: Michael Droettboom
>>>>
>>>>
>>>>> I've come across a possible bug with --compiler=mingw32 and
>>>>> --compiler=cygwin support when using the standard python.org 2.3.3
>>>>> .exe. (I do this so I can distribute binary installers that work
>>>>> with the standard Python distribution, but don't want to buy MS
>>>>> Visual Studio...)
>>>>>
>>>>
>>>>
>>>>
>>>>
>>>> I don't have a C extension handy to try at the moment, but I haven't
>>>> had a problem in the past using mingw (--compiler=mingw32) and
>>>> python.org python 2.3.3.
>>>>
>>>> Can you clarify what you are having problems with? Using python.org
>>>> python with cygwin gcc (--compiler=cygwin)? If so, I have no
>>>> experience
>>>> with that, so I can't help (beyond saying that mingw works fine, so
>>>> don't break that in the process of fixing the cygwin case!)
>>>>
>>>>
>>> I'm having problems with both --compiler=cygwin and --compiler=mingw32.
>>
Okay, the detail that I realise is important is that this is a C++
extension.
From unixccompiler.py (line 169 in Python 2.3.3):
try:
if target_desc == CCompiler.EXECUTABLE:
linker = self.linker_exe[:]
else:
linker = self.linker_so[:]
if target_lang == "c++" and self.compiler_cxx: #***
linker[0] = self.compiler_cxx[0] #***
self.spawn(linker + ld_args)
except DistutilsExecError, msg:
raise LinkError, msg
Since target_lang == "c++", and self.compiler_cxx is defined in
unixccompiler.py as "cc", but not overridden in cygwinccompiler.py (as
compiler, compiler_so, linker_exe and linker_so are...) we end up with
the command line having cc instead of gcc at the front.
In the Python CVS history, it seems that the lines marked *** were added
since the release22-maint branch, which explains why this used to work
for me with Python 2.2.
Under a Cygwin or Mingw32 build where Python was built with Cygwin, the
symlink from cc to gcc works. However, "standard" Windows executables,
such as the python.org interpreter can not follow Cygwin symlinks and it
chokes.
I seems that compiler_cxx should be defined as "gcc -mcygwin" and "gcc
-mnocygwin" in cygwinccompiler.py. I have a patch -- not sure what the
procedure is to submit it, however.
Hope I'm on the right track...
Mike
More information about the Distutils-SIG
mailing list