annotate Mac/scripts/buildpkg.py @ 80661:94de77bd0b4b 2.7

Issue #16194: document imp.load_dynamic problems when read several extension modules from the same binary object file.
author Andrew Svetlov <andrew.svetlov@gmail.com>
date Thu, 29 Nov 2012 19:51:28 +0200
parents 01a7e66525c2
children
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
32736
c3a096bfbd6b Whitespace normalization, via reindent.py.
Tim Peters <tim.peters@gmail.com>
parents: 29970
diff changeset
6 installed with the Mac OS X Installer.app application.
25144
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
7
32736
c3a096bfbd6b Whitespace normalization, via reindent.py.
Tim Peters <tim.peters@gmail.com>
parents: 29970
diff changeset
8 It is much inspired by Apple's GUI tool called PackageMaker.app, that
c3a096bfbd6b Whitespace normalization, via reindent.py.
Tim Peters <tim.peters@gmail.com>
parents: 29970
diff changeset
9 seems to be part of the OS X developer tools installed in the folder
c3a096bfbd6b Whitespace normalization, via reindent.py.
Tim Peters <tim.peters@gmail.com>
parents: 29970
diff changeset
10 /Developer/Applications. But apparently there are other free tools to
c3a096bfbd6b Whitespace normalization, via reindent.py.
Tim Peters <tim.peters@gmail.com>
parents: 29970
diff changeset
11 do the same thing which are also named PackageMaker like Brian Hill's
c3a096bfbd6b Whitespace normalization, via reindent.py.
Tim Peters <tim.peters@gmail.com>
parents: 29970
diff changeset
12 one:
25144
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
32736
c3a096bfbd6b Whitespace normalization, via reindent.py.
Tim Peters <tim.peters@gmail.com>
parents: 29970
diff changeset
16 Beware of the multi-package features of Installer.app (which are not
c3a096bfbd6b Whitespace normalization, via reindent.py.
Tim Peters <tim.peters@gmail.com>
parents: 29970
diff changeset
17 yet supported here) that can potentially screw-up your installation
25144
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
32736
c3a096bfbd6b Whitespace normalization, via reindent.py.
Tim Peters <tim.peters@gmail.com>
parents: 29970
diff changeset
23 Beside using the PackageMaker class directly, by importing it inside
25144
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:
32736
c3a096bfbd6b Whitespace normalization, via reindent.py.
Tim Peters <tim.peters@gmail.com>
parents: 29970
diff changeset
25 the top-level buildPackage() function provides a shortcut to the same
25144
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 ****************************************************************
32736
c3a096bfbd6b Whitespace normalization, via reindent.py.
Tim Peters <tim.peters@gmail.com>
parents: 29970
diff changeset
30 NOTE: For now you should be able to run this even on a non-OS X
25144
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
32736
c3a096bfbd6b Whitespace normalization, via reindent.py.
Tim Peters <tim.peters@gmail.com>
parents: 29970
diff changeset
32 the real archive (needs pax) and bom files (needs mkbom)
c3a096bfbd6b Whitespace normalization, via reindent.py.
Tim Peters <tim.peters@gmail.com>
parents: 29970
diff changeset
33 inside! This is only for providing a chance for testing to
25144
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
32736
c3a096bfbd6b Whitespace normalization, via reindent.py.
Tim Peters <tim.peters@gmail.com>
parents: 29970
diff changeset
42 Dinu C. Gherman,
25144
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 DeleteWarning
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
64 NeedsAuthorization
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
65 DisableStop
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
66 UseUserMask
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
67 Application
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
68 Relocatable
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
69 Required
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
70 InstallOnly
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
71 RequiresReboot
27582
d1edaaa938fb patch #678211 from Robin Dunn
Just van Rossum <just@letterror.com>
parents: 25150
diff changeset
72 RootVolumeOnly
29970
e339ad250af0 Various tweaks to make the packages work better. Still not 100%, though.
Jack Jansen <jack.jansen@cwi.nl>
parents: 27582
diff changeset
73 LongFilenames
e339ad250af0 Various tweaks to make the packages work better. Still not 100%, though.
Jack Jansen <jack.jansen@cwi.nl>
parents: 27582
diff changeset
74 LibrarySubdirectory
e339ad250af0 Various tweaks to make the packages work better. Still not 100%, though.
Jack Jansen <jack.jansen@cwi.nl>
parents: 27582
diff changeset
75 AllowBackRev
e339ad250af0 Various tweaks to make the packages work better. Still not 100%, though.
Jack Jansen <jack.jansen@cwi.nl>
parents: 27582
diff changeset
76 OverwritePermissions
25144
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
77 InstallFat\
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
78 """
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 # Helpers
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
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
84 # 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
85
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
86 class GlobDirectoryWalker:
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
87 "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
88
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
89 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
90 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
91 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
92 self.files = []
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
93 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
94
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
95
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
96 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
97 while 1:
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
98 try:
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
99 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
100 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
101 except IndexError:
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
102 # 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
103 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
104 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
105 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
106 else:
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
107 # 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
108 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
109 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
110 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
111 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
112 return fullname
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
113
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 # 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
117 ######################################################################
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 class PackageMaker:
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
120 """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
121
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
122 This is intended to create OS X packages (with extension .pkg)
32736
c3a096bfbd6b Whitespace normalization, via reindent.py.
Tim Peters <tim.peters@gmail.com>
parents: 29970
diff changeset
123 containing archives of arbitrary files that the Installer.app
25144
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
124 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
125
32736
c3a096bfbd6b Whitespace normalization, via reindent.py.
Tim Peters <tim.peters@gmail.com>
parents: 29970
diff changeset
126 As of now, PackageMaker instances need to be created with the
c3a096bfbd6b Whitespace normalization, via reindent.py.
Tim Peters <tim.peters@gmail.com>
parents: 29970
diff changeset
127 title, version and description of the package to be built.
c3a096bfbd6b Whitespace normalization, via reindent.py.
Tim Peters <tim.peters@gmail.com>
parents: 29970
diff changeset
128 The package is built after calling the instance method
c3a096bfbd6b Whitespace normalization, via reindent.py.
Tim Peters <tim.peters@gmail.com>
parents: 29970
diff changeset
129 build(root, **options). It has the same name as the constructor's
c3a096bfbd6b Whitespace normalization, via reindent.py.
Tim Peters <tim.peters@gmail.com>
parents: 29970
diff changeset
130 title argument plus a '.pkg' extension and is located in the same
25144
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
131 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
132
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
133 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
134
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
135 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
136 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
137 """
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
138
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
139 packageInfoDefaults = {
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
140 'Title': None,
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
141 'Version': None,
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
142 'Description': '',
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
143 'DefaultLocation': '/',
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
144 'DeleteWarning': '',
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
145 'NeedsAuthorization': 'NO',
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
146 'DisableStop': 'NO',
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
147 'UseUserMask': 'YES',
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
148 'Application': 'NO',
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
149 'Relocatable': 'YES',
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
150 'Required': 'NO',
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
151 'InstallOnly': 'NO',
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
152 'RequiresReboot': 'NO',
27582
d1edaaa938fb patch #678211 from Robin Dunn
Just van Rossum <just@letterror.com>
parents: 25150
diff changeset
153 'RootVolumeOnly' : 'NO',
29970
e339ad250af0 Various tweaks to make the packages work better. Still not 100%, though.
Jack Jansen <jack.jansen@cwi.nl>
parents: 27582
diff changeset
154 'InstallFat': 'NO',
e339ad250af0 Various tweaks to make the packages work better. Still not 100%, though.
Jack Jansen <jack.jansen@cwi.nl>
parents: 27582
diff changeset
155 'LongFilenames': 'YES',
e339ad250af0 Various tweaks to make the packages work better. Still not 100%, though.
Jack Jansen <jack.jansen@cwi.nl>
parents: 27582
diff changeset
156 'LibrarySubdirectory': 'Standard',
e339ad250af0 Various tweaks to make the packages work better. Still not 100%, though.
Jack Jansen <jack.jansen@cwi.nl>
parents: 27582
diff changeset
157 'AllowBackRev': 'YES',
e339ad250af0 Various tweaks to make the packages work better. Still not 100%, though.
Jack Jansen <jack.jansen@cwi.nl>
parents: 27582
diff changeset
158 'OverwritePermissions': 'NO',
e339ad250af0 Various tweaks to make the packages work better. Still not 100%, though.
Jack Jansen <jack.jansen@cwi.nl>
parents: 27582
diff changeset
159 }
25144
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
160
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 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
163 "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
164
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
165 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
166 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
167 self.packageInfo.update(info)
32736
c3a096bfbd6b Whitespace normalization, via reindent.py.
Tim Peters <tim.peters@gmail.com>
parents: 29970
diff changeset
168
25144
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
169 # 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
170 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
171 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
172 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
173 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
174
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 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
177 """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
178
32736
c3a096bfbd6b Whitespace normalization, via reindent.py.
Tim Peters <tim.peters@gmail.com>
parents: 29970
diff changeset
179 With no 'resources' argument set it is assumed to be the same
c3a096bfbd6b Whitespace normalization, via reindent.py.
Tim Peters <tim.peters@gmail.com>
parents: 29970
diff changeset
180 as the root directory. Option items replace the default ones
25144
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
181 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
182 """
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 # 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
185 self.sourceFolder = root
46197
01a7e66525c2 #2503 make singletons compared with "is" not == or !=
Benjamin Peterson <benjamin@python.org>
parents: 32736
diff changeset
186 if resources is None:
25150
ac741587e66b The script was very sloppy about which variables held source pathnames
Jack Jansen <jack.jansen@cwi.nl>
parents: 25144
diff changeset
187 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
188 else:
ac741587e66b The script was very sloppy about which variables held source pathnames
Jack Jansen <jack.jansen@cwi.nl>
parents: 25144
diff changeset
189 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
190
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
191 # 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
192 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
193 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
194 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
195 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
196 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
197 raise Error, "Unknown package option: %s" % k
32736
c3a096bfbd6b Whitespace normalization, via reindent.py.
Tim Peters <tim.peters@gmail.com>
parents: 29970
diff changeset
198
25150
ac741587e66b The script was very sloppy about which variables held source pathnames
Jack Jansen <jack.jansen@cwi.nl>
parents: 25144
diff changeset
199 # 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
200 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
201 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
202 self.PackageRootFolder = os.path.join(outputdir, packageName + ".pkg")
32736
c3a096bfbd6b Whitespace normalization, via reindent.py.
Tim Peters <tim.peters@gmail.com>
parents: 29970
diff changeset
203
25144
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
204 # 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
205 self._makeFolders()
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
206 self._addInfo()
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
207 self._addBom()
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
208 self._addArchive()
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
209 self._addResources()
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
210 self._addSizes()
29970
e339ad250af0 Various tweaks to make the packages work better. Still not 100%, though.
Jack Jansen <jack.jansen@cwi.nl>
parents: 27582
diff changeset
211 self._addLoc()
25144
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
212
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
213
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
214 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
215 "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
216
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
217 # Not sure if the package name should contain the version or not...
32736
c3a096bfbd6b Whitespace normalization, via reindent.py.
Tim Peters <tim.peters@gmail.com>
parents: 29970
diff changeset
218 # packageName = "%s-%s" % (self.packageInfo["Title"],
25144
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
219 # 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
220
25150
ac741587e66b The script was very sloppy about which variables held source pathnames
Jack Jansen <jack.jansen@cwi.nl>
parents: 25144
diff changeset
221 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
222 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
223 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
224 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
225 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
226
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
227 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
228 "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
229
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
230 # 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
231
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
232 info = ""
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
233 for f in string.split(PKG_INFO_FIELDS, "\n"):
29970
e339ad250af0 Various tweaks to make the packages work better. Still not 100%, though.
Jack Jansen <jack.jansen@cwi.nl>
parents: 27582
diff changeset
234 if self.packageInfo.has_key(f):
e339ad250af0 Various tweaks to make the packages work better. Still not 100%, though.
Jack Jansen <jack.jansen@cwi.nl>
parents: 27582
diff changeset
235 info = info + "%s %%(%s)s\n" % (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
236 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
237 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
238 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
239 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
240 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
241
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
242
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
243 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
244 "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
245
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
246 # 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
247
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
248 try:
25150
ac741587e66b The script was very sloppy about which variables held source pathnames
Jack Jansen <jack.jansen@cwi.nl>
parents: 25144
diff changeset
249 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
250 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
251 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
252 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
253 except:
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
254 pass
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
255
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
256
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
257 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
258 "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
259
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
260 # 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
261
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
262 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
263
25150
ac741587e66b The script was very sloppy about which variables held source pathnames
Jack Jansen <jack.jansen@cwi.nl>
parents: 25144
diff changeset
264 # create archive
ac741587e66b The script was very sloppy about which variables held source pathnames
Jack Jansen <jack.jansen@cwi.nl>
parents: 25144
diff changeset
265 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
266 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
267 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
268 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
269 res = os.system(cmd)
32736
c3a096bfbd6b Whitespace normalization, via reindent.py.
Tim Peters <tim.peters@gmail.com>
parents: 29970
diff changeset
270
25150
ac741587e66b The script was very sloppy about which variables held source pathnames
Jack Jansen <jack.jansen@cwi.nl>
parents: 25144
diff changeset
271 # compress archive
ac741587e66b The script was very sloppy about which variables held source pathnames
Jack Jansen <jack.jansen@cwi.nl>
parents: 25144
diff changeset
272 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
273 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
274 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
275
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
276
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
277 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
278 "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
279
32736
c3a096bfbd6b Whitespace normalization, via reindent.py.
Tim Peters <tim.peters@gmail.com>
parents: 29970
diff changeset
280 # Currently we just copy everything that matches the allowed
c3a096bfbd6b Whitespace normalization, via reindent.py.
Tim Peters <tim.peters@gmail.com>
parents: 29970
diff changeset
281 # filenames. So, it's left to Installer.app to deal with the
25144
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
282 # 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
283
25150
ac741587e66b The script was very sloppy about which variables held source pathnames
Jack Jansen <jack.jansen@cwi.nl>
parents: 25144
diff changeset
284 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
285 return
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
286
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
287 # 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
288 allFiles = []
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
289 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
290 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
291 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
292
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
293 # find pre-process and post-process scripts
27582
d1edaaa938fb patch #678211 from Robin Dunn
Just van Rossum <just@letterror.com>
parents: 25150
diff changeset
294 # naming convention: packageName.{pre,post}_{upgrade,install}
d1edaaa938fb patch #678211 from Robin Dunn
Just van Rossum <just@letterror.com>
parents: 25150
diff changeset
295 # 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
296 # 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
297 packageName = self.packageInfo["Title"]
27582
d1edaaa938fb patch #678211 from Robin Dunn
Just van Rossum <just@letterror.com>
parents: 25150
diff changeset
298 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
299 pattern = join(self.resourceFolder, packageName + pat)
27582
d1edaaa938fb patch #678211 from Robin Dunn
Just van Rossum <just@letterror.com>
parents: 25150
diff changeset
300 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
301 allFiles = allFiles + glob.glob(pattern)
27582
d1edaaa938fb patch #678211 from Robin Dunn
Just van Rossum <just@letterror.com>
parents: 25150
diff changeset
302 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
303
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
304 # 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
305 files = []
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
306 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
307 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
308 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
309 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
310 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
311 files.append((f, f))
27582
d1edaaa938fb patch #678211 from Robin Dunn
Just van Rossum <just@letterror.com>
parents: 25150
diff changeset
312 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
313 files.append((f, packageName+"."+basename(f)))
d1edaaa938fb patch #678211 from Robin Dunn
Just van Rossum <just@letterror.com>
parents: 25150
diff changeset
314 elif basename(f) in ["preflight", "postflight"]:
d1edaaa938fb patch #678211 from Robin Dunn
Just van Rossum <just@letterror.com>
parents: 25150
diff changeset
315 files.append((f, f))
d1edaaa938fb patch #678211 from Robin Dunn
Just van Rossum <just@letterror.com>
parents: 25150
diff changeset
316 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
317 files.append((f,f))
27582
d1edaaa938fb patch #678211 from Robin Dunn
Just van Rossum <just@letterror.com>
parents: 25150
diff changeset
318 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
319 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
320
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
321 # 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
322 for src, dst in files:
27582
d1edaaa938fb patch #678211 from Robin Dunn
Just van Rossum <just@letterror.com>
parents: 25150
diff changeset
323 src = basename(src)
d1edaaa938fb patch #678211 from Robin Dunn
Just van Rossum <just@letterror.com>
parents: 25150
diff changeset
324 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
325 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
326 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
327 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
328 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
329 # 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
330 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
331 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
332 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
333 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
334 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
335
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
336
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
337 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
338 "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
339
32736
c3a096bfbd6b Whitespace normalization, via reindent.py.
Tim Peters <tim.peters@gmail.com>
parents: 29970
diff changeset
340 # Not sure if this is correct, but 'installedSize' and
c3a096bfbd6b Whitespace normalization, via reindent.py.
Tim Peters <tim.peters@gmail.com>
parents: 29970
diff changeset
341 # 'zippedSize' are now in Bytes. Maybe blocks are needed?
c3a096bfbd6b Whitespace normalization, via reindent.py.
Tim Peters <tim.peters@gmail.com>
parents: 29970
diff changeset
342 # Well, Installer.app doesn't seem to care anyway, saying
25144
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
343 # 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
344
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
345 numFiles = 0
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
346 installedSize = 0
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
347 zippedSize = 0
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
348
25150
ac741587e66b The script was very sloppy about which variables held source pathnames
Jack Jansen <jack.jansen@cwi.nl>
parents: 25144
diff changeset
349 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
350 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
351 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
352 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
353
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
354 try:
25150
ac741587e66b The script was very sloppy about which variables held source pathnames
Jack Jansen <jack.jansen@cwi.nl>
parents: 25144
diff changeset
355 zippedSize = os.stat(self.archPath+ ".gz")[6]
32736
c3a096bfbd6b Whitespace normalization, via reindent.py.
Tim Peters <tim.peters@gmail.com>
parents: 29970
diff changeset
356 except OSError: # ignore error
25144
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
357 pass
25150
ac741587e66b The script was very sloppy about which variables held source pathnames
Jack Jansen <jack.jansen@cwi.nl>
parents: 25144
diff changeset
358 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
359 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
360 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
361 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
362
29970
e339ad250af0 Various tweaks to make the packages work better. Still not 100%, though.
Jack Jansen <jack.jansen@cwi.nl>
parents: 27582
diff changeset
363 def _addLoc(self):
e339ad250af0 Various tweaks to make the packages work better. Still not 100%, though.
Jack Jansen <jack.jansen@cwi.nl>
parents: 27582
diff changeset
364 "Write .loc file."
e339ad250af0 Various tweaks to make the packages work better. Still not 100%, though.
Jack Jansen <jack.jansen@cwi.nl>
parents: 27582
diff changeset
365 base = self.packageInfo["Title"] + ".loc"
e339ad250af0 Various tweaks to make the packages work better. Still not 100%, though.
Jack Jansen <jack.jansen@cwi.nl>
parents: 27582
diff changeset
366 f = open(join(self.packageResourceFolder, base), "w")
e339ad250af0 Various tweaks to make the packages work better. Still not 100%, though.
Jack Jansen <jack.jansen@cwi.nl>
parents: 27582
diff changeset
367 f.write('/')
25144
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 # 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
370
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
371 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
372 "A Shortcut function for building a package."
32736
c3a096bfbd6b Whitespace normalization, via reindent.py.
Tim Peters <tim.peters@gmail.com>
parents: 29970
diff changeset
373
25144
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
374 o = options
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
375 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
376 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
377 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
378
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 ######################################################################
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
381 # Tests
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
382 ######################################################################
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
383
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
384 def test0():
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
385 "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
386
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
387 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
388 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
389
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
390
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
391 def test1():
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
392 "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
393
32736
c3a096bfbd6b Whitespace normalization, via reindent.py.
Tim Peters <tim.peters@gmail.com>
parents: 29970
diff changeset
394 pm = PackageMaker("reportlab", "1.10",
25144
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
395 "ReportLab's Open Source PDF toolkit.")
32736
c3a096bfbd6b Whitespace normalization, via reindent.py.
Tim Peters <tim.peters@gmail.com>
parents: 29970
diff changeset
396 pm.build(root="/Users/dinu/Desktop/reportlab",
25144
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
397 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
398 Relocatable="YES")
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
399
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
400 def test2():
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
401 "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
402
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
403 buildPackage(
32736
c3a096bfbd6b Whitespace normalization, via reindent.py.
Tim Peters <tim.peters@gmail.com>
parents: 29970
diff changeset
404 "/Users/dinu/Desktop/reportlab",
c3a096bfbd6b Whitespace normalization, via reindent.py.
Tim Peters <tim.peters@gmail.com>
parents: 29970
diff changeset
405 Title="reportlab",
c3a096bfbd6b Whitespace normalization, via reindent.py.
Tim Peters <tim.peters@gmail.com>
parents: 29970
diff changeset
406 Version="1.10",
25144
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
407 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
408 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
409 Relocatable="YES")
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
410
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
411
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
412 ######################################################################
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
413 # 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
414 ######################################################################
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
415
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
416 def printUsage():
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
417 "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
418
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
419 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
420 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
421 print
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
422 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
423 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
424 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
425 print
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
426 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
427 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
428 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
429 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
430 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
431 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
432
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
433 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
434 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
435 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
436 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
437 optionalKeys.sort()
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
438 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
439 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
440 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
441 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
442 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
443
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 def main():
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
446 "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
447
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
448 shortOpts = ""
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
449 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
450 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
451
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
452 try:
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
453 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
454 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
455 print details
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
456 printUsage()
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
457 return
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
458
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
459 optsDict = {}
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
460 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
461 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
462
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
463 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
464 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
465 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
466 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
467 "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
468 "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
469 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
470 else:
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
471 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
472 return
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
473
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
474 printUsage()
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
475
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
476 # sample use:
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
477 # 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
478 # --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
479 # --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
480 # /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
481
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
482
adabdb99ecc4 Script to generate .pkg packages, donated by Dinu Gherman. This is his
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
483 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
484 main()