cleaned up distutils.build_ext module

This commit is contained in:
Tarek Ziadé 2009-07-11 10:48:31 +00:00
parent 7750505d2d
commit 51c045d6b4

View file

@ -6,8 +6,7 @@ extensions ASAP)."""
__revision__ = "$Id$" __revision__ = "$Id$"
import sys, os, string, re import sys, os, re
from types import *
from warnings import warn from warnings import warn
from distutils.core import Command from distutils.core import Command
@ -213,13 +212,13 @@ class build_ext (Command):
self.libraries = [] self.libraries = []
if self.library_dirs is None: if self.library_dirs is None:
self.library_dirs = [] self.library_dirs = []
elif type(self.library_dirs) is StringType: elif isinstance(self.library_dirs, str):
self.library_dirs = string.split(self.library_dirs, os.pathsep) self.library_dirs = self.library_dirs.split(os.pathsep)
if self.rpath is None: if self.rpath is None:
self.rpath = [] self.rpath = []
elif type(self.rpath) is StringType: elif isinstance(self.rpath, str):
self.rpath = string.split(self.rpath, os.pathsep) self.rpath = self.rpath.split(os.pathsep)
# for extensions under windows use different directories # for extensions under windows use different directories
# for Release and Debug builds. # for Release and Debug builds.
@ -296,7 +295,7 @@ class build_ext (Command):
if self.define: if self.define:
defines = self.define.split(',') defines = self.define.split(',')
self.define = map(lambda symbol: (symbol, '1'), defines) self.define = [(symbol, '1') for symbol in defines]
# The option for macros to undefine is also a string from the # The option for macros to undefine is also a string from the
# option parsing, but has to be a list. Multiple symbols can also # option parsing, but has to be a list. Multiple symbols can also
@ -512,7 +511,7 @@ class build_ext (Command):
def build_extension(self, ext): def build_extension(self, ext):
sources = ext.sources sources = ext.sources
if sources is None or type(sources) not in (ListType, TupleType): if sources is None or not isinstance(sources, (list, tuple)):
raise DistutilsSetupError, \ raise DistutilsSetupError, \
("in 'ext_modules' option (extension '%s'), " + ("in 'ext_modules' option (extension '%s'), " +
"'sources' must be present and must be " + "'sources' must be present and must be " +
@ -594,13 +593,11 @@ class build_ext (Command):
def swig_sources(self, sources, extension): def swig_sources(self, sources, extension):
"""Walk the list of source files in 'sources', looking for SWIG """Walk the list of source files in 'sources', looking for SWIG
interface (.i) files. Run SWIG on all that are found, and interface (.i) files. Run SWIG on all that are found, and
return a modified 'sources' list with SWIG source files replaced return a modified 'sources' list with SWIG source files replaced
by the generated C (or C++) files. by the generated C (or C++) files.
""" """
new_sources = [] new_sources = []
swig_sources = [] swig_sources = []
swig_targets = {} swig_targets = {}
@ -649,8 +646,6 @@ class build_ext (Command):
return new_sources return new_sources
# swig_sources ()
def find_swig(self): def find_swig(self):
"""Return the name of the SWIG executable. On Unix, this is """Return the name of the SWIG executable. On Unix, this is
just "swig" -- it should be in the PATH. Tries a bit harder on just "swig" -- it should be in the PATH. Tries a bit harder on
@ -680,8 +675,6 @@ class build_ext (Command):
("I don't know how to find (much less run) SWIG " ("I don't know how to find (much less run) SWIG "
"on platform '%s'") % os.name "on platform '%s'") % os.name
# find_swig ()
# -- Name generators ----------------------------------------------- # -- Name generators -----------------------------------------------
# (extension names, filenames, whatever) # (extension names, filenames, whatever)
def get_ext_fullpath(self, ext_name): def get_ext_fullpath(self, ext_name):
@ -726,14 +719,14 @@ class build_ext (Command):
"foo\bar.pyd"). "foo\bar.pyd").
""" """
from distutils.sysconfig import get_config_var from distutils.sysconfig import get_config_var
ext_path = string.split(ext_name, '.') ext_path = ext_name.split('.')
# OS/2 has an 8 character module (extension) limit :-( # OS/2 has an 8 character module (extension) limit :-(
if os.name == "os2": if os.name == "os2":
ext_path[len(ext_path) - 1] = ext_path[len(ext_path) - 1][:8] ext_path[len(ext_path) - 1] = ext_path[len(ext_path) - 1][:8]
# extensions in debug_mode are named 'module_d.pyd' under windows # extensions in debug_mode are named 'module_d.pyd' under windows
so_ext = get_config_var('SO') so_ext = get_config_var('SO')
if os.name == 'nt' and self.debug: if os.name == 'nt' and self.debug:
return apply(os.path.join, ext_path) + '_d' + so_ext return os.path.join(*ext_path) + '_d' + so_ext
return os.path.join(*ext_path) + so_ext return os.path.join(*ext_path) + so_ext
def get_export_symbols(self, ext): def get_export_symbols(self, ext):
@ -742,8 +735,7 @@ class build_ext (Command):
provided, "init" + module_name. Only relevant on Windows, where provided, "init" + module_name. Only relevant on Windows, where
the .pyd file (DLL) must export the module "init" function. the .pyd file (DLL) must export the module "init" function.
""" """
initfunc_name = "init" + ext.name.split('.')[-1]
initfunc_name = "init" + string.split(ext.name,'.')[-1]
if initfunc_name not in ext.export_symbols: if initfunc_name not in ext.export_symbols:
ext.export_symbols.append(initfunc_name) ext.export_symbols.append(initfunc_name)
return ext.export_symbols return ext.export_symbols
@ -821,5 +813,3 @@ class build_ext (Command):
return ext.libraries + [pythonlib] return ext.libraries + [pythonlib]
else: else:
return ext.libraries return ext.libraries
# class build_ext