The script was very sloppy about which variables held source pathnames

and which held destination pathnames. Fixed.
This commit is contained in:
Jack Jansen 2002-09-06 21:55:13 +00:00
parent 1f74ed8c4c
commit 997429a5f4

View file

@ -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))