1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
|
# This python script creates Finder aliases for all the
# dynamically-loaded modules that "live in" in a single
# shared library.
#
# This is sort-of a merger between Jack's MkPluginAliases
# and Guido's mkaliases.
#
# Jack Jansen, CWI, August 1996
import sys
import os
import macfs
import MacOS
import gestalt
import string
from Carbon import Res
SPLASH_COPYCORE=512
SPLASH_COPYCARBON=513
SPLASH_COPYCLASSIC=514
SPLASH_BUILDAPPLETS=515
ALERT_NOCORE=516
ALERT_NONBOOT=517
ALERT_NONBOOT_COPY=1
ALERT_NONBOOT_ALIAS=2
ALERT_NOTPYTHONFOLDER=518
ALERT_NOTPYTHONFOLDER_REMOVE_QUIT=1
ALERT_NOTPYTHONFOLDER_QUIT=2
ALERT_NOTPYTHONFOLDER_CONTINUE=3
APPLET_LIST=[
(":Mac:scripts:EditPythonPrefs.py", "EditPythonPrefs", None),
(":Mac:scripts:BuildApplet.py", "BuildApplet", None),
(":Mac:scripts:BuildApplication.py", "BuildApplication", None),
## (":Mac:scripts:ConfigurePython.py", "ConfigurePython", None),
## (":Mac:scripts:ConfigurePython.py", "ConfigurePythonCarbon", "PythonInterpreterCarbon"),
## (":Mac:scripts:ConfigurePython.py", "ConfigurePythonClassic", "PythonInterpreterClassic"),
(":Mac:Tools:IDE:PythonIDE.py", "Python IDE", None),
(":Mac:Tools:CGI:PythonCGISlave.py", ":Mac:Tools:CGI:PythonCGISlave", None),
(":Mac:Tools:CGI:BuildCGIApplet.py", ":Mac:Tools:CGI:BuildCGIApplet", None),
]
def getextensiondirfile(fname):
import macfs
import MACFS
try:
vrefnum, dirid = macfs.FindFolder(MACFS.kLocalDomain, MACFS.kSharedLibrariesFolderType, 1)
except macfs.error:
try:
vrefnum, dirid = macfs.FindFolder(MACFS.kOnSystemDisk, MACFS.kSharedLibrariesFolderType, 1)
except macfs.error:
return None
fss = macfs.FSSpec((vrefnum, dirid, fname))
return fss.as_pathname()
def mkcorealias(src, altsrc):
import string
import macostools
version = string.split(sys.version)[0]
dst = getextensiondirfile(src+ ' ' + version)
if not dst:
return 0
if not os.path.exists(os.path.join(sys.exec_prefix, src)):
if not os.path.exists(os.path.join(sys.exec_prefix, altsrc)):
return 0
src = altsrc
try:
os.unlink(dst)
except os.error:
pass
do_copy = ask_copy()
try:
if do_copy:
macostools.copy(os.path.join(sys.exec_prefix, src), dst)
else:
macostools.mkalias(os.path.join(sys.exec_prefix, src), dst)
except IOError:
return 0
return 1
do_copy = None
def ask_copy():
global do_copy
if do_copy != None:
return do_copy
# On OSX always copy
if gestalt.gestalt('sysv') > 0x9ff:
do_copy = 1
return do_copy
do_copy = 0
if macfs.FSSpec(sys.exec_prefix).as_tuple()[0] != -1: # XXXX
try:
from Carbon import Dlg
rv = Dlg.CautionAlert(ALERT_NONBOOT, None)
if rv == ALERT_NONBOOT_COPY:
do_copy = 1
except ImportError:
pass
return do_copy
# Copied from fullbuild, should probably go to buildtools
def buildapplet(top, dummy, list):
"""Create python applets"""
import buildtools
for src, dst, tmpl in list:
template = buildtools.findtemplate(tmpl)
if src[-3:] != '.py':
raise 'Should end in .py', src
base = os.path.basename(src)
src = os.path.join(top, src)
dst = os.path.join(top, dst)
try:
os.unlink(dst)
except os.error:
pass
try:
buildtools.process(template, src, dst, 1)
except buildtools.BuildError, arg:
print '**', dst, arg
def buildcopy(top, dummy, list):
import macostools
for src, dst in list:
src = os.path.join(top, src)
dst = os.path.join(top, dst)
macostools.copy(src, dst, forcetype="APPL")
def main():
verbose = 0
try:
h = Res.GetResource('DLOG', SPLASH_COPYCORE)
del h
except Res.Error:
verbose = 1
print "Not running as applet: verbose on"
oldcwd = os.getcwd()
os.chdir(sys.prefix)
newcwd = os.getcwd()
if verbose:
print "Not running as applet: Skipping check for preference file correctness."
elif oldcwd != newcwd:
# Hack to make sure we get the new MACFS
sys.path.insert(0, os.path.join(oldcwd, ':Mac:Lib'))
from Carbon import Dlg
rv = Dlg.CautionAlert(ALERT_NOTPYTHONFOLDER, None)
if rv == ALERT_NOTPYTHONFOLDER_REMOVE_QUIT:
import pythonprefs, preferences
prefpathname = pythonprefs.pref_fss.as_pathname()
os.remove(prefpathname)
sys.exit(0)
elif rv == ALERT_NOTPYTHONFOLDER_QUIT:
sys.exit(0)
sys.path.append('::Mac:Lib')
import macostools
# Create the PythonCore alias(es)
MacOS.splash(SPLASH_COPYCORE)
if verbose:
print "Copying PythonCore..."
n = 0
n = n + mkcorealias('PythonCore', 'PythonCore')
n = n + mkcorealias('PythonCoreCarbon', 'PythonCoreCarbon')
if n == 0:
from Carbon import Dlg
Dlg.CautionAlert(ALERT_NOCORE, None)
if verbose:
print "Warning: PythonCore not copied to Extensions folder"
print " (Applets will not work unless run from the Python folder)"
if sys.argv[0][-7:] == 'Classic':
do_classic = 1
elif sys.argv[0][-6:] == 'Carbon':
do_classic = 0
else:
print "I don't know the sys.argv[0] function", sys.argv[0]
if verbose:
print "Configure classic or carbon - ",
rv = string.strip(sys.stdin.readline())
while rv and rv != "classic" and rv != "carbon":
print "Configure classic or carbon - ",
rv = string.strip(sys.stdin.readline())
if rv == "classic":
do_classic = 1
elif rv == "carbon":
do_classic = 0
else:
return
else:
sys.exit(1)
if do_classic:
MacOS.splash(SPLASH_COPYCLASSIC)
buildcopy(sys.prefix, None, [("PythonInterpreterClassic", "PythonInterpreter")])
else:
MacOS.splash(SPLASH_COPYCARBON)
buildcopy(sys.prefix, None, [("PythonInterpreterCarbon", "PythonInterpreter")])
MacOS.splash(SPLASH_BUILDAPPLETS)
buildapplet(sys.prefix, None, APPLET_LIST)
if __name__ == '__main__':
main()
MacOS.splash()
|