Clarify portability and main program.
[python/dscho.git] / Mac / scripts / ConfigurePython.py
bloba6a1a4dafdf23567e50a4013e311cafcc8d3d4aa
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 verbose=0
16 SPLASH_LOCATE=512
17 SPLASH_REMOVE=513
18 SPLASH_CFM68K=514
19 SPLASH_PPC=515
20 SPLASH_NUMPY=516
22 ppc_goals = [
23 ("AE.ppc.slb", "toolboxmodules.ppc.slb"),
24 ("Ctl.ppc.slb", "toolboxmodules.ppc.slb"),
25 ("Dlg.ppc.slb", "toolboxmodules.ppc.slb"),
26 ("Evt.ppc.slb", "toolboxmodules.ppc.slb"),
27 ("Fm.ppc.slb", "toolboxmodules.ppc.slb"),
28 ("Help.ppc.slb", "toolboxmodules.ppc.slb"),
29 ("Menu.ppc.slb", "toolboxmodules.ppc.slb"),
30 ("List.ppc.slb", "toolboxmodules.ppc.slb"),
31 ("Qd.ppc.slb", "toolboxmodules.ppc.slb"),
32 ("Res.ppc.slb", "toolboxmodules.ppc.slb"),
33 ("Scrap.ppc.slb", "toolboxmodules.ppc.slb"),
34 ("Snd.ppc.slb", "toolboxmodules.ppc.slb"),
35 ("Sndihooks.ppc.slb", "toolboxmodules.ppc.slb"),
36 ("TE.ppc.slb", "toolboxmodules.ppc.slb"),
37 ("Win.ppc.slb", "toolboxmodules.ppc.slb"),
39 ("Cm.ppc.slb", "qtmodules.ppc.slb"),
40 ("Qt.ppc.slb", "qtmodules.ppc.slb"),
42 ("imgcolormap.ppc.slb", "imgmodules.ppc.slb"),
43 ("imgformat.ppc.slb", "imgmodules.ppc.slb"),
44 ("imggif.ppc.slb", "imgmodules.ppc.slb"),
45 ("imgjpeg.ppc.slb", "imgmodules.ppc.slb"),
46 ("imgop.ppc.slb", "imgmodules.ppc.slb"),
47 ("imgpbm.ppc.slb", "imgmodules.ppc.slb"),
48 ("imgpgm.ppc.slb", "imgmodules.ppc.slb"),
49 ("imgppm.ppc.slb", "imgmodules.ppc.slb"),
50 ("imgtiff.ppc.slb", "imgmodules.ppc.slb"),
51 ("imgsgi.ppc.slb", "imgmodules.ppc.slb")
54 cfm68k_goals = [
55 ("AE.CFM68K.slb", "toolboxmodules.CFM68K.slb"),
56 ("Ctl.CFM68K.slb", "toolboxmodules.CFM68K.slb"),
57 ("Dlg.CFM68K.slb", "toolboxmodules.CFM68K.slb"),
58 ("Evt.CFM68K.slb", "toolboxmodules.CFM68K.slb"),
59 ("Fm.CFM68K.slb", "toolboxmodules.CFM68K.slb"),
60 ("Help.CFM68K.slb", "toolboxmodules.CFM68K.slb"),
61 ("Menu.CFM68K.slb", "toolboxmodules.CFM68K.slb"),
62 ("List.CFM68K.slb", "toolboxmodules.CFM68K.slb"),
63 ("Qd.CFM68K.slb", "toolboxmodules.CFM68K.slb"),
64 ("Res.CFM68K.slb", "toolboxmodules.CFM68K.slb"),
65 ("Scrap.CFM68K.slb", "toolboxmodules.CFM68K.slb"),
66 ("Snd.CFM68K.slb", "toolboxmodules.CFM68K.slb"),
67 ("Sndihooks.CFM68K.slb", "toolboxmodules.CFM68K.slb"),
68 ("TE.CFM68K.slb", "toolboxmodules.CFM68K.slb"),
69 ("Win.CFM68K.slb", "toolboxmodules.CFM68K.slb"),
71 ("Cm.CFM68K.slb", "qtmodules.CFM68K.slb"),
72 ("Qt.CFM68K.slb", "qtmodules.CFM68K.slb"),
74 ("imgcolormap.CFM68K.slb", "imgmodules.CFM68K.slb"),
75 ("imgformat.CFM68K.slb", "imgmodules.CFM68K.slb"),
76 ("imggif.CFM68K.slb", "imgmodules.CFM68K.slb"),
77 ("imgjpeg.CFM68K.slb", "imgmodules.CFM68K.slb"),
78 ("imgop.CFM68K.slb", "imgmodules.CFM68K.slb"),
79 ("imgpbm.CFM68K.slb", "imgmodules.CFM68K.slb"),
80 ("imgpgm.CFM68K.slb", "imgmodules.CFM68K.slb"),
81 ("imgppm.CFM68K.slb", "imgmodules.CFM68K.slb"),
82 ("imgtiff.CFM68K.slb", "imgmodules.CFM68K.slb"),
83 ("imgsgi.CFM68K.slb", "imgmodules.CFM68K.slb")
86 def gotopluginfolder():
87 """Go to the plugin folder, assuming we are somewhere in the Python tree"""
88 import os
90 while not os.path.isdir(":Plugins"):
91 os.chdir("::")
92 os.chdir(":Plugins")
93 if verbose: print "current directory is", os.getcwd()
95 def loadtoolboxmodules():
96 """Attempt to load the Res module"""
97 try:
98 import Res
99 except ImportError, arg:
100 err1 = arg
101 pass
102 else:
103 if verbose: print 'imported Res the standard way.'
104 return
106 # We cannot import it. First attempt to load the cfm68k version
107 import imp
108 try:
109 dummy = imp.load_dynamic('Res', 'toolboxmodules.CFM68K.slb')
110 except ImportError, arg:
111 err2 = arg
112 pass
113 else:
114 if verbose: print 'Loaded Res from toolboxmodules.CFM68K.slb.'
115 return
117 # Ok, try the ppc version
118 try:
119 dummy = imp.load_dynamic('Res', 'toolboxmodules.ppc.slb')
120 except ImportError, arg:
121 err3 = arg
122 pass
123 else:
124 if verbose: print 'Loaded Res from toolboxmodules.ppc.slb.'
125 return
127 # Tough luck....
128 print "I cannot import the Res module, nor load it from either of"
129 print "toolboxmodules shared libraries. The errors encountered were:"
130 print "import Res:", err1
131 print "load from toolboxmodules.CFM68K.slb:", err2
132 print "load from toolboxmodules.ppc.slb:", err3
133 sys.exit(1)
135 def getextensiondirfile(fname):
136 import macfs
137 import MACFS
138 vrefnum, dirid = macfs.FindFolder(MACFS.kOnSystemDisk, MACFS.kExtensionFolderType, 0)
139 fss = macfs.FSSpec((vrefnum, dirid, fname))
140 return fss.as_pathname()
142 def mkcorealias(src, altsrc):
143 import string
144 import macostools
145 version = string.split(sys.version)[0]
146 dst = getextensiondirfile(src+ ' ' + version)
147 if not os.path.exists(src):
148 if not os.path.exists(altsrc):
149 if verbose: print '*', src, 'not found'
150 return 0
151 src = altsrc
152 try:
153 os.unlink(dst)
154 except os.error:
155 pass
156 macostools.mkalias(src, dst)
157 if verbose: print ' ', dst, '->', src
158 return 1
161 def main():
162 MacOS.splash(SPLASH_LOCATE)
163 gotopluginfolder()
165 loadtoolboxmodules()
167 sys.path.append('::Mac:Lib')
168 import macostools
170 # Remove old .slb aliases and collect a list of .slb files
171 didsplash = 0
172 LibFiles = []
173 allfiles = os.listdir(':')
174 if verbose: print 'Removing old aliases...'
175 for f in allfiles:
176 if f[-4:] == '.slb':
177 finfo = macfs.FSSpec(f).GetFInfo()
178 if finfo.Flags & 0x8000:
179 if not didsplash:
180 MacOS.splash(SPLASH_REMOVE)
181 didsplash = 1
182 if verbose: print ' Removing', f
183 os.unlink(f)
184 else:
185 LibFiles.append(f)
186 if verbose: print ' Found', f
187 if verbose: print
189 # Create the new PPC aliases.
190 didsplash = 0
191 if verbose: print 'Creating PPC aliases...'
192 for dst, src in ppc_goals:
193 if src in LibFiles:
194 if not didsplash:
195 MacOS.splash(SPLASH_PPC)
196 didsplash = 1
197 macostools.mkalias(src, dst)
198 if verbose: print ' ', dst, '->', src
199 else:
200 if verbose: print '*', dst, 'not created:', src, 'not found'
201 if verbose: print
203 # Create the CFM68K aliases.
204 didsplash = 0
205 if verbose: print 'Creating CFM68K aliases...'
206 for dst, src in cfm68k_goals:
207 if src in LibFiles:
208 if not didsplash:
209 MacOS.splash(SPLASH_CFM68K)
210 didsplash = 1
211 macostools.mkalias(src, dst)
212 if verbose: print ' ', dst, '->', src
213 else:
214 if verbose: print '*', dst, 'not created:', src, 'not found'
215 if verbose: print
217 # Create the PythonCore alias(es)
218 if verbose: print 'Creating PythonCore aliases in Extensions folder...'
219 os.chdir('::')
220 n = 0
221 n = n + mkcorealias('PythonCore', 'PythonCore')
222 n = n + mkcorealias('PythonCorePPC', ':build.macppc.shared:PythonCorePPC')
223 n = n + mkcorealias('PythonCoreCFM68K', ':build.mac68k.shared:PythonCoreCFM68K')
225 # Install NumPy
226 if os.path.exists(':Extensions:NumPy:macmkaliases.py'):
227 MacOS.splash(SPLASH_NUMPY)
228 os.chdir(':Extensions:NumPy')
229 import macmkaliases
230 err = macmkaliases.main()
231 if verbose and n == 0:
232 sys.exit(1)
234 if __name__ == '__main__':
235 if len(sys.argv) > 1 and sys.argv[1] == '-v':
236 verbose = 1
237 main()