blob: 2b59d60bf5b5bdfd5b6e3f77dfd27712724822cf [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 Jansen64700c92001-02-27 23:22:02 +000014import gestalt
Jack Jansen72b97ae2001-02-28 11:23:04 +000015import string
Jack Jansen5a6fdcd2001-08-25 12:15:04 +000016from Carbon import Res
Jack Jansend8eb8a71995-08-09 15:16:58 +000017
Jack Jansencbb5d492001-02-17 23:31:48 +000018SPLASH_COPYCORE=512
19SPLASH_COPYCARBON=513
20SPLASH_COPYCLASSIC=514
21SPLASH_BUILDAPPLETS=515
22
23ALERT_NOCORE=516
Jack Jansen52b5b022000-10-13 23:33:34 +000024ALERT_NONBOOT=517
25ALERT_NONBOOT_COPY=1
26ALERT_NONBOOT_ALIAS=2
Jack Jansend0240831997-09-08 13:16:29 +000027
Jack Jansen54f3bdb2001-03-08 23:07:57 +000028ALERT_NOTPYTHONFOLDER=518
29ALERT_NOTPYTHONFOLDER_REMOVE_QUIT=1
30ALERT_NOTPYTHONFOLDER_QUIT=2
31ALERT_NOTPYTHONFOLDER_CONTINUE=3
32
Jack Jansencbb5d492001-02-17 23:31:48 +000033APPLET_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),
Jack Jansend8eb8a71995-08-09 15:16:58 +000043]
44
Jack Jansend09deac1996-10-22 15:32:06 +000045def getextensiondirfile(fname):
46 import macfs
47 import MACFS
Jack Jansen64700c92001-02-27 23:22:02 +000048 try:
Jack Jansend11f93c2001-03-15 14:28:40 +000049 vrefnum, dirid = macfs.FindFolder(MACFS.kLocalDomain, MACFS.kSharedLibrariesFolderType, 1)
Jack Jansen64700c92001-02-27 23:22:02 +000050 except macfs.error:
Jack Jansend11f93c2001-03-15 14:28:40 +000051 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))
Jack Jansend09deac1996-10-22 15:32:06 +000056 return fss.as_pathname()
57
58def mkcorealias(src, altsrc):
59 import string
60 import macostools
61 version = string.split(sys.version)[0]
62 dst = getextensiondirfile(src+ ' ' + version)
Jack Jansen64700c92001-02-27 23:22:02 +000063 if not dst:
64 return 0
Just van Rossum786cb111999-01-30 17:46:34 +000065 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)):
Jack Jansend09deac1996-10-22 15:32:06 +000067 return 0
68 src = altsrc
69 try:
70 os.unlink(dst)
71 except os.error:
72 pass
Jack Jansen2e2546c2001-03-29 13:53:19 +000073 do_copy = ask_copy()
Jack Jansen2a42c3a2001-12-07 16:07:04 +000074 try:
75 if do_copy:
76 macostools.copy(os.path.join(sys.exec_prefix, src), dst)
77 else:
78 macostools.mkalias(os.path.join(sys.exec_prefix, src), dst)
79 except IOError:
80 return 0
Jack Jansen2e2546c2001-03-29 13:53:19 +000081 return 1
82
83do_copy = None
84def ask_copy():
85 global do_copy
86 if do_copy != None:
87 return do_copy
88 # On OSX always copy
89 if gestalt.gestalt('sysv') > 0x9ff:
90 do_copy = 1
91 return do_copy
Jack Jansen52b5b022000-10-13 23:33:34 +000092 do_copy = 0
93 if macfs.FSSpec(sys.exec_prefix).as_tuple()[0] != -1: # XXXX
94 try:
Jack Jansen5a6fdcd2001-08-25 12:15:04 +000095 from Carbon import Dlg
Jack Jansen52b5b022000-10-13 23:33:34 +000096 rv = Dlg.CautionAlert(ALERT_NONBOOT, None)
97 if rv == ALERT_NONBOOT_COPY:
98 do_copy = 1
99 except ImportError:
100 pass
Jack Jansen2e2546c2001-03-29 13:53:19 +0000101 return do_copy
102
Jack Jansencbb5d492001-02-17 23:31:48 +0000103
104# Copied from fullbuild, should probably go to buildtools
105def buildapplet(top, dummy, list):
106 """Create python applets"""
107 import buildtools
108 for src, dst, tmpl in list:
109 template = buildtools.findtemplate(tmpl)
110 if src[-3:] != '.py':
111 raise 'Should end in .py', src
112 base = os.path.basename(src)
113 src = os.path.join(top, src)
114 dst = os.path.join(top, dst)
115 try:
116 os.unlink(dst)
117 except os.error:
118 pass
119 try:
120 buildtools.process(template, src, dst, 1)
121 except buildtools.BuildError, arg:
122 print '**', dst, arg
123
124def buildcopy(top, dummy, list):
125 import macostools
126 for src, dst in list:
127 src = os.path.join(top, src)
128 dst = os.path.join(top, dst)
Jack Jansenc1463c982001-03-06 22:46:25 +0000129 macostools.copy(src, dst, forcetype="APPL")
Jack Jansend8eb8a71995-08-09 15:16:58 +0000130
131def main():
Jack Jansen72b97ae2001-02-28 11:23:04 +0000132 verbose = 0
133 try:
134 h = Res.GetResource('DLOG', SPLASH_COPYCORE)
135 del h
Jack Jansenf7fb3e62001-02-28 15:53:18 +0000136 except Res.Error:
Jack Jansen72b97ae2001-02-28 11:23:04 +0000137 verbose = 1
Jack Jansenf7fb3e62001-02-28 15:53:18 +0000138 print "Not running as applet: verbose on"
Jack Jansen54f3bdb2001-03-08 23:07:57 +0000139 oldcwd = os.getcwd()
Jack Jansencbb5d492001-02-17 23:31:48 +0000140 os.chdir(sys.prefix)
Jack Jansen54f3bdb2001-03-08 23:07:57 +0000141 newcwd = os.getcwd()
Jack Jansend11f93c2001-03-15 14:28:40 +0000142 if verbose:
143 print "Not running as applet: Skipping check for preference file correctness."
144 elif oldcwd != newcwd:
145 # Hack to make sure we get the new MACFS
146 sys.path.insert(0, os.path.join(oldcwd, ':Mac:Lib'))
Jack Jansen5a6fdcd2001-08-25 12:15:04 +0000147 from Carbon import Dlg
Jack Jansen54f3bdb2001-03-08 23:07:57 +0000148 rv = Dlg.CautionAlert(ALERT_NOTPYTHONFOLDER, None)
149 if rv == ALERT_NOTPYTHONFOLDER_REMOVE_QUIT:
Jack Jansen0a3939f2001-03-09 23:15:27 +0000150 import pythonprefs, preferences
151 prefpathname = pythonprefs.pref_fss.as_pathname()
152 os.remove(prefpathname)
Jack Jansen54f3bdb2001-03-08 23:07:57 +0000153 sys.exit(0)
154 elif rv == ALERT_NOTPYTHONFOLDER_QUIT:
155 sys.exit(0)
Jack Jansene3c90a41996-08-28 14:19:53 +0000156
Jack Jansenbb748621997-10-10 15:49:36 +0000157 sys.path.append('::Mac:Lib')
Jack Jansene3c90a41996-08-28 14:19:53 +0000158 import macostools
Jack Jansen3112bc12001-02-14 17:04:51 +0000159
Jack Jansend09deac1996-10-22 15:32:06 +0000160 # Create the PythonCore alias(es)
Jack Jansencbb5d492001-02-17 23:31:48 +0000161 MacOS.splash(SPLASH_COPYCORE)
Jack Jansen72b97ae2001-02-28 11:23:04 +0000162 if verbose:
163 print "Copying PythonCore..."
Jack Jansend09deac1996-10-22 15:32:06 +0000164 n = 0
Jack Jansen78c3cc41997-08-19 13:58:57 +0000165 n = n + mkcorealias('PythonCore', 'PythonCore')
Jack Jansen3112bc12001-02-14 17:04:51 +0000166 n = n + mkcorealias('PythonCoreCarbon', 'PythonCoreCarbon')
Jack Jansencbb5d492001-02-17 23:31:48 +0000167 if n == 0:
Jack Jansen5a6fdcd2001-08-25 12:15:04 +0000168 from Carbon import Dlg
Jack Jansencbb5d492001-02-17 23:31:48 +0000169 Dlg.CautionAlert(ALERT_NOCORE, None)
Jack Jansen72b97ae2001-02-28 11:23:04 +0000170 if verbose:
171 print "Warning: PythonCore not copied to Extensions folder"
Jack Jansen2a42c3a2001-12-07 16:07:04 +0000172 print " (Applets will not work unless run from the Python folder)"
Jack Jansencbb5d492001-02-17 23:31:48 +0000173 if sys.argv[0][-7:] == 'Classic':
174 do_classic = 1
175 elif sys.argv[0][-6:] == 'Carbon':
176 do_classic = 0
Jack Jansencbb5d492001-02-17 23:31:48 +0000177 else:
178 print "I don't know the sys.argv[0] function", sys.argv[0]
Jack Jansen72b97ae2001-02-28 11:23:04 +0000179 if verbose:
180 print "Configure classic or carbon - ",
181 rv = string.strip(sys.stdin.readline())
182 while rv and rv != "classic" and rv != "carbon":
183 print "Configure classic or carbon - ",
184 rv = string.strip(sys.stdin.readline())
185 if rv == "classic":
186 do_classic = 1
187 elif rv == "carbon":
188 do_classic = 0
189 else:
190 return
191 else:
192 sys.exit(1)
Jack Jansencbb5d492001-02-17 23:31:48 +0000193 if do_classic:
194 MacOS.splash(SPLASH_COPYCLASSIC)
195 buildcopy(sys.prefix, None, [("PythonInterpreterClassic", "PythonInterpreter")])
196 else:
197 MacOS.splash(SPLASH_COPYCARBON)
198 buildcopy(sys.prefix, None, [("PythonInterpreterCarbon", "PythonInterpreter")])
199 MacOS.splash(SPLASH_BUILDAPPLETS)
200 buildapplet(sys.prefix, None, APPLET_LIST)
201
Jack Jansend8eb8a71995-08-09 15:16:58 +0000202if __name__ == '__main__':
Jack Jansend8eb8a71995-08-09 15:16:58 +0000203 main()
Jack Jansenf7fb3e62001-02-28 15:53:18 +0000204 MacOS.splash()