Commit b6aafbc5 authored by Greg Ward's avatar Greg Ward

Fixed the "pre-link hook" so it actually works, mainly by renaming it

to 'msvc_prelink_hack()', adding the parameters that it actually needs,
and only calling it for MSVC compiler objects.  Generally gave up on the
idea of a general "hook" mechanism: deleted the empty 'precompile_hook()'.
parent e4b7595c
...@@ -188,7 +188,8 @@ class build_ext (Command): ...@@ -188,7 +188,8 @@ class build_ext (Command):
# Setup the CCompiler object that we'll use to do all the # Setup the CCompiler object that we'll use to do all the
# compiling and linking # compiling and linking
self.compiler = new_compiler (compiler=self.compiler, self.compiler = new_compiler (#compiler=self.compiler,
compiler="msvc",
verbose=self.verbose, verbose=self.verbose,
dry_run=self.dry_run, dry_run=self.dry_run,
force=self.force) force=self.force)
...@@ -402,11 +403,6 @@ class build_ext (Command): ...@@ -402,11 +403,6 @@ class build_ext (Command):
if os.environ.has_key('CFLAGS'): if os.environ.has_key('CFLAGS'):
extra_args.extend(string.split(os.environ['CFLAGS'])) extra_args.extend(string.split(os.environ['CFLAGS']))
# Run any platform/compiler-specific hooks needed before
# compiling (currently none, but any hypothetical subclasses
# might find it useful to override this).
self.precompile_hook()
objects = self.compiler.compile (sources, objects = self.compiler.compile (sources,
output_dir=self.build_temp, output_dir=self.build_temp,
#macros=macros, #macros=macros,
...@@ -421,9 +417,9 @@ class build_ext (Command): ...@@ -421,9 +417,9 @@ class build_ext (Command):
objects.extend (ext.extra_objects) objects.extend (ext.extra_objects)
extra_args = ext.extra_link_args extra_args = ext.extra_link_args
# Run any platform/compiler-specific hooks needed between # Bunch of fixing-up we have to do for Microsoft's linker.
# compiling and linking (currently needed only on Windows). if self.compiler.compiler_type == 'msvc':
self.prelink_hook() self.msvc_prelink_hack(sources, ext, extra_args)
self.compiler.link_shared_object ( self.compiler.link_shared_object (
objects, ext_filename, objects, ext_filename,
...@@ -504,12 +500,9 @@ class build_ext (Command): ...@@ -504,12 +500,9 @@ class build_ext (Command):
# find_swig () # find_swig ()
# -- Hooks --------------------------------------------------------- # -- Hooks 'n hacks ------------------------------------------------
def precompile_hook (self):
pass
def prelink_hook (self): def msvc_prelink_hack (self, sources, ext, extra_args):
# XXX this is a kludge! Knowledge of specific compilers or # XXX this is a kludge! Knowledge of specific compilers or
# platforms really doesn't belong here; in an ideal world, the # platforms really doesn't belong here; in an ideal world, the
...@@ -521,33 +514,32 @@ class build_ext (Command): ...@@ -521,33 +514,32 @@ class build_ext (Command):
# Thus, kludges like this slip in occasionally. (This is no # Thus, kludges like this slip in occasionally. (This is no
# excuse for committing more platform- and compiler-specific # excuse for committing more platform- and compiler-specific
# kludges; they are to be avoided if possible!) # kludges; they are to be avoided if possible!)
if self.compiler.compiler_type == 'msvc':
def_file = ext.export_symbol_file def_file = ext.export_symbol_file
if def_file is None: if def_file is None:
source_dir = os.path.dirname (sources[0]) source_dir = os.path.dirname (sources[0])
ext_base = (string.split (ext.name, '.'))[-1] ext_base = (string.split (ext.name, '.'))[-1]
def_file = os.path.join (source_dir, "%s.def" % ext_base) def_file = os.path.join (source_dir, "%s.def" % ext_base)
if not os.path.exists (def_file): if not os.path.exists (def_file):
def_file = None def_file = None
if def_file is not None: if def_file is not None:
extra_args.append ('/DEF:' + def_file) extra_args.append ('/DEF:' + def_file)
else: else:
modname = string.split (ext.name, '.')[-1] modname = string.split (ext.name, '.')[-1]
extra_args.append('/export:init%s'%modname) extra_args.append('/export:init%s' % modname)
# The MSVC linker generates unneeded .lib and .exp files, # The MSVC linker generates unneeded .lib and .exp files,
# which cannot be suppressed by any linker switches. So # which cannot be suppressed by any linker switches. So
# make sure they are generated in the temporary build # make sure they are generated in the temporary build
# directory. # directory.
implib_file = os.path.join ( implib_file = os.path.join (
self.build_temp, self.build_temp,
self.get_ext_libname (ext.name)) self.get_ext_libname (ext.name))
extra_args.append ('/IMPLIB:' + implib_file) extra_args.append ('/IMPLIB:' + implib_file)
self.mkpath (os.path.dirname (implib_file)) self.mkpath (os.path.dirname (implib_file))
# if MSVC
# msvc_prelink_hack ()
# prelink_hook ()
# -- Name generators ----------------------------------------------- # -- Name generators -----------------------------------------------
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment