[Python-checkins] python/dist/src/Lib/plat-mac aepack.py,1.3,1.4 aetypes.py,1.2,1.3 bgenlocations.py,1.2,1.3 buildtools.py,1.4,1.5

jackjansen@users.sourceforge.net jackjansen@users.sourceforge.net
2003年2月12日 07:37:30 -0800


Update of /cvsroot/python/python/dist/src/Lib/plat-mac
In directory sc8-pr-cvs1:/tmp/cvs-serv30629
Modified Files:
	aepack.py aetypes.py bgenlocations.py buildtools.py 
Log Message:
When in MacPython-OSX use bundlebuilder to create .app bundles.
Index: aepack.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/plat-mac/aepack.py,v
retrieving revision 1.3
retrieving revision 1.4
diff -C2 -d -r1.3 -r1.4
*** aepack.py	29 Jan 2003 10:41:18 -0000	1.3
--- aepack.py	12 Feb 2003 15:37:25 -0000	1.4
***************
*** 89,92 ****
--- 89,94 ----
 	if isinstance(x, FSSType):
 		return AE.AECreateDesc('fss ', x.data)
+ 	if isinstance(x, FSRefType):
+ 		return AE.AECreateDesc('fsrf', x.data)
 	if isinstance(x, AliasType):
 		return AE.AECreateDesc('alis', x.data)
***************
*** 167,170 ****
--- 169,174 ----
 	if t == typeFSS:
 		return Carbon.File.FSSpec(rawdata=desc.data)
+ 	if t == typeFSRef:
+ 		return Carbon.File.FSRef(rawdata=desc.data)
 	if t == typeInsertionLoc:
 		record = desc.AECoerceDesc('reco')
Index: aetypes.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/plat-mac/aetypes.py,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -d -r1.2 -r1.3
*** aetypes.py	29 Jan 2003 10:39:19 -0000	1.2
--- aetypes.py	12 Feb 2003 15:37:25 -0000	1.3
***************
*** 12,33 ****
 def pack(*args, **kwargs):
 	from aepack import pack
! 	return apply(pack, args, kwargs)
 	
- def IsSubclass(cls, base):
- 	"""Test whether CLASS1 is the same as or a subclass of CLASS2"""
- 	# Loop to optimize for single inheritance
- 	while 1:
- 		if cls is base: return 1
- 		if len(cls.__bases__) <> 1: break
- 		cls = cls.__bases__[0]
- 	# Recurse to cope with multiple inheritance
- 	for c in cls.__bases__:
- 		if IsSubclass(c, base): return 1
- 	return 0
- 
- def IsInstance(x, cls):
- 	"""Test whether OBJECT is an instance of (a subclass of) CLASS"""
- 	return type(x) is InstanceType and IsSubclass(x.__class__, cls)
- 
 def nice(s):
 	"""'nice' representation of an object"""
--- 12,17 ----
 def pack(*args, **kwargs):
 	from aepack import pack
! 	return pack( *args, **kwargs)
 	
 def nice(s):
 	"""'nice' representation of an object"""
***************
*** 64,68 ****
 
 def IsEnum(x):
! 	return IsInstance(x, Enum)
 
 def mkenum(enum):
--- 48,52 ----
 
 def IsEnum(x):
! 	return isinstance(x, Enum)
 
 def mkenum(enum):
***************
*** 109,113 ****
 
 def IsBoolean(x):
! 	return IsInstance(x, Boolean)
 
 def mkboolean(bool):
--- 93,97 ----
 
 def IsBoolean(x):
! 	return isinstance(x, Boolean)
 
 def mkboolean(bool):
***************
*** 131,135 ****
 
 def IsType(x):
! 	return IsInstance(x, Type)
 
 def mktype(type):
--- 115,119 ----
 
 def IsType(x):
! 	return isinstance(x, Type)
 
 def mktype(type):
***************
*** 154,158 ****
 
 def IsKeyword(x):
! 	return IsInstance(x, Keyword)
 
 class Range:
--- 138,142 ----
 
 def IsKeyword(x):
! 	return isinstance(x, Keyword)
 
 class Range:
***************
*** 173,177 ****
 
 def IsRange(x):
! 	return IsInstance(x, Range)
 
 class Comparison:
--- 157,161 ----
 
 def IsRange(x):
! 	return isinstance(x, Range)
 
 class Comparison:
***************
*** 196,200 ****
 
 def IsComparison(x):
! 	return IsInstance(x, Comparison)
 	
 class NComparison(Comparison):
--- 180,184 ----
 
 def IsComparison(x):
! 	return isinstance(x, Comparison)
 	
 class NComparison(Comparison):
***************
*** 221,225 ****
 
 def IsOrdinal(x):
! 	return IsInstance(x, Ordinal)
 	
 class NOrdinal(Ordinal):
--- 205,209 ----
 
 def IsOrdinal(x):
! 	return isinstance(x, Ordinal)
 	
 class NOrdinal(Ordinal):
***************
*** 251,255 ****
 
 def IsLogical(x):
! 	return IsInstance(x, Logical)
 
 class StyledText:
--- 235,239 ----
 
 def IsLogical(x):
! 	return isinstance(x, Logical)
 
 class StyledText:
***************
*** 270,274 ****
 
 def IsStyledText(x):
! 	return IsInstance(x, StyledText)
 
 class AEText:
--- 254,258 ----
 
 def IsStyledText(x):
! 	return isinstance(x, StyledText)
 
 class AEText:
***************
*** 291,295 ****
 
 def IsAEText(x):
! 	return IsInstance(x, AEText)
 
 class IntlText:
--- 275,279 ----
 
 def IsAEText(x):
! 	return isinstance(x, AEText)
 
 class IntlText:
***************
*** 312,316 ****
 
 def IsIntlText(x):
! 	return IsInstance(x, IntlText)
 
 class IntlWritingCode:
--- 296,300 ----
 
 def IsIntlText(x):
! 	return isinstance(x, IntlText)
 
 class IntlWritingCode:
***************
*** 332,336 ****
 
 def IsIntlWritingCode(x):
! 	return IsInstance(x, IntlWritingCode)
 
 class QDPoint:
--- 316,320 ----
 
 def IsIntlWritingCode(x):
! 	return isinstance(x, IntlWritingCode)
 
 class QDPoint:
***************
*** 352,356 ****
 
 def IsQDPoint(x):
! 	return IsInstance(x, QDPoint)
 
 class QDRectangle:
--- 336,340 ----
 
 def IsQDPoint(x):
! 	return isinstance(x, QDPoint)
 
 class QDRectangle:
***************
*** 375,379 ****
 
 def IsQDRectangle(x):
! 	return IsInstance(x, QDRectangle)
 
 class RGBColor:
--- 359,363 ----
 
 def IsQDRectangle(x):
! 	return isinstance(x, QDRectangle)
 
 class RGBColor:
***************
*** 396,400 ****
 
 def IsRGBColor(x):
! 	return IsInstance(x, RGBColor)
 
 class ObjectSpecifier:
--- 380,384 ----
 
 def IsRGBColor(x):
! 	return isinstance(x, RGBColor)
 
 class ObjectSpecifier:
***************
*** 445,449 ****
 
 def IsObjectSpecifier(x):
! 	return IsInstance(x, ObjectSpecifier)
 
 
--- 429,433 ----
 
 def IsObjectSpecifier(x):
! 	return isinstance(x, ObjectSpecifier)
 
 
Index: bgenlocations.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/plat-mac/bgenlocations.py,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -d -r1.2 -r1.3
*** bgenlocations.py	26 Jan 2003 20:33:46 -0000	1.2
--- bgenlocations.py	12 Feb 2003 15:37:26 -0000	1.3
***************
*** 27,33 ****
 #
 if sys.platform == 'mac':
! 	_MWERKSDIR="Moes:Applications (Mac OS 9):Metrowerks CodeWarrior 7.0:Metrowerks CodeWarrior"
 else:
! 	_MWERKSDIR="/Volumes/Moes/Applications (Mac OS 9)/Metrowerks CodeWarrior 7.0/Metrowerks CodeWarrior/"
 INCLUDEDIR=os.path.join(_MWERKSDIR, "MacOS Support", "Universal", "Interfaces", "CIncludes")
 
--- 27,33 ----
 #
 if sys.platform == 'mac':
! 	_MWERKSDIR="Sap:Applications (Mac OS 9):Metrowerks CodeWarrior 7.0:Metrowerks CodeWarrior"
 else:
! 	_MWERKSDIR="/Volumes/Sap/Applications (Mac OS 9)/Metrowerks CodeWarrior 7.0/Metrowerks CodeWarrior/"
 INCLUDEDIR=os.path.join(_MWERKSDIR, "MacOS Support", "Universal", "Interfaces", "CIncludes")
 
Index: buildtools.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/plat-mac/buildtools.py,v
retrieving revision 1.4
retrieving revision 1.5
diff -C2 -d -r1.4 -r1.5
*** buildtools.py	5 Feb 2003 13:39:04 -0000	1.4
--- buildtools.py	12 Feb 2003 15:37:26 -0000	1.5
***************
*** 45,51 ****
 	"""Locate the applet template along sys.path"""
 	if MacOS.runtimemodel == 'macho':
! 		if template:
! 			return template
! 		return findtemplate_macho()
 	if not template:
 		template=TEMPLATE
--- 45,49 ----
 	"""Locate the applet template along sys.path"""
 	if MacOS.runtimemodel == 'macho':
! 		return None
 	if not template:
 		template=TEMPLATE
***************
*** 62,74 ****
 	return file
 	
! def findtemplate_macho():
! 	execpath = sys.executable.split('/')
! 	if not 'Contents' in execpath:
! 		raise BuildError, "Not running from a .app bundle: %s" % sys.executable
! 	i = execpath.index('Contents')
! 	return '/'.join(execpath[:i])
! 
! 
! def process(template, filename, destname, copy_codefragment, 
 		rsrcname=None, others=[], raw=0, progress="default"):
 	
--- 60,64 ----
 	return file
 	
! def process(template, filename, destname, copy_codefragment=0, 
 		rsrcname=None, others=[], raw=0, progress="default"):
 	
***************
*** 119,123 ****
 		pass
 	process_common(template, progress, code, rsrcname, destname, 0, 
! 		copy_codefragment, raw, others)
 	
 
--- 109,113 ----
 		pass
 	process_common(template, progress, code, rsrcname, destname, 0, 
! 		copy_codefragment, raw, others, filename)
 	
 
***************
*** 141,148 ****
 
 def process_common(template, progress, code, rsrcname, destname, is_update, 
! 		copy_codefragment, raw=0, others=[]):
 	if MacOS.runtimemodel == 'macho':
 		return process_common_macho(template, progress, code, rsrcname, destname,
! 			is_update, raw, others)
 	if others:
 		raise BuildError, "Extra files only allowed for MachoPython applets"
--- 131,138 ----
 
 def process_common(template, progress, code, rsrcname, destname, is_update, 
! 		copy_codefragment, raw=0, others=[], filename=None):
 	if MacOS.runtimemodel == 'macho':
 		return process_common_macho(template, progress, code, rsrcname, destname,
! 			is_update, raw, others, filename)
 	if others:
 		raise BuildError, "Extra files only allowed for MachoPython applets"
***************
*** 275,284 ****
 		progress.inc(0)
 
! def process_common_macho(template, progress, code, rsrcname, destname, is_update, raw=0, others=[]):
 	# First make sure the name ends in ".app"
 	if destname[-4:] != '.app':
 		destname = destname + '.app'
 	# Now deduce the short name
! 	shortname = os.path.split(destname)[1]
 	if shortname[-4:] == '.app':
 		# Strip the .app suffix
--- 265,278 ----
 		progress.inc(0)
 
! def process_common_macho(template, progress, code, rsrcname, destname, is_update, 
! 		raw=0, others=[], filename=None):
! 	# Check that we have a filename
! 	if filename is None:
! 		raise BuildError, "Need source filename on MacOSX"
 	# First make sure the name ends in ".app"
 	if destname[-4:] != '.app':
 		destname = destname + '.app'
 	# Now deduce the short name
! 	destdir, shortname = os.path.split(destname)
 	if shortname[-4:] == '.app':
 		# Strip the .app suffix
***************
*** 296,429 ****
 		else:
 			plistname = None
! 	# Start with copying the .app framework
! 	if not is_update:
! 		exceptlist = ["Contents/Info.plist", 
! 				"Contents/Resources/English.lproj/InfoPlist.strings", 
! 				"Contents/Resources/English.lproj/Documentation", 
! 				"Contents/Resources/python.rsrc",
! 				]
! 		copyapptree(template, destname, exceptlist, progress)
! 		# SERIOUS HACK. If we've just copied a symlink as the
! 		# executable we assume we're running from the MacPython addon
! 		# to 10.2 python. We remove the symlink again and install
! 		# the appletrunner script.
! 		executable = os.path.join(destname, "Contents/MacOS/python")
! 		if os.path.islink(executable):
! 			os.remove(executable)
! 			dummyfp, appletrunner, d2 = imp.find_module('appletrunner')
! 			del dummyfp
! 			shutil.copy2(appletrunner, executable)
! 			os.chmod(executable, 0775)
! 	# Now either use the .plist file or the default
 	if progress:
! 		progress.label('Create info.plist')
! 		progress.inc(0)
 	if plistname:
! 		shutil.copy2(plistname, os.path.join(destname, 'Contents', 'Info.plist'))
! 		if icnsname:
! 			icnsdest = os.path.split(icnsname)[1]
! 			icnsdest = os.path.join(destname, 
! 				os.path.join('Contents', 'Resources', icnsdest))
! 			shutil.copy2(icnsname, icnsdest)
! 		# XXXX Wrong. This should be parsed from plist file. Also a big hack:-)
! 		if shortname == 'PythonIDE':
! 			ownertype = 'Pide'
! 		else:
! 			ownertype = 'PytA'
! 		# XXXX Should copy .icns file
! 	else:
! 		cocoainfo = ''
! 		for o in others:
! 			if o[-4:] == '.nib':
! 				nibname = os.path.split(o)[1][:-4]
! 				cocoainfo = """
! <key>NSMainNibFile</key>
! <string>%s</string>
! <key>NSPrincipalClass</key>
! <string>NSApplication</string>""" % nibname
! 			elif o[-6:] == '.lproj':
! 				files = os.listdir(o)
! 				for f in files:
! 					if f[-4:] == '.nib':
! 						nibname = os.path.split(f)[1][:-4]
! 						cocoainfo = """
! <key>NSMainNibFile</key>
! <string>%s</string>
! <key>NSPrincipalClass</key>
! <string>NSApplication</string>""" % nibname
! 
! 		plistname = os.path.join(template, 'Contents', 'Resources', 'Applet-Info.plist')
! 		plistdata = open(plistname).read()
! 		plistdata = plistdata % {'appletname':shortname, 'cocoainfo':cocoainfo}
! 		ofp = open(os.path.join(destname, 'Contents', 'Info.plist'), 'w')
! 		ofp.write(plistdata)
! 		ofp.close()
! 		ownertype = 'PytA'
! 	# Create the PkgInfo file
! 	if progress:
! 		progress.label('Create PkgInfo')
! 		progress.inc(0)
! 	ofp = open(os.path.join(destname, 'Contents', 'PkgInfo'), 'wb')
! 	ofp.write('APPL' + ownertype)
! 	ofp.close()
! 		
! 	
! 	# Copy the resources from the target specific resource template, if any
! 	typesfound, ownertype = [], None
! 	try:
! 		input = macresource.open_pathname(rsrcname)
! 	except (MacOS.Error, ValueError):
! 		if progress:
! 			progress.inc(50)
! 	else:
! 		if progress:
! 			progress.label("Copy resources...")
! 			progress.set(20)
! 		resfilename = 'python.rsrc' # XXXX later: '%s.rsrc' % shortname
! 		try:
! 			output = Res.FSOpenResourceFile(
! 					os.path.join(destname, 'Contents', 'Resources', resfilename), 
! 					u'', WRITE)
! 		except MacOS.Error:
! 			fsr, dummy = Res.FSCreateResourceFile(
! 					os.path.join(destname, 'Contents', 'Resources'), 
! 					unicode(resfilename), '')
! 			output = Res.FSOpenResourceFile(fsr, u'', WRITE)
! 		
! 		typesfound, ownertype = copyres(input, output, [], 0, progress)
! 		Res.CloseResFile(input)
! 		Res.CloseResFile(output)
! 
! 	if code:
! 		if raw:
! 			pycname = '__rawmain__.pyc'
! 		else:
! 			pycname = '__main__.pyc'
! 			# And we also create __rawmain__.pyc
! 			outputfilename = os.path.join(destname, 'Contents', 'Resources', '__rawmain__.pyc')
! 			if progress:
! 				progress.label('Creating __rawmain__.pyc')
! 				progress.inc(0)
! 			rawsourcefp, rawsourcefile, d2 = imp.find_module('appletrawmain')
! 			rawsource = rawsourcefp.read()
! 			rawcode = compile(rawsource, rawsourcefile, 'exec')
! 			writepycfile(rawcode, outputfilename)
! 			
! 		outputfilename = os.path.join(destname, 'Contents', 'Resources', pycname)
! 		if progress:
! 			progress.label('Creating '+pycname)
! 			progress.inc(0)
! 		writepycfile(code, outputfilename)
! 	# Copy other files the user asked for
! 	for osrc in others:
! 		oname = os.path.split(osrc)[1]
! 		odst = os.path.join(destname, 'Contents', 'Resources', oname)
! 		if progress: 
! 			progress.label('Copy ' + oname)
! 			progress.inc(0)
! 		if os.path.isdir(osrc):
! 			copyapptree(osrc, odst)
! 		else:
! 			shutil.copy2(osrc, odst)
 	if progress: 
 		progress.label('Done.')
--- 290,313 ----
 		else:
 			plistname = None
! 	if not os.path.exists(rsrcname):
! 		rsrcname = None
 	if progress:
! 		progress.label('Creating bundle...')
! 	import bundlebuilder
! 	builder = bundlebuilder.AppBuilder(verbosity=0)
! 	builder.mainprogram = filename
! 	builder.builddir = destdir
! 	builder.name = shortname
! 	if rsrcname:
! 		builder.resources.append(rsrcname)
! 	for o in others:
! 		builder.resources.append(o)
 	if plistname:
! 		import Plist
! 		builder.plist = Plist.fromFile(plistname)
! 	if icnsname:
! 		builder.iconfile = icnsname
! 	builder.setup()
! 	builder.build()
 	if progress: 
 		progress.label('Done.')

AltStyle によって変換されたページ (->オリジナル) /