annotate Mac/scripts/buildpkg.py @ 27998:e27f58a50737 legacy-trunk

SF bug #690377: Dud footnote reference in distutils docs
author Raymond Hettinger <python@rcn.com>
date Fri, 21 Feb 2003 02:47:09 +0000
parents d1edaaa938fb
children e339ad250af0
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
25144
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
1 #!/usr/bin/env python
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
2
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
3 """buildpkg.py -- Build OS X packages for Apple's Installer.app.
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
4
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
5 This is an experimental command-line tool for building packages to be
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
6 installed with the Mac OS X Installer.app application.
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
7
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
8 It is much inspired by Apple's GUI tool called PackageMaker.app, that
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
9 seems to be part of the OS X developer tools installed in the folder
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
10 /Developer/Applications. But apparently there are other free tools to
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
11 do the same thing which are also named PackageMaker like Brian Hill's
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
12 one:
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
13
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
14 http://personalpages.tds.net/~brian_hill/packagemaker.html
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
15
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
16 Beware of the multi-package features of Installer.app (which are not
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
17 yet supported here) that can potentially screw-up your installation
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
18 and are discussed in these articles on Stepwise:
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
19
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
20 http://www.stepwise.com/Articles/Technical/Packages/InstallerWoes.html
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
21 http://www.stepwise.com/Articles/Technical/Packages/InstallerOnX.html
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
22
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
23 Beside using the PackageMaker class directly, by importing it inside
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
24 another module, say, there are additional ways of using this module:
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
25 the top-level buildPackage() function provides a shortcut to the same
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
26 feature and is also called when using this module from the command-
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
27 line.
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
28
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
29 ****************************************************************
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
30 NOTE: For now you should be able to run this even on a non-OS X
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
31 system and get something similar to a package, but without
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
32 the real archive (needs pax) and bom files (needs mkbom)
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
33 inside! This is only for providing a chance for testing to
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
34 folks without OS X.
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
35 ****************************************************************
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
36
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
37 TODO:
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
38 - test pre-process and post-process scripts (Python ones?)
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
39 - handle multi-volume packages (?)
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
40 - integrate into distutils (?)
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
41
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
42 Dinu C. Gherman,
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
43 gherman@europemail.com
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
44 November 2001
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
45
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
46 !! USE AT YOUR OWN RISK !!
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
47 """
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
48
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
49 __version__ = 0.2
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
50 __license__ = "FreeBSD"
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
51
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
52
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
53 import os, sys, glob, fnmatch, shutil, string, copy, getopt
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
54 from os.path import basename, dirname, join, islink, isdir, isfile
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
55
25150
ac741587e66b The script was very sloppy about which variables held source pathnames
Jack Jansen <jack.jansen@cwi.nl>
parents: 25144
diff changeset
56 Error = "buildpkg.Error"
25144
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
57
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
58 PKG_INFO_FIELDS = """\
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
59 Title
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
60 Version
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
61 Description
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
62 DefaultLocation
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
63 Diskname
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
64 DeleteWarning
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
65 NeedsAuthorization
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
66 DisableStop
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
67 UseUserMask
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
68 Application
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
69 Relocatable
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
70 Required
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
71 InstallOnly
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
72 RequiresReboot
27582
d1edaaa938fb patch #678211 from Robin Dunn
Just van Rossum <just@letterror.com>
parents: 25150
diff changeset
73 RootVolumeOnly
25144
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
74 InstallFat\
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
75 """
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
76
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
77 ######################################################################
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
78 # Helpers
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
79 ######################################################################
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
80
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
81 # Convenience class, as suggested by /F.
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
82
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
83 class GlobDirectoryWalker:
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
84 "A forward iterator that traverses files in a directory tree."
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
85
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
86 def __init__(self, directory, pattern="*"):
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
87 self.stack = [directory]
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
88 self.pattern = pattern
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
89 self.files = []
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
90 self.index = 0
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
91
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
92
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
93 def __getitem__(self, index):
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
94 while 1:
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
95 try:
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
96 file = self.files[self.index]
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
97 self.index = self.index + 1
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
98 except IndexError:
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
99 # pop next directory from stack
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
100 self.directory = self.stack.pop()
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
101 self.files = os.listdir(self.directory)
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
102 self.index = 0
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
103 else:
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
104 # got a filename
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
105 fullname = join(self.directory, file)
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
106 if isdir(fullname) and not islink(fullname):
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
107 self.stack.append(fullname)
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
108 if fnmatch.fnmatch(file, self.pattern):
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
109 return fullname
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
110
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
111
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
112 ######################################################################
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
113 # The real thing
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
114 ######################################################################
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
115
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
116 class PackageMaker:
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
117 """A class to generate packages for Mac OS X.
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
118
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
119 This is intended to create OS X packages (with extension .pkg)
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
120 containing archives of arbitrary files that the Installer.app
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
121 will be able to handle.
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
122
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
123 As of now, PackageMaker instances need to be created with the
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
124 title, version and description of the package to be built.
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
125 The package is built after calling the instance method
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
126 build(root, **options). It has the same name as the constructor's
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
127 title argument plus a '.pkg' extension and is located in the same
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
128 parent folder that contains the root folder.
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
129
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
130 E.g. this will create a package folder /my/space/distutils.pkg/:
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
131
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
132 pm = PackageMaker("distutils", "1.0.2", "Python distutils.")
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
133 pm.build("/my/space/distutils")
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
134 """
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
135
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
136 packageInfoDefaults = {
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
137 'Title': None,
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
138 'Version': None,
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
139 'Description': '',
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
140 'DefaultLocation': '/',
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
141 'Diskname': '(null)',
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
142 'DeleteWarning': '',
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
143 'NeedsAuthorization': 'NO',
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
144 'DisableStop': 'NO',
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
145 'UseUserMask': 'YES',
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
146 'Application': 'NO',
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
147 'Relocatable': 'YES',
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
148 'Required': 'NO',
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
149 'InstallOnly': 'NO',
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
150 'RequiresReboot': 'NO',
27582
d1edaaa938fb patch #678211 from Robin Dunn
Just van Rossum <just@letterror.com>
parents: 25150
diff changeset
151 'RootVolumeOnly' : 'NO',
25144
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
152 'InstallFat': 'NO'}
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
153
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
154
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
155 def __init__(self, title, version, desc):
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
156 "Init. with mandatory title/version/description arguments."
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
157
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
158 info = {"Title": title, "Version": version, "Description": desc}
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
159 self.packageInfo = copy.deepcopy(self.packageInfoDefaults)
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
160 self.packageInfo.update(info)
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
161
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
162 # variables set later
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
163 self.packageRootFolder = None
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
164 self.packageResourceFolder = None
25150
ac741587e66b The script was very sloppy about which variables held source pathnames
Jack Jansen <jack.jansen@cwi.nl>
parents: 25144
diff changeset
165 self.sourceFolder = None
25144
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
166 self.resourceFolder = None
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
167
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
168
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
169 def build(self, root, resources=None, **options):
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
170 """Create a package for some given root folder.
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
171
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
172 With no 'resources' argument set it is assumed to be the same
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
173 as the root directory. Option items replace the default ones
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
174 in the package info.
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
175 """
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
176
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
177 # set folder attributes
25150
ac741587e66b The script was very sloppy about which variables held source pathnames
Jack Jansen <jack.jansen@cwi.nl>
parents: 25144
diff changeset
178 self.sourceFolder = root
25144
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
179 if resources == None:
25150
ac741587e66b The script was very sloppy about which variables held source pathnames
Jack Jansen <jack.jansen@cwi.nl>
parents: 25144
diff changeset
180 self.resourceFolder = root
ac741587e66b The script was very sloppy about which variables held source pathnames
Jack Jansen <jack.jansen@cwi.nl>
parents: 25144
diff changeset
181 else:
ac741587e66b The script was very sloppy about which variables held source pathnames
Jack Jansen <jack.jansen@cwi.nl>
parents: 25144
diff changeset
182 self.resourceFolder = resources
25144
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
183
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
184 # replace default option settings with user ones if provided
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
185 fields = self. packageInfoDefaults.keys()
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
186 for k, v in options.items():
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
187 if k in fields:
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
188 self.packageInfo[k] = v
25150
ac741587e66b The script was very sloppy about which variables held source pathnames
Jack Jansen <jack.jansen@cwi.nl>
parents: 25144
diff changeset
189 elif not k in ["OutputDir"]:
ac741587e66b The script was very sloppy about which variables held source pathnames
Jack Jansen <jack.jansen@cwi.nl>
parents: 25144
diff changeset
190 raise Error, "Unknown package option: %s" % k
ac741587e66b The script was very sloppy about which variables held source pathnames
Jack Jansen <jack.jansen@cwi.nl>
parents: 25144
diff changeset
191
ac741587e66b The script was very sloppy about which variables held source pathnames
Jack Jansen <jack.jansen@cwi.nl>
parents: 25144
diff changeset
192 # Check where we should leave the output. Default is current directory
ac741587e66b The script was very sloppy about which variables held source pathnames
Jack Jansen <jack.jansen@cwi.nl>
parents: 25144
diff changeset
193 outputdir = options.get("OutputDir", os.getcwd())
ac741587e66b The script was very sloppy about which variables held source pathnames
Jack Jansen <jack.jansen@cwi.nl>
parents: 25144
diff changeset
194 packageName = self.packageInfo["Title"]
ac741587e66b The script was very sloppy about which variables held source pathnames
Jack Jansen <jack.jansen@cwi.nl>
parents: 25144
diff changeset
195 self.PackageRootFolder = os.path.join(outputdir, packageName + ".pkg")
ac741587e66b The script was very sloppy about which variables held source pathnames
Jack Jansen <jack.jansen@cwi.nl>
parents: 25144
diff changeset
196
25144
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
197 # do what needs to be done
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
198 self._makeFolders()
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
199 self._addInfo()
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
200 self._addBom()
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
201 self._addArchive()
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
202 self._addResources()
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
203 self._addSizes()
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
204
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
205
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
206 def _makeFolders(self):
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
207 "Create package folder structure."
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
208
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
209 # Not sure if the package name should contain the version or not...
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
210 # packageName = "%s-%s" % (self.packageInfo["Title"],
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
211 # self.packageInfo["Version"]) # ??
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
212
25150
ac741587e66b The script was very sloppy about which variables held source pathnames
Jack Jansen <jack.jansen@cwi.nl>
parents: 25144
diff changeset
213 contFolder = join(self.PackageRootFolder, "Contents")
ac741587e66b The script was very sloppy about which variables held source pathnames
Jack Jansen <jack.jansen@cwi.nl>
parents: 25144
diff changeset
214 self.packageResourceFolder = join(contFolder, "Resources")
ac741587e66b The script was very sloppy about which variables held source pathnames
Jack Jansen <jack.jansen@cwi.nl>
parents: 25144
diff changeset
215 os.mkdir(self.PackageRootFolder)
25144
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
216 os.mkdir(contFolder)
25150
ac741587e66b The script was very sloppy about which variables held source pathnames
Jack Jansen <jack.jansen@cwi.nl>
parents: 25144
diff changeset
217 os.mkdir(self.packageResourceFolder)
25144
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
218
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
219 def _addInfo(self):
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
220 "Write .info file containing installing options."
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
221
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
222 # Not sure if options in PKG_INFO_FIELDS are complete...
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
223
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
224 info = ""
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
225 for f in string.split(PKG_INFO_FIELDS, "\n"):
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
226 info = info + "%s %%(%s)s\n" % (f, f)
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
227 info = info % self.packageInfo
25150
ac741587e66b The script was very sloppy about which variables held source pathnames
Jack Jansen <jack.jansen@cwi.nl>
parents: 25144
diff changeset
228 base = self.packageInfo["Title"] + ".info"
ac741587e66b The script was very sloppy about which variables held source pathnames
Jack Jansen <jack.jansen@cwi.nl>
parents: 25144
diff changeset
229 path = join(self.packageResourceFolder, base)
25144
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
230 f = open(path, "w")
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
231 f.write(info)
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
232
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
233
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
234 def _addBom(self):
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
235 "Write .bom file containing 'Bill of Materials'."
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
236
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
237 # Currently ignores if the 'mkbom' tool is not available.
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
238
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
239 try:
25150
ac741587e66b The script was very sloppy about which variables held source pathnames
Jack Jansen <jack.jansen@cwi.nl>
parents: 25144
diff changeset
240 base = self.packageInfo["Title"] + ".bom"
ac741587e66b The script was very sloppy about which variables held source pathnames
Jack Jansen <jack.jansen@cwi.nl>
parents: 25144
diff changeset
241 bomPath = join(self.packageResourceFolder, base)
ac741587e66b The script was very sloppy about which variables held source pathnames
Jack Jansen <jack.jansen@cwi.nl>
parents: 25144
diff changeset
242 cmd = "mkbom %s %s" % (self.sourceFolder, bomPath)
25144
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
243 res = os.system(cmd)
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
244 except:
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
245 pass
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
246
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
247
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
248 def _addArchive(self):
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
249 "Write .pax.gz file, a compressed archive using pax/gzip."
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
250
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
251 # Currently ignores if the 'pax' tool is not available.
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
252
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
253 cwd = os.getcwd()
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
254
25150
ac741587e66b The script was very sloppy about which variables held source pathnames
Jack Jansen <jack.jansen@cwi.nl>
parents: 25144
diff changeset
255 # create archive
ac741587e66b The script was very sloppy about which variables held source pathnames
Jack Jansen <jack.jansen@cwi.nl>
parents: 25144
diff changeset
256 os.chdir(self.sourceFolder)
ac741587e66b The script was very sloppy about which variables held source pathnames
Jack Jansen <jack.jansen@cwi.nl>
parents: 25144
diff changeset
257 base = basename(self.packageInfo["Title"]) + ".pax"
ac741587e66b The script was very sloppy about which variables held source pathnames
Jack Jansen <jack.jansen@cwi.nl>
parents: 25144
diff changeset
258 self.archPath = join(self.packageResourceFolder, base)
ac741587e66b The script was very sloppy about which variables held source pathnames
Jack Jansen <jack.jansen@cwi.nl>
parents: 25144
diff changeset
259 cmd = "pax -w -f %s %s" % (self.archPath, ".")
ac741587e66b The script was very sloppy about which variables held source pathnames
Jack Jansen <jack.jansen@cwi.nl>
parents: 25144
diff changeset
260 res = os.system(cmd)
ac741587e66b The script was very sloppy about which variables held source pathnames
Jack Jansen <jack.jansen@cwi.nl>
parents: 25144
diff changeset
261
ac741587e66b The script was very sloppy about which variables held source pathnames
Jack Jansen <jack.jansen@cwi.nl>
parents: 25144
diff changeset
262 # compress archive
ac741587e66b The script was very sloppy about which variables held source pathnames
Jack Jansen <jack.jansen@cwi.nl>
parents: 25144
diff changeset
263 cmd = "gzip %s" % self.archPath
ac741587e66b The script was very sloppy about which variables held source pathnames
Jack Jansen <jack.jansen@cwi.nl>
parents: 25144
diff changeset
264 res = os.system(cmd)
25144
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
265 os.chdir(cwd)
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
266
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
267
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
268 def _addResources(self):
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
269 "Add Welcome/ReadMe/License files, .lproj folders and scripts."
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
270
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
271 # Currently we just copy everything that matches the allowed
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
272 # filenames. So, it's left to Installer.app to deal with the
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
273 # same file available in multiple formats...
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
274
25150
ac741587e66b The script was very sloppy about which variables held source pathnames
Jack Jansen <jack.jansen@cwi.nl>
parents: 25144
diff changeset
275 if not self.resourceFolder:
25144
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
276 return
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
277
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
278 # find candidate resource files (txt html rtf rtfd/ or lproj/)
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
279 allFiles = []
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
280 for pat in string.split("*.txt *.html *.rtf *.rtfd *.lproj", " "):
25150
ac741587e66b The script was very sloppy about which variables held source pathnames
Jack Jansen <jack.jansen@cwi.nl>
parents: 25144
diff changeset
281 pattern = join(self.resourceFolder, pat)
25144
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
282 allFiles = allFiles + glob.glob(pattern)
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
283
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
284 # find pre-process and post-process scripts
27582
d1edaaa938fb patch #678211 from Robin Dunn
Just van Rossum <just@letterror.com>
parents: 25150
diff changeset
285 # naming convention: packageName.{pre,post}_{upgrade,install}
d1edaaa938fb patch #678211 from Robin Dunn
Just van Rossum <just@letterror.com>
parents: 25150
diff changeset
286 # Alternatively the filenames can be {pre,post}_{upgrade,install}
25150
ac741587e66b The script was very sloppy about which variables held source pathnames
Jack Jansen <jack.jansen@cwi.nl>
parents: 25144
diff changeset
287 # in which case we prepend the package name
25144
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
288 packageName = self.packageInfo["Title"]
27582
d1edaaa938fb patch #678211 from Robin Dunn
Just van Rossum <just@letterror.com>
parents: 25150
diff changeset
289 for pat in ("*upgrade", "*install", "*flight"):
25150
ac741587e66b The script was very sloppy about which variables held source pathnames
Jack Jansen <jack.jansen@cwi.nl>
parents: 25144
diff changeset
290 pattern = join(self.resourceFolder, packageName + pat)
27582
d1edaaa938fb patch #678211 from Robin Dunn
Just van Rossum <just@letterror.com>
parents: 25150
diff changeset
291 pattern2 = join(self.resourceFolder, pat)
25144
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
292 allFiles = allFiles + glob.glob(pattern)
27582
d1edaaa938fb patch #678211 from Robin Dunn
Just van Rossum <just@letterror.com>
parents: 25150
diff changeset
293 allFiles = allFiles + glob.glob(pattern2)
25144
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
294
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
295 # check name patterns
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
296 files = []
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
297 for f in allFiles:
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
298 for s in ("Welcome", "License", "ReadMe"):
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
299 if string.find(basename(f), s) == 0:
25150
ac741587e66b The script was very sloppy about which variables held source pathnames
Jack Jansen <jack.jansen@cwi.nl>
parents: 25144
diff changeset
300 files.append((f, f))
25144
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
301 if f[-6:] == ".lproj":
25150
ac741587e66b The script was very sloppy about which variables held source pathnames
Jack Jansen <jack.jansen@cwi.nl>
parents: 25144
diff changeset
302 files.append((f, f))
27582
d1edaaa938fb patch #678211 from Robin Dunn
Just van Rossum <just@letterror.com>
parents: 25150
diff changeset
303 elif basename(f) in ["pre_upgrade", "pre_install", "post_upgrade", "post_install"]:
d1edaaa938fb patch #678211 from Robin Dunn
Just van Rossum <just@letterror.com>
parents: 25150
diff changeset
304 files.append((f, packageName+"."+basename(f)))
d1edaaa938fb patch #678211 from Robin Dunn
Just van Rossum <just@letterror.com>
parents: 25150
diff changeset
305 elif basename(f) in ["preflight", "postflight"]:
d1edaaa938fb patch #678211 from Robin Dunn
Just van Rossum <just@letterror.com>
parents: 25150
diff changeset
306 files.append((f, f))
d1edaaa938fb patch #678211 from Robin Dunn
Just van Rossum <just@letterror.com>
parents: 25150
diff changeset
307 elif f[-8:] == "_upgrade":
25150
ac741587e66b The script was very sloppy about which variables held source pathnames
Jack Jansen <jack.jansen@cwi.nl>
parents: 25144
diff changeset
308 files.append((f,f))
27582
d1edaaa938fb patch #678211 from Robin Dunn
Just van Rossum <just@letterror.com>
parents: 25150
diff changeset
309 elif f[-8:] == "_install":
25150
ac741587e66b The script was very sloppy about which variables held source pathnames
Jack Jansen <jack.jansen@cwi.nl>
parents: 25144
diff changeset
310 files.append((f,f))
25144
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
311
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
312 # copy files
25150
ac741587e66b The script was very sloppy about which variables held source pathnames
Jack Jansen <jack.jansen@cwi.nl>
parents: 25144
diff changeset
313 for src, dst in files:
27582
d1edaaa938fb patch #678211 from Robin Dunn
Just van Rossum <just@letterror.com>
parents: 25150
diff changeset
314 src = basename(src)
d1edaaa938fb patch #678211 from Robin Dunn
Just van Rossum <just@letterror.com>
parents: 25150
diff changeset
315 dst = basename(dst)
25150
ac741587e66b The script was very sloppy about which variables held source pathnames
Jack Jansen <jack.jansen@cwi.nl>
parents: 25144
diff changeset
316 f = join(self.resourceFolder, src)
25144
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
317 if isfile(f):
25150
ac741587e66b The script was very sloppy about which variables held source pathnames
Jack Jansen <jack.jansen@cwi.nl>
parents: 25144
diff changeset
318 shutil.copy(f, os.path.join(self.packageResourceFolder, dst))
25144
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
319 elif isdir(f):
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
320 # special case for .rtfd and .lproj folders...
25150
ac741587e66b The script was very sloppy about which variables held source pathnames
Jack Jansen <jack.jansen@cwi.nl>
parents: 25144
diff changeset
321 d = join(self.packageResourceFolder, dst)
25144
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
322 os.mkdir(d)
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
323 files = GlobDirectoryWalker(f)
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
324 for file in files:
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
325 shutil.copy(file, d)
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
326
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
327
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
328 def _addSizes(self):
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
329 "Write .sizes file with info about number and size of files."
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
330
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
331 # Not sure if this is correct, but 'installedSize' and
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
332 # 'zippedSize' are now in Bytes. Maybe blocks are needed?
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
333 # Well, Installer.app doesn't seem to care anyway, saying
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
334 # the installation needs 100+ MB...
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
335
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
336 numFiles = 0
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
337 installedSize = 0
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
338 zippedSize = 0
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
339
25150
ac741587e66b The script was very sloppy about which variables held source pathnames
Jack Jansen <jack.jansen@cwi.nl>
parents: 25144
diff changeset
340 files = GlobDirectoryWalker(self.sourceFolder)
25144
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
341 for f in files:
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
342 numFiles = numFiles + 1
25150
ac741587e66b The script was very sloppy about which variables held source pathnames
Jack Jansen <jack.jansen@cwi.nl>
parents: 25144
diff changeset
343 installedSize = installedSize + os.lstat(f)[6]
25144
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
344
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
345 try:
25150
ac741587e66b The script was very sloppy about which variables held source pathnames
Jack Jansen <jack.jansen@cwi.nl>
parents: 25144
diff changeset
346 zippedSize = os.stat(self.archPath+ ".gz")[6]
25144
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
347 except OSError: # ignore error
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
348 pass
25150
ac741587e66b The script was very sloppy about which variables held source pathnames
Jack Jansen <jack.jansen@cwi.nl>
parents: 25144
diff changeset
349 base = self.packageInfo["Title"] + ".sizes"
ac741587e66b The script was very sloppy about which variables held source pathnames
Jack Jansen <jack.jansen@cwi.nl>
parents: 25144
diff changeset
350 f = open(join(self.packageResourceFolder, base), "w")
ac741587e66b The script was very sloppy about which variables held source pathnames
Jack Jansen <jack.jansen@cwi.nl>
parents: 25144
diff changeset
351 format = "NumFiles %d\nInstalledSize %d\nCompressedSize %d\n"
25144
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
352 f.write(format % (numFiles, installedSize, zippedSize))
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
353
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
354
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
355 # Shortcut function interface
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
356
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
357 def buildPackage(*args, **options):
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
358 "A Shortcut function for building a package."
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
359
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
360 o = options
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
361 title, version, desc = o["Title"], o["Version"], o["Description"]
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
362 pm = PackageMaker(title, version, desc)
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
363 apply(pm.build, list(args), options)
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
364
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
365
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
366 ######################################################################
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
367 # Tests
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
368 ######################################################################
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
369
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
370 def test0():
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
371 "Vanilla test for the distutils distribution."
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
372
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
373 pm = PackageMaker("distutils2", "1.0.2", "Python distutils package.")
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
374 pm.build("/Users/dinu/Desktop/distutils2")
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
375
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
376
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
377 def test1():
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
378 "Test for the reportlab distribution with modified options."
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
379
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
380 pm = PackageMaker("reportlab", "1.10",
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
381 "ReportLab's Open Source PDF toolkit.")
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
382 pm.build(root="/Users/dinu/Desktop/reportlab",
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
383 DefaultLocation="/Applications/ReportLab",
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
384 Relocatable="YES")
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
385
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
386 def test2():
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
387 "Shortcut test for the reportlab distribution with modified options."
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
388
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
389 buildPackage(
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
390 "/Users/dinu/Desktop/reportlab",
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
391 Title="reportlab",
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
392 Version="1.10",
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
393 Description="ReportLab's Open Source PDF toolkit.",
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
394 DefaultLocation="/Applications/ReportLab",
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
395 Relocatable="YES")
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
396
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
397
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
398 ######################################################################
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
399 # Command-line interface
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
400 ######################################################################
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
401
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
402 def printUsage():
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
403 "Print usage message."
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
404
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
405 format = "Usage: %s <opts1> [<opts2>] <root> [<resources>]"
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
406 print format % basename(sys.argv[0])
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
407 print
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
408 print " with arguments:"
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
409 print " (mandatory) root: the package root folder"
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
410 print " (optional) resources: the package resources folder"
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
411 print
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
412 print " and options:"
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
413 print " (mandatory) opts1:"
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
414 mandatoryKeys = string.split("Title Version Description", " ")
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
415 for k in mandatoryKeys:
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
416 print " --%s" % k
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
417 print " (optional) opts2: (with default values)"
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
418
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
419 pmDefaults = PackageMaker.packageInfoDefaults
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
420 optionalKeys = pmDefaults.keys()
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
421 for k in mandatoryKeys:
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
422 optionalKeys.remove(k)
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
423 optionalKeys.sort()
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
424 maxKeyLen = max(map(len, optionalKeys))
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
425 for k in optionalKeys:
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
426 format = " --%%s:%s %%s"
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
427 format = format % (" " * (maxKeyLen-len(k)))
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
428 print format % (k, repr(pmDefaults[k]))
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
429
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
430
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
431 def main():
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
432 "Command-line interface."
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
433
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
434 shortOpts = ""
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
435 keys = PackageMaker.packageInfoDefaults.keys()
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
436 longOpts = map(lambda k: k+"=", keys)
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
437
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
438 try:
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
439 opts, args = getopt.getopt(sys.argv[1:], shortOpts, longOpts)
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
440 except getopt.GetoptError, details:
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
441 print details
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
442 printUsage()
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
443 return
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
444
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
445 optsDict = {}
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
446 for k, v in opts:
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
447 optsDict[k[2:]] = v
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
448
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
449 ok = optsDict.keys()
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
450 if not (1 <= len(args) <= 2):
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
451 print "No argument given!"
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
452 elif not ("Title" in ok and \
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
453 "Version" in ok and \
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
454 "Description" in ok):
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
455 print "Missing mandatory option!"
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
456 else:
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
457 apply(buildPackage, args, optsDict)
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
458 return
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
459
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
460 printUsage()
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
461
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
462 # sample use:
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
463 # buildpkg.py --Title=distutils \
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
464 # --Version=1.0.2 \
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
465 # --Description="Python distutils package." \
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
466 # /Users/dinu/Desktop/distutils
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
467
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
468
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
469 if __name__ == "__main__":
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
470 main()