[Numpy-svn] r4061 - in branches/numpy.scons/numpy: distutils/command scons_fake

numpy-svn@scip... numpy-svn@scip...
Thu Sep 20 12:34:41 CDT 2007


Author: cdavid
Date: 2007-09-20 12:34:32 -0500 (Thu, 20 Sep 2007)
New Revision: 4061

Modified:
   branches/numpy.scons/numpy/distutils/command/scons.py
   branches/numpy.scons/numpy/scons_fake/SConstruct
Log:
First working sconsified shared library, but with lot of manual work inside Scons

Modified: branches/numpy.scons/numpy/distutils/command/scons.py
===================================================================
--- branches/numpy.scons/numpy/distutils/command/scons.py	2007-09-20 13:17:21 UTC (rev 4060)
+++ branches/numpy.scons/numpy/distutils/command/scons.py	2007-09-20 17:34:32 UTC (rev 4061)
@@ -1,31 +1,47 @@
 import os
 import os.path
 
-from distutils.core import Command
+#from distutils.core import build_py as old_build_py
+from distutils.command.build_ext import build_ext as old_build_py
 from numpy.distutils.ccompiler import CCompiler
 
 # XXX: this is super ugly. The object/source filenames generations is handled
-# inside compiler classes in distutils, so to get the same convention, we
-# instantiate a CCompiler object, which will not be used for compilation at
-# all.
-class scons(Command):
+# inside compiler classes and build_ext in distutils, so to get the same
+# convention, we derive scons command from build_ext instead of just Command.
+class scons(old_build_py):
     description = "Scons builder"
     user_options = []
 
     def initialize_options(self):
+        old_build_py.initialize_options(self)
         pass
 
     def finalize_options(self):
+        old_build_py.finalize_options(self)
         if self.distribution.has_scons_scripts():
             print "Got it: scons scripts are %s" % self.distribution.scons_scripts
             self.scons_scripts = self.distribution.scons_scripts
+        #        build_py = self.get_finalized_command('build_py')
+        #print "!!!!!!!!!!!!!!!!!!"
+        #print self.build_temp
+        #print self.build_lib
+        #print self.package
 
     def run(self):
         # XXX: when a scons script is missing, scons only prints warnings, and
         # does not return a failure (status is 0). We have to detect this from
         # distutils (this cannot work for recursive scons builds...)
         for i in self.scons_scripts:
-            print "Basename for %s is %s" % (i, os.path.dirname(i))
+            #print "For sconscript %s" % i
+            #print "\tbuild dir (object files) is %s" % \
+            #    os.path.join(self.build_temp, os.path.dirname(i))
+            #print "\ttarget dir (.so files) is %s" % \
+            #    os.path.join(self.build_lib, os.path.dirname(i))
+            #print "Basename for %s is %s" % (i, os.path.dirname(i))
             cmd = "scons -f " + i + ' -I. '
+            cmd += ' src_prefix=%s ' % os.path.dirname(i)
+            cmd += ' obj_prefix=%s ' % os.path.join(self.build_temp, os.path.dirname(i))
+            cmd += ' lib_prefix=%s ' % os.path.join(self.build_lib, os.path.dirname(i))
             st = os.system(cmd)
-            print "status is %d" % st
+            if st:
+                print "status is %d" % st

Modified: branches/numpy.scons/numpy/scons_fake/SConstruct
===================================================================
--- branches/numpy.scons/numpy/scons_fake/SConstruct	2007-09-20 13:17:21 UTC (rev 4060)
+++ branches/numpy.scons/numpy/scons_fake/SConstruct	2007-09-20 17:34:32 UTC (rev 4061)
@@ -1,3 +1,19 @@
+# vim:syntax=python
+import os.path
+
 env = Environment()
+src_prefix = ARGUMENTS.get('src_prefix', '')
+obj_prefix = ARGUMENTS.get('obj_prefix', '')
+lib_prefix = ARGUMENTS.get('lib_prefix', '')
 
-env.Library('foo', source = ['foo.c'])
+source = ['foo.c']
+object = ['foo']
+if len(src_prefix):
+    source = [os.path.join(src_prefix, i) for i in source]
+if len(src_prefix):
+    object = [os.path.join(obj_prefix, i) for i in object]
+
+onodes = []
+for i in range(len(source)):
+    onodes.append(env.SharedObject(object[i], source = [source[i]]))
+env.SharedLibrary(os.path.join(lib_prefix, 'foo'), onodes)



More information about the Numpy-svn mailing list