blob: 6ac0d16e529578a415b5e2e08428eaccfb6d14f5 [file] [log] [blame]
Jack Jansend8eb8a71995-08-09 15:16:58 +00001# This python script creates Finder aliases for all the
2# dynamically-loaded modules that "live in" in a single
3# shared library.
Jack Jansend8eb8a71995-08-09 15:16:58 +00004#
Jack Jansene3c90a41996-08-28 14:19:53 +00005# This is sort-of a merger between Jack's MkPluginAliases
6# and Guido's mkaliases.
7#
8# Jack Jansen, CWI, August 1996
Jack Jansend8eb8a71995-08-09 15:16:58 +00009
Jack Jansend8eb8a71995-08-09 15:16:58 +000010import sys
Jack Jansene3c90a41996-08-28 14:19:53 +000011import os
Jack Jansenbc128731995-09-24 21:06:50 +000012import macfs
Jack Jansend0240831997-09-08 13:16:29 +000013import MacOS
Jack Jansen09dcff71997-08-27 14:11:15 +000014verbose=0
Jack Jansend8eb8a71995-08-09 15:16:58 +000015
Jack Jansend0240831997-09-08 13:16:29 +000016SPLASH_LOCATE=512
17SPLASH_REMOVE=513
18SPLASH_CFM68K=514
19SPLASH_PPC=515
20SPLASH_NUMPY=516
21
Jack Jansen25b361f1996-08-20 16:35:30 +000022ppc_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"),
Jack Jansen80b53291997-09-09 13:57:59 +000028 ("Help.ppc.slb", "toolboxmodules.ppc.slb"),
Jack Jansen25b361f1996-08-20 16:35:30 +000029 ("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 ("TE.ppc.slb", "toolboxmodules.ppc.slb"),
36 ("Win.ppc.slb", "toolboxmodules.ppc.slb"),
37
38 ("Cm.ppc.slb", "qtmodules.ppc.slb"),
39 ("Qt.ppc.slb", "qtmodules.ppc.slb"),
40
41 ("imgcolormap.ppc.slb", "imgmodules.ppc.slb"),
42 ("imgformat.ppc.slb", "imgmodules.ppc.slb"),
43 ("imggif.ppc.slb", "imgmodules.ppc.slb"),
44 ("imgjpeg.ppc.slb", "imgmodules.ppc.slb"),
45 ("imgop.ppc.slb", "imgmodules.ppc.slb"),
46 ("imgpbm.ppc.slb", "imgmodules.ppc.slb"),
47 ("imgpgm.ppc.slb", "imgmodules.ppc.slb"),
48 ("imgppm.ppc.slb", "imgmodules.ppc.slb"),
49 ("imgtiff.ppc.slb", "imgmodules.ppc.slb"),
50 ("imgsgi.ppc.slb", "imgmodules.ppc.slb")
51]
52
53cfm68k_goals = [
54 ("AE.CFM68K.slb", "toolboxmodules.CFM68K.slb"),
55 ("Ctl.CFM68K.slb", "toolboxmodules.CFM68K.slb"),
56 ("Dlg.CFM68K.slb", "toolboxmodules.CFM68K.slb"),
57 ("Evt.CFM68K.slb", "toolboxmodules.CFM68K.slb"),
58 ("Fm.CFM68K.slb", "toolboxmodules.CFM68K.slb"),
Jack Jansen80b53291997-09-09 13:57:59 +000059 ("Help.CFM68K.slb", "toolboxmodules.CFM68K.slb"),
Jack Jansen25b361f1996-08-20 16:35:30 +000060 ("Menu.CFM68K.slb", "toolboxmodules.CFM68K.slb"),
61 ("List.CFM68K.slb", "toolboxmodules.CFM68K.slb"),
62 ("Qd.CFM68K.slb", "toolboxmodules.CFM68K.slb"),
63 ("Res.CFM68K.slb", "toolboxmodules.CFM68K.slb"),
64 ("Scrap.CFM68K.slb", "toolboxmodules.CFM68K.slb"),
65 ("Snd.CFM68K.slb", "toolboxmodules.CFM68K.slb"),
66 ("TE.CFM68K.slb", "toolboxmodules.CFM68K.slb"),
67 ("Win.CFM68K.slb", "toolboxmodules.CFM68K.slb"),
68
69 ("Cm.CFM68K.slb", "qtmodules.CFM68K.slb"),
70 ("Qt.CFM68K.slb", "qtmodules.CFM68K.slb"),
Jack Jansen3c7739a1996-10-08 09:25:02 +000071
72 ("imgcolormap.CFM68K.slb", "imgmodules.CFM68K.slb"),
73 ("imgformat.CFM68K.slb", "imgmodules.CFM68K.slb"),
74 ("imggif.CFM68K.slb", "imgmodules.CFM68K.slb"),
75 ("imgjpeg.CFM68K.slb", "imgmodules.CFM68K.slb"),
76 ("imgop.CFM68K.slb", "imgmodules.CFM68K.slb"),
77 ("imgpbm.CFM68K.slb", "imgmodules.CFM68K.slb"),
78 ("imgpgm.CFM68K.slb", "imgmodules.CFM68K.slb"),
79 ("imgppm.CFM68K.slb", "imgmodules.CFM68K.slb"),
80 ("imgtiff.CFM68K.slb", "imgmodules.CFM68K.slb"),
81 ("imgsgi.CFM68K.slb", "imgmodules.CFM68K.slb")
Jack Jansend8eb8a71995-08-09 15:16:58 +000082]
83
Jack Jansene3c90a41996-08-28 14:19:53 +000084def gotopluginfolder():
85 """Go to the plugin folder, assuming we are somewhere in the Python tree"""
86 import os
87
88 while not os.path.isdir(":Plugins"):
89 os.chdir("::")
90 os.chdir(":Plugins")
Jack Jansen09dcff71997-08-27 14:11:15 +000091 if verbose: print "current directory is", os.getcwd()
Jack Jansene3c90a41996-08-28 14:19:53 +000092
93def loadtoolboxmodules():
94 """Attempt to load the Res module"""
95 try:
96 import Res
97 except ImportError, arg:
98 err1 = arg
99 pass
100 else:
Jack Jansen09dcff71997-08-27 14:11:15 +0000101 if verbose: print 'imported Res the standard way.'
Jack Jansene3c90a41996-08-28 14:19:53 +0000102 return
103
104 # We cannot import it. First attempt to load the cfm68k version
105 import imp
106 try:
107 dummy = imp.load_dynamic('Res', 'toolboxmodules.CFM68K.slb')
108 except ImportError, arg:
109 err2 = arg
110 pass
111 else:
Jack Jansen09dcff71997-08-27 14:11:15 +0000112 if verbose: print 'Loaded Res from toolboxmodules.CFM68K.slb.'
Jack Jansene3c90a41996-08-28 14:19:53 +0000113 return
114
115 # Ok, try the ppc version
116 try:
117 dummy = imp.load_dynamic('Res', 'toolboxmodules.ppc.slb')
118 except ImportError, arg:
119 err3 = arg
120 pass
121 else:
Jack Jansen09dcff71997-08-27 14:11:15 +0000122 if verbose: print 'Loaded Res from toolboxmodules.ppc.slb.'
Jack Jansene3c90a41996-08-28 14:19:53 +0000123 return
124
125 # Tough luck....
126 print "I cannot import the Res module, nor load it from either of"
127 print "toolboxmodules shared libraries. The errors encountered were:"
128 print "import Res:", err1
129 print "load from toolboxmodules.CFM68K.slb:", err2
130 print "load from toolboxmodules.ppc.slb:", err3
131 sys.exit(1)
132
Jack Jansend09deac1996-10-22 15:32:06 +0000133def getextensiondirfile(fname):
134 import macfs
135 import MACFS
136 vrefnum, dirid = macfs.FindFolder(MACFS.kOnSystemDisk, MACFS.kExtensionFolderType, 0)
137 fss = macfs.FSSpec((vrefnum, dirid, fname))
138 return fss.as_pathname()
139
140def mkcorealias(src, altsrc):
141 import string
142 import macostools
143 version = string.split(sys.version)[0]
144 dst = getextensiondirfile(src+ ' ' + version)
145 if not os.path.exists(src):
146 if not os.path.exists(altsrc):
Jack Jansen09dcff71997-08-27 14:11:15 +0000147 if verbose: print '*', src, 'not found'
Jack Jansend09deac1996-10-22 15:32:06 +0000148 return 0
149 src = altsrc
150 try:
151 os.unlink(dst)
152 except os.error:
153 pass
154 macostools.mkalias(src, dst)
Jack Jansen09dcff71997-08-27 14:11:15 +0000155 if verbose: print ' ', dst, '->', src
Jack Jansend09deac1996-10-22 15:32:06 +0000156 return 1
157
Jack Jansend8eb8a71995-08-09 15:16:58 +0000158
159def main():
Jack Jansend0240831997-09-08 13:16:29 +0000160 MacOS.splash(SPLASH_LOCATE)
Jack Jansene3c90a41996-08-28 14:19:53 +0000161 gotopluginfolder()
Jack Jansend8eb8a71995-08-09 15:16:58 +0000162
Jack Jansene3c90a41996-08-28 14:19:53 +0000163 loadtoolboxmodules()
164
165 import macostools
166
Jack Jansend8eb8a71995-08-09 15:16:58 +0000167 # Remove old .slb aliases and collect a list of .slb files
Jack Jansend0240831997-09-08 13:16:29 +0000168 didsplash = 0
Jack Jansend8eb8a71995-08-09 15:16:58 +0000169 LibFiles = []
170 allfiles = os.listdir(':')
Jack Jansen09dcff71997-08-27 14:11:15 +0000171 if verbose: print 'Removing old aliases...'
Jack Jansend8eb8a71995-08-09 15:16:58 +0000172 for f in allfiles:
173 if f[-4:] == '.slb':
174 finfo = macfs.FSSpec(f).GetFInfo()
175 if finfo.Flags & 0x8000:
Jack Jansend0240831997-09-08 13:16:29 +0000176 if not didsplash:
177 MacOS.splash(SPLASH_REMOVE)
178 didsplash = 1
Jack Jansen09dcff71997-08-27 14:11:15 +0000179 if verbose: print ' Removing', f
Jack Jansend8eb8a71995-08-09 15:16:58 +0000180 os.unlink(f)
181 else:
182 LibFiles.append(f)
Jack Jansen09dcff71997-08-27 14:11:15 +0000183 if verbose: print ' Found', f
184 if verbose: print
Jack Jansend8eb8a71995-08-09 15:16:58 +0000185
Jack Jansene3c90a41996-08-28 14:19:53 +0000186 # Create the new PPC aliases.
Jack Jansend0240831997-09-08 13:16:29 +0000187 didsplash = 0
Jack Jansen09dcff71997-08-27 14:11:15 +0000188 if verbose: print 'Creating PPC aliases...'
Jack Jansene3c90a41996-08-28 14:19:53 +0000189 for dst, src in ppc_goals:
190 if src in LibFiles:
Jack Jansend0240831997-09-08 13:16:29 +0000191 if not didsplash:
192 MacOS.splash(SPLASH_PPC)
193 didsplash = 1
Jack Jansene3c90a41996-08-28 14:19:53 +0000194 macostools.mkalias(src, dst)
Jack Jansen09dcff71997-08-27 14:11:15 +0000195 if verbose: print ' ', dst, '->', src
Jack Jansene3c90a41996-08-28 14:19:53 +0000196 else:
Jack Jansen09dcff71997-08-27 14:11:15 +0000197 if verbose: print '*', dst, 'not created:', src, 'not found'
198 if verbose: print
Jack Jansene3c90a41996-08-28 14:19:53 +0000199
200 # Create the CFM68K aliases.
Jack Jansend0240831997-09-08 13:16:29 +0000201 didsplash = 0
Jack Jansen09dcff71997-08-27 14:11:15 +0000202 if verbose: print 'Creating CFM68K aliases...'
Jack Jansene3c90a41996-08-28 14:19:53 +0000203 for dst, src in cfm68k_goals:
204 if src in LibFiles:
Jack Jansend0240831997-09-08 13:16:29 +0000205 if not didsplash:
206 MacOS.splash(SPLASH_CFM68K)
207 didsplash = 1
Jack Jansene3c90a41996-08-28 14:19:53 +0000208 macostools.mkalias(src, dst)
Jack Jansen09dcff71997-08-27 14:11:15 +0000209 if verbose: print ' ', dst, '->', src
Jack Jansene3c90a41996-08-28 14:19:53 +0000210 else:
Jack Jansen09dcff71997-08-27 14:11:15 +0000211 if verbose: print '*', dst, 'not created:', src, 'not found'
212 if verbose: print
Jack Jansend09deac1996-10-22 15:32:06 +0000213
214 # Create the PythonCore alias(es)
Jack Jansen09dcff71997-08-27 14:11:15 +0000215 if verbose: print 'Creating PythonCore aliases in Extensions folder...'
Jack Jansend09deac1996-10-22 15:32:06 +0000216 os.chdir('::')
217 n = 0
Jack Jansen78c3cc41997-08-19 13:58:57 +0000218 n = n + mkcorealias('PythonCore', 'PythonCore')
Jack Jansend09deac1996-10-22 15:32:06 +0000219 n = n + mkcorealias('PythonCorePPC', ':build.macppc.shared:PythonCorePPC')
220 n = n + mkcorealias('PythonCoreCFM68K', ':build.mac68k.shared:PythonCoreCFM68K')
Jack Jansend0240831997-09-08 13:16:29 +0000221
222 # Install NumPy
223 if os.path.exists(':Extensions:NumPy:macmkaliases.py'):
224 MacOS.splash(SPLASH_NUMPY)
225 os.chdir(':Extensions:NumPy')
226 import macmkaliases
227 err = macmkaliases.main()
Jack Jansen09dcff71997-08-27 14:11:15 +0000228 if verbose and n == 0:
Jack Jansend09deac1996-10-22 15:32:06 +0000229 sys.exit(1)
Jack Jansend8eb8a71995-08-09 15:16:58 +0000230
231if __name__ == '__main__':
Jack Jansen09dcff71997-08-27 14:11:15 +0000232 if len(sys.argv) > 1 and sys.argv[1] == '-v':
233 verbose = 1
Jack Jansend8eb8a71995-08-09 15:16:58 +0000234 main()