]> granicus.if.org Git - python/commitdiff
Add initial standalone support for Python.framework
authorJust van Rossum <just@letterror.com>
Fri, 20 Jun 2003 18:56:10 +0000 (18:56 +0000)
committerJust van Rossum <just@letterror.com>
Fri, 20 Jun 2003 18:56:10 +0000 (18:56 +0000)
Lib/plat-mac/bundlebuilder.py

index 1a15591a55b802af41427d47c3c60b5718d81a25..7c8a80ac6af3babd2c4dbfe1ac9bd36de1379f92 100755 (executable)
@@ -284,6 +284,7 @@ if %(standalone)s:
     os.environ["PYTHONHOME"] = resdir
 os.environ["PYTHONEXECUTABLE"] = executable
 os.environ["DYLD_LIBRARY_PATH"] = libdir
+os.environ["DYLD_FRAMEWORK_PATH"] = libdir
 os.execve(executable, sys.argv, os.environ)
 """
 
@@ -298,6 +299,18 @@ argvemulator.ArgvCollector().mainloop()
 execfile(os.path.join(os.path.split(__file__)[0], "%(realmainprogram)s"))
 """
 
+#
+# When building a standalone app with Python.framework, we need to copy
+# a subset from Python.framework to the bundle. The following list
+# specifies exactly what items we'll copy.
+#
+PYTHONFRAMEWORKGOODIES = [
+    "Python",  # the Python core library
+    "Resources/English.lproj",
+    "Resources/Info.plist",
+    "Resources/version.plist",
+]
+
 
 class AppBuilder(BundleBuilder):
 
@@ -331,10 +344,10 @@ class AppBuilder(BundleBuilder):
 
     # If True, build standalone app.
     standalone = 0
-    
+
     # If set, use this for #! lines in stead of sys.executable
     python = None
-    
+
     # If True, add a real main program that emulates sys.argv before calling
     # mainprogram
     argv_emulation = 0
@@ -392,6 +405,9 @@ class AppBuilder(BundleBuilder):
             if not hasattr(self.plist, "NSPrincipalClass"):
                 self.plist.NSPrincipalClass = "NSApplication"
 
+        if self.standalone and "Python.framework" in sys.exec_prefix:
+            self.addPythonFramework()
+
         BundleBuilder.setup(self)
 
         self.plist.CFBundleExecutable = self.name
@@ -474,6 +490,20 @@ class AppBuilder(BundleBuilder):
         if self.missingModules or self.maybeMissingModules:
             self.reportMissing()
 
+    def addPythonFramework(self):
+        # If we're building a standalone app with Python.framework,
+        # include a minimal subset of Python.framework
+        frameworkpath = sys.exec_prefix[:sys.exec_prefix.find(
+            "Python.framework") + len("Python.framework")]
+        version = sys.version[:3]
+        frameworkpath = pathjoin(frameworkpath, "Versions", version)
+        destbase = pathjoin("Contents", "Frameworks", "Python.framework",
+                            "Versions", version)
+        for item in PYTHONFRAMEWORKGOODIES:
+            src = pathjoin(frameworkpath, item)
+            dst = pathjoin(destbase, item)
+            self.files.append((src, dst))
+
     def addPythonModules(self):
         self.message("Adding Python modules", 1)