Bump version to 0.9.1.
[python/dscho.git] / Mac / scripts / ConfigurePython.py
blob88d66a416f6569346bcaff787bdcd3ce209cb60a
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 ## ("Icn.ppc.slb", "toolboxmodules.ppc.slb"),
30 ## ("Menu.ppc.slb", "toolboxmodules.ppc.slb"),
31 ## ("List.ppc.slb", "toolboxmodules.ppc.slb"),
32 ## ("Qd.ppc.slb", "toolboxmodules.ppc.slb"),
33 ## ("Res.ppc.slb", "toolboxmodules.ppc.slb"),
34 ## ("Scrap.ppc.slb", "toolboxmodules.ppc.slb"),
35 ## ("Snd.ppc.slb", "toolboxmodules.ppc.slb"),
36 ## ("Sndihooks.ppc.slb", "toolboxmodules.ppc.slb"),
37 ## ("TE.ppc.slb", "toolboxmodules.ppc.slb"),
38 ## ("Win.ppc.slb", "toolboxmodules.ppc.slb"),
39 ##
40 ## ("Cm.ppc.slb", "qtmodules.ppc.slb"),
41 ## ("Qt.ppc.slb", "qtmodules.ppc.slb"),
45 cfm68k_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 ## ("Help.CFM68K.slb", "toolboxmodules.CFM68K.slb"),
52 ## ("Icn.CFM68K.slb", "toolboxmodules.CFM68K.slb"),
53 ## ("Menu.CFM68K.slb", "toolboxmodules.CFM68K.slb"),
54 ## ("List.CFM68K.slb", "toolboxmodules.CFM68K.slb"),
55 ## ("Qd.CFM68K.slb", "toolboxmodules.CFM68K.slb"),
56 ## ("Res.CFM68K.slb", "toolboxmodules.CFM68K.slb"),
57 ## ("Scrap.CFM68K.slb", "toolboxmodules.CFM68K.slb"),
58 ## ("Snd.CFM68K.slb", "toolboxmodules.CFM68K.slb"),
59 ## ("Sndihooks.CFM68K.slb", "toolboxmodules.CFM68K.slb"),
60 ## ("TE.CFM68K.slb", "toolboxmodules.CFM68K.slb"),
61 ## ("Win.CFM68K.slb", "toolboxmodules.CFM68K.slb"),
62 ##
63 ## ("Cm.CFM68K.slb", "qtmodules.CFM68K.slb"),
64 ## ("Qt.CFM68K.slb", "qtmodules.CFM68K.slb"),
67 def gotopluginfolder():
68 """Go to the plugin folder, assuming we are somewhere in the Python tree"""
69 import os
71 while not os.path.isdir(":Mac:PlugIns"):
72 os.chdir("::")
73 os.chdir(":Mac:PlugIns")
74 if verbose: print "current directory is", os.getcwd()
76 def loadtoolboxmodules():
77 """Attempt to load the Res module"""
78 try:
79 import Res
80 except ImportError, arg:
81 err1 = arg
82 pass
83 else:
84 if verbose: print 'imported Res the standard way.'
85 return
87 # We cannot import it. First attempt to load the cfm68k version
88 import imp
89 try:
90 dummy = imp.load_dynamic('Res', 'toolboxmodules.CFM68K.slb')
91 except ImportError, arg:
92 err2 = arg
93 pass
94 else:
95 if verbose: print 'Loaded Res from toolboxmodules.CFM68K.slb.'
96 return
98 # Ok, try the ppc version
99 try:
100 dummy = imp.load_dynamic('Res', 'toolboxmodules.ppc.slb')
101 except ImportError, arg:
102 err3 = arg
103 pass
104 else:
105 if verbose: print 'Loaded Res from toolboxmodules.ppc.slb.'
106 return
108 # Tough luck....
109 print "I cannot import the Res module, nor load it from either of"
110 print "toolboxmodules shared libraries. The errors encountered were:"
111 print "import Res:", err1
112 print "load from toolboxmodules.CFM68K.slb:", err2
113 print "load from toolboxmodules.ppc.slb:", err3
114 sys.exit(1)
116 def getextensiondirfile(fname):
117 import macfs
118 import MACFS
119 vrefnum, dirid = macfs.FindFolder(MACFS.kOnSystemDisk, MACFS.kExtensionFolderType, 0)
120 fss = macfs.FSSpec((vrefnum, dirid, fname))
121 return fss.as_pathname()
123 def mkcorealias(src, altsrc):
124 import string
125 import macostools
126 version = string.split(sys.version)[0]
127 dst = getextensiondirfile(src+ ' ' + version)
128 if not os.path.exists(os.path.join(sys.exec_prefix, src)):
129 if not os.path.exists(os.path.join(sys.exec_prefix, altsrc)):
130 if verbose: print '*', src, 'not found'
131 return 0
132 src = altsrc
133 try:
134 os.unlink(dst)
135 except os.error:
136 pass
137 macostools.mkalias(os.path.join(sys.exec_prefix, src), dst)
138 if verbose: print ' ', dst, '->', src
139 return 1
142 def main():
143 MacOS.splash(SPLASH_LOCATE)
144 gotopluginfolder()
146 loadtoolboxmodules()
148 sys.path.append('::Mac:Lib')
149 import macostools
151 # Remove old .slb aliases and collect a list of .slb files
152 didsplash = 0
153 LibFiles = []
154 allfiles = os.listdir(':')
155 if verbose: print 'Removing old aliases...'
156 for f in allfiles:
157 if f[-4:] == '.slb':
158 finfo = macfs.FSSpec(f).GetFInfo()
159 if finfo.Flags & 0x8000:
160 if not didsplash:
161 MacOS.splash(SPLASH_REMOVE)
162 didsplash = 1
163 if verbose: print ' Removing', f
164 os.unlink(f)
165 else:
166 LibFiles.append(f)
167 if verbose: print ' Found', f
168 if verbose: print
170 # Create the new PPC aliases.
171 didsplash = 0
172 if verbose: print 'Creating PPC aliases...'
173 for dst, src in ppc_goals:
174 if src in LibFiles:
175 if not didsplash:
176 MacOS.splash(SPLASH_PPC)
177 didsplash = 1
178 macostools.mkalias(src, dst)
179 if verbose: print ' ', dst, '->', src
180 else:
181 if verbose: print '*', dst, 'not created:', src, 'not found'
182 if verbose: print
184 # Create the CFM68K aliases.
185 didsplash = 0
186 if verbose: print 'Creating CFM68K aliases...'
187 for dst, src in cfm68k_goals:
188 if src in LibFiles:
189 if not didsplash:
190 MacOS.splash(SPLASH_CFM68K)
191 didsplash = 1
192 macostools.mkalias(src, dst)
193 if verbose: print ' ', dst, '->', src
194 else:
195 if verbose: print '*', dst, 'not created:', src, 'not found'
196 if verbose: print
198 # Create the PythonCore alias(es)
199 if verbose: print 'Creating PythonCore aliases in Extensions folder...'
200 os.chdir('::')
201 n = 0
202 n = n + mkcorealias('PythonCore', 'PythonCore')
203 n = n + mkcorealias('PythonCorePPC', ':build.macppc.shared:PythonCorePPC')
204 n = n + mkcorealias('PythonCoreCFM68K', ':build.mac68k.shared:PythonCoreCFM68K')
206 if verbose and n == 0:
207 sys.exit(1)
209 if __name__ == '__main__':
210 if len(sys.argv) > 1 and sys.argv[1] == '-v':
211 verbose = 1
212 main()