blob: 5c75f528ac61ea9ae1a3b2e7541795af2debabf5 [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 Jansend8eb8a71995-08-09 15:16:58 +000016
Jack Jansencbb5d492001-02-17 23:31:48 +000017SPLASH_COPYCORE=512
18SPLASH_COPYCARBON=513
19SPLASH_COPYCLASSIC=514
20SPLASH_BUILDAPPLETS=515
21
22ALERT_NOCORE=516
Jack Jansen52b5b022000-10-13 23:33:34 +000023ALERT_NONBOOT=517
24ALERT_NONBOOT_COPY=1
25ALERT_NONBOOT_ALIAS=2
Jack Jansend0240831997-09-08 13:16:29 +000026
Jack Jansencbb5d492001-02-17 23:31:48 +000027APPLET_LIST=[
28 (":Mac:scripts:EditPythonPrefs.py", "EditPythonPrefs", None),
29 (":Mac:scripts:BuildApplet.py", "BuildApplet", None),
30 (":Mac:scripts:BuildApplication.py", "BuildApplication", None),
31## (":Mac:scripts:ConfigurePython.py", "ConfigurePython", None),
32## (":Mac:scripts:ConfigurePython.py", "ConfigurePythonCarbon", "PythonInterpreterCarbon"),
33## (":Mac:scripts:ConfigurePython.py", "ConfigurePythonClassic", "PythonInterpreterClassic"),
34 (":Mac:Tools:IDE:PythonIDE.py", "Python IDE", None),
35 (":Mac:Tools:CGI:PythonCGISlave.py", ":Mac:Tools:CGI:PythonCGISlave", None),
36 (":Mac:Tools:CGI:BuildCGIApplet.py", ":Mac:Tools:CGI:BuildCGIApplet", None),
Jack Jansend8eb8a71995-08-09 15:16:58 +000037]
38
Jack Jansend09deac1996-10-22 15:32:06 +000039def getextensiondirfile(fname):
40 import macfs
41 import MACFS
Jack Jansen64700c92001-02-27 23:22:02 +000042 try:
43 vrefnum, dirid = macfs.FindFolder(MACFS.kOnSystemDisk, MACFS.kExtensionFolderType, 0)
44 fss = macfs.FSSpec((vrefnum, dirid, fname))
45 except macfs.error:
46 return None
Jack Jansend09deac1996-10-22 15:32:06 +000047 return fss.as_pathname()
48
49def mkcorealias(src, altsrc):
50 import string
51 import macostools
52 version = string.split(sys.version)[0]
53 dst = getextensiondirfile(src+ ' ' + version)
Jack Jansen64700c92001-02-27 23:22:02 +000054 if not dst:
55 return 0
Just van Rossum786cb111999-01-30 17:46:34 +000056 if not os.path.exists(os.path.join(sys.exec_prefix, src)):
57 if not os.path.exists(os.path.join(sys.exec_prefix, altsrc)):
Jack Jansend09deac1996-10-22 15:32:06 +000058 return 0
59 src = altsrc
60 try:
61 os.unlink(dst)
62 except os.error:
63 pass
Jack Jansen52b5b022000-10-13 23:33:34 +000064 do_copy = 0
65 if macfs.FSSpec(sys.exec_prefix).as_tuple()[0] != -1: # XXXX
66 try:
67 import Dlg
68 rv = Dlg.CautionAlert(ALERT_NONBOOT, None)
69 if rv == ALERT_NONBOOT_COPY:
70 do_copy = 1
71 except ImportError:
72 pass
73 if do_copy:
74 macostools.copy(os.path.join(sys.exec_prefix, src), dst)
75 else:
76 macostools.mkalias(os.path.join(sys.exec_prefix, src), dst)
Jack Jansend09deac1996-10-22 15:32:06 +000077 return 1
Jack Jansencbb5d492001-02-17 23:31:48 +000078
79# Copied from fullbuild, should probably go to buildtools
80def buildapplet(top, dummy, list):
81 """Create python applets"""
82 import buildtools
83 for src, dst, tmpl in list:
84 template = buildtools.findtemplate(tmpl)
85 if src[-3:] != '.py':
86 raise 'Should end in .py', src
87 base = os.path.basename(src)
88 src = os.path.join(top, src)
89 dst = os.path.join(top, dst)
90 try:
91 os.unlink(dst)
92 except os.error:
93 pass
94 try:
95 buildtools.process(template, src, dst, 1)
96 except buildtools.BuildError, arg:
97 print '**', dst, arg
98
99def buildcopy(top, dummy, list):
100 import macostools
101 for src, dst in list:
102 src = os.path.join(top, src)
103 dst = os.path.join(top, dst)
Jack Jansencbb5d492001-02-17 23:31:48 +0000104 macostools.copy(src, dst)
Jack Jansend8eb8a71995-08-09 15:16:58 +0000105
106def main():
Jack Jansen72b97ae2001-02-28 11:23:04 +0000107 verbose = 0
108 try:
109 h = Res.GetResource('DLOG', SPLASH_COPYCORE)
110 del h
111 except:
112 verbose = 1
Jack Jansencbb5d492001-02-17 23:31:48 +0000113 os.chdir(sys.prefix)
Jack Jansene3c90a41996-08-28 14:19:53 +0000114
Jack Jansenbb748621997-10-10 15:49:36 +0000115 sys.path.append('::Mac:Lib')
Jack Jansene3c90a41996-08-28 14:19:53 +0000116 import macostools
Jack Jansen3112bc12001-02-14 17:04:51 +0000117
Jack Jansend09deac1996-10-22 15:32:06 +0000118 # Create the PythonCore alias(es)
Jack Jansencbb5d492001-02-17 23:31:48 +0000119 MacOS.splash(SPLASH_COPYCORE)
Jack Jansen72b97ae2001-02-28 11:23:04 +0000120 if verbose:
121 print "Copying PythonCore..."
Jack Jansend09deac1996-10-22 15:32:06 +0000122 n = 0
Jack Jansen78c3cc41997-08-19 13:58:57 +0000123 n = n + mkcorealias('PythonCore', 'PythonCore')
Jack Jansen3112bc12001-02-14 17:04:51 +0000124 n = n + mkcorealias('PythonCoreCarbon', 'PythonCoreCarbon')
Jack Jansencbb5d492001-02-17 23:31:48 +0000125 if n == 0:
Jack Jansen64700c92001-02-27 23:22:02 +0000126 import Dlg
Jack Jansencbb5d492001-02-17 23:31:48 +0000127 Dlg.CautionAlert(ALERT_NOCORE, None)
Jack Jansen72b97ae2001-02-28 11:23:04 +0000128 if verbose:
129 print "Warning: PythonCore not copied to Extensions folder"
Jack Jansencbb5d492001-02-17 23:31:48 +0000130 if sys.argv[0][-7:] == 'Classic':
131 do_classic = 1
132 elif sys.argv[0][-6:] == 'Carbon':
133 do_classic = 0
Jack Jansencbb5d492001-02-17 23:31:48 +0000134 else:
135 print "I don't know the sys.argv[0] function", sys.argv[0]
Jack Jansen72b97ae2001-02-28 11:23:04 +0000136 if verbose:
137 print "Configure classic or carbon - ",
138 rv = string.strip(sys.stdin.readline())
139 while rv and rv != "classic" and rv != "carbon":
140 print "Configure classic or carbon - ",
141 rv = string.strip(sys.stdin.readline())
142 if rv == "classic":
143 do_classic = 1
144 elif rv == "carbon":
145 do_classic = 0
146 else:
147 return
148 else:
149 sys.exit(1)
Jack Jansencbb5d492001-02-17 23:31:48 +0000150 if do_classic:
151 MacOS.splash(SPLASH_COPYCLASSIC)
152 buildcopy(sys.prefix, None, [("PythonInterpreterClassic", "PythonInterpreter")])
153 else:
154 MacOS.splash(SPLASH_COPYCARBON)
155 buildcopy(sys.prefix, None, [("PythonInterpreterCarbon", "PythonInterpreter")])
156 MacOS.splash(SPLASH_BUILDAPPLETS)
157 buildapplet(sys.prefix, None, APPLET_LIST)
158
Jack Jansend8eb8a71995-08-09 15:16:58 +0000159if __name__ == '__main__':
Jack Jansend8eb8a71995-08-09 15:16:58 +0000160 main()