Issue #12641: Avoid passing "-mno-cygwin" to the mingw32 compiler, except when necessary.

Patch by Oscar Benjamin.
This commit is contained in:
Antoine Pitrou 2013-09-30 22:29:48 +02:00
commit 6a9c0e50a9
3 changed files with 21 additions and 7 deletions

View file

@ -48,13 +48,14 @@ cygwin in no-cygwin mode).
import os import os
import sys import sys
import copy import copy
from subprocess import Popen, PIPE from subprocess import Popen, PIPE, check_output
import re import re
from distutils.ccompiler import gen_preprocess_options, gen_lib_options from distutils.ccompiler import gen_preprocess_options, gen_lib_options
from distutils.unixccompiler import UnixCCompiler from distutils.unixccompiler import UnixCCompiler
from distutils.file_util import write_file from distutils.file_util import write_file
from distutils.errors import DistutilsExecError, CompileError, UnknownFileError from distutils.errors import (DistutilsExecError, CCompilerError,
CompileError, UnknownFileError)
from distutils import log from distutils import log
from distutils.version import LooseVersion from distutils.version import LooseVersion
from distutils.spawn import find_executable from distutils.spawn import find_executable
@ -294,11 +295,15 @@ class Mingw32CCompiler(CygwinCCompiler):
else: else:
entry_point = '' entry_point = ''
self.set_executables(compiler='gcc -mno-cygwin -O -Wall', if is_cygwingcc():
compiler_so='gcc -mno-cygwin -mdll -O -Wall', raise CCompilerError(
compiler_cxx='g++ -mno-cygwin -O -Wall', 'Cygwin gcc cannot be used with --compiler=mingw32')
linker_exe='gcc -mno-cygwin',
linker_so='%s -mno-cygwin %s %s' self.set_executables(compiler='gcc -O -Wall',
compiler_so='gcc -mdll -O -Wall',
compiler_cxx='g++ -O -Wall',
linker_exe='gcc',
linker_so='%s %s %s'
% (self.linker_dll, shared_option, % (self.linker_dll, shared_option,
entry_point)) entry_point))
# Maybe we should also append -mthreads, but then the finished # Maybe we should also append -mthreads, but then the finished
@ -393,3 +398,8 @@ def get_versions():
""" """
commands = ['gcc -dumpversion', 'ld -v', 'dllwrap --version'] commands = ['gcc -dumpversion', 'ld -v', 'dllwrap --version']
return tuple([_find_exe_version(cmd) for cmd in commands]) return tuple([_find_exe_version(cmd) for cmd in commands])
def is_cygwingcc():
'''Try to determine if the gcc that would be used is from cygwin.'''
out_string = check_output(['gcc', '-dumpmachine'])
return out_string.strip().endswith(b'cygwin')

View file

@ -102,6 +102,7 @@ Thomas Bellman
Alexander “Саша” Belopolsky Alexander “Саша” Belopolsky
Eli Bendersky Eli Bendersky
David Benjamin David Benjamin
Oscar Benjamin
Andrew Bennetts Andrew Bennetts
Andy Bensky Andy Bensky
Bennett Benson Bennett Benson

View file

@ -13,6 +13,9 @@ Core and Builtins
Library Library
------- -------
- Issue #12641: Avoid passing "-mno-cygwin" to the mingw32 compiler, except
when necessary. Patch by Oscar Benjamin.
- Issue #5845: In site.py, only load readline history from ~/.python_history - Issue #5845: In site.py, only load readline history from ~/.python_history
if no history has been read already. This avoids double writes to the if no history has been read already. This avoids double writes to the
history file at shutdown. history file at shutdown.