mirror of
https://github.com/python/cpython.git
synced 2025-08-03 16:39:00 +00:00
The script was very sloppy about which variables held source pathnames
and which held destination pathnames. Fixed.
This commit is contained in:
parent
1f74ed8c4c
commit
997429a5f4
1 changed files with 54 additions and 56 deletions
|
@ -53,6 +53,7 @@ __license__ = "FreeBSD"
|
||||||
import os, sys, glob, fnmatch, shutil, string, copy, getopt
|
import os, sys, glob, fnmatch, shutil, string, copy, getopt
|
||||||
from os.path import basename, dirname, join, islink, isdir, isfile
|
from os.path import basename, dirname, join, islink, isdir, isfile
|
||||||
|
|
||||||
|
Error = "buildpkg.Error"
|
||||||
|
|
||||||
PKG_INFO_FIELDS = """\
|
PKG_INFO_FIELDS = """\
|
||||||
Title
|
Title
|
||||||
|
@ -159,6 +160,7 @@ class PackageMaker:
|
||||||
# variables set later
|
# variables set later
|
||||||
self.packageRootFolder = None
|
self.packageRootFolder = None
|
||||||
self.packageResourceFolder = None
|
self.packageResourceFolder = None
|
||||||
|
self.sourceFolder = None
|
||||||
self.resourceFolder = None
|
self.resourceFolder = None
|
||||||
|
|
||||||
|
|
||||||
|
@ -171,16 +173,25 @@ class PackageMaker:
|
||||||
"""
|
"""
|
||||||
|
|
||||||
# set folder attributes
|
# set folder attributes
|
||||||
self.packageRootFolder = root
|
self.sourceFolder = root
|
||||||
if resources == None:
|
if resources == None:
|
||||||
self.packageResourceFolder = root
|
self.resourceFolder = root
|
||||||
|
else:
|
||||||
|
self.resourceFolder = resources
|
||||||
|
|
||||||
# replace default option settings with user ones if provided
|
# replace default option settings with user ones if provided
|
||||||
fields = self. packageInfoDefaults.keys()
|
fields = self. packageInfoDefaults.keys()
|
||||||
for k, v in options.items():
|
for k, v in options.items():
|
||||||
if k in fields:
|
if k in fields:
|
||||||
self.packageInfo[k] = v
|
self.packageInfo[k] = v
|
||||||
|
elif not k in ["OutputDir"]:
|
||||||
|
raise Error, "Unknown package option: %s" % k
|
||||||
|
|
||||||
|
# Check where we should leave the output. Default is current directory
|
||||||
|
outputdir = options.get("OutputDir", os.getcwd())
|
||||||
|
packageName = self.packageInfo["Title"]
|
||||||
|
self.PackageRootFolder = os.path.join(outputdir, packageName + ".pkg")
|
||||||
|
|
||||||
# do what needs to be done
|
# do what needs to be done
|
||||||
self._makeFolders()
|
self._makeFolders()
|
||||||
self._addInfo()
|
self._addInfo()
|
||||||
|
@ -197,16 +208,11 @@ class PackageMaker:
|
||||||
# packageName = "%s-%s" % (self.packageInfo["Title"],
|
# packageName = "%s-%s" % (self.packageInfo["Title"],
|
||||||
# self.packageInfo["Version"]) # ??
|
# self.packageInfo["Version"]) # ??
|
||||||
|
|
||||||
packageName = self.packageInfo["Title"]
|
contFolder = join(self.PackageRootFolder, "Contents")
|
||||||
rootFolder = packageName + ".pkg"
|
self.packageResourceFolder = join(contFolder, "Resources")
|
||||||
contFolder = join(rootFolder, "Contents")
|
os.mkdir(self.PackageRootFolder)
|
||||||
resourceFolder = join(contFolder, "Resources")
|
|
||||||
os.mkdir(rootFolder)
|
|
||||||
os.mkdir(contFolder)
|
os.mkdir(contFolder)
|
||||||
os.mkdir(resourceFolder)
|
os.mkdir(self.packageResourceFolder)
|
||||||
|
|
||||||
self.resourceFolder = resourceFolder
|
|
||||||
|
|
||||||
|
|
||||||
def _addInfo(self):
|
def _addInfo(self):
|
||||||
"Write .info file containing installing options."
|
"Write .info file containing installing options."
|
||||||
|
@ -217,8 +223,8 @@ class PackageMaker:
|
||||||
for f in string.split(PKG_INFO_FIELDS, "\n"):
|
for f in string.split(PKG_INFO_FIELDS, "\n"):
|
||||||
info = info + "%s %%(%s)s\n" % (f, f)
|
info = info + "%s %%(%s)s\n" % (f, f)
|
||||||
info = info % self.packageInfo
|
info = info % self.packageInfo
|
||||||
base = basename(self.packageRootFolder) + ".info"
|
base = self.packageInfo["Title"] + ".info"
|
||||||
path = join(self.resourceFolder, base)
|
path = join(self.packageResourceFolder, base)
|
||||||
f = open(path, "w")
|
f = open(path, "w")
|
||||||
f.write(info)
|
f.write(info)
|
||||||
|
|
||||||
|
@ -229,9 +235,9 @@ class PackageMaker:
|
||||||
# Currently ignores if the 'mkbom' tool is not available.
|
# Currently ignores if the 'mkbom' tool is not available.
|
||||||
|
|
||||||
try:
|
try:
|
||||||
base = basename(self.packageRootFolder) + ".bom"
|
base = self.packageInfo["Title"] + ".bom"
|
||||||
bomPath = join(self.resourceFolder, base)
|
bomPath = join(self.packageResourceFolder, base)
|
||||||
cmd = "mkbom %s %s" % (self.packageRootFolder, bomPath)
|
cmd = "mkbom %s %s" % (self.sourceFolder, bomPath)
|
||||||
res = os.system(cmd)
|
res = os.system(cmd)
|
||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
|
@ -244,23 +250,16 @@ class PackageMaker:
|
||||||
|
|
||||||
cwd = os.getcwd()
|
cwd = os.getcwd()
|
||||||
|
|
||||||
packageRootFolder = self.packageRootFolder
|
# create archive
|
||||||
|
os.chdir(self.sourceFolder)
|
||||||
try:
|
base = basename(self.packageInfo["Title"]) + ".pax"
|
||||||
# create archive
|
self.archPath = join(self.packageResourceFolder, base)
|
||||||
d = dirname(packageRootFolder)
|
cmd = "pax -w -f %s %s" % (self.archPath, ".")
|
||||||
os.chdir(packageRootFolder)
|
res = os.system(cmd)
|
||||||
base = basename(packageRootFolder) + ".pax"
|
|
||||||
archPath = join(d, self.resourceFolder, base)
|
# compress archive
|
||||||
cmd = "pax -w -f %s %s" % (archPath, ".")
|
cmd = "gzip %s" % self.archPath
|
||||||
res = os.system(cmd)
|
res = os.system(cmd)
|
||||||
|
|
||||||
# compress archive
|
|
||||||
cmd = "gzip %s" % archPath
|
|
||||||
res = os.system(cmd)
|
|
||||||
except:
|
|
||||||
pass
|
|
||||||
|
|
||||||
os.chdir(cwd)
|
os.chdir(cwd)
|
||||||
|
|
||||||
|
|
||||||
|
@ -271,20 +270,22 @@ class PackageMaker:
|
||||||
# filenames. So, it's left to Installer.app to deal with the
|
# filenames. So, it's left to Installer.app to deal with the
|
||||||
# same file available in multiple formats...
|
# same file available in multiple formats...
|
||||||
|
|
||||||
if not self.packageResourceFolder:
|
if not self.resourceFolder:
|
||||||
return
|
return
|
||||||
|
|
||||||
# find candidate resource files (txt html rtf rtfd/ or lproj/)
|
# find candidate resource files (txt html rtf rtfd/ or lproj/)
|
||||||
allFiles = []
|
allFiles = []
|
||||||
for pat in string.split("*.txt *.html *.rtf *.rtfd *.lproj", " "):
|
for pat in string.split("*.txt *.html *.rtf *.rtfd *.lproj", " "):
|
||||||
pattern = join(self.packageResourceFolder, pat)
|
pattern = join(self.resourceFolder, pat)
|
||||||
allFiles = allFiles + glob.glob(pattern)
|
allFiles = allFiles + glob.glob(pattern)
|
||||||
|
|
||||||
# find pre-process and post-process scripts
|
# find pre-process and post-process scripts
|
||||||
# naming convention: packageName.{pre,post}-{upgrade,install}
|
# naming convention: packageName.{pre,post}-{upgrade,install}
|
||||||
|
# Alternatively the filenames can be {pre,post}-{upgrade,install}
|
||||||
|
# in which case we prepend the package name
|
||||||
packageName = self.packageInfo["Title"]
|
packageName = self.packageInfo["Title"]
|
||||||
for pat in ("*upgrade", "*install"):
|
for pat in ("*upgrade", "*install"):
|
||||||
pattern = join(self.packageResourceFolder, packageName + pat)
|
pattern = join(self.resourceFolder, packageName + pat)
|
||||||
allFiles = allFiles + glob.glob(pattern)
|
allFiles = allFiles + glob.glob(pattern)
|
||||||
|
|
||||||
# check name patterns
|
# check name patterns
|
||||||
|
@ -292,22 +293,24 @@ class PackageMaker:
|
||||||
for f in allFiles:
|
for f in allFiles:
|
||||||
for s in ("Welcome", "License", "ReadMe"):
|
for s in ("Welcome", "License", "ReadMe"):
|
||||||
if string.find(basename(f), s) == 0:
|
if string.find(basename(f), s) == 0:
|
||||||
files.append(f)
|
files.append((f, f))
|
||||||
if f[-6:] == ".lproj":
|
if f[-6:] == ".lproj":
|
||||||
files.append(f)
|
files.append((f, f))
|
||||||
|
elif f in ["pre-upgrade", "pre-install", "post-upgrade", "post-install"]:
|
||||||
|
files.append((f, self.packageInfo["Title"]+"."+f))
|
||||||
elif f[-8:] == "-upgrade":
|
elif f[-8:] == "-upgrade":
|
||||||
files.append(f)
|
files.append((f,f))
|
||||||
elif f[-8:] == "-install":
|
elif f[-8:] == "-install":
|
||||||
files.append(f)
|
files.append((f,f))
|
||||||
|
|
||||||
# copy files
|
# copy files
|
||||||
for g in files:
|
for src, dst in files:
|
||||||
f = join(self.packageResourceFolder, g)
|
f = join(self.resourceFolder, src)
|
||||||
if isfile(f):
|
if isfile(f):
|
||||||
shutil.copy(f, self.resourceFolder)
|
shutil.copy(f, os.path.join(self.packageResourceFolder, dst))
|
||||||
elif isdir(f):
|
elif isdir(f):
|
||||||
# special case for .rtfd and .lproj folders...
|
# special case for .rtfd and .lproj folders...
|
||||||
d = join(self.resourceFolder, basename(f))
|
d = join(self.packageResourceFolder, dst)
|
||||||
os.mkdir(d)
|
os.mkdir(d)
|
||||||
files = GlobDirectoryWalker(f)
|
files = GlobDirectoryWalker(f)
|
||||||
for file in files:
|
for file in files:
|
||||||
|
@ -326,23 +329,18 @@ class PackageMaker:
|
||||||
installedSize = 0
|
installedSize = 0
|
||||||
zippedSize = 0
|
zippedSize = 0
|
||||||
|
|
||||||
packageRootFolder = self.packageRootFolder
|
files = GlobDirectoryWalker(self.sourceFolder)
|
||||||
|
|
||||||
files = GlobDirectoryWalker(packageRootFolder)
|
|
||||||
for f in files:
|
for f in files:
|
||||||
numFiles = numFiles + 1
|
numFiles = numFiles + 1
|
||||||
installedSize = installedSize + os.stat(f)[6]
|
installedSize = installedSize + os.lstat(f)[6]
|
||||||
|
|
||||||
d = dirname(packageRootFolder)
|
|
||||||
base = basename(packageRootFolder) + ".pax.gz"
|
|
||||||
archPath = join(d, self.resourceFolder, base)
|
|
||||||
try:
|
try:
|
||||||
zippedSize = os.stat(archPath)[6]
|
zippedSize = os.stat(self.archPath+ ".gz")[6]
|
||||||
except OSError: # ignore error
|
except OSError: # ignore error
|
||||||
pass
|
pass
|
||||||
base = basename(packageRootFolder) + ".sizes"
|
base = self.packageInfo["Title"] + ".sizes"
|
||||||
f = open(join(self.resourceFolder, base), "w")
|
f = open(join(self.packageResourceFolder, base), "w")
|
||||||
format = "NumFiles %d\nInstalledSize %d\nCompressedSize %d"
|
format = "NumFiles %d\nInstalledSize %d\nCompressedSize %d\n"
|
||||||
f.write(format % (numFiles, installedSize, zippedSize))
|
f.write(format % (numFiles, installedSize, zippedSize))
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue