summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJust van Rossum <just@letterror.com>2003-06-20 18:56:10 (GMT)
committerJust van Rossum <just@letterror.com>2003-06-20 18:56:10 (GMT)
commit3166f59d2a9f3922902837db3de208c530cca89d (patch)
treeeb98e7554ac14eb784c3805414908b8450e907b6
parent4327521688baf21f67b134a21cb6398d6b72967f (diff)
downloadcpython-3166f59d2a9f3922902837db3de208c530cca89d.zip
cpython-3166f59d2a9f3922902837db3de208c530cca89d.tar.gz
cpython-3166f59d2a9f3922902837db3de208c530cca89d.tar.bz2
Add initial standalone support for Python.framework
-rwxr-xr-xLib/plat-mac/bundlebuilder.py34
1 files changed, 32 insertions, 2 deletions
diff --git a/Lib/plat-mac/bundlebuilder.py b/Lib/plat-mac/bundlebuilder.py
index 1a15591..7c8a80a 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)