view Mac/scripts/ConfigurePython.py @ 15210:d2c205c36d8a legacy-trunk

If we're installing to another partition than the system partition offer to copy PythonCore in stead of aliasing it. This should fix the applet problems some people have.
author Jack Jansen <jack.jansen@cwi.nl>
date Fri, 13 Oct 2000 23:33:34 +0000
parents e9f5985b6ea4
children 07ffb0c3bd5e
line wrap: on
line source

# 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()