| diff --git a/lib-python/3/distutils/cygwinccompiler.py b/lib-python/3/distutils/cygwinccompiler.py |
| index 1c36990..ead3174 100644 |
| --- a/lib-python/3/distutils/cygwinccompiler.py |
| +++ b/lib-python/3/distutils/cygwinccompiler.py |
| @@ -125,8 +125,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 |
| @@ -140,9 +142,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": |
| @@ -166,8 +172,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 as msg: |
| raise CompileError(msg) |
| |
| @@ -302,9 +312,14 @@ class Mingw32CCompiler(CygwinCCompiler): |
| 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) |
| diff --git a/lib-python/3/distutils/sysconfig_cpython.py b/lib-python/3/distutils/sysconfig_cpython.py |
| index b8340f1..a8c5473 100644 |
| --- a/lib-python/3/distutils/sysconfig_cpython.py |
| +++ b/lib-python/3/distutils/sysconfig_cpython.py |
| @@ -170,9 +170,12 @@ def customize_compiler(compiler): |
| _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, ccshared, ldshared, ldcxxshared, shlib_suffix, ar, ar_flags) = \ |
| + get_config_vars('CC', 'CXX', 'CCSHARED', 'LDSHARED', 'LDCXXSHARED', |
| + 'SHLIB_SUFFIX', 'AR', 'ARFLAGS') |
| + |
| + cflags = '' |
| + cxxflags = '' |
| |
| if 'CC' in os.environ: |
| newcc = os.environ['CC'] |
| @@ -187,19 +190,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 = 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: |
| @@ -208,13 +219,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 = shlib_suffix |
| diff --git a/lib-python/3/distutils/sysconfig_pypy.py b/lib-python/3/distutils/sysconfig_pypy.py |
| index bf1748e..70dfd72 100644 |
| --- a/lib-python/3/distutils/sysconfig_pypy.py |
| +++ b/lib-python/3/distutils/sysconfig_pypy.py |
| @@ -145,36 +145,52 @@ def customize_compiler(compiler): |
| _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, ccshared, ldshared, ldcxxshared, shlib_suffix, ar, ar_flags) = \ |
| + get_config_vars('CC', 'CXX', 'CCSHARED', 'LDSHARED', 'LDCXXSHARED', |
| + 'SHLIB_SUFFIX', 'AR', 'ARFLAGS') |
| + |
| + cflags = '' |
| + cxxflags = '' |
| |
| if 'CC' in os.environ: |
| newcc = os.environ['CC'] |
| - if (sys.platform == 'darwin' |
| + if (True |
| and 'LDSHARED' not in os.environ |
| and ldshared.startswith(cc)): |
| # On OS X, if CC is overridden, use that as the default |
| # command for LDSHARED as well |
| + # Gentoo: s/OS X/every system/ |
| ldshared = newcc + ldshared[len(cc):] |
| cc = newcc |
| if 'CXX' in os.environ: |
| - cxx = os.environ['CXX'] |
| + newcxx = os.environ['CXX'] |
| + if ('LDCXXSHARED' not in os.environ |
| + and ldcxxshared.startswith(cxx)): |
| + ldcxxshared = newcxx + ldcxxshared[len(cxx):] |
| + cxx = newcxx |
| 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: |
| @@ -183,13 +199,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 = shlib_suffix |
| diff --git a/lib-python/3/distutils/unixccompiler.py b/lib-python/3/distutils/unixccompiler.py |
| index 2944ceb..cf2f219 100644 |
| --- a/lib-python/3/distutils/unixccompiler.py |
| +++ b/lib-python/3/distutils/unixccompiler.py |
| @@ -52,14 +52,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' : ["c++"], # pypy: changed, 'cc' is bogus |
| - '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": |
| @@ -125,12 +128,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 as msg: |
| raise CompileError(msg) |
| |
| @@ -188,22 +198,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 += 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) |
| diff --git a/lib_pypy/_sysconfigdata.py b/lib_pypy/_sysconfigdata.py |
| index 4d2b0bc..5ed9641 100644 |
| --- a/lib_pypy/_sysconfigdata.py |
| +++ b/lib_pypy/_sysconfigdata.py |
| @@ -15,6 +15,7 @@ build_time_vars = { |
| 'CFLAGS': "-DNDEBUG -O2", |
| 'CCSHARED': "-fPIC", |
| 'LDSHARED': "cc -pthread -shared", |
| + 'LDCXXSHARED': "c++ -pthread -shared", |
| 'EXT_SUFFIX': so_ext, |
| 'SHLIB_SUFFIX': ".so", |
| 'AR': "ar", |