Browse Source

preload libpandaexpress

David Rose 16 years ago
parent
commit
8b77da64df
2 changed files with 19 additions and 2 deletions
  1. 2 0
      direct/src/p3d/Packager.py
  2. 17 2
      direct/src/plugin/p3dPythonRun.cxx

+ 2 - 0
direct/src/p3d/Packager.py

@@ -2158,6 +2158,8 @@ class Packager:
         self.do_module('VFSImporter', filename = filename)
         self.do_freeze('_vfsimporter', compileToExe = False)
 
+        self.do_file('libpandaexpress.dll');
+
         # Now that we're done freezing, explicitly add 'direct' to
         # counteract the previous explicit excludeModule().
         self.do_module('direct')

+ 17 - 2
direct/src/plugin/p3dPythonRun.cxx

@@ -128,8 +128,23 @@ run_python() {
   
 #endif
 
-  // First, load _vfsimporter.pyd.  Since this is a magic frozen pyd,
-  // importing it automatically makes all of its frozen contents
+  // We'll need libpandaexpress to be imported before we can load
+  // _vfsimporter.  So, find it and load it.
+  Filename libpandaexpress(_archive_file.get_dirname(), 
+                           Filename::dso_filename("libpandaexpress.so"));
+  if (!libpandaexpress.exists()) {
+    nout << "Can't find " << libpandaexpress << "\n";
+    return false;
+  }
+
+  string startup;
+  startup = "import imp; imp.load_dynamic('libpandaexpress', \"";
+  startup += libpandaexpress.to_os_specific();
+  startup += "\");";
+  PyRun_SimpleString(startup.c_str());
+
+  // Now we can load _vfsimporter.pyd.  Since this is a magic frozen
+  // pyd, importing it automatically makes all of its frozen contents
   // available to import as well.
   PyObject *vfsimporter = PyImport_ImportModule("_vfsimporter");
   if (vfsimporter == NULL) {