[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":