blob: 4223101c6b0a4fcb5cc17e04e579f479e4195dc1 [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 Jansenee0325a2003-05-09 10:15:18 +000012import warnings
13warnings.filterwarnings("ignore", "macfs.*", DeprecationWarning, __name__)
Jack Jansenbc128731995-09-24 21:06:50 +000014import macfs
Jack Jansend0240831997-09-08 13:16:29 +000015import MacOS
Jack Jansen64700c92001-02-27 23:22:02 +000016import gestalt
Jack Jansen72b97ae2001-02-28 11:23:04 +000017import string
Jack Jansen5a6fdcd2001-08-25 12:15:04 +000018from Carbon import Res
Jack Jansend8eb8a71995-08-09 15:16:58 +000019
Jack Jansencbb5d492001-02-17 23:31:48 +000020SPLASH_COPYCORE=512
21SPLASH_COPYCARBON=513
22SPLASH_COPYCLASSIC=514
23SPLASH_BUILDAPPLETS=515
24
25ALERT_NOCORE=516
Jack Jansen52b5b022000-10-13 23:33:34 +000026ALERT_NONBOOT=517
27ALERT_NONBOOT_COPY=1
28ALERT_NONBOOT_ALIAS=2
Jack Jansend0240831997-09-08 13:16:29 +000029
Jack Jansen54f3bdb2001-03-08 23:07:57 +000030ALERT_NOTPYTHONFOLDER=518
31ALERT_NOTPYTHONFOLDER_REMOVE_QUIT=1
32ALERT_NOTPYTHONFOLDER_QUIT=2
33ALERT_NOTPYTHONFOLDER_CONTINUE=3
34
Jack Jansencbb5d492001-02-17 23:31:48 +000035APPLET_LIST=[
36 (":Mac:scripts:EditPythonPrefs.py", "EditPythonPrefs", None),
37 (":Mac:scripts:BuildApplet.py", "BuildApplet", None),
38 (":Mac:scripts:BuildApplication.py", "BuildApplication", None),
39## (":Mac:scripts:ConfigurePython.py", "ConfigurePython", None),
40## (":Mac:scripts:ConfigurePython.py", "ConfigurePythonCarbon", "PythonInterpreterCarbon"),
41## (":Mac:scripts:ConfigurePython.py", "ConfigurePythonClassic", "PythonInterpreterClassic"),
42 (":Mac:Tools:IDE:PythonIDE.py", "Python IDE", None),
43 (":Mac:Tools:CGI:PythonCGISlave.py", ":Mac:Tools:CGI:PythonCGISlave", None),
44 (":Mac:Tools:CGI:BuildCGIApplet.py", ":Mac:Tools:CGI:BuildCGIApplet", None),
Jack Jansend8eb8a71995-08-09 15:16:58 +000045]
46
Jack Jansend09deac1996-10-22 15:32:06 +000047def getextensiondirfile(fname):
48 import macfs
49 import MACFS
Jack Jansen64700c92001-02-27 23:22:02 +000050 try:
Jack Jansend11f93c2001-03-15 14:28:40 +000051 vrefnum, dirid = macfs.FindFolder(MACFS.kLocalDomain, MACFS.kSharedLibrariesFolderType, 1)
Jack Jansen64700c92001-02-27 23:22:02 +000052 except macfs.error:
Jack Jansend11f93c2001-03-15 14:28:40 +000053 try:
54 vrefnum, dirid = macfs.FindFolder(MACFS.kOnSystemDisk, MACFS.kSharedLibrariesFolderType, 1)
55 except macfs.error:
56 return None
57 fss = macfs.FSSpec((vrefnum, dirid, fname))
Jack Jansend09deac1996-10-22 15:32:06 +000058 return fss.as_pathname()
59
60def mkcorealias(src, altsrc):
61 import string
62 import macostools
63 version = string.split(sys.version)[0]
64 dst = getextensiondirfile(src+ ' ' + version)
Jack Jansen64700c92001-02-27 23:22:02 +000065 if not dst:
66 return 0
Just van Rossum786cb111999-01-30 17:46:34 +000067 if not os.path.exists(os.path.join(sys.exec_prefix, src)):
68 if not os.path.exists(os.path.join(sys.exec_prefix, altsrc)):
Jack Jansend09deac1996-10-22 15:32:06 +000069 return 0
70 src = altsrc
71 try:
72 os.unlink(dst)
73 except os.error:
74 pass
Jack Jansen2e2546c2001-03-29 13:53:19 +000075 do_copy = ask_copy()
Jack Jansen2a42c3a2001-12-07 16:07:04 +000076 try:
77 if do_copy:
78 macostools.copy(os.path.join(sys.exec_prefix, src), dst)
79 else:
80 macostools.mkalias(os.path.join(sys.exec_prefix, src), dst)
81 except IOError:
82 return 0
Jack Jansen2e2546c2001-03-29 13:53:19 +000083 return 1
84
85do_copy = None
86def ask_copy():
87 global do_copy
88 if do_copy != None:
89 return do_copy
90 # On OSX always copy
91 if gestalt.gestalt('sysv') > 0x9ff:
92 do_copy = 1
93 return do_copy
Jack Jansen52b5b022000-10-13 23:33:34 +000094 do_copy = 0
95 if macfs.FSSpec(sys.exec_prefix).as_tuple()[0] != -1: # XXXX
96 try:
Jack Jansen5a6fdcd2001-08-25 12:15:04 +000097 from Carbon import Dlg
Jack Jansen52b5b022000-10-13 23:33:34 +000098 rv = Dlg.CautionAlert(ALERT_NONBOOT, None)
99 if rv == ALERT_NONBOOT_COPY:
100 do_copy = 1
101 except ImportError:
102 pass
Jack Jansen2e2546c2001-03-29 13:53:19 +0000103 return do_copy
104
Jack Jansencbb5d492001-02-17 23:31:48 +0000105
106# Copied from fullbuild, should probably go to buildtools
107def buildapplet(top, dummy, list):
108 """Create python applets"""
109 import buildtools
110 for src, dst, tmpl in list:
111 template = buildtools.findtemplate(tmpl)
112 if src[-3:] != '.py':
113 raise 'Should end in .py', src
114 base = os.path.basename(src)
115 src = os.path.join(top, src)
116 dst = os.path.join(top, dst)
117 try:
118 os.unlink(dst)
119 except os.error:
120 pass
121 try:
122 buildtools.process(template, src, dst, 1)
123 except buildtools.BuildError, arg:
124 print '**', dst, arg
125
126def buildcopy(top, dummy, list):
127 import macostools
128 for src, dst in list:
129 src = os.path.join(top, src)
130 dst = os.path.join(top, dst)
Jack Jansenc1463c982001-03-06 22:46:25 +0000131 macostools.copy(src, dst, forcetype="APPL")
Jack Jansend8eb8a71995-08-09 15:16:58 +0000132
133def main():
Jack Jansen72b97ae2001-02-28 11:23:04 +0000134 verbose = 0
135 try:
136 h = Res.GetResource('DLOG', SPLASH_COPYCORE)
137 del h
Jack Jansenf7fb3e62001-02-28 15:53:18 +0000138 except Res.Error:
Jack Jansen72b97ae2001-02-28 11:23:04 +0000139 verbose = 1
Jack Jansenf7fb3e62001-02-28 15:53:18 +0000140 print "Not running as applet: verbose on"
Jack Jansen54f3bdb2001-03-08 23:07:57 +0000141 oldcwd = os.getcwd()
Jack Jansencbb5d492001-02-17 23:31:48 +0000142 os.chdir(sys.prefix)
Jack Jansen54f3bdb2001-03-08 23:07:57 +0000143 newcwd = os.getcwd()
Jack Jansend11f93c2001-03-15 14:28:40 +0000144 if verbose:
145 print "Not running as applet: Skipping check for preference file correctness."
146 elif oldcwd != newcwd:
147 # Hack to make sure we get the new MACFS
148 sys.path.insert(0, os.path.join(oldcwd, ':Mac:Lib'))
Jack Jansen5a6fdcd2001-08-25 12:15:04 +0000149 from Carbon import Dlg
Jack Jansen54f3bdb2001-03-08 23:07:57 +0000150 rv = Dlg.CautionAlert(ALERT_NOTPYTHONFOLDER, None)
151 if rv == ALERT_NOTPYTHONFOLDER_REMOVE_QUIT:
Jack Jansen0a3939f2001-03-09 23:15:27 +0000152 import pythonprefs, preferences
153 prefpathname = pythonprefs.pref_fss.as_pathname()
154 os.remove(prefpathname)
Jack Jansen54f3bdb2001-03-08 23:07:57 +0000155 sys.exit(0)
156 elif rv == ALERT_NOTPYTHONFOLDER_QUIT:
157 sys.exit(0)
Jack Jansene3c90a41996-08-28 14:19:53 +0000158
Jack Jansenbb748621997-10-10 15:49:36 +0000159 sys.path.append('::Mac:Lib')
Jack Jansene3c90a41996-08-28 14:19:53 +0000160 import macostools
Jack Jansen3112bc12001-02-14 17:04:51 +0000161
Jack Jansend09deac1996-10-22 15:32:06 +0000162 # Create the PythonCore alias(es)
Jack Jansencbb5d492001-02-17 23:31:48 +0000163 MacOS.splash(SPLASH_COPYCORE)
Jack Jansen72b97ae2001-02-28 11:23:04 +0000164 if verbose:
Jack Jansen3e828722003-01-08 16:27:44 +0000165 print "Copying PythonCoreCarbon..."
Jack Jansend09deac1996-10-22 15:32:06 +0000166 n = 0
Jack Jansen3112bc12001-02-14 17:04:51 +0000167 n = n + mkcorealias('PythonCoreCarbon', 'PythonCoreCarbon')
Jack Jansencbb5d492001-02-17 23:31:48 +0000168 if n == 0:
Jack Jansen5a6fdcd2001-08-25 12:15:04 +0000169 from Carbon import Dlg
Jack Jansencbb5d492001-02-17 23:31:48 +0000170 Dlg.CautionAlert(ALERT_NOCORE, None)
Jack Jansen72b97ae2001-02-28 11:23:04 +0000171 if verbose:
172 print "Warning: PythonCore not copied to Extensions folder"
Jack Jansen2a42c3a2001-12-07 16:07:04 +0000173 print " (Applets will not work unless run from the Python folder)"
Jack Jansencbb5d492001-02-17 23:31:48 +0000174 MacOS.splash(SPLASH_BUILDAPPLETS)
175 buildapplet(sys.prefix, None, APPLET_LIST)
176
Jack Jansend8eb8a71995-08-09 15:16:58 +0000177if __name__ == '__main__':
Jack Jansend8eb8a71995-08-09 15:16:58 +0000178 main()
Jack Jansenf7fb3e62001-02-28 15:53:18 +0000179 MacOS.splash()