[Numpy-svn] r3969 - trunk/numpy/distutils

numpy-svn at scipy.org numpy-svn at scipy.org
Fri Aug 17 14:29:10 EDT 2007


Author: cookedm
Date: 2007-08-17 13:29:08 -0500 (Fri, 17 Aug 2007)
New Revision: 3969

Modified:
   trunk/numpy/distutils/unixccompiler.py
Log:
- remove .a static libs and recreate, instead of updating (ar on OS X can't
  handle updating universal .a)
- in unixccompiler, use ccompiler.replace_method instead of new.instance_method


Modified: trunk/numpy/distutils/unixccompiler.py
===================================================================
--- trunk/numpy/distutils/unixccompiler.py	2007-08-17 18:23:46 UTC (rev 3968)
+++ trunk/numpy/distutils/unixccompiler.py	2007-08-17 18:29:08 UTC (rev 3969)
@@ -3,10 +3,10 @@
 """
 
 import os
-import new
 
 from distutils.errors import DistutilsExecError, CompileError
 from distutils.unixccompiler import *
+from numpy.distutils.ccompiler import replace_method
 
 import log
 
@@ -18,26 +18,33 @@
                    extra_postargs, display = display)
     except DistutilsExecError, msg:
         raise CompileError, msg
-UnixCCompiler._compile = new.instancemethod(UnixCCompiler__compile,
-                                            None,
-                                            UnixCCompiler)
 
+replace_method(UnixCCompiler, '_compile', UnixCCompiler__compile)
 
-def UnixCCompile_create_static_lib(self, objects, output_libname,
-                                   output_dir=None, debug=0, target_lang=None):
+
+def UnixCCompiler_create_static_lib(self, objects, output_libname,
+                                    output_dir=None, debug=0, target_lang=None):
     objects, output_dir = self._fix_object_args(objects, output_dir)
 
     output_filename = \
                     self.library_filename(output_libname, output_dir=output_dir)
 
     if self._need_link(objects, output_filename):
+        try:
+            # previous .a may be screwed up; best to remove it first
+            # and recreate.
+            # Also, ar on OS X doesn't handle updating universal archives
+            os.unlink(output_filename)
+        except (IOError, OSError):
+            pass
         self.mkpath(os.path.dirname(output_filename))
         tmp_objects = objects + self.objects
         while tmp_objects:
             objects = tmp_objects[:50]
             tmp_objects = tmp_objects[50:]
-            display = '%s: adding %d object files to %s' % (os.path.basename(self.archiver[0]),
-                                               len(objects),output_filename)
+            display = '%s: adding %d object files to %s' % (
+                           os.path.basename(self.archiver[0]),
+                           len(objects), output_filename)
             self.spawn(self.archiver + [output_filename] + objects,
                        display = display)
 
@@ -58,6 +65,5 @@
         log.debug("skipping %s (up-to-date)", output_filename)
     return
 
-UnixCCompiler.create_static_lib = \
-  new.instancemethod(UnixCCompile_create_static_lib,
-                     None,UnixCCompiler)
+replace_method(UnixCCompiler, 'create_static_lib',
+               UnixCCompiler_create_static_lib)




More information about the Numpy-svn mailing list