Automatically generate m5/internal/__init__.py and swig/init.cc
authorNathan Binkert <binkertn@umich.edu>
Wed, 21 Feb 2007 18:30:51 +0000 (10:30 -0800)
committerNathan Binkert <binkertn@umich.edu>
Wed, 21 Feb 2007 18:30:51 +0000 (10:30 -0800)
based on the swig modules that we have

--HG--
extra : convert_revision : 2fd12db39d46608a62b9df36c2b36189f1d2bc30

src/python/SConscript

index 4dd614cfb71520f754aba4829242fe27a89910d5..8c7e479097c011de89b96d5ed737e81c2a65f724 100644 (file)
@@ -99,12 +99,13 @@ pyzip_files.append('m5/info.py')
 pyzip_files.append(join(env['ROOT'], 'util/pbs/jobfile.py'))
 pyzip_files.append(join(env['ROOT'], 'src/base/traceflags.py'))
 
-def swig_it(basename):
-    env.Command(['swig/%s_wrap.cc' % basename, 'm5/internal/%s.py' % basename],
-                'swig/%s.i' % basename,
+swig_modules = []
+def swig_it(module):
+    env.Command(['swig/%s_wrap.cc' % module, 'm5/internal/%s.py' % module],
+                'swig/%s.i' % module,
                 '$SWIG $SWIGFLAGS -outdir ${TARGETS[1].dir} '
                 '-o ${TARGETS[0]} $SOURCES')
-    pyzip_dep_files.append('m5/internal/%s.py' % basename)
+    swig_modules.append(module)
 
 swig_it('main')
 swig_it('debug')
@@ -113,6 +114,32 @@ swig_it('random')
 swig_it('stats')
 swig_it('trace')
 
+# Automatically generate m5/internals/__init__.py
+def MakeInternalsInit(target, source, env):
+    f = file(str(target[0]), 'w')
+    for m in swig_modules:
+        print >>f, 'import %s' % m
+    f.close()
+
+swig_py_files = [ 'm5/internal/%s.py' % m for m in swig_modules ]
+env.Command('m5/internal/__init__.py', swig_py_files, MakeInternalsInit)
+pyzip_dep_files.append('m5/internal/__init__.py')
+
+def MakeSwigInit(target, source, env):
+    f = file(str(target[0]), 'w')
+    print >>f, 'extern "C" {'
+    for m in swig_modules:
+        print >>f, '    void init_%s();' % m
+    print >>f, '}'
+    print >>f, 'void init_swig() {'
+    for m in swig_modules:
+        print >>f, '    init_%s();' % m
+    print >>f, '}'
+    f.close()
+
+swig_cc_files = [ 'swig/%s_wrap.cc' % m for m in swig_modules ]
+env.Command('swig/init.cc', swig_cc_files, MakeSwigInit)
+
 # Action function to build the zip archive.  Uses the PyZipFile module
 # included in the standard Python library.
 def buildPyZip(target, source, env):