mirror of
				https://github.com/python/cpython.git
				synced 2025-11-04 07:31:38 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			204 lines
		
	
	
	
		
			5.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			204 lines
		
	
	
	
		
			5.5 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
 | 
						|
import gestalt
 | 
						|
import string
 | 
						|
from Carbon 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()
 | 
						|
	try:
 | 
						|
		if do_copy:
 | 
						|
			macostools.copy(os.path.join(sys.exec_prefix, src), dst)
 | 
						|
		else:
 | 
						|
			macostools.mkalias(os.path.join(sys.exec_prefix, src), dst)
 | 
						|
	except IOError:
 | 
						|
		return 0
 | 
						|
	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:
 | 
						|
			from Carbon 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'))
 | 
						|
		from Carbon 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:
 | 
						|
		from Carbon import Dlg
 | 
						|
		Dlg.CautionAlert(ALERT_NOCORE, None)
 | 
						|
		if verbose:
 | 
						|
			print "Warning: PythonCore not copied to Extensions folder"
 | 
						|
			print "         (Applets will not work unless run from the Python 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()
 |