]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Backport:
authorJack Jansen <jack.jansen@cwi.nl>
Fri, 31 Dec 2004 10:44:41 +0000 (10:44 +0000)
committerJack Jansen <jack.jansen@cwi.nl>
Fri, 31 Dec 2004 10:44:41 +0000 (10:44 +0000)
Fix for #1091468: DESTROOTed frameworkinstalls fail. Added a --destroot
option to various tools, and do the right thing when we're doing a destroot
install.

Lib/plat-mac/buildtools.py
Lib/plat-mac/bundlebuilder.py
Mac/OSX/Makefile
Mac/scripts/BuildApplet.py

index bebab194b3bd50bd9222a8d4ff6717e430a80fb2..772da83a39251c85d130e81613137bdb56ef4327 100644 (file)
@@ -60,7 +60,7 @@ def findtemplate(template=None):
     return file
     
 def process(template, filename, destname, copy_codefragment=0, 
-        rsrcname=None, others=[], raw=0, progress="default"):
+        rsrcname=None, others=[], raw=0, progress="default", destroot=""):
     
     if progress == "default":
         progress = EasyDialogs.ProgressBar("Processing %s..."%os.path.split(filename)[1], 120)
@@ -108,7 +108,7 @@ def process(template, filename, destname, copy_codefragment=0,
     except os.error:
         pass
     process_common(template, progress, code, rsrcname, destname, 0, 
-        copy_codefragment, raw, others, filename)
+        copy_codefragment, raw, others, filename, destroot)
     
 
 def update(template, filename, output):
@@ -130,10 +130,10 @@ def update(template, filename, output):
 
 
 def process_common(template, progress, code, rsrcname, destname, is_update, 
-        copy_codefragment, raw=0, others=[], filename=None):
+        copy_codefragment, raw=0, others=[], filename=None, destroot=""):
     if MacOS.runtimemodel == 'macho':
         return process_common_macho(template, progress, code, rsrcname, destname,
-            is_update, raw, others, filename)
+            is_update, raw, others, filename, destroot)
     if others:
         raise BuildError, "Extra files only allowed for MachoPython applets"
     # Create FSSpecs for the various files
@@ -265,7 +265,7 @@ def process_common(template, progress, code, rsrcname, destname, is_update,
         progress.inc(0)
 
 def process_common_macho(template, progress, code, rsrcname, destname, is_update, 
-        raw=0, others=[], filename=None):
+        raw=0, others=[], filename=None, destroot=""):
     # Check that we have a filename
     if filename is None:
         raise BuildError, "Need source filename on MacOSX"
@@ -302,6 +302,7 @@ def process_common_macho(template, progress, code, rsrcname, destname, is_update
     builder.mainprogram = filename
     builder.builddir = destdir
     builder.name = shortname
+    builder.destroot = destroot
     if rsrcname:
         realrsrcname = macresource.resource_pathname(rsrcname)
         builder.files.append((realrsrcname, 
index 09b9deae4a5a6aab1302dabb36b908d542b67a85..e3795441c54a6f45550af26f3f3377c694eb0787 100755 (executable)
@@ -110,6 +110,9 @@ class BundleBuilder(Defaults):
 
     # Verbosity level.
     verbosity = 1
+    
+    # Destination root directory
+    destroot = ""
 
     def setup(self):
         # XXX rethink self.name munging, this is brittle.
@@ -445,7 +448,7 @@ class AppBuilder(BundleBuilder):
                 execname = os.path.basename(self.executable)
             execpath = pathjoin(self.execdir, execname)
             if not self.symlink_exec:
-                self.files.append((self.executable, execpath))
+                self.files.append((self.destroot + self.executable, execpath))
             self.execpath = execpath
 
         if self.mainprogram is not None:
@@ -828,7 +831,7 @@ def main(builder=None):
         "mainprogram=", "creator=", "nib=", "plist=", "link",
         "link-exec", "help", "verbose", "quiet", "argv", "standalone",
         "exclude=", "include=", "package=", "strip", "iconfile=",
-        "lib=", "python=", "semi-standalone", "bundle-id=")
+        "lib=", "python=", "semi-standalone", "bundle-id=", "destroot=")
 
     try:
         options, args = getopt.getopt(sys.argv[1:], shortopts, longopts)
@@ -890,6 +893,8 @@ def main(builder=None):
             builder.includePackages.append(arg)
         elif opt == '--strip':
             builder.strip = 1
+        elif opt == '--destroot':
+            builder.destroot = arg
 
     if len(args) != 1:
         usage("Must specify one command ('build', 'report' or 'help')")
index a1eeed1f6339f45ebc6c9fcc91ca62e1bb829f5d..cad27f6dec430f0efa5af2c453a1306cbec275c7 100644 (file)
@@ -121,10 +121,12 @@ install_IDE:
                echo See Mac/OSX/README for details; \
        else \
                echo $(BUILDPYTHON) $(srcdir)/Mac/scripts/BuildApplet.py \
+                   --destroot $(DESTDIR) \
                        --python $(INSTALLED_PYTHONW) \
                        --output $(DESTDIR)$(PYTHONAPPSDIR)/PythonIDE.app --noargv \
                        $(srcdir)/Mac/Tools/IDE/PythonIDE.py ; \
                $(BUILDPYTHON) $(srcdir)/Mac/scripts/BuildApplet.py \
+                   --destroot $(DESTDIR) \
                        --python $(INSTALLED_PYTHONW) \
                        --output $(DESTDIR)$(PYTHONAPPSDIR)/PythonIDE.app --noargv \
                        $(srcdir)/Mac/Tools/IDE/PythonIDE.py; \
@@ -137,6 +139,7 @@ install_PackageManager:
        else \
                echo $(BUILDPYTHON) $(bundlebuilder) \
                        --builddir $(DESTDIR)$(PYTHONAPPSDIR)/ \
+                   --destroot $(DESTDIR) \
                        --python $(INSTALLED_PYTHONW) \
                        --resource $(srcdir)/Mac/Tools/IDE/PythonIDE.rsrc \
                        --mainprogram $(srcdir)/Mac/Tools/IDE/PackageManager.py \
@@ -145,6 +148,7 @@ install_PackageManager:
                        --creator Pimp build; \
                $(BUILDPYTHON) $(bundlebuilder) \
                        --builddir $(DESTDIR)$(PYTHONAPPSDIR)/ \
+                   --destroot $(DESTDIR) \
                        --python $(INSTALLED_PYTHONW) \
                        --resource $(srcdir)/Mac/Tools/IDE/PythonIDE.rsrc \
                        --mainprogram $(srcdir)/Mac/Tools/IDE/PackageManager.py \
@@ -160,11 +164,13 @@ install_IDLE:
        else \
                echo $(BUILDPYTHON) $(srcdir)/Mac/scripts/BuildApplet.py \
                        --python $(INSTALLED_PYTHONW) \
+                       --destroot $(DESTDIR) \
                        --output $(DESTDIR)$(PYTHONAPPSDIR)/IDLE.app \
                        --extra $(srcdir)/Lib/idlelib \
                        $(srcdir)/Lib/idlelib/idle ; \
                $(BUILDPYTHON) $(srcdir)/Mac/scripts/BuildApplet.py \
                        --python $(INSTALLED_PYTHONW) \
+                       --destroot $(DESTDIR) \
                        --output $(DESTDIR)$(PYTHONAPPSDIR)/IDLE.app \
                        --extra $(srcdir)/Lib/idlelib:Contents/Resources/idlelib \
                        $(srcdir)/Lib/idlelib/idle ; \
@@ -173,6 +179,7 @@ install_IDLE:
 
 install_BuildApplet:
        $(BUILDPYTHON) $(srcdir)/Mac/scripts/BuildApplet.py \
+               --destroot $(DESTDIR) \
                --python $(INSTALLED_PYTHONW) \
                --output $(DESTDIR)$(PYTHONAPPSDIR)/BuildApplet.app \
                $(srcdir)/Mac/scripts/BuildApplet.py
index e954854b819a1adce242c16a4d5779fbcafb726e..a3bf73ab51b380a778c88d27573b630e246bf31a 100644 (file)
@@ -53,8 +53,8 @@ def buildapplet():
                        buildtools.process(template, filename, dstfilename, 1)
        else:
                
-               SHORTOPTS = "o:r:ne:v?P"
-               LONGOPTS=("output=", "resource=", "noargv", "extra=", "verbose", "help", "python=")
+               SHORTOPTS = "o:r:ne:v?PR"
+               LONGOPTS=("output=", "resource=", "noargv", "extra=", "verbose", "help", "python=", "destroot=")
                try:
                        options, args = getopt.getopt(sys.argv[1:], SHORTOPTS, LONGOPTS)
                except getopt.error:
@@ -67,6 +67,7 @@ def buildapplet():
                raw = 0
                extras = []
                verbose = None
+               destroot = ''
                for opt, arg in options:
                        if opt in ('-o', '--output'):
                                dstfilename = arg
@@ -87,6 +88,8 @@ def buildapplet():
                                verbose = Verbose()
                        elif opt in ('-?', '--help'):
                                usage()
+                       elif opt in ('-d', '--destroot'):
+                               destroot = arg
                # On OS9 always be verbose
                if sys.platform == 'mac' and not verbose:
                        verbose = 'default'
@@ -97,21 +100,22 @@ def buildapplet():
                                buildtools.update(template, filename, dstfilename)
                        else:
                                buildtools.process(template, filename, dstfilename, 1,
-                                       rsrcname=rsrcfilename, others=extras, raw=raw, progress=verbose)
+                                               rsrcname=rsrcfilename, others=extras, raw=raw,
+                                               progress=verbose, destroot=destroot)
 
 def usage():
        print "BuildApplet creates an application from a Python source file"
        print "Usage:"
-       print "  BuildApplet     interactive, single file, no options"
-       print "  BuildApplet src1.py src2.py ...   non-interactive multiple file"
-       print "  BuildApplet [options] src.py    non-interactive single file"
+       print "  BuildApplet     interactive, single file, no options"
+       print "  BuildApplet src1.py src2.py ...   non-interactive multiple file"
+       print "  BuildApplet [options] src.py    non-interactive single file"
        print "Options:"
-       print "  --output o        Output file; default based on source filename, short -o"
-       print "  --resource r      Resource file; default based on source filename, short -r"
-       print "  --noargv          Build applet without drag-and-drop sys.argv emulation, short -n, OSX only"
-       print "  --extra src[:dst] Extra file to put in .app bundle, short -e, OSX only"
-       print "  --verbose         Verbose, short -v"
-       print "  --help            This message, short -?"
+       print "  --output o                Output file; default based on source filename, short -o"
+       print "  --resource r      Resource file; default based on source filename, short -r"
+       print "  --noargv                  Build applet without drag-and-drop sys.argv emulation, short -n, OSX only"
+       print "  --extra src[:dst] Extra file to put in .app bundle, short -e, OSX only"
+       print "  --verbose                 Verbose, short -v"
+       print "  --help                    This message, short -?"
        sys.exit(1)
 
 class Verbose: