diff options
-rw-r--r-- | src/SConscript | 17 | ||||
-rw-r--r-- | src/python/importer.py | 12 | ||||
-rw-r--r-- | src/sim/init.cc | 3 | ||||
-rw-r--r-- | src/sim/init.hh | 1 |
4 files changed, 23 insertions, 10 deletions
diff --git a/src/SConscript b/src/SConscript index 51616701b..5879fbc93 100644 --- a/src/SConscript +++ b/src/SConscript @@ -929,12 +929,17 @@ def pythonInit(target, source, env): dst = file(str(target[0]), 'w') def dump_mod(sym, endchar=','): + def c_str(string): + if string is None: + return "0" + return '"%s"' % string pysource = PySource.symnames[sym] - print >>dst, ' { "%s",' % pysource.arcname - print >>dst, ' "%s",' % pysource.modpath - print >>dst, ' %s_beg, %s_end,' % (sym, sym) - print >>dst, ' %s_end - %s_beg,' % (sym, sym) - print >>dst, ' *(int *)%s_end }%s' % (sym, endchar) + print >>dst, ' { %s,' % c_str(pysource.arcname) + print >>dst, ' %s,' % c_str(pysource.abspath) + print >>dst, ' %s,' % c_str(pysource.modpath) + print >>dst, ' %s_beg, %s_end,' % (sym, sym) + print >>dst, ' %s_end - %s_beg,' % (sym, sym) + print >>dst, ' *(int *)%s_end }%s' % (sym, endchar) print >>dst, '#include "sim/init.hh"' @@ -953,7 +958,7 @@ def pythonInit(target, source, env): # Skip the importer since we've already exported it continue dump_mod(sym) - print >>dst, " { 0, 0, 0, 0, 0, 0 }" + print >>dst, " { 0, 0, 0, 0, 0, 0, 0 }" print >>dst, "};" diff --git a/src/python/importer.py b/src/python/importer.py index fe099fdb8..4e364873f 100644 --- a/src/python/importer.py +++ b/src/python/importer.py @@ -33,11 +33,11 @@ class CodeImporter(object): def __init__(self): self.modules = {} - def add_module(self, filename, modpath, code): + def add_module(self, filename, abspath, modpath, code): if modpath in self.modules: raise AttributeError, "%s already found in importer" - self.modules[modpath] = (filename, code) + self.modules[modpath] = (filename, abspath, code) def find_module(self, fullname, path): if fullname in self.modules: @@ -59,7 +59,13 @@ class CodeImporter(object): try: mod.__loader__ = self - srcfile,code = self.modules[fullname] + srcfile,abspath,code = self.modules[fullname] + + override = os.environ.get('M5_OVERRIDE_PY_SOURCE', 'false').lower() + if override in ('true', 'yes') and os.path.exists(abspath): + src = file(abspath, 'r').read() + code = compile(src, abspath, 'exec') + if os.path.basename(srcfile) == '__init__.py': mod.__path__ = fullname.split('.') mod.__file__ = srcfile diff --git a/src/sim/init.cc b/src/sim/init.cc index 8057c9369..1ec09369d 100644 --- a/src/sim/init.cc +++ b/src/sim/init.cc @@ -154,7 +154,8 @@ initM5Python() while (pymod->filename) { PyObject *code = getCode(pymod); PyObject *result = PyObject_CallMethod(module, PyCC("add_module"), - PyCC("ssO"), pymod->filename, pymod->modpath, code); + PyCC("sssO"), pymod->filename, pymod->abspath, pymod->modpath, + code); if (!result) { PyErr_Print(); return 1; diff --git a/src/sim/init.hh b/src/sim/init.hh index b0f29bf30..76cdcb74e 100644 --- a/src/sim/init.hh +++ b/src/sim/init.hh @@ -37,6 +37,7 @@ struct EmbeddedPyModule { const char *filename; + const char *abspath; const char *modpath; const char *code; const char *code_end; |