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