Mercurial > cpython-lru_cache-weakref
annotate Mac/Tools/bundlebuilder.py @ 87690:66c1c9f32567 default tip
Add use_weakref option to functools.lru_cache
The use_weakref option makes lru_cache create weak references to the function
arguments when creating the cache key, which prevents them from staying in the
memory forever even after all other references to them are gone.
This is a proof of concept for http://bugs.python.org/issue19859
| author | Radomir Dopieralski <devel@sheep.art.pl> |
|---|---|
| date | Tue, 03 Dec 2013 16:02:48 +0100 |
| parents | ffc6e6b00949 |
| children |
| rev | line source |
|---|---|
|
50381
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
1 #! /usr/bin/env python |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
2 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
3 """\ |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
4 bundlebuilder.py -- Tools to assemble MacOS X (application) bundles. |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
5 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
6 This module contains two classes to build so called "bundles" for |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
7 MacOS X. BundleBuilder is a general tool, AppBuilder is a subclass |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
8 specialized in building application bundles. |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
9 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
10 [Bundle|App]Builder objects are instantiated with a bunch of keyword |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
11 arguments, and have a build() method that will do all the work. See |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
12 the class doc strings for a description of the constructor arguments. |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
13 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
14 The module contains a main program that can be used in two ways: |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
15 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
16 % python bundlebuilder.py [options] build |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
17 % python buildapp.py [options] build |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
18 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
19 Where "buildapp.py" is a user-supplied setup.py-like script following |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
20 this model: |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
21 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
22 from bundlebuilder import buildapp |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
23 buildapp(<lots-of-keyword-args>) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
24 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
25 """ |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
26 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
27 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
28 __all__ = ["BundleBuilder", "BundleBuilderError", "AppBuilder", "buildapp"] |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
29 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
30 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
31 import sys |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
32 import os, errno, shutil |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
33 import imp, marshal |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
34 import re |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
35 from copy import deepcopy |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
36 import getopt |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
37 from plistlib import Plist |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
38 from types import FunctionType as function |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
39 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
40 class BundleBuilderError(Exception): pass |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
41 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
42 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
43 class Defaults: |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
44 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
45 """Class attributes that don't start with an underscore and are |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
46 not functions or classmethods are (deep)copied to self.__dict__. |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
47 This allows for mutable default values. |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
48 """ |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
49 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
50 def __init__(self, **kwargs): |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
51 defaults = self._getDefaults() |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
52 defaults.update(kwargs) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
53 self.__dict__.update(defaults) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
54 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
55 def _getDefaults(cls): |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
56 defaults = {} |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
57 for base in cls.__bases__: |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
58 if hasattr(base, "_getDefaults"): |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
59 defaults.update(base._getDefaults()) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
60 for name, value in list(cls.__dict__.items()): |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
61 if name[0] != "_" and not isinstance(value, |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
62 (function, classmethod)): |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
63 defaults[name] = deepcopy(value) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
64 return defaults |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
65 _getDefaults = classmethod(_getDefaults) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
66 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
67 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
68 class BundleBuilder(Defaults): |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
69 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
70 """BundleBuilder is a barebones class for assembling bundles. It |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
71 knows nothing about executables or icons, it only copies files |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
72 and creates the PkgInfo and Info.plist files. |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
73 """ |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
74 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
75 # (Note that Defaults.__init__ (deep)copies these values to |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
76 # instance variables. Mutable defaults are therefore safe.) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
77 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
78 # Name of the bundle, with or without extension. |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
79 name = None |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
80 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
81 # The property list ("plist") |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
82 plist = Plist(CFBundleDevelopmentRegion = "English", |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
83 CFBundleInfoDictionaryVersion = "6.0") |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
84 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
85 # The type of the bundle. |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
86 type = "BNDL" |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
87 # The creator code of the bundle. |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
88 creator = None |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
89 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
90 # the CFBundleIdentifier (this is used for the preferences file name) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
91 bundle_id = None |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
92 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
93 # List of files that have to be copied to <bundle>/Contents/Resources. |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
94 resources = [] |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
95 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
96 # List of (src, dest) tuples; dest should be a path relative to the bundle |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
97 # (eg. "Contents/Resources/MyStuff/SomeFile.ext). |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
98 files = [] |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
99 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
100 # List of shared libraries (dylibs, Frameworks) to bundle with the app |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
101 # will be placed in Contents/Frameworks |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
102 libs = [] |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
103 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
104 # Directory where the bundle will be assembled. |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
105 builddir = "build" |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
106 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
107 # Make symlinks instead copying files. This is handy during debugging, but |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
108 # makes the bundle non-distributable. |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
109 symlink = 0 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
110 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
111 # Verbosity level. |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
112 verbosity = 1 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
113 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
114 # Destination root directory |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
115 destroot = "" |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
116 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
117 def setup(self): |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
118 # XXX rethink self.name munging, this is brittle. |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
119 self.name, ext = os.path.splitext(self.name) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
120 if not ext: |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
121 ext = ".bundle" |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
122 bundleextension = ext |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
123 # misc (derived) attributes |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
124 self.bundlepath = pathjoin(self.builddir, self.name + bundleextension) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
125 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
126 plist = self.plist |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
127 plist.CFBundleName = self.name |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
128 plist.CFBundlePackageType = self.type |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
129 if self.creator is None: |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
130 if hasattr(plist, "CFBundleSignature"): |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
131 self.creator = plist.CFBundleSignature |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
132 else: |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
133 self.creator = "????" |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
134 plist.CFBundleSignature = self.creator |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
135 if self.bundle_id: |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
136 plist.CFBundleIdentifier = self.bundle_id |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
137 elif not hasattr(plist, "CFBundleIdentifier"): |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
138 plist.CFBundleIdentifier = self.name |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
139 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
140 def build(self): |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
141 """Build the bundle.""" |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
142 builddir = self.builddir |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
143 if builddir and not os.path.exists(builddir): |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
144 os.mkdir(builddir) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
145 self.message("Building %s" % repr(self.bundlepath), 1) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
146 if os.path.exists(self.bundlepath): |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
147 shutil.rmtree(self.bundlepath) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
148 if os.path.exists(self.bundlepath + '~'): |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
149 shutil.rmtree(self.bundlepath + '~') |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
150 bp = self.bundlepath |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
151 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
152 # Create the app bundle in a temporary location and then |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
153 # rename the completed bundle. This way the Finder will |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
154 # never see an incomplete bundle (where it might pick up |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
155 # and cache the wrong meta data) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
156 self.bundlepath = bp + '~' |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
157 try: |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
158 os.mkdir(self.bundlepath) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
159 self.preProcess() |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
160 self._copyFiles() |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
161 self._addMetaFiles() |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
162 self.postProcess() |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
163 os.rename(self.bundlepath, bp) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
164 finally: |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
165 self.bundlepath = bp |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
166 self.message("Done.", 1) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
167 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
168 def preProcess(self): |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
169 """Hook for subclasses.""" |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
170 pass |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
171 def postProcess(self): |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
172 """Hook for subclasses.""" |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
173 pass |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
174 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
175 def _addMetaFiles(self): |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
176 contents = pathjoin(self.bundlepath, "Contents") |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
177 makedirs(contents) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
178 # |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
179 # Write Contents/PkgInfo |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
180 assert len(self.type) == len(self.creator) == 4, \ |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
181 "type and creator must be 4-byte strings." |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
182 pkginfo = pathjoin(contents, "PkgInfo") |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
183 f = open(pkginfo, "wb") |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
184 f.write((self.type + self.creator).encode('latin1')) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
185 f.close() |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
186 # |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
187 # Write Contents/Info.plist |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
188 infoplist = pathjoin(contents, "Info.plist") |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
189 self.plist.write(infoplist) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
190 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
191 def _copyFiles(self): |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
192 files = self.files[:] |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
193 for path in self.resources: |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
194 files.append((path, pathjoin("Contents", "Resources", |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
195 os.path.basename(path)))) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
196 for path in self.libs: |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
197 files.append((path, pathjoin("Contents", "Frameworks", |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
198 os.path.basename(path)))) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
199 if self.symlink: |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
200 self.message("Making symbolic links", 1) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
201 msg = "Making symlink from" |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
202 else: |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
203 self.message("Copying files", 1) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
204 msg = "Copying" |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
205 files.sort() |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
206 for src, dst in files: |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
207 if os.path.isdir(src): |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
208 self.message("%s %s/ to %s/" % (msg, src, dst), 2) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
209 else: |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
210 self.message("%s %s to %s" % (msg, src, dst), 2) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
211 dst = pathjoin(self.bundlepath, dst) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
212 if self.symlink: |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
213 symlink(src, dst, mkdirs=1) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
214 else: |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
215 copy(src, dst, mkdirs=1) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
216 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
217 def message(self, msg, level=0): |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
218 if level <= self.verbosity: |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
219 indent = "" |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
220 if level > 1: |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
221 indent = (level - 1) * " " |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
222 sys.stderr.write(indent + msg + "\n") |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
223 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
224 def report(self): |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
225 # XXX something decent |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
226 pass |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
227 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
228 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
229 if __debug__: |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
230 PYC_EXT = ".pyc" |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
231 else: |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
232 PYC_EXT = ".pyo" |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
233 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
234 MAGIC = imp.get_magic() |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
235 USE_ZIPIMPORT = "zipimport" in sys.builtin_module_names |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
236 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
237 # For standalone apps, we have our own minimal site.py. We don't need |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
238 # all the cruft of the real site.py. |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
239 SITE_PY = """\ |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
240 import sys |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
241 if not %(semi_standalone)s: |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
242 del sys.path[1:] # sys.path[0] is Contents/Resources/ |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
243 """ |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
244 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
245 if USE_ZIPIMPORT: |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
246 ZIP_ARCHIVE = "Modules.zip" |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
247 SITE_PY += "sys.path.append(sys.path[0] + '/%s')\n" % ZIP_ARCHIVE |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
248 def getPycData(fullname, code, ispkg): |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
249 if ispkg: |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
250 fullname += ".__init__" |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
251 path = fullname.replace(".", os.sep) + PYC_EXT |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
252 return path, MAGIC + '\0\0\0\0' + marshal.dumps(code) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
253 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
254 # |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
255 # Extension modules can't be in the modules zip archive, so a placeholder |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
256 # is added instead, that loads the extension from a specified location. |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
257 # |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
258 EXT_LOADER = """\ |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
259 def __load(): |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
260 import imp, sys, os |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
261 for p in sys.path: |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
262 path = os.path.join(p, "%(filename)s") |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
263 if os.path.exists(path): |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
264 break |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
265 else: |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
266 assert 0, "file not found: %(filename)s" |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
267 mod = imp.load_dynamic("%(name)s", path) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
268 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
269 __load() |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
270 del __load |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
271 """ |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
272 |
|
79472
ffc6e6b00949
#16135: Removal of OS/2 support (I)
Jesus Cea <jcea@jcea.es>
parents:
51776
diff
changeset
|
273 MAYMISS_MODULES = ['mac', 'nt', 'ntpath', 'dos', 'dospath', |
|
50381
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
274 'win32api', 'ce', '_winreg', 'nturl2path', 'sitecustomize', |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
275 'org.python.core', 'riscos', 'riscosenviron', 'riscospath' |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
276 ] |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
277 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
278 STRIP_EXEC = "/usr/bin/strip" |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
279 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
280 # |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
281 # We're using a stock interpreter to run the app, yet we need |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
282 # a way to pass the Python main program to the interpreter. The |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
283 # bootstrapping script fires up the interpreter with the right |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
284 # arguments. os.execve() is used as OSX doesn't like us to |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
285 # start a real new process. Also, the executable name must match |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
286 # the CFBundleExecutable value in the Info.plist, so we lie |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
287 # deliberately with argv[0]. The actual Python executable is |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
288 # passed in an environment variable so we can "repair" |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
289 # sys.executable later. |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
290 # |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
291 BOOTSTRAP_SCRIPT = """\ |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
292 #!%(hashbang)s |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
293 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
294 import sys, os |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
295 execdir = os.path.dirname(sys.argv[0]) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
296 executable = os.path.join(execdir, "%(executable)s") |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
297 resdir = os.path.join(os.path.dirname(execdir), "Resources") |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
298 libdir = os.path.join(os.path.dirname(execdir), "Frameworks") |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
299 mainprogram = os.path.join(resdir, "%(mainprogram)s") |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
300 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
301 sys.argv.insert(1, mainprogram) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
302 if %(standalone)s or %(semi_standalone)s: |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
303 os.environ["PYTHONPATH"] = resdir |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
304 if %(standalone)s: |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
305 os.environ["PYTHONHOME"] = resdir |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
306 else: |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
307 pypath = os.getenv("PYTHONPATH", "") |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
308 if pypath: |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
309 pypath = ":" + pypath |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
310 os.environ["PYTHONPATH"] = resdir + pypath |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
311 os.environ["PYTHONEXECUTABLE"] = executable |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
312 os.environ["DYLD_LIBRARY_PATH"] = libdir |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
313 os.environ["DYLD_FRAMEWORK_PATH"] = libdir |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
314 os.execve(executable, sys.argv, os.environ) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
315 """ |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
316 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
317 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
318 # |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
319 # Optional wrapper that converts "dropped files" into sys.argv values. |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
320 # |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
321 ARGV_EMULATOR = """\ |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
322 import argvemulator, os |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
323 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
324 argvemulator.ArgvCollector().mainloop() |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
325 execfile(os.path.join(os.path.split(__file__)[0], "%(realmainprogram)s")) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
326 """ |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
327 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
328 # |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
329 # When building a standalone app with Python.framework, we need to copy |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
330 # a subset from Python.framework to the bundle. The following list |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
331 # specifies exactly what items we'll copy. |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
332 # |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
333 PYTHONFRAMEWORKGOODIES = [ |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
334 "Python", # the Python core library |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
335 "Resources/English.lproj", |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
336 "Resources/Info.plist", |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
337 "Resources/version.plist", |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
338 ] |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
339 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
340 def isFramework(): |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
341 return sys.exec_prefix.find("Python.framework") > 0 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
342 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
343 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
344 LIB = os.path.join(sys.prefix, "lib", "python" + sys.version[:3]) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
345 SITE_PACKAGES = os.path.join(LIB, "site-packages") |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
346 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
347 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
348 class AppBuilder(BundleBuilder): |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
349 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
350 # Override type of the bundle. |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
351 type = "APPL" |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
352 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
353 # platform, name of the subfolder of Contents that contains the executable. |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
354 platform = "MacOS" |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
355 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
356 # A Python main program. If this argument is given, the main |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
357 # executable in the bundle will be a small wrapper that invokes |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
358 # the main program. (XXX Discuss why.) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
359 mainprogram = None |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
360 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
361 # The main executable. If a Python main program is specified |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
362 # the executable will be copied to Resources and be invoked |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
363 # by the wrapper program mentioned above. Otherwise it will |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
364 # simply be used as the main executable. |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
365 executable = None |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
366 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
367 # The name of the main nib, for Cocoa apps. *Must* be specified |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
368 # when building a Cocoa app. |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
369 nibname = None |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
370 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
371 # The name of the icon file to be copied to Resources and used for |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
372 # the Finder icon. |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
373 iconfile = None |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
374 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
375 # Symlink the executable instead of copying it. |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
376 symlink_exec = 0 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
377 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
378 # If True, build standalone app. |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
379 standalone = 0 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
380 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
381 # If True, build semi-standalone app (only includes third-party modules). |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
382 semi_standalone = 0 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
383 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
384 # If set, use this for #! lines in stead of sys.executable |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
385 python = None |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
386 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
387 # If True, add a real main program that emulates sys.argv before calling |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
388 # mainprogram |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
389 argv_emulation = 0 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
390 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
391 # The following attributes are only used when building a standalone app. |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
392 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
393 # Exclude these modules. |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
394 excludeModules = [] |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
395 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
396 # Include these modules. |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
397 includeModules = [] |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
398 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
399 # Include these packages. |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
400 includePackages = [] |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
401 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
402 # Strip binaries from debug info. |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
403 strip = 0 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
404 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
405 # Found Python modules: [(name, codeobject, ispkg), ...] |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
406 pymodules = [] |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
407 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
408 # Modules that modulefinder couldn't find: |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
409 missingModules = [] |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
410 maybeMissingModules = [] |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
411 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
412 def setup(self): |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
413 if ((self.standalone or self.semi_standalone) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
414 and self.mainprogram is None): |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
415 raise BundleBuilderError("must specify 'mainprogram' when " |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
416 "building a standalone application.") |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
417 if self.mainprogram is None and self.executable is None: |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
418 raise BundleBuilderError("must specify either or both of " |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
419 "'executable' and 'mainprogram'") |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
420 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
421 self.execdir = pathjoin("Contents", self.platform) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
422 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
423 if self.name is not None: |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
424 pass |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
425 elif self.mainprogram is not None: |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
426 self.name = os.path.splitext(os.path.basename(self.mainprogram))[0] |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
427 elif executable is not None: |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
428 self.name = os.path.splitext(os.path.basename(self.executable))[0] |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
429 if self.name[-4:] != ".app": |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
430 self.name += ".app" |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
431 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
432 if self.executable is None: |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
433 if not self.standalone and not isFramework(): |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
434 self.symlink_exec = 1 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
435 if self.python: |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
436 self.executable = self.python |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
437 else: |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
438 self.executable = sys.executable |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
439 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
440 if self.nibname: |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
441 self.plist.NSMainNibFile = self.nibname |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
442 if not hasattr(self.plist, "NSPrincipalClass"): |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
443 self.plist.NSPrincipalClass = "NSApplication" |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
444 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
445 if self.standalone and isFramework(): |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
446 self.addPythonFramework() |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
447 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
448 BundleBuilder.setup(self) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
449 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
450 self.plist.CFBundleExecutable = self.name |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
451 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
452 if self.standalone or self.semi_standalone: |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
453 self.findDependencies() |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
454 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
455 def preProcess(self): |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
456 resdir = "Contents/Resources" |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
457 if self.executable is not None: |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
458 if self.mainprogram is None: |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
459 execname = self.name |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
460 else: |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
461 execname = os.path.basename(self.executable) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
462 execpath = pathjoin(self.execdir, execname) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
463 if not self.symlink_exec: |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
464 self.files.append((self.destroot + self.executable, execpath)) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
465 self.execpath = execpath |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
466 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
467 if self.mainprogram is not None: |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
468 mainprogram = os.path.basename(self.mainprogram) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
469 self.files.append((self.mainprogram, pathjoin(resdir, mainprogram))) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
470 if self.argv_emulation: |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
471 # Change the main program, and create the helper main program (which |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
472 # does argv collection and then calls the real main). |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
473 # Also update the included modules (if we're creating a standalone |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
474 # program) and the plist |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
475 realmainprogram = mainprogram |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
476 mainprogram = '__argvemulator_' + mainprogram |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
477 resdirpath = pathjoin(self.bundlepath, resdir) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
478 mainprogrampath = pathjoin(resdirpath, mainprogram) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
479 makedirs(resdirpath) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
480 open(mainprogrampath, "w").write(ARGV_EMULATOR % locals()) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
481 if self.standalone or self.semi_standalone: |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
482 self.includeModules.append("argvemulator") |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
483 self.includeModules.append("os") |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
484 if "CFBundleDocumentTypes" not in self.plist: |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
485 self.plist["CFBundleDocumentTypes"] = [ |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
486 { "CFBundleTypeOSTypes" : [ |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
487 "****", |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
488 "fold", |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
489 "disk"], |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
490 "CFBundleTypeRole": "Viewer"}] |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
491 # Write bootstrap script |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
492 executable = os.path.basename(self.executable) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
493 execdir = pathjoin(self.bundlepath, self.execdir) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
494 bootstrappath = pathjoin(execdir, self.name) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
495 makedirs(execdir) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
496 if self.standalone or self.semi_standalone: |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
497 # XXX we're screwed when the end user has deleted |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
498 # /usr/bin/python |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
499 hashbang = "/usr/bin/python" |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
500 elif self.python: |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
501 hashbang = self.python |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
502 else: |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
503 hashbang = os.path.realpath(sys.executable) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
504 standalone = self.standalone |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
505 semi_standalone = self.semi_standalone |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
506 open(bootstrappath, "w").write(BOOTSTRAP_SCRIPT % locals()) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
507 os.chmod(bootstrappath, 0o775) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
508 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
509 if self.iconfile is not None: |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
510 iconbase = os.path.basename(self.iconfile) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
511 self.plist.CFBundleIconFile = iconbase |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
512 self.files.append((self.iconfile, pathjoin(resdir, iconbase))) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
513 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
514 def postProcess(self): |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
515 if self.standalone or self.semi_standalone: |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
516 self.addPythonModules() |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
517 if self.strip and not self.symlink: |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
518 self.stripBinaries() |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
519 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
520 if self.symlink_exec and self.executable: |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
521 self.message("Symlinking executable %s to %s" % (self.executable, |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
522 self.execpath), 2) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
523 dst = pathjoin(self.bundlepath, self.execpath) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
524 makedirs(os.path.dirname(dst)) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
525 os.symlink(os.path.abspath(self.executable), dst) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
526 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
527 if self.missingModules or self.maybeMissingModules: |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
528 self.reportMissing() |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
529 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
530 def addPythonFramework(self): |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
531 # If we're building a standalone app with Python.framework, |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
532 # include a minimal subset of Python.framework, *unless* |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
533 # Python.framework was specified manually in self.libs. |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
534 for lib in self.libs: |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
535 if os.path.basename(lib) == "Python.framework": |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
536 # a Python.framework was specified as a library |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
537 return |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
538 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
539 frameworkpath = sys.exec_prefix[:sys.exec_prefix.find( |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
540 "Python.framework") + len("Python.framework")] |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
541 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
542 version = sys.version[:3] |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
543 frameworkpath = pathjoin(frameworkpath, "Versions", version) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
544 destbase = pathjoin("Contents", "Frameworks", "Python.framework", |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
545 "Versions", version) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
546 for item in PYTHONFRAMEWORKGOODIES: |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
547 src = pathjoin(frameworkpath, item) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
548 dst = pathjoin(destbase, item) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
549 self.files.append((src, dst)) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
550 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
551 def _getSiteCode(self): |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
552 return compile(SITE_PY % {"semi_standalone": self.semi_standalone}, |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
553 "<-bundlebuilder.py->", "exec") |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
554 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
555 def addPythonModules(self): |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
556 self.message("Adding Python modules", 1) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
557 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
558 if USE_ZIPIMPORT: |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
559 # Create a zip file containing all modules as pyc. |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
560 import zipfile |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
561 relpath = pathjoin("Contents", "Resources", ZIP_ARCHIVE) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
562 abspath = pathjoin(self.bundlepath, relpath) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
563 zf = zipfile.ZipFile(abspath, "w", zipfile.ZIP_DEFLATED) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
564 for name, code, ispkg in self.pymodules: |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
565 self.message("Adding Python module %s" % name, 2) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
566 path, pyc = getPycData(name, code, ispkg) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
567 zf.writestr(path, pyc) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
568 zf.close() |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
569 # add site.pyc |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
570 sitepath = pathjoin(self.bundlepath, "Contents", "Resources", |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
571 "site" + PYC_EXT) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
572 writePyc(self._getSiteCode(), sitepath) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
573 else: |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
574 # Create individual .pyc files. |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
575 for name, code, ispkg in self.pymodules: |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
576 if ispkg: |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
577 name += ".__init__" |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
578 path = name.split(".") |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
579 path = pathjoin("Contents", "Resources", *path) + PYC_EXT |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
580 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
581 if ispkg: |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
582 self.message("Adding Python package %s" % path, 2) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
583 else: |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
584 self.message("Adding Python module %s" % path, 2) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
585 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
586 abspath = pathjoin(self.bundlepath, path) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
587 makedirs(os.path.dirname(abspath)) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
588 writePyc(code, abspath) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
589 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
590 def stripBinaries(self): |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
591 if not os.path.exists(STRIP_EXEC): |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
592 self.message("Error: can't strip binaries: no strip program at " |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
593 "%s" % STRIP_EXEC, 0) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
594 else: |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
595 import stat |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
596 self.message("Stripping binaries", 1) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
597 def walk(top): |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
598 for name in os.listdir(top): |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
599 path = pathjoin(top, name) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
600 if os.path.islink(path): |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
601 continue |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
602 if os.path.isdir(path): |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
603 walk(path) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
604 else: |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
605 mod = os.stat(path)[stat.ST_MODE] |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
606 if not (mod & 0o100): |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
607 continue |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
608 relpath = path[len(self.bundlepath):] |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
609 self.message("Stripping %s" % relpath, 2) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
610 inf, outf = os.popen4("%s -S \"%s\"" % |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
611 (STRIP_EXEC, path)) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
612 output = outf.read().strip() |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
613 if output: |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
614 # usually not a real problem, like when we're |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
615 # trying to strip a script |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
616 self.message("Problem stripping %s:" % relpath, 3) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
617 self.message(output, 3) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
618 walk(self.bundlepath) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
619 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
620 def findDependencies(self): |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
621 self.message("Finding module dependencies", 1) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
622 import modulefinder |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
623 mf = modulefinder.ModuleFinder(excludes=self.excludeModules) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
624 if USE_ZIPIMPORT: |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
625 # zipimport imports zlib, must add it manually |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
626 mf.import_hook("zlib") |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
627 # manually add our own site.py |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
628 site = mf.add_module("site") |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
629 site.__code__ = self._getSiteCode() |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
630 mf.scan_code(site.__code__, site) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
631 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
632 # warnings.py gets imported implicitly from C |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
633 mf.import_hook("warnings") |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
634 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
635 includeModules = self.includeModules[:] |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
636 for name in self.includePackages: |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
637 includeModules.extend(list(findPackageContents(name).keys())) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
638 for name in includeModules: |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
639 try: |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
640 mf.import_hook(name) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
641 except ImportError: |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
642 self.missingModules.append(name) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
643 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
644 mf.run_script(self.mainprogram) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
645 modules = list(mf.modules.items()) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
646 modules.sort() |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
647 for name, mod in modules: |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
648 path = mod.__file__ |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
649 if path and self.semi_standalone: |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
650 # skip the standard library |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
651 if path.startswith(LIB) and not path.startswith(SITE_PACKAGES): |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
652 continue |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
653 if path and mod.__code__ is None: |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
654 # C extension |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
655 filename = os.path.basename(path) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
656 pathitems = name.split(".")[:-1] + [filename] |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
657 dstpath = pathjoin(*pathitems) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
658 if USE_ZIPIMPORT: |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
659 if name != "zlib": |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
660 # neatly pack all extension modules in a subdirectory, |
|
51776
d06a3ebf306f
Merged revisions 69846 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
50381
diff
changeset
|
661 # except zlib, since it's necessary for bootstrapping. |
|
50381
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
662 dstpath = pathjoin("ExtensionModules", dstpath) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
663 # Python modules are stored in a Zip archive, but put |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
664 # extensions in Contents/Resources/. Add a tiny "loader" |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
665 # program in the Zip archive. Due to Thomas Heller. |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
666 source = EXT_LOADER % {"name": name, "filename": dstpath} |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
667 code = compile(source, "<dynloader for %s>" % name, "exec") |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
668 mod.__code__ = code |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
669 self.files.append((path, pathjoin("Contents", "Resources", dstpath))) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
670 if mod.__code__ is not None: |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
671 ispkg = mod.__path__ is not None |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
672 if not USE_ZIPIMPORT or name != "site": |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
673 # Our site.py is doing the bootstrapping, so we must |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
674 # include a real .pyc file if USE_ZIPIMPORT is True. |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
675 self.pymodules.append((name, mod.__code__, ispkg)) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
676 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
677 if hasattr(mf, "any_missing_maybe"): |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
678 missing, maybe = mf.any_missing_maybe() |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
679 else: |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
680 missing = mf.any_missing() |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
681 maybe = [] |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
682 self.missingModules.extend(missing) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
683 self.maybeMissingModules.extend(maybe) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
684 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
685 def reportMissing(self): |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
686 missing = [name for name in self.missingModules |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
687 if name not in MAYMISS_MODULES] |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
688 if self.maybeMissingModules: |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
689 maybe = self.maybeMissingModules |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
690 else: |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
691 maybe = [name for name in missing if "." in name] |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
692 missing = [name for name in missing if "." not in name] |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
693 missing.sort() |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
694 maybe.sort() |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
695 if maybe: |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
696 self.message("Warning: couldn't find the following submodules:", 1) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
697 self.message(" (Note that these could be false alarms -- " |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
698 "it's not always", 1) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
699 self.message(" possible to distinguish between \"from package " |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
700 "import submodule\" ", 1) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
701 self.message(" and \"from package import name\")", 1) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
702 for name in maybe: |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
703 self.message(" ? " + name, 1) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
704 if missing: |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
705 self.message("Warning: couldn't find the following modules:", 1) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
706 for name in missing: |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
707 self.message(" ? " + name, 1) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
708 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
709 def report(self): |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
710 # XXX something decent |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
711 import pprint |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
712 pprint.pprint(self.__dict__) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
713 if self.standalone or self.semi_standalone: |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
714 self.reportMissing() |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
715 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
716 # |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
717 # Utilities. |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
718 # |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
719 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
720 SUFFIXES = [_suf for _suf, _mode, _tp in imp.get_suffixes()] |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
721 identifierRE = re.compile(r"[_a-zA-z][_a-zA-Z0-9]*$") |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
722 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
723 def findPackageContents(name, searchpath=None): |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
724 head = name.split(".")[-1] |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
725 if identifierRE.match(head) is None: |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
726 return {} |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
727 try: |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
728 fp, path, (ext, mode, tp) = imp.find_module(head, searchpath) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
729 except ImportError: |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
730 return {} |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
731 modules = {name: None} |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
732 if tp == imp.PKG_DIRECTORY and path: |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
733 files = os.listdir(path) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
734 for sub in files: |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
735 sub, ext = os.path.splitext(sub) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
736 fullname = name + "." + sub |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
737 if sub != "__init__" and fullname not in modules: |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
738 modules.update(findPackageContents(fullname, [path])) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
739 return modules |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
740 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
741 def writePyc(code, path): |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
742 f = open(path, "wb") |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
743 f.write(MAGIC) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
744 f.write("\0" * 4) # don't bother about a time stamp |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
745 marshal.dump(code, f) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
746 f.close() |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
747 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
748 def copy(src, dst, mkdirs=0): |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
749 """Copy a file or a directory.""" |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
750 if mkdirs: |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
751 makedirs(os.path.dirname(dst)) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
752 if os.path.isdir(src): |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
753 shutil.copytree(src, dst, symlinks=1) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
754 else: |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
755 shutil.copy2(src, dst) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
756 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
757 def copytodir(src, dstdir): |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
758 """Copy a file or a directory to an existing directory.""" |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
759 dst = pathjoin(dstdir, os.path.basename(src)) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
760 copy(src, dst) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
761 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
762 def makedirs(dir): |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
763 """Make all directories leading up to 'dir' including the leaf |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
764 directory. Don't moan if any path element already exists.""" |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
765 try: |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
766 os.makedirs(dir) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
767 except OSError as why: |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
768 if why.errno != errno.EEXIST: |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
769 raise |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
770 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
771 def symlink(src, dst, mkdirs=0): |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
772 """Copy a file or a directory.""" |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
773 if not os.path.exists(src): |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
774 raise IOError("No such file or directory: '%s'" % src) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
775 if mkdirs: |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
776 makedirs(os.path.dirname(dst)) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
777 os.symlink(os.path.abspath(src), dst) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
778 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
779 def pathjoin(*args): |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
780 """Safe wrapper for os.path.join: asserts that all but the first |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
781 argument are relative paths.""" |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
782 for seg in args[1:]: |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
783 assert seg[0] != "/" |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
784 return os.path.join(*args) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
785 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
786 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
787 cmdline_doc = """\ |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
788 Usage: |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
789 python bundlebuilder.py [options] command |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
790 python mybuildscript.py [options] command |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
791 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
792 Commands: |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
793 build build the application |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
794 report print a report |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
795 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
796 Options: |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
797 -b, --builddir=DIR the build directory; defaults to "build" |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
798 -n, --name=NAME application name |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
799 -r, --resource=FILE extra file or folder to be copied to Resources |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
800 -f, --file=SRC:DST extra file or folder to be copied into the bundle; |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
801 DST must be a path relative to the bundle root |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
802 -e, --executable=FILE the executable to be used |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
803 -m, --mainprogram=FILE the Python main program |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
804 -a, --argv add a wrapper main program to create sys.argv |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
805 -p, --plist=FILE .plist file (default: generate one) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
806 --nib=NAME main nib name |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
807 -c, --creator=CCCC 4-char creator code (default: '????') |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
808 --iconfile=FILE filename of the icon (an .icns file) to be used |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
809 as the Finder icon |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
810 --bundle-id=ID the CFBundleIdentifier, in reverse-dns format |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
811 (eg. org.python.BuildApplet; this is used for |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
812 the preferences file name) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
813 -l, --link symlink files/folder instead of copying them |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
814 --link-exec symlink the executable instead of copying it |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
815 --standalone build a standalone application, which is fully |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
816 independent of a Python installation |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
817 --semi-standalone build a standalone application, which depends on |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
818 an installed Python, yet includes all third-party |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
819 modules. |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
820 --python=FILE Python to use in #! line in stead of current Python |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
821 --lib=FILE shared library or framework to be copied into |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
822 the bundle |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
823 -x, --exclude=MODULE exclude module (with --(semi-)standalone) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
824 -i, --include=MODULE include module (with --(semi-)standalone) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
825 --package=PACKAGE include a whole package (with --(semi-)standalone) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
826 --strip strip binaries (remove debug info) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
827 -v, --verbose increase verbosity level |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
828 -q, --quiet decrease verbosity level |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
829 -h, --help print this message |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
830 """ |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
831 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
832 def usage(msg=None): |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
833 if msg: |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
834 print(msg) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
835 print(cmdline_doc) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
836 sys.exit(1) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
837 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
838 def main(builder=None): |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
839 if builder is None: |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
840 builder = AppBuilder(verbosity=1) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
841 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
842 shortopts = "b:n:r:f:e:m:c:p:lx:i:hvqa" |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
843 longopts = ("builddir=", "name=", "resource=", "file=", "executable=", |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
844 "mainprogram=", "creator=", "nib=", "plist=", "link", |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
845 "link-exec", "help", "verbose", "quiet", "argv", "standalone", |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
846 "exclude=", "include=", "package=", "strip", "iconfile=", |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
847 "lib=", "python=", "semi-standalone", "bundle-id=", "destroot=") |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
848 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
849 try: |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
850 options, args = getopt.getopt(sys.argv[1:], shortopts, longopts) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
851 except getopt.error: |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
852 usage() |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
853 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
854 for opt, arg in options: |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
855 if opt in ('-b', '--builddir'): |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
856 builder.builddir = arg |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
857 elif opt in ('-n', '--name'): |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
858 builder.name = arg |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
859 elif opt in ('-r', '--resource'): |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
860 builder.resources.append(os.path.normpath(arg)) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
861 elif opt in ('-f', '--file'): |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
862 srcdst = arg.split(':') |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
863 if len(srcdst) != 2: |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
864 usage("-f or --file argument must be two paths, " |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
865 "separated by a colon") |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
866 builder.files.append(srcdst) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
867 elif opt in ('-e', '--executable'): |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
868 builder.executable = arg |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
869 elif opt in ('-m', '--mainprogram'): |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
870 builder.mainprogram = arg |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
871 elif opt in ('-a', '--argv'): |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
872 builder.argv_emulation = 1 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
873 elif opt in ('-c', '--creator'): |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
874 builder.creator = arg |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
875 elif opt == '--bundle-id': |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
876 builder.bundle_id = arg |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
877 elif opt == '--iconfile': |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
878 builder.iconfile = arg |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
879 elif opt == "--lib": |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
880 builder.libs.append(os.path.normpath(arg)) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
881 elif opt == "--nib": |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
882 builder.nibname = arg |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
883 elif opt in ('-p', '--plist'): |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
884 builder.plist = Plist.fromFile(arg) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
885 elif opt in ('-l', '--link'): |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
886 builder.symlink = 1 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
887 elif opt == '--link-exec': |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
888 builder.symlink_exec = 1 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
889 elif opt in ('-h', '--help'): |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
890 usage() |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
891 elif opt in ('-v', '--verbose'): |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
892 builder.verbosity += 1 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
893 elif opt in ('-q', '--quiet'): |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
894 builder.verbosity -= 1 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
895 elif opt == '--standalone': |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
896 builder.standalone = 1 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
897 elif opt == '--semi-standalone': |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
898 builder.semi_standalone = 1 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
899 elif opt == '--python': |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
900 builder.python = arg |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
901 elif opt in ('-x', '--exclude'): |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
902 builder.excludeModules.append(arg) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
903 elif opt in ('-i', '--include'): |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
904 builder.includeModules.append(arg) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
905 elif opt == '--package': |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
906 builder.includePackages.append(arg) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
907 elif opt == '--strip': |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
908 builder.strip = 1 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
909 elif opt == '--destroot': |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
910 builder.destroot = arg |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
911 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
912 if len(args) != 1: |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
913 usage("Must specify one command ('build', 'report' or 'help')") |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
914 command = args[0] |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
915 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
916 if command == "build": |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
917 builder.setup() |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
918 builder.build() |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
919 elif command == "report": |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
920 builder.setup() |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
921 builder.report() |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
922 elif command == "help": |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
923 usage() |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
924 else: |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
925 usage("Unknown command '%s'" % command) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
926 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
927 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
928 def buildapp(**kwargs): |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
929 builder = AppBuilder(**kwargs) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
930 main(builder) |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
931 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
932 |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
933 if __name__ == "__main__": |
|
7431638e7dd8
Merged revisions 68062,68064 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
934 main() |
