summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAntoine Pitrou <solipsis@pitrou.net>2013-09-30 20:28:10 (GMT)
committerAntoine Pitrou <solipsis@pitrou.net>2013-09-30 20:28:10 (GMT)
commit3c678c33a770ce7b465163aecb09fba07e1e8daa (patch)
treeb3596f5b5c0b86ccd4e49e5558add23f89f46574
parent1a67bee7016ab266b8a19a8834a2f1cb374dc38c (diff)
downloadcpython-3c678c33a770ce7b465163aecb09fba07e1e8daa.zip
cpython-3c678c33a770ce7b465163aecb09fba07e1e8daa.tar.gz
cpython-3c678c33a770ce7b465163aecb09fba07e1e8daa.tar.bz2
Issue #12641: Avoid passing "-mno-cygwin" to the mingw32 compiler, except when necessary.
Patch by Oscar Benjamin.
-rw-r--r--Lib/distutils/cygwinccompiler.py26
-rw-r--r--Misc/ACKS1
-rw-r--r--Misc/NEWS3
3 files changed, 22 insertions, 8 deletions
diff --git a/Lib/distutils/cygwinccompiler.py b/Lib/distutils/cygwinccompiler.py
index 0bdd539..e0074a1 100644
--- a/Lib/distutils/cygwinccompiler.py
+++ b/Lib/distutils/cygwinccompiler.py
@@ -48,7 +48,7 @@ cygwin in no-cygwin mode).
import os
import sys
import copy
-from subprocess import Popen, PIPE
+from subprocess import Popen, PIPE, check_output
import re
from distutils.ccompiler import gen_preprocess_options, gen_lib_options
@@ -294,13 +294,18 @@ class Mingw32CCompiler(CygwinCCompiler):
else:
entry_point = ''
- self.set_executables(compiler='gcc -mno-cygwin -O -Wall',
- compiler_so='gcc -mno-cygwin -mdll -O -Wall',
- compiler_cxx='g++ -mno-cygwin -O -Wall',
- linker_exe='gcc -mno-cygwin',
- linker_so='%s -mno-cygwin %s %s'
- % (self.linker_dll, shared_option,
- entry_point))
+ if self.gcc_version < '4' or is_cygwingcc():
+ no_cygwin = ' -mno-cygwin'
+ else:
+ no_cygwin = ''
+
+ self.set_executables(compiler='gcc%s -O -Wall' % no_cygwin,
+ compiler_so='gcc%s -mdll -O -Wall' % no_cygwin,
+ compiler_cxx='g++%s -O -Wall' % no_cygwin,
+ linker_exe='gcc%s' % no_cygwin,
+ linker_so='%s%s %s %s'
+ % (self.linker_dll, no_cygwin,
+ shared_option, entry_point))
# Maybe we should also append -mthreads, but then the finished
# dlls need another dll (mingwm10.dll see Mingw32 docs)
# (-mthreads: Support thread-safe exception handling on `Mingw32')
@@ -393,3 +398,8 @@ def get_versions():
"""
commands = ['gcc -dumpversion', 'ld -v', 'dllwrap --version']
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')
diff --git a/Misc/ACKS b/Misc/ACKS
index b5ebf06..63c126c 100644
--- a/Misc/ACKS
+++ b/Misc/ACKS
@@ -101,6 +101,7 @@ Thomas Bellman
Alexander “Саша” Belopolsky
Eli Bendersky
David Benjamin
+Oscar Benjamin
Andrew Bennetts
Andy Bensky
Bennett Benson
diff --git a/Misc/NEWS b/Misc/NEWS
index 63601d8..c787537 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -71,6 +71,9 @@ Core and Builtins
Library
-------
+- Issue #12641: Avoid passing "-mno-cygwin" to the mingw32 compiler, except
+ when necessary. Patch by Oscar Benjamin.
+
- Properly initialize all fields of a SSL object after allocation.
- Issue #4366: Fix building extensions on all platforms when --enable-shared