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.
This commit is contained in:
parent
be95462c1c
commit
c77f6dfd92
|
@ -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,
|
||||
|
|
|
@ -111,6 +111,9 @@ class BundleBuilder(Defaults):
|
|||
# Verbosity level.
|
||||
verbosity = 1
|
||||
|
||||
# Destination root directory
|
||||
destroot = ""
|
||||
|
||||
def setup(self):
|
||||
# XXX rethink self.name munging, this is brittle.
|
||||
self.name, ext = os.path.splitext(self.name)
|
||||
|
@ -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')")
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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"
|
||||
|
|
Loading…
Reference in New Issue