From: Jack Jansen Date: Fri, 31 Dec 2004 10:44:41 +0000 (+0000) Subject: Backport: X-Git-Tag: v2.3.5c1~47 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=f3609396b1d1215e5e7a549a2014d0934eed62f0;p=thirdparty%2FPython%2Fcpython.git Backport: 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. --- diff --git a/Lib/plat-mac/buildtools.py b/Lib/plat-mac/buildtools.py index bebab194b3bd..772da83a3925 100644 --- a/Lib/plat-mac/buildtools.py +++ b/Lib/plat-mac/buildtools.py @@ -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, diff --git a/Lib/plat-mac/bundlebuilder.py b/Lib/plat-mac/bundlebuilder.py index 09b9deae4a5a..e3795441c54a 100755 --- a/Lib/plat-mac/bundlebuilder.py +++ b/Lib/plat-mac/bundlebuilder.py @@ -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')") diff --git a/Mac/OSX/Makefile b/Mac/OSX/Makefile index a1eeed1f6339..cad27f6dec43 100644 --- a/Mac/OSX/Makefile +++ b/Mac/OSX/Makefile @@ -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 diff --git a/Mac/scripts/BuildApplet.py b/Mac/scripts/BuildApplet.py index e954854b819a..a3bf73ab51b3 100644 --- a/Mac/scripts/BuildApplet.py +++ b/Mac/scripts/BuildApplet.py @@ -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: