1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200
|
# This python script creates Finder aliases for all the
# dynamically-loaded modules that "live in" in a single
# shared library.
#
# This is sort-of a merger between Jack's MkPluginAliases
# and Guido's mkaliases.
#
# Jack Jansen, CWI, August 1996
import sys
import os
import macfs
import MacOS
import gestalt
import string
import Res
SPLASH_COPYCORE=512
SPLASH_COPYCARBON=513
SPLASH_COPYCLASSIC=514
SPLASH_BUILDAPPLETS=515
ALERT_NOCORE=516
ALERT_NONBOOT=517
ALERT_NONBOOT_COPY=1
ALERT_NONBOOT_ALIAS=2
ALERT_NOTPYTHONFOLDER=518
ALERT_NOTPYTHONFOLDER_REMOVE_QUIT=1
ALERT_NOTPYTHONFOLDER_QUIT=2
ALERT_NOTPYTHONFOLDER_CONTINUE=3
APPLET_LIST=[
(":Mac:scripts:EditPythonPrefs.py", "EditPythonPrefs", None),
(":Mac:scripts:BuildApplet.py", "BuildApplet", None),
(":Mac:scripts:BuildApplication.py", "BuildApplication", None),
## (":Mac:scripts:ConfigurePython.py", "ConfigurePython", None),
## (":Mac:scripts:ConfigurePython.py", "ConfigurePythonCarbon", "PythonInterpreterCarbon"),
## (":Mac:scripts:ConfigurePython.py", "ConfigurePythonClassic", "PythonInterpreterClassic"),
(":Mac:Tools:IDE:PythonIDE.py", "Python IDE", None),
(":Mac:Tools:CGI:PythonCGISlave.py", ":Mac:Tools:CGI:PythonCGISlave", None),
(":Mac:Tools:CGI:BuildCGIApplet.py", ":Mac:Tools:CGI:BuildCGIApplet", None),
]
def getextensiondirfile(fname):
import macfs
import MACFS
try:
vrefnum, dirid = macfs.FindFolder(MACFS.kLocalDomain, MACFS.kSharedLibrariesFolderType, 1)
except macfs.error:
try:
vrefnum, dirid = macfs.FindFolder(MACFS.kOnSystemDisk, MACFS.kSharedLibrariesFolderType, 1)
except macfs.error:
return None
fss = macfs.FSSpec((vrefnum, dirid, fname))
return fss.as_pathname()
def mkcorealias(src, altsrc):
import string
import macostools
version = string.split(sys.version)[0]
dst = getextensiondirfile(src+ ' ' + version)
if not dst:
return 0
if not os.path.exists(os.path.join(sys.exec_prefix, src)):
if not os.path.exists(os.path.join(sys.exec_prefix, altsrc)):
return 0
src = altsrc
try:
os.unlink(dst)
except os.error:
pass
do_copy = ask_copy()
if do_copy:
macostools.copy(os.path.join(sys.exec_prefix, src), dst)
else:
macostools.mkalias(os.path.join(sys.exec_prefix, src), dst)
return 1
do_copy = None
def ask_copy():
global do_copy
if do_copy != None:
return do_copy
# On OSX always copy
if gestalt.gestalt('sysv') > 0x9ff:
do_copy = 1
return do_copy
do_copy = 0
if macfs.FSSpec(sys.exec_prefix).as_tuple()[0] != -1: # XXXX
try:
import Dlg
rv = Dlg.CautionAlert(ALERT_NONBOOT, None)
if rv == ALERT_NONBOOT_COPY:
do_copy = 1
except ImportError:
pass
return do_copy
# Copied from fullbuild, should probably go to buildtools
def buildapplet(top, dummy, list):
"""Create python applets"""
import buildtools
for src, dst, tmpl in list:
template = buildtools.findtemplate(tmpl)
if src[-3:] != '.py':
raise 'Should end in .py', src
base = os.path.basename(src)
src = os.path.join(top, src)
dst = os.path.join(top, dst)
try:
os.unlink(dst)
except os.error:
pass
try:
buildtools.process(template, src, dst, 1)
except buildtools.BuildError, arg:
print '**', dst, arg
def buildcopy(top, dummy, list):
import macostools
for src, dst in list:
src = os.path.join(top, src)
dst = os.path.join(top, dst)
macostools.copy(src, dst, forcetype="APPL")
def main():
verbose = 0
try:
h = Res.GetResource('DLOG', SPLASH_COPYCORE)
del h
except Res.Error:
verbose = 1
print "Not running as applet: verbose on"
oldcwd = os.getcwd()
os.chdir(sys.prefix)
newcwd = os.getcwd()
if verbose:
print "Not running as applet: Skipping check for preference file correctness."
elif oldcwd != newcwd:
# Hack to make sure we get the new MACFS
sys.path.insert(0, os.path.join(oldcwd, ':Mac:Lib'))
import Dlg
rv = Dlg.CautionAlert(ALERT_NOTPYTHONFOLDER, None)
if rv == ALERT_NOTPYTHONFOLDER_REMOVE_QUIT:
import pythonprefs, preferences
prefpathname = pythonprefs.pref_fss.as_pathname()
os.remove(prefpathname)
sys.exit(0)
elif rv == ALERT_NOTPYTHONFOLDER_QUIT:
sys.exit(0)
sys.path.append('::Mac:Lib')
import macostools
# Create the PythonCore alias(es)
MacOS.splash(SPLASH_COPYCORE)
if verbose:
print "Copying PythonCore..."
n = 0
n = n + mkcorealias('PythonCore', 'PythonCore')
n = n + mkcorealias('PythonCoreCarbon', 'PythonCoreCarbon')
if n == 0:
import Dlg
Dlg.CautionAlert(ALERT_NOCORE, None)
if verbose:
print "Warning: PythonCore not copied to Extensions folder"
if sys.argv[0][-7:] == 'Classic':
do_classic = 1
elif sys.argv[0][-6:] == 'Carbon':
do_classic = 0
else:
print "I don't know the sys.argv[0] function", sys.argv[0]
if verbose:
print "Configure classic or carbon - ",
rv = string.strip(sys.stdin.readline())
while rv and rv != "classic" and rv != "carbon":
print "Configure classic or carbon - ",
rv = string.strip(sys.stdin.readline())
if rv == "classic":
do_classic = 1
elif rv == "carbon":
do_classic = 0
else:
return
else:
sys.exit(1)
if do_classic:
MacOS.splash(SPLASH_COPYCLASSIC)
buildcopy(sys.prefix, None, [("PythonInterpreterClassic", "PythonInterpreter")])
else:
MacOS.splash(SPLASH_COPYCARBON)
buildcopy(sys.prefix, None, [("PythonInterpreterCarbon", "PythonInterpreter")])
MacOS.splash(SPLASH_BUILDAPPLETS)
buildapplet(sys.prefix, None, APPLET_LIST)
if __name__ == '__main__':
main()
MacOS.splash()
|