Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
The upstream patch for distutils does not apply cleanly to Python 3.5's sources. Fix the patch to make python35 build on macOS.
- Loading branch information
Showing
2 changed files
with
246 additions
and
4 deletions.
There are no files selected for viewing
237 changes: 237 additions & 0 deletions
237
pkgs/development/interpreters/python/cpython/3.5/python-3.x-distutils-C++.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,237 @@ | ||
Source: https://bugs.python.org/file47046/python-3.x-distutils-C++.patch | ||
--- a/Lib/distutils/cygwinccompiler.py | ||
+++ b/Lib/distutils/cygwinccompiler.py | ||
@@ -125,8 +125,10 @@ | ||
# dllwrap 2.10.90 is buggy | ||
if self.ld_version >= "2.10.90": | ||
self.linker_dll = "gcc" | ||
+ self.linker_dll_cxx = "g++" | ||
else: | ||
self.linker_dll = "dllwrap" | ||
+ self.linker_dll_cxx = "dllwrap" | ||
|
||
# ld_version >= "2.13" support -shared so use it instead of | ||
# -mdll -static | ||
@@ -140,9 +142,13 @@ | ||
self.set_executables(compiler='gcc -mcygwin -O -Wall', | ||
compiler_so='gcc -mcygwin -mdll -O -Wall', | ||
compiler_cxx='g++ -mcygwin -O -Wall', | ||
+ compiler_so_cxx='g++ -mcygwin -mdll -O -Wall', | ||
linker_exe='gcc -mcygwin', | ||
linker_so=('%s -mcygwin %s' % | ||
- (self.linker_dll, shared_option))) | ||
+ (self.linker_dll, shared_option)), | ||
+ linker_exe_cxx='g++ -mcygwin', | ||
+ linker_so_cxx=('%s -mcygwin %s' % | ||
+ (self.linker_dll_cxx, shared_option))) | ||
|
||
# cygwin and mingw32 need different sets of libraries | ||
if self.gcc_version == "2.91.57": | ||
@@ -166,8 +172,12 @@ | ||
raise CompileError(msg) | ||
else: # for other files use the C-compiler | ||
try: | ||
- self.spawn(self.compiler_so + cc_args + [src, '-o', obj] + | ||
- extra_postargs) | ||
+ if self.detect_language(src) == 'c++': | ||
+ self.spawn(self.compiler_so_cxx + cc_args + [src, '-o', obj] + | ||
+ extra_postargs) | ||
+ else: | ||
+ self.spawn(self.compiler_so + cc_args + [src, '-o', obj] + | ||
+ extra_postargs) | ||
except DistutilsExecError as msg: | ||
raise CompileError(msg) | ||
|
||
@@ -302,9 +312,14 @@ | ||
self.set_executables(compiler='gcc -O -Wall', | ||
compiler_so='gcc -mdll -O -Wall', | ||
compiler_cxx='g++ -O -Wall', | ||
+ compiler_so_cxx='g++ -mdll -O -Wall', | ||
linker_exe='gcc', | ||
linker_so='%s %s %s' | ||
% (self.linker_dll, shared_option, | ||
+ entry_point), | ||
+ linker_exe_cxx='g++', | ||
+ linker_so_cxx='%s %s %s' | ||
+ % (self.linker_dll_cxx, shared_option, | ||
entry_point)) | ||
# Maybe we should also append -mthreads, but then the finished | ||
# dlls need another dll (mingwm10.dll see Mingw32 docs) | ||
--- a/Lib/distutils/sysconfig.py | ||
+++ b/Lib/distutils/sysconfig.py | ||
@@ -184,9 +184,11 @@ | ||
_osx_support.customize_compiler(_config_vars) | ||
_config_vars['CUSTOMIZED_OSX_COMPILER'] = 'True' | ||
|
||
- (cc, cxx, opt, cflags, ccshared, ldshared, shlib_suffix, ar, ar_flags) = \ | ||
- get_config_vars('CC', 'CXX', 'OPT', 'CFLAGS', | ||
- 'CCSHARED', 'LDSHARED', 'SHLIB_SUFFIX', 'AR', 'ARFLAGS') | ||
+ (cc, cxx, cflags, ccshared, ldshared, ldcxxshared, shlib_suffix, ar, ar_flags) = \ | ||
+ get_config_vars('CC', 'CXX', 'CFLAGS', 'CCSHARED', 'LDSHARED', 'LDCXXSHARED', | ||
+ 'SHLIB_SUFFIX', 'AR', 'ARFLAGS') | ||
+ | ||
+ cxxflags = cflags | ||
|
||
if 'CC' in os.environ: | ||
newcc = os.environ['CC'] | ||
@@ -201,19 +204,27 @@ | ||
cxx = os.environ['CXX'] | ||
if 'LDSHARED' in os.environ: | ||
ldshared = os.environ['LDSHARED'] | ||
+ if 'LDCXXSHARED' in os.environ: | ||
+ ldcxxshared = os.environ['LDCXXSHARED'] | ||
if 'CPP' in os.environ: | ||
cpp = os.environ['CPP'] | ||
else: | ||
cpp = cc + " -E" # not always | ||
if 'LDFLAGS' in os.environ: | ||
ldshared = ldshared + ' ' + os.environ['LDFLAGS'] | ||
+ ldcxxshared = ldcxxshared + ' ' + os.environ['LDFLAGS'] | ||
if 'CFLAGS' in os.environ: | ||
- cflags = opt + ' ' + os.environ['CFLAGS'] | ||
+ cflags = os.environ['CFLAGS'] | ||
ldshared = ldshared + ' ' + os.environ['CFLAGS'] | ||
+ if 'CXXFLAGS' in os.environ: | ||
+ cxxflags = os.environ['CXXFLAGS'] | ||
+ ldcxxshared = ldcxxshared + ' ' + os.environ['CXXFLAGS'] | ||
if 'CPPFLAGS' in os.environ: | ||
cpp = cpp + ' ' + os.environ['CPPFLAGS'] | ||
cflags = cflags + ' ' + os.environ['CPPFLAGS'] | ||
+ cxxflags = cxxflags + ' ' + os.environ['CPPFLAGS'] | ||
ldshared = ldshared + ' ' + os.environ['CPPFLAGS'] | ||
+ ldcxxshared = ldcxxshared + ' ' + os.environ['CPPFLAGS'] | ||
if 'AR' in os.environ: | ||
ar = os.environ['AR'] | ||
if 'ARFLAGS' in os.environ: | ||
@@ -222,13 +233,17 @@ | ||
archiver = ar + ' ' + ar_flags | ||
|
||
cc_cmd = cc + ' ' + cflags | ||
+ cxx_cmd = cxx + ' ' + cxxflags | ||
compiler.set_executables( | ||
preprocessor=cpp, | ||
compiler=cc_cmd, | ||
compiler_so=cc_cmd + ' ' + ccshared, | ||
- compiler_cxx=cxx, | ||
+ compiler_cxx=cxx_cmd, | ||
+ compiler_so_cxx=cxx_cmd + ' ' + ccshared, | ||
linker_so=ldshared, | ||
linker_exe=cc, | ||
+ linker_so_cxx=ldcxxshared, | ||
+ linker_exe_cxx=cxx, | ||
archiver=archiver) | ||
|
||
compiler.shared_lib_extension = shlib_suffix | ||
--- a/Lib/distutils/unixccompiler.py | ||
+++ b/Lib/distutils/unixccompiler.py | ||
@@ -52,14 +52,17 @@ | ||
# are pretty generic; they will probably have to be set by an outsider | ||
# (eg. using information discovered by the sysconfig about building | ||
# Python extensions). | ||
- executables = {'preprocessor' : None, | ||
- 'compiler' : ["cc"], | ||
- 'compiler_so' : ["cc"], | ||
- 'compiler_cxx' : ["cc"], | ||
- 'linker_so' : ["cc", "-shared"], | ||
- 'linker_exe' : ["cc"], | ||
- 'archiver' : ["ar", "-cr"], | ||
- 'ranlib' : None, | ||
+ executables = {'preprocessor' : None, | ||
+ 'compiler' : ["cc"], | ||
+ 'compiler_so' : ["cc"], | ||
+ 'compiler_cxx' : ["c++"], | ||
+ 'compiler_so_cxx' : ["c++"], | ||
+ 'linker_so' : ["cc", "-shared"], | ||
+ 'linker_exe' : ["cc"], | ||
+ 'linker_so_cxx' : ["c++", "-shared"], | ||
+ 'linker_exe_cxx' : ["c++"], | ||
+ 'archiver' : ["ar", "-cr"], | ||
+ 'ranlib' : None, | ||
} | ||
|
||
if sys.platform[:6] == "darwin": | ||
@@ -108,12 +111,19 @@ | ||
|
||
def _compile(self, obj, src, ext, cc_args, extra_postargs, pp_opts): | ||
compiler_so = self.compiler_so | ||
+ compiler_so_cxx = self.compiler_so_cxx | ||
if sys.platform == 'darwin': | ||
compiler_so = _osx_support.compiler_fixup(compiler_so, | ||
cc_args + extra_postargs) | ||
+ compiler_so_cxx = _osx_support.compiler_fixup(compiler_so_cxx, | ||
+ cc_args + extra_postargs) | ||
try: | ||
- self.spawn(compiler_so + cc_args + [src, '-o', obj] + | ||
- extra_postargs) | ||
+ if self.detect_language(src) == 'c++': | ||
+ self.spawn(compiler_so_cxx + cc_args + [src, '-o', obj] + | ||
+ extra_postargs) | ||
+ else: | ||
+ self.spawn(compiler_so + cc_args + [src, '-o', obj] + | ||
+ extra_postargs) | ||
except DistutilsExecError as msg: | ||
raise CompileError(msg) | ||
|
||
@@ -171,22 +181,16 @@ | ||
ld_args.extend(extra_postargs) | ||
self.mkpath(os.path.dirname(output_filename)) | ||
try: | ||
- if target_desc == CCompiler.EXECUTABLE: | ||
- linker = self.linker_exe[:] | ||
+ if target_lang == "c++": | ||
+ if target_desc == CCompiler.EXECUTABLE: | ||
+ linker = self.linker_exe_cxx[:] | ||
+ else: | ||
+ linker = self.linker_so_cxx[:] | ||
else: | ||
- linker = self.linker_so[:] | ||
- if target_lang == "c++" and self.compiler_cxx: | ||
- # skip over environment variable settings if /usr/bin/env | ||
- # is used to set up the linker's environment. | ||
- # This is needed on OSX. Note: this assumes that the | ||
- # normal and C++ compiler have the same environment | ||
- # settings. | ||
- i = 0 | ||
- if os.path.basename(linker[0]) == "env": | ||
- i = 1 | ||
- while '=' in linker[i]: | ||
- i += 1 | ||
- linker[i] = self.compiler_cxx[i] | ||
+ if target_desc == CCompiler.EXECUTABLE: | ||
+ linker = self.linker_exe[:] | ||
+ else: | ||
+ linker = self.linker_so[:] | ||
|
||
if sys.platform == 'darwin': | ||
linker = _osx_support.compiler_fixup(linker, ld_args) | ||
--- a/Lib/_osx_support.py | ||
+++ b/Lib/_osx_support.py | ||
@@ -14,13 +14,13 @@ | ||
# configuration variables that may contain universal build flags, | ||
# like "-arch" or "-isdkroot", that may need customization for | ||
# the user environment | ||
-_UNIVERSAL_CONFIG_VARS = ('CFLAGS', 'LDFLAGS', 'CPPFLAGS', 'BASECFLAGS', | ||
- 'BLDSHARED', 'LDSHARED', 'CC', 'CXX', | ||
- 'PY_CFLAGS', 'PY_LDFLAGS', 'PY_CPPFLAGS', | ||
- 'PY_CORE_CFLAGS') | ||
+_UNIVERSAL_CONFIG_VARS = ('CFLAGS', 'CXXFLAGS', 'LDFLAGS', 'CPPFLAGS', | ||
+ 'BASECFLAGS', 'BLDSHARED', 'LDSHARED', 'LDCXXSHARED', | ||
+ 'CC', 'CXX', 'PY_CFLAGS', 'PY_LDFLAGS', | ||
+ 'PY_CPPFLAGS', 'PY_CORE_CFLAGS') | ||
|
||
# configuration variables that may contain compiler calls | ||
-_COMPILER_CONFIG_VARS = ('BLDSHARED', 'LDSHARED', 'CC', 'CXX') | ||
+_COMPILER_CONFIG_VARS = ('BLDSHARED', 'LDSHARED', 'LDCXXSHARED', 'CC', 'CXX') | ||
|
||
# prefix added to original configuration variable names | ||
_INITPRE = '_OSX_SUPPORT_INITIAL_' | ||
--- a/Makefile.pre.in | ||
+++ b/Makefile.pre.in | ||
@@ -538,7 +538,7 @@ | ||
*\ -s*|s*) quiet="-q";; \ | ||
*) quiet="";; \ | ||
esac; \ | ||
- $(RUNSHARED) CC='$(CC)' LDSHARED='$(BLDSHARED)' OPT='$(OPT)' \ | ||
+ $(RUNSHARED) CC='$(CC)' LDSHARED='$(BLDSHARED)' CFLAGS='$(PY_CFLAGS)' \ | ||
_TCLTK_INCLUDES='$(TCLTK_INCLUDES)' _TCLTK_LIBS='$(TCLTK_LIBS)' \ | ||
$(PYTHON_FOR_BUILD) $(srcdir)/setup.py $$quiet build |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters