[Python-checkins] python/dist/src/Mac/Lib bundlebuilder.py,1.11,1.12

jvr@users.sourceforge.net jvr@users.sourceforge.net
Fri, 29 Nov 2002 12:06:55 -0800


Update of /cvsroot/python/python/dist/src/Mac/Lib
In directory sc8-pr-cvs1:/tmp/cvs-serv6425

Modified Files:
	bundlebuilder.py 
Log Message:
added Thomas H's LOADER code for importing extension (sub)modules; little tweaks

Index: bundlebuilder.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Mac/Lib/bundlebuilder.py,v
retrieving revision 1.11
retrieving revision 1.12
diff -C2 -d -r1.11 -r1.12
*** bundlebuilder.py	28 Nov 2002 18:56:50 -0000	1.11
--- bundlebuilder.py	29 Nov 2002 20:06:52 -0000	1.12
***************
*** 142,145 ****
--- 142,146 ----
  		self._addMetaFiles()
  		self.postProcess()
+ 		self.message("Done.", 1)
  
  	def preProcess(self):
***************
*** 201,205 ****
  
  
- 
  if __debug__:
  	PYC_EXT = ".pyc"
--- 202,205 ----
***************
*** 229,232 ****
--- 229,239 ----
  SITE_CO = compile(SITE_PY, "<-bundlebuilder.py->", "exec")
  
+ EXT_LOADER = """\
+ import imp, sys, os
+ path = os.path.join(sys.path[0], "%(filename)s")
+ mod = imp.load_dynamic("%(name)s", path)
+ sys.modules["%(name)s"] = mod
+ """
+ 
  MAYMISS_MODULES = ['mac', 'os2', 'nt', 'ntpath', 'dos', 'dospath',
  	'win32api', 'ce', '_winreg', 'nturl2path', 'sitecustomize',
***************
*** 286,292 ****
  	strip = 0
  
- 	# Found C extension modules: [(name, path), ...]
- 	extensions = []
- 
  	# Found Python modules: [(name, codeobject, ispkg), ...]
  	pymodules = []
--- 293,296 ----
***************
*** 356,360 ****
  			makedirs(execdir)
  			open(mainwrapperpath, "w").write(BOOTSTRAP_SCRIPT % locals())
! 			os.chmod(mainwrapperpath, 0777)
  
  	def postProcess(self):
--- 360,364 ----
  			makedirs(execdir)
  			open(mainwrapperpath, "w").write(BOOTSTRAP_SCRIPT % locals())
! 			os.chmod(mainwrapperpath, 0775)
  
  	def postProcess(self):
***************
*** 375,379 ****
  	def addPythonModules(self):
  		self.message("Adding Python modules", 1)
- 		pymodules = self.pymodules
  
  		if USE_FROZEN:
--- 379,382 ----
***************
*** 382,386 ****
  			# Create a file containing all modules, frozen.
  			frozenmodules = []
! 			for name, code, ispkg in pymodules:
  				if ispkg:
  					self.message("Adding Python package %s" % name, 2)
--- 385,389 ----
  			# Create a file containing all modules, frozen.
  			frozenmodules = []
! 			for name, code, ispkg in self.pymodules:
  				if ispkg:
  					self.message("Adding Python package %s" % name, 2)
***************
*** 389,393 ****
  				frozenmodules.append((name, marshal.dumps(code), ispkg))
  			frozenmodules = tuple(frozenmodules)
! 			relpath = "Contents/Resources/" + FROZEN_ARCHIVE
  			abspath = pathjoin(self.bundlepath, relpath)
  			f = open(abspath, "wb")
--- 392,396 ----
  				frozenmodules.append((name, marshal.dumps(code), ispkg))
  			frozenmodules = tuple(frozenmodules)
! 			relpath = pathjoin("Contents", "Resources", FROZEN_ARCHIVE)
  			abspath = pathjoin(self.bundlepath, relpath)
  			f = open(abspath, "wb")
***************
*** 395,407 ****
  			f.close()
  			# add site.pyc
! 			sitepath = pathjoin(self.bundlepath, "Contents/Resources/site" + PYC_EXT)
  			writePyc(SITE_CO, sitepath)
  		else:
  			# Create individual .pyc files.
! 			for name, code, ispkg in pymodules:
  				if ispkg:
  					name += ".__init__"
  				path = name.split(".")
! 				path = pathjoin("Contents/Resources/", *path) + PYC_EXT
  
  				if ispkg:
--- 398,411 ----
  			f.close()
  			# add site.pyc
! 			sitepath = pathjoin(self.bundlepath, "Contents", "Resources",
! 					"site" + PYC_EXT)
  			writePyc(SITE_CO, sitepath)
  		else:
  			# Create individual .pyc files.
! 			for name, code, ispkg in self.pymodules:
  				if ispkg:
  					name += ".__init__"
  				path = name.split(".")
! 				path = pathjoin("Contents", "Resources", *path) + PYC_EXT
  
  				if ispkg:
***************
*** 444,448 ****
  				self.missingModules.append(name)
  
- 
  		mf.run_script(self.mainprogram)
  		modules = mf.modules.items()
--- 448,451 ----
***************
*** 452,467 ****
  				# C extension
  				path = mod.__file__
! 				ext = os.path.splitext(path)[1]
! 				if USE_FROZEN:  # "proper" freezing
! 					# rename extensions that are submodules of packages to
! 					# <packagename>.<modulename>.<ext>
! 					dstpath = "Contents/Resources/" + name + ext
  				else:
! 					dstpath = name.split(".")
! 					dstpath = pathjoin("Contents/Resources/", *dstpath) + ext
  				self.files.append((path, dstpath))
- 				self.extensions.append((name, path, dstpath))
  				self.binaries.append(dstpath)
! 			elif mod.__code__ is not None:
  				ispkg = mod.__path__ is not None
  				if not USE_FROZEN or name != "site":
--- 455,473 ----
  				# C extension
  				path = mod.__file__
! 				filename = os.path.basename(path)
! 				if USE_FROZEN:
! 					# "proper" freezing, put extensions in Contents/Resources/,
! 					# freeze a tiny "loader" program. Due to Thomas Heller.
! 					dstpath = pathjoin("Contents", "Resources", filename)
! 					source = EXT_LOADER % {"name": name, "filename": filename}
! 					code = compile(source, "<dynloader for %s>" % name, "exec")
! 					mod.__code__ = code
  				else:
! 					# just copy the file
! 					dstpath = name.split(".")[:-1] + [filename]
! 					dstpath = pathjoin("Contents", "Resources", *dstpath)
  				self.files.append((path, dstpath))
  				self.binaries.append(dstpath)
! 			if mod.__code__ is not None:
  				ispkg = mod.__path__ is not None
  				if not USE_FROZEN or name != "site":