blob: 8145f43a697c844d8d6e82cb6eaa0406eeb5ab47 [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 Jansen09dcff71997-08-27 14:11:15 +000013verbose=0
Jack Jansend8eb8a71995-08-09 15:16:58 +000014
Jack Jansen25b361f1996-08-20 16:35:30 +000015ppc_goals = [
16 ("AE.ppc.slb", "toolboxmodules.ppc.slb"),
17 ("Ctl.ppc.slb", "toolboxmodules.ppc.slb"),
18 ("Dlg.ppc.slb", "toolboxmodules.ppc.slb"),
19 ("Evt.ppc.slb", "toolboxmodules.ppc.slb"),
20 ("Fm.ppc.slb", "toolboxmodules.ppc.slb"),
21 ("Menu.ppc.slb", "toolboxmodules.ppc.slb"),
22 ("List.ppc.slb", "toolboxmodules.ppc.slb"),
23 ("Qd.ppc.slb", "toolboxmodules.ppc.slb"),
24 ("Res.ppc.slb", "toolboxmodules.ppc.slb"),
25 ("Scrap.ppc.slb", "toolboxmodules.ppc.slb"),
26 ("Snd.ppc.slb", "toolboxmodules.ppc.slb"),
27 ("TE.ppc.slb", "toolboxmodules.ppc.slb"),
28 ("Win.ppc.slb", "toolboxmodules.ppc.slb"),
29
30 ("Cm.ppc.slb", "qtmodules.ppc.slb"),
31 ("Qt.ppc.slb", "qtmodules.ppc.slb"),
32
33 ("imgcolormap.ppc.slb", "imgmodules.ppc.slb"),
34 ("imgformat.ppc.slb", "imgmodules.ppc.slb"),
35 ("imggif.ppc.slb", "imgmodules.ppc.slb"),
36 ("imgjpeg.ppc.slb", "imgmodules.ppc.slb"),
37 ("imgop.ppc.slb", "imgmodules.ppc.slb"),
38 ("imgpbm.ppc.slb", "imgmodules.ppc.slb"),
39 ("imgpgm.ppc.slb", "imgmodules.ppc.slb"),
40 ("imgppm.ppc.slb", "imgmodules.ppc.slb"),
41 ("imgtiff.ppc.slb", "imgmodules.ppc.slb"),
42 ("imgsgi.ppc.slb", "imgmodules.ppc.slb")
43]
44
45cfm68k_goals = [
46 ("AE.CFM68K.slb", "toolboxmodules.CFM68K.slb"),
47 ("Ctl.CFM68K.slb", "toolboxmodules.CFM68K.slb"),
48 ("Dlg.CFM68K.slb", "toolboxmodules.CFM68K.slb"),
49 ("Evt.CFM68K.slb", "toolboxmodules.CFM68K.slb"),
50 ("Fm.CFM68K.slb", "toolboxmodules.CFM68K.slb"),
51 ("Menu.CFM68K.slb", "toolboxmodules.CFM68K.slb"),
52 ("List.CFM68K.slb", "toolboxmodules.CFM68K.slb"),
53 ("Qd.CFM68K.slb", "toolboxmodules.CFM68K.slb"),
54 ("Res.CFM68K.slb", "toolboxmodules.CFM68K.slb"),
55 ("Scrap.CFM68K.slb", "toolboxmodules.CFM68K.slb"),
56 ("Snd.CFM68K.slb", "toolboxmodules.CFM68K.slb"),
57 ("TE.CFM68K.slb", "toolboxmodules.CFM68K.slb"),
58 ("Win.CFM68K.slb", "toolboxmodules.CFM68K.slb"),
59
60 ("Cm.CFM68K.slb", "qtmodules.CFM68K.slb"),
61 ("Qt.CFM68K.slb", "qtmodules.CFM68K.slb"),
Jack Jansen3c7739a1996-10-08 09:25:02 +000062
63 ("imgcolormap.CFM68K.slb", "imgmodules.CFM68K.slb"),
64 ("imgformat.CFM68K.slb", "imgmodules.CFM68K.slb"),
65 ("imggif.CFM68K.slb", "imgmodules.CFM68K.slb"),
66 ("imgjpeg.CFM68K.slb", "imgmodules.CFM68K.slb"),
67 ("imgop.CFM68K.slb", "imgmodules.CFM68K.slb"),
68 ("imgpbm.CFM68K.slb", "imgmodules.CFM68K.slb"),
69 ("imgpgm.CFM68K.slb", "imgmodules.CFM68K.slb"),
70 ("imgppm.CFM68K.slb", "imgmodules.CFM68K.slb"),
71 ("imgtiff.CFM68K.slb", "imgmodules.CFM68K.slb"),
72 ("imgsgi.CFM68K.slb", "imgmodules.CFM68K.slb")
Jack Jansend8eb8a71995-08-09 15:16:58 +000073]
74
Jack Jansene3c90a41996-08-28 14:19:53 +000075def gotopluginfolder():
76 """Go to the plugin folder, assuming we are somewhere in the Python tree"""
77 import os
78
79 while not os.path.isdir(":Plugins"):
80 os.chdir("::")
81 os.chdir(":Plugins")
Jack Jansen09dcff71997-08-27 14:11:15 +000082 if verbose: print "current directory is", os.getcwd()
Jack Jansene3c90a41996-08-28 14:19:53 +000083
84def loadtoolboxmodules():
85 """Attempt to load the Res module"""
86 try:
87 import Res
88 except ImportError, arg:
89 err1 = arg
90 pass
91 else:
Jack Jansen09dcff71997-08-27 14:11:15 +000092 if verbose: print 'imported Res the standard way.'
Jack Jansene3c90a41996-08-28 14:19:53 +000093 return
94
95 # We cannot import it. First attempt to load the cfm68k version
96 import imp
97 try:
98 dummy = imp.load_dynamic('Res', 'toolboxmodules.CFM68K.slb')
99 except ImportError, arg:
100 err2 = arg
101 pass
102 else:
Jack Jansen09dcff71997-08-27 14:11:15 +0000103 if verbose: print 'Loaded Res from toolboxmodules.CFM68K.slb.'
Jack Jansene3c90a41996-08-28 14:19:53 +0000104 return
105
106 # Ok, try the ppc version
107 try:
108 dummy = imp.load_dynamic('Res', 'toolboxmodules.ppc.slb')
109 except ImportError, arg:
110 err3 = arg
111 pass
112 else:
Jack Jansen09dcff71997-08-27 14:11:15 +0000113 if verbose: print 'Loaded Res from toolboxmodules.ppc.slb.'
Jack Jansene3c90a41996-08-28 14:19:53 +0000114 return
115
116 # Tough luck....
117 print "I cannot import the Res module, nor load it from either of"
118 print "toolboxmodules shared libraries. The errors encountered were:"
119 print "import Res:", err1
120 print "load from toolboxmodules.CFM68K.slb:", err2
121 print "load from toolboxmodules.ppc.slb:", err3
122 sys.exit(1)
123
Jack Jansend09deac1996-10-22 15:32:06 +0000124def getextensiondirfile(fname):
125 import macfs
126 import MACFS
127 vrefnum, dirid = macfs.FindFolder(MACFS.kOnSystemDisk, MACFS.kExtensionFolderType, 0)
128 fss = macfs.FSSpec((vrefnum, dirid, fname))
129 return fss.as_pathname()
130
131def mkcorealias(src, altsrc):
132 import string
133 import macostools
134 version = string.split(sys.version)[0]
135 dst = getextensiondirfile(src+ ' ' + version)
136 if not os.path.exists(src):
137 if not os.path.exists(altsrc):
Jack Jansen09dcff71997-08-27 14:11:15 +0000138 if verbose: print '*', src, 'not found'
Jack Jansend09deac1996-10-22 15:32:06 +0000139 return 0
140 src = altsrc
141 try:
142 os.unlink(dst)
143 except os.error:
144 pass
145 macostools.mkalias(src, dst)
Jack Jansen09dcff71997-08-27 14:11:15 +0000146 if verbose: print ' ', dst, '->', src
Jack Jansend09deac1996-10-22 15:32:06 +0000147 return 1
148
Jack Jansend8eb8a71995-08-09 15:16:58 +0000149
150def main():
Jack Jansene3c90a41996-08-28 14:19:53 +0000151 gotopluginfolder()
Jack Jansend8eb8a71995-08-09 15:16:58 +0000152
Jack Jansene3c90a41996-08-28 14:19:53 +0000153 loadtoolboxmodules()
154
155 import macostools
156
Jack Jansend8eb8a71995-08-09 15:16:58 +0000157 # Remove old .slb aliases and collect a list of .slb files
Jack Jansend8eb8a71995-08-09 15:16:58 +0000158 LibFiles = []
159 allfiles = os.listdir(':')
Jack Jansen09dcff71997-08-27 14:11:15 +0000160 if verbose: print 'Removing old aliases...'
Jack Jansend8eb8a71995-08-09 15:16:58 +0000161 for f in allfiles:
162 if f[-4:] == '.slb':
163 finfo = macfs.FSSpec(f).GetFInfo()
164 if finfo.Flags & 0x8000:
Jack Jansen09dcff71997-08-27 14:11:15 +0000165 if verbose: print ' Removing', f
Jack Jansend8eb8a71995-08-09 15:16:58 +0000166 os.unlink(f)
167 else:
168 LibFiles.append(f)
Jack Jansen09dcff71997-08-27 14:11:15 +0000169 if verbose: print ' Found', f
170 if verbose: print
Jack Jansend8eb8a71995-08-09 15:16:58 +0000171
Jack Jansene3c90a41996-08-28 14:19:53 +0000172 # Create the new PPC aliases.
Jack Jansen09dcff71997-08-27 14:11:15 +0000173 if verbose: print 'Creating PPC aliases...'
Jack Jansene3c90a41996-08-28 14:19:53 +0000174 for dst, src in ppc_goals:
175 if src in LibFiles:
176 macostools.mkalias(src, dst)
Jack Jansen09dcff71997-08-27 14:11:15 +0000177 if verbose: print ' ', dst, '->', src
Jack Jansene3c90a41996-08-28 14:19:53 +0000178 else:
Jack Jansen09dcff71997-08-27 14:11:15 +0000179 if verbose: print '*', dst, 'not created:', src, 'not found'
180 if verbose: print
Jack Jansene3c90a41996-08-28 14:19:53 +0000181
182 # Create the CFM68K aliases.
Jack Jansen09dcff71997-08-27 14:11:15 +0000183 if verbose: print 'Creating CFM68K aliases...'
Jack Jansene3c90a41996-08-28 14:19:53 +0000184 for dst, src in cfm68k_goals:
185 if src in LibFiles:
186 macostools.mkalias(src, dst)
Jack Jansen09dcff71997-08-27 14:11:15 +0000187 if verbose: print ' ', dst, '->', src
Jack Jansene3c90a41996-08-28 14:19:53 +0000188 else:
Jack Jansen09dcff71997-08-27 14:11:15 +0000189 if verbose: print '*', dst, 'not created:', src, 'not found'
190 if verbose: print
Jack Jansend09deac1996-10-22 15:32:06 +0000191
192 # Create the PythonCore alias(es)
Jack Jansen09dcff71997-08-27 14:11:15 +0000193 if verbose: print 'Creating PythonCore aliases in Extensions folder...'
Jack Jansend09deac1996-10-22 15:32:06 +0000194 os.chdir('::')
195 n = 0
Jack Jansen78c3cc41997-08-19 13:58:57 +0000196 n = n + mkcorealias('PythonCore', 'PythonCore')
Jack Jansend09deac1996-10-22 15:32:06 +0000197 n = n + mkcorealias('PythonCorePPC', ':build.macppc.shared:PythonCorePPC')
198 n = n + mkcorealias('PythonCoreCFM68K', ':build.mac68k.shared:PythonCoreCFM68K')
Jack Jansen09dcff71997-08-27 14:11:15 +0000199 if verbose and n == 0:
Jack Jansend09deac1996-10-22 15:32:06 +0000200 sys.exit(1)
Jack Jansend8eb8a71995-08-09 15:16:58 +0000201
202if __name__ == '__main__':
Jack Jansen09dcff71997-08-27 14:11:15 +0000203 if len(sys.argv) > 1 and sys.argv[1] == '-v':
204 verbose = 1
Jack Jansend8eb8a71995-08-09 15:16:58 +0000205 main()