From 3166f59d2a9f3922902837db3de208c530cca89d Mon Sep 17 00:00:00 2001 From: Just van Rossum Date: Fri, 20 Jun 2003 18:56:10 +0000 Subject: [PATCH] Add initial standalone support for Python.framework --- Lib/plat-mac/bundlebuilder.py | 34 ++++++++++++++++++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) diff --git a/Lib/plat-mac/bundlebuilder.py b/Lib/plat-mac/bundlebuilder.py index 1a15591a55b..7c8a80ac6af 100755 --- a/Lib/plat-mac/bundlebuilder.py +++ b/Lib/plat-mac/bundlebuilder.py @@ -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)