Add initial standalone support for Python.framework
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 @@
     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 @@
 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 @@
 
     # 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 @@
             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 @@
         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)