From c77f6dfd923e469cd645a0f825509cf0e9c490a0 Mon Sep 17 00:00:00 2001 From: Jack Jansen Date: Mon, 27 Dec 2004 15:51:03 +0000 Subject: 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. Will backport to 2.4 and 2.3. --- Lib/plat-mac/buildtools.py | 11 ++++++----- Lib/plat-mac/bundlebuilder.py | 9 +++++++-- Mac/OSX/Makefile | 9 ++++++++- Mac/scripts/BuildApplet.py | 10 +++++++--- 4 files changed, 28 insertions(+), 11 deletions(-) diff --git a/Lib/plat-mac/buildtools.py b/Lib/plat-mac/buildtools.py index 17e4076..c83e218 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 09b9dea..e379544 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 b7791cb..f4bedae 100644 --- a/Mac/OSX/Makefile +++ b/Mac/OSX/Makefile @@ -2,7 +2,7 @@ # main Makefile. The next couple of variables are overridden on the # commandline in that case. -VERSION=2.4 +VERSION=2.5 builddir = ../.. srcdir = ../.. prefix=/Library/Frameworks/Python.framework/Versions/$(VERSION) @@ -120,10 +120,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; \ @@ -136,6 +138,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 \ @@ -143,6 +146,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 \ @@ -157,11 +161,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)/Tools/scripts/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)/Tools/scripts/idle ; \ @@ -170,6 +176,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 cb2aed8..756218f 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,7 +100,8 @@ 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" -- cgit v0.12