Distutils: Create per-platform build directories

This commit is contained in:
Mitchell Stokes 2016-11-09 18:00:57 -08:00
parent a628dd6edc
commit 9921cd5a97

View File

@ -1,12 +1,14 @@
import os import os
import shutil
import sys import sys
import distutils.dist
import distutils.command.build import distutils.command.build
import distutils.core import distutils.core
import distutils.dir_util
import distutils.dist
import distutils.file_util
from direct.showutil import FreezeTool from direct.showutil import FreezeTool
import panda3d.core as p3d
class Distribution(distutils.dist.Distribution): class Distribution(distutils.dist.Distribution):
def __init__(self, attrs): def __init__(self, attrs):
@ -18,40 +20,45 @@ class Distribution(distutils.dist.Distribution):
class build(distutils.command.build.build): class build(distutils.command.build.build):
def run(self): def run(self):
distutils.command.build.build.run(self) distutils.command.build.build.run(self)
builddir = self.build_base platforms = [p3d.PandaSystem.get_platform()]
basename = os.path.abspath(os.path.join(builddir, self.distribution.get_fullname()))
gamedir = self.distribution.game_dir
startfile = os.path.join(gamedir, self.distribution.mainfile)
if not os.path.exists(builddir): for platform in platforms:
os.makedirs(builddir) builddir = os.path.join(self.build_base, platform)
freezer = FreezeTool.Freezer() if os.path.exists(builddir):
freezer.addModule('__main__', filename=startfile) distutils.dir_util.remove_tree(builddir)
freezer.excludeModule('panda3d') distutils.dir_util.mkpath(builddir)
freezer.done(addStartupModules=True)
freezer.generateRuntimeFromStub(basename)
ignore_copy_list = [ basename = os.path.abspath(os.path.join(builddir, self.distribution.get_fullname()))
'__pycache__', gamedir = self.distribution.game_dir
self.distribution.mainfile, startfile = os.path.join(gamedir, self.distribution.mainfile)
*freezer.getAllModuleNames(),
]
for item in os.listdir(gamedir): freezer = FreezeTool.Freezer()
src = os.path.join(gamedir, item) freezer.addModule('__main__', filename=startfile)
dst = os.path.join(builddir, item) freezer.excludeModule('panda3d')
freezer.done(addStartupModules=True)
freezer.generateRuntimeFromStub(basename)
if item in ignore_copy_list: ignore_copy_list = [
print("Skip", src) '__pycache__',
continue self.distribution.mainfile,
*freezer.getAllModuleNames(),
]
if os.path.isdir(src): for item in os.listdir(gamedir):
print("Copy dir", src, dst) src = os.path.join(gamedir, item)
shutil.copytree(src, dst) dst = os.path.join(builddir, item)
else:
print("Copy file", src, dst) if item in ignore_copy_list:
shutil.copy(src, dst) print("skipping", src)
continue
if os.path.isdir(src):
#print("Copy dir", src, dst)
distutils.dir_util.copy_tree(src, dst)
else:
#print("Copy file", src, dst)
distutils.file_util.copy_file(src, dst)
def setup(**attrs): def setup(**attrs):