mirror of https://github.com/python/cpython.git
228 lines
6.3 KiB
Python
228 lines
6.3 KiB
Python
# 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
|
|
verbose=0
|
|
|
|
SPLASH_LOCATE=512
|
|
SPLASH_REMOVE=513
|
|
SPLASH_CFM68K=514
|
|
SPLASH_PPC=515
|
|
SPLASH_NUMPY=516
|
|
ALERT_NONBOOT=517
|
|
ALERT_NONBOOT_COPY=1
|
|
ALERT_NONBOOT_ALIAS=2
|
|
|
|
ppc_goals = [
|
|
## ("AE.ppc.slb", "toolboxmodules.ppc.slb"),
|
|
## ("Ctl.ppc.slb", "toolboxmodules.ppc.slb"),
|
|
## ("Dlg.ppc.slb", "toolboxmodules.ppc.slb"),
|
|
## ("Evt.ppc.slb", "toolboxmodules.ppc.slb"),
|
|
## ("Fm.ppc.slb", "toolboxmodules.ppc.slb"),
|
|
## ("Help.ppc.slb", "toolboxmodules.ppc.slb"),
|
|
## ("Icn.ppc.slb", "toolboxmodules.ppc.slb"),
|
|
## ("Menu.ppc.slb", "toolboxmodules.ppc.slb"),
|
|
## ("List.ppc.slb", "toolboxmodules.ppc.slb"),
|
|
## ("Qd.ppc.slb", "toolboxmodules.ppc.slb"),
|
|
## ("Res.ppc.slb", "toolboxmodules.ppc.slb"),
|
|
## ("Scrap.ppc.slb", "toolboxmodules.ppc.slb"),
|
|
## ("Snd.ppc.slb", "toolboxmodules.ppc.slb"),
|
|
## ("Sndihooks.ppc.slb", "toolboxmodules.ppc.slb"),
|
|
## ("TE.ppc.slb", "toolboxmodules.ppc.slb"),
|
|
## ("Win.ppc.slb", "toolboxmodules.ppc.slb"),
|
|
##
|
|
## ("Cm.ppc.slb", "qtmodules.ppc.slb"),
|
|
## ("Qt.ppc.slb", "qtmodules.ppc.slb"),
|
|
|
|
]
|
|
|
|
cfm68k_goals = [
|
|
## ("AE.CFM68K.slb", "toolboxmodules.CFM68K.slb"),
|
|
## ("Ctl.CFM68K.slb", "toolboxmodules.CFM68K.slb"),
|
|
## ("Dlg.CFM68K.slb", "toolboxmodules.CFM68K.slb"),
|
|
## ("Evt.CFM68K.slb", "toolboxmodules.CFM68K.slb"),
|
|
## ("Fm.CFM68K.slb", "toolboxmodules.CFM68K.slb"),
|
|
## ("Help.CFM68K.slb", "toolboxmodules.CFM68K.slb"),
|
|
## ("Icn.CFM68K.slb", "toolboxmodules.CFM68K.slb"),
|
|
## ("Menu.CFM68K.slb", "toolboxmodules.CFM68K.slb"),
|
|
## ("List.CFM68K.slb", "toolboxmodules.CFM68K.slb"),
|
|
## ("Qd.CFM68K.slb", "toolboxmodules.CFM68K.slb"),
|
|
## ("Res.CFM68K.slb", "toolboxmodules.CFM68K.slb"),
|
|
## ("Scrap.CFM68K.slb", "toolboxmodules.CFM68K.slb"),
|
|
## ("Snd.CFM68K.slb", "toolboxmodules.CFM68K.slb"),
|
|
## ("Sndihooks.CFM68K.slb", "toolboxmodules.CFM68K.slb"),
|
|
## ("TE.CFM68K.slb", "toolboxmodules.CFM68K.slb"),
|
|
## ("Win.CFM68K.slb", "toolboxmodules.CFM68K.slb"),
|
|
##
|
|
## ("Cm.CFM68K.slb", "qtmodules.CFM68K.slb"),
|
|
## ("Qt.CFM68K.slb", "qtmodules.CFM68K.slb"),
|
|
]
|
|
|
|
def gotopluginfolder():
|
|
"""Go to the plugin folder, assuming we are somewhere in the Python tree"""
|
|
import os
|
|
|
|
while not os.path.isdir(":Mac:PlugIns"):
|
|
os.chdir("::")
|
|
os.chdir(":Mac:PlugIns")
|
|
if verbose: print "current directory is", os.getcwd()
|
|
|
|
def loadtoolboxmodules():
|
|
"""Attempt to load the Res module"""
|
|
try:
|
|
import Res
|
|
except ImportError, arg:
|
|
err1 = arg
|
|
pass
|
|
else:
|
|
if verbose: print 'imported Res the standard way.'
|
|
return
|
|
|
|
# We cannot import it. First attempt to load the cfm68k version
|
|
import imp
|
|
try:
|
|
dummy = imp.load_dynamic('Res', 'toolboxmodules.CFM68K.slb')
|
|
except ImportError, arg:
|
|
err2 = arg
|
|
pass
|
|
else:
|
|
if verbose: print 'Loaded Res from toolboxmodules.CFM68K.slb.'
|
|
return
|
|
|
|
# Ok, try the ppc version
|
|
try:
|
|
dummy = imp.load_dynamic('Res', 'toolboxmodules.ppc.slb')
|
|
except ImportError, arg:
|
|
err3 = arg
|
|
pass
|
|
else:
|
|
if verbose: print 'Loaded Res from toolboxmodules.ppc.slb.'
|
|
return
|
|
|
|
# Tough luck....
|
|
print "I cannot import the Res module, nor load it from either of"
|
|
print "toolboxmodules shared libraries. The errors encountered were:"
|
|
print "import Res:", err1
|
|
print "load from toolboxmodules.CFM68K.slb:", err2
|
|
print "load from toolboxmodules.ppc.slb:", err3
|
|
sys.exit(1)
|
|
|
|
def getextensiondirfile(fname):
|
|
import macfs
|
|
import MACFS
|
|
vrefnum, dirid = macfs.FindFolder(MACFS.kOnSystemDisk, MACFS.kExtensionFolderType, 0)
|
|
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 os.path.exists(os.path.join(sys.exec_prefix, src)):
|
|
if not os.path.exists(os.path.join(sys.exec_prefix, altsrc)):
|
|
if verbose: print '*', src, 'not found'
|
|
return 0
|
|
src = altsrc
|
|
try:
|
|
os.unlink(dst)
|
|
except os.error:
|
|
pass
|
|
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
|
|
if do_copy:
|
|
macostools.copy(os.path.join(sys.exec_prefix, src), dst)
|
|
else:
|
|
macostools.mkalias(os.path.join(sys.exec_prefix, src), dst)
|
|
if verbose: print ' ', dst, '->', src
|
|
return 1
|
|
|
|
|
|
def main():
|
|
MacOS.splash(SPLASH_LOCATE)
|
|
gotopluginfolder()
|
|
|
|
loadtoolboxmodules()
|
|
|
|
sys.path.append('::Mac:Lib')
|
|
import macostools
|
|
|
|
# Remove old .slb aliases and collect a list of .slb files
|
|
didsplash = 0
|
|
LibFiles = []
|
|
allfiles = os.listdir(':')
|
|
if verbose: print 'Removing old aliases...'
|
|
for f in allfiles:
|
|
if f[-4:] == '.slb':
|
|
finfo = macfs.FSSpec(f).GetFInfo()
|
|
if finfo.Flags & 0x8000:
|
|
if not didsplash:
|
|
MacOS.splash(SPLASH_REMOVE)
|
|
didsplash = 1
|
|
if verbose: print ' Removing', f
|
|
os.unlink(f)
|
|
else:
|
|
LibFiles.append(f)
|
|
if verbose: print ' Found', f
|
|
if verbose: print
|
|
|
|
# Create the new PPC aliases.
|
|
didsplash = 0
|
|
if verbose: print 'Creating PPC aliases...'
|
|
for dst, src in ppc_goals:
|
|
if src in LibFiles:
|
|
if not didsplash:
|
|
MacOS.splash(SPLASH_PPC)
|
|
didsplash = 1
|
|
macostools.mkalias(src, dst)
|
|
if verbose: print ' ', dst, '->', src
|
|
else:
|
|
if verbose: print '*', dst, 'not created:', src, 'not found'
|
|
if verbose: print
|
|
|
|
# Create the CFM68K aliases.
|
|
didsplash = 0
|
|
if verbose: print 'Creating CFM68K aliases...'
|
|
for dst, src in cfm68k_goals:
|
|
if src in LibFiles:
|
|
if not didsplash:
|
|
MacOS.splash(SPLASH_CFM68K)
|
|
didsplash = 1
|
|
macostools.mkalias(src, dst)
|
|
if verbose: print ' ', dst, '->', src
|
|
else:
|
|
if verbose: print '*', dst, 'not created:', src, 'not found'
|
|
if verbose: print
|
|
|
|
# Create the PythonCore alias(es)
|
|
if verbose: print 'Creating PythonCore aliases in Extensions folder...'
|
|
os.chdir('::')
|
|
n = 0
|
|
n = n + mkcorealias('PythonCore', 'PythonCore')
|
|
n = n + mkcorealias('PythonCorePPC', ':build.macppc.shared:PythonCorePPC')
|
|
n = n + mkcorealias('PythonCoreCFM68K', ':build.mac68k.shared:PythonCoreCFM68K')
|
|
|
|
if verbose and n == 0:
|
|
sys.exit(1)
|
|
|
|
if __name__ == '__main__':
|
|
if len(sys.argv) > 1 and sys.argv[1] == '-v':
|
|
verbose = 1
|
|
main()
|