summaryrefslogtreecommitdiff
path: root/unixccompiler.py
diff options
context:
space:
mode:
authorGustavo Niemeyer <gustavo@niemeyer.net>2002-11-05 16:12:02 +0000
committerGustavo Niemeyer <gustavo@niemeyer.net>2002-11-05 16:12:02 +0000
commit47474c30d9a5ba83990c5370f74eba40d166d84c (patch)
treec7bab5eb9ded9c04c02f3a6bd564b2b0ac9cc56e /unixccompiler.py
parent8c157b7b9e0b11cd6274e6fdbb476e142d61951f (diff)
downloadpython-setuptools-git-47474c30d9a5ba83990c5370f74eba40d166d84c.tar.gz
This patch fixes the following bugs:
[#413582] g++ must be called for c++ extensions [#454030] distutils cannot link C++ code with GCC topdir = "Lib/distutils" * bcppcompiler.py (BCPPCompiler.create_static_lib): Fixed prototype, removing extra_preargs and extra_postargs parameters. Included target_lang parameter. (BCPPCompiler.link): Included target_lang parameter. * msvccompiler.py (MSVCCompiler.create_static_lib): Fixed prototype, removing extra_preargs and extra_postargs parameters. Included target_lang parameter. (MSVCCompiler.link): Included target_lang parameter. * ccompiler.py (CCompiler): New language_map and language_order attributes, used by CCompiler.detect_language(). (CCompiler.detect_language): New method, will return the language of a given source, or list of sources. Individual source language is detected using the language_map dict. When mixed sources are used, language_order will stablish the language precedence. (CCompiler.create_static_lib, CCompiler.link, CCompiler.link_executable, CCompiler.link_shared_object, CCompiler.link_shared_lib): Inlcuded target_lang parameter. * cygwinccompiler.py (CygwinCCompiler.link): Included target_lang parameter. * emxccompiler.py (EMXCCompiler.link): Included target_lang parameter. * mwerkscompiler.py (MWerksCompiler.link): Included target_lang parameter. * extension.py (Extension.__init__): New 'language' parameter/attribute, initialized to None by default. If provided will overlap the automatic detection made by CCompiler.detect_language(), in build_ext command. * sysconfig.py (customize_compiler): Check Makefile for CXX option, and also the environment variable CXX. Use the resulting value in the 'compiler_cxx' parameter of compiler.set_executables(). * unixccompiler.py (UnixCCompiler): Included 'compiler_cxx' in executables dict, defaulting to 'cc'. (UnixCCompiler.create_static_lib): Included target_lang parameter. (UnixCCompiler.link): Included target_lang parameter, and made linker command use compiler_cxx, if target_lang is 'c++'. * command/build_ext.py (build_ext.build_extension): Pass new ext.language attribute to compiler.link_shared_object()'s target_lang parameter. If ext.language is not provided, detect language using compiler.detect_language(sources) instead. * command/config.py (config._link): Pass already available lang parameter as target_lang parameter of compiler.link_executable().
Diffstat (limited to 'unixccompiler.py')
-rw-r--r--unixccompiler.py12
1 files changed, 8 insertions, 4 deletions
diff --git a/unixccompiler.py b/unixccompiler.py
index 692e3eb4..2f4546e1 100644
--- a/unixccompiler.py
+++ b/unixccompiler.py
@@ -57,6 +57,7 @@ class UnixCCompiler(CCompiler):
executables = {'preprocessor' : None,
'compiler' : ["cc"],
'compiler_so' : ["cc"],
+ 'compiler_cxx' : ["cc"],
'linker_so' : ["cc", "-shared"],
'linker_exe' : ["cc"],
'archiver' : ["ar", "-cr"],
@@ -114,7 +115,7 @@ class UnixCCompiler(CCompiler):
raise CompileError, msg
def create_static_lib(self, objects, output_libname,
- output_dir=None, debug=0):
+ output_dir=None, debug=0, target_lang=None):
objects, output_dir = self._fix_object_args(objects, output_dir)
output_filename = \
@@ -143,7 +144,7 @@ class UnixCCompiler(CCompiler):
output_filename, output_dir=None, libraries=None,
library_dirs=None, runtime_library_dirs=None,
export_symbols=None, debug=0, extra_preargs=None,
- extra_postargs=None, build_temp=None):
+ extra_postargs=None, build_temp=None, target_lang=None):
objects, output_dir = self._fix_object_args(objects, output_dir)
libraries, library_dirs, runtime_library_dirs = \
self._fix_lib_args(libraries, library_dirs, runtime_library_dirs)
@@ -167,9 +168,12 @@ class UnixCCompiler(CCompiler):
self.mkpath(os.path.dirname(output_filename))
try:
if target_desc == CCompiler.EXECUTABLE:
- self.spawn(self.linker_exe + ld_args)
+ linker = self.linker_exe[:]
else:
- self.spawn(self.linker_so + ld_args)
+ linker = self.linker_so[:]
+ if target_lang == "c++" and self.compiler_cxx:
+ linker[0] = self.compiler_cxx[0]
+ self.spawn(linker + ld_args)
except DistutilsExecError, msg:
raise LinkError, msg
else: