Created
February 3, 2026 15:34
-
-
Save Markus92/22df5f2624fbc3a809cdb53660f96eca to your computer and use it in GitHub Desktop.
Spack patch Python2
This file contains hidden or 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
| diff --git a/Lib/_osx_support.py b/Lib/_osx_support.py | |
| index d2aaae7..8bcdb05 100644 | |
| --- a/Lib/_osx_support.py | |
| +++ b/Lib/_osx_support.py | |
| @@ -14,13 +14,13 @@ __all__ = [ | |
| # 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_' | |
| diff --git a/Lib/distutils/cygwinccompiler.py b/Lib/distutils/cygwinccompiler.py | |
| index 258e138..13b7d0c 100644 | |
| --- a/Lib/distutils/cygwinccompiler.py | |
| +++ b/Lib/distutils/cygwinccompiler.py | |
| @@ -117,8 +117,10 @@ class CygwinCCompiler (UnixCCompiler): | |
| # 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 | |
| @@ -132,9 +134,13 @@ class CygwinCCompiler (UnixCCompiler): | |
| 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": | |
| @@ -160,8 +166,12 @@ class CygwinCCompiler (UnixCCompiler): | |
| 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, msg: | |
| raise CompileError, msg | |
| @@ -327,9 +337,14 @@ class Mingw32CCompiler (CygwinCCompiler): | |
| 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, | |
| + compiler_so_cxx='g++%s -mdll -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), | |
| + linker_exe_cxx='g++%s' % no_cygwin, | |
| + linker_so_cxx='%s%s %s %s' | |
| + % (self.linker_dll_cxx, 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) | |
| diff --git a/Lib/distutils/emxccompiler.py b/Lib/distutils/emxccompiler.py | |
| index a017205..bdc532c 100644 | |
| --- a/Lib/distutils/emxccompiler.py | |
| +++ b/Lib/distutils/emxccompiler.py | |
| @@ -65,8 +65,12 @@ class EMXCCompiler (UnixCCompiler): | |
| # XXX optimization, warnings etc. should be customizable. | |
| self.set_executables(compiler='gcc -Zomf -Zmt -O3 -fomit-frame-pointer -mprobe -Wall', | |
| compiler_so='gcc -Zomf -Zmt -O3 -fomit-frame-pointer -mprobe -Wall', | |
| + compiler_cxx='g++ -Zomf -Zmt -O3 -fomit-frame-pointer -mprobe -Wall', | |
| + compiler_so_cxx='g++ -Zomf -Zmt -O3 -fomit-frame-pointer -mprobe -Wall', | |
| linker_exe='gcc -Zomf -Zmt -Zcrtdll', | |
| - linker_so='gcc -Zomf -Zmt -Zcrtdll -Zdll') | |
| + linker_so='gcc -Zomf -Zmt -Zcrtdll -Zdll', | |
| + linker_exe_cxx='g++ -Zomf -Zmt -Zcrtdll', | |
| + linker_so_cxx='g++ -Zomf -Zmt -Zcrtdll -Zdll') | |
| # want the gcc library statically linked (so that we don't have | |
| # to distribute a version dependent on the compiler we have) | |
| @@ -83,8 +87,12 @@ class EMXCCompiler (UnixCCompiler): | |
| 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, msg: | |
| raise CompileError, msg | |
| diff --git a/Lib/distutils/sysconfig.py b/Lib/distutils/sysconfig.py | |
| index 1a4b792..9d724b2 100644 | |
| --- a/Lib/distutils/sysconfig.py | |
| +++ b/Lib/distutils/sysconfig.py | |
| @@ -181,10 +181,12 @@ def customize_compiler(compiler): | |
| _osx_support.customize_compiler(_config_vars) | |
| _config_vars['CUSTOMIZED_OSX_COMPILER'] = 'True' | |
| - (cc, cxx, cflags, ccshared, ldshared, so_ext, ar, ar_flags) = \ | |
| - get_config_vars('CC', 'CXX', 'CFLAGS', | |
| - 'CCSHARED', 'LDSHARED', 'SO', 'AR', | |
| - 'ARFLAGS') | |
| + (cc, cxx, ccshared, ldshared, ldcxxshared, so_ext, ar, ar_flags) = \ | |
| + get_config_vars('CC', 'CXX', 'CCSHARED', 'LDSHARED', 'LDCXXSHARED', | |
| + 'SO', 'AR', 'ARFLAGS') | |
| + | |
| + cflags = '' | |
| + cxxflags = '' | |
| if 'CC' in os.environ: | |
| newcc = os.environ['CC'] | |
| @@ -199,19 +201,27 @@ def customize_compiler(compiler): | |
| 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 = cflags + ' ' + os.environ['CFLAGS'] | |
| ldshared = ldshared + ' ' + os.environ['CFLAGS'] | |
| + if 'CXXFLAGS' in os.environ: | |
| + cxxflags = 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: | |
| @@ -220,13 +230,17 @@ def customize_compiler(compiler): | |
| 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 = so_ext | |
| diff --git a/Lib/distutils/unixccompiler.py b/Lib/distutils/unixccompiler.py | |
| index 3af540e..f8f7efe 100644 | |
| --- a/Lib/distutils/unixccompiler.py | |
| +++ b/Lib/distutils/unixccompiler.py | |
| @@ -55,14 +55,17 @@ class UnixCCompiler(CCompiler): | |
| # 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": | |
| @@ -114,12 +117,19 @@ class UnixCCompiler(CCompiler): | |
| 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, msg: | |
| raise CompileError, msg | |
| @@ -176,23 +186,16 @@ class UnixCCompiler(CCompiler): | |
| 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 = 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) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment