mirror of
https://github.com/panda3d/panda3d.git
synced 2025-10-02 09:52:27 -04:00
deploy-ng: support nested extension modules; omit unused panda3d.x modules
This commit is contained in:
parent
bae19a203b
commit
2dab76131c
@ -1563,9 +1563,10 @@ class Freezer:
|
|||||||
|
|
||||||
if self.platform.startswith('win'):
|
if self.platform.startswith('win'):
|
||||||
target = basename + '.exe'
|
target = basename + '.exe'
|
||||||
|
modext = '.pyd'
|
||||||
else:
|
else:
|
||||||
target = basename
|
target = basename
|
||||||
|
modext = '.so'
|
||||||
|
|
||||||
# Generate export table.
|
# Generate export table.
|
||||||
moduleBlob = bytes()
|
moduleBlob = bytes()
|
||||||
@ -1595,25 +1596,18 @@ class Freezer:
|
|||||||
# it is the former.
|
# it is the former.
|
||||||
extensionFilename = getattr(module, '__file__', None)
|
extensionFilename = getattr(module, '__file__', None)
|
||||||
|
|
||||||
if extensionFilename or self.linkExtensionModules:
|
if extensionFilename:
|
||||||
self.extras.append((moduleName, extensionFilename))
|
self.extras.append((moduleName, extensionFilename))
|
||||||
|
|
||||||
# If it is a submodule of a frozen module, Python will have
|
# If it is a submodule of a frozen module, Python will have
|
||||||
# trouble importing it as a builtin module. Synthesize a frozen
|
# trouble importing it as a builtin module. Synthesize a frozen
|
||||||
# module that loads it as builtin.
|
# module that loads it dynamically.
|
||||||
if '.' in moduleName and self.linkExtensionModules:
|
if '.' in moduleName:
|
||||||
code = compile('import sys;del sys.modules["%s"];import imp;imp.init_builtin("%s")' % (moduleName, moduleName), moduleName, 'exec')
|
code = compile('import sys;del sys.modules["%s"];import imp;imp.load_dynamic("%s", "%s%s")' % (moduleName, moduleName, moduleName, modext), moduleName, 'exec')
|
||||||
code = marshal.dumps(code)
|
code = marshal.dumps(code)
|
||||||
moduleList.append(make_module_list_entry(code, codeOffset, moduleName, module))
|
moduleList.append(make_module_list_entry(code, codeOffset, moduleName, module))
|
||||||
moduleBlob += code
|
moduleBlob += code
|
||||||
codeOffset += len(code)
|
codeOffset += len(code)
|
||||||
elif '.' in moduleName:
|
|
||||||
# Nothing we can do about this case except warn the user they
|
|
||||||
# are in for some trouble.
|
|
||||||
print('WARNING: Python cannot import extension modules under '
|
|
||||||
'frozen Python packages; %s will be inaccessible. '
|
|
||||||
'passing either -l to link in extension modules or use '
|
|
||||||
'-x %s to exclude the entire package.' % (moduleName, moduleName.split('.')[0]))
|
|
||||||
|
|
||||||
# Build from pre-built binary stub
|
# Build from pre-built binary stub
|
||||||
dtool_path = Filename(ExecutionEnvironment.get_dtool_name()).to_os_specific()
|
dtool_path = Filename(ExecutionEnvironment.get_dtool_name()).to_os_specific()
|
||||||
|
@ -38,18 +38,28 @@ class build(distutils.command.build.build):
|
|||||||
# Create runtime
|
# Create runtime
|
||||||
freezer = FreezeTool.Freezer()
|
freezer = FreezeTool.Freezer()
|
||||||
freezer.addModule('__main__', filename=startfile)
|
freezer.addModule('__main__', filename=startfile)
|
||||||
freezer.excludeModule('panda3d')
|
|
||||||
for exmod in self.distribution.exclude_modules:
|
for exmod in self.distribution.exclude_modules:
|
||||||
freezer.excludeModule(exmod)
|
freezer.excludeModule(exmod)
|
||||||
freezer.done(addStartupModules=True)
|
freezer.done(addStartupModules=True)
|
||||||
freezer.generateRuntimeFromStub(basename)
|
freezer.generateRuntimeFromStub(basename)
|
||||||
|
|
||||||
|
# Copy extension modules
|
||||||
|
for module, source_path in freezer.extras:
|
||||||
|
if source_path is None:
|
||||||
|
# Built-in module.
|
||||||
|
continue
|
||||||
|
|
||||||
|
# Rename panda3d/core.pyd to panda3d.core.pyd
|
||||||
|
basename = os.path.basename(source_path)
|
||||||
|
if '.' in module:
|
||||||
|
basename = module.rsplit('.', 1)[0] + '.' + basename
|
||||||
|
|
||||||
|
target_path = os.path.join(builddir, basename)
|
||||||
|
distutils.file_util.copy_file(source_path, target_path)
|
||||||
|
|
||||||
# Copy Panda3D libs
|
# Copy Panda3D libs
|
||||||
dtool_fn = p3d.Filename(p3d.ExecutionEnvironment.get_dtool_name())
|
dtool_fn = p3d.Filename(p3d.ExecutionEnvironment.get_dtool_name())
|
||||||
libdir = os.path.dirname(dtool_fn.to_os_specific())
|
libdir = os.path.dirname(dtool_fn.to_os_specific())
|
||||||
src = os.path.normpath(os.path.join(libdir, '..', 'panda3d'))
|
|
||||||
dst = os.path.join(builddir, 'panda3d')
|
|
||||||
distutils.dir_util.copy_tree(src, dst)
|
|
||||||
|
|
||||||
for item in os.listdir(libdir):
|
for item in os.listdir(libdir):
|
||||||
if '.so.' in item or item.endswith('.dll') or item.endswith('.dylib') or 'libpandagl' in item:
|
if '.so.' in item or item.endswith('.dll') or item.endswith('.dylib') or 'libpandagl' in item:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user