toolkit/rp_distributor/main.py
""" Tool to distribute the rp and the panda3d build. """
from __future__ import print_function
import os
import sys
import shutil
from os.path import isdir, join, dirname, realpath, relpath
base_dir = realpath(dirname(__file__))
rp_dir = realpath(join(base_dir, "../../"))
os.chdir(base_dir)
sys.path.insert(0, rp_dir)
from rplibs.six.moves import input # noqa # pylint: disable=import-error
# TODO: Add option to skip gui folders if debugger is disabled
rp_ignores = [
# data
"skybox-blend.zip",
"skybox.jpg",
"skybox-2.jpg",
"default_cubemap/source",
"default_cubemap/source_2",
"default_cubemap/filter.compute.glsl",
"default_cubemap/filter.py",
"data/generate_txo_files.py",
"README.md",
"environment_brdf/generate_reference.py",
"run_mitsuba.bat",
".mip",
".xml",
".exr",
".psd",
".diff",
".pyc",
".pdb",
"__pycache__",
"environment_brdf/res/",
"film_grain/generate.py",
"film_grain/grain.compute.glsl",
"ies_profiles/PREVIEWS.jpg",
"loading_screen_bg.png",
# rpcore
"native/scripts",
"native/source",
"native/win_amd",
"native/win_i386",
"native/.gitignore",
"native/build.py",
"native/CMakeLists",
"native/update_module_builder.py",
"native/config.ini",
# rpplugins
".ffxml",
"bloom/resources/SOURCE.txt",
"bloom/resources/lens_dirt.png",
"clouds/resources/generate_",
"clouds/resources/noise.inc",
"clouds/resources/precompute.py",
"color_correction/resources/film_luts_raw",
"color_correction/resources/generate_",
"plugin_prefab",
"scattering/resources/hosek_wilkie_scattering",
"toolkit",
]
panda_ignores = [
".pdb",
".pyc",
"python/.vs",
"python/include",
]
app_ignores = [
".pyc",
".blend"
]
def copy_tree(source_dir, dest_dir, ignorelist, tree_pth):
source = join(source_dir, tree_pth)
dest = join(dest_dir, tree_pth)
for basepath, dirnames, files in os.walk(source):
for f in files:
abspath = realpath(join(basepath, f))
abspath = abspath.replace("\\", "/")
for ignore in ignorelist:
if ignore in abspath:
break
else:
local_pth = relpath(abspath, start=source)
dest_pth = join(dest, local_pth)
dname = dirname(dest_pth)
if not isdir(dname):
print("Creating", dname)
os.makedirs(dname)
shutil.copyfile(abspath, dest_pth)
def distribute():
print("Render Pipeline Distributor v0.1")
print("")
print("Copying tree ..")
dist_folder_name = "built"
tmp_dir = join(base_dir, dist_folder_name, "render_pipeline")
if isdir(tmp_dir):
shutil.rmtree(tmp_dir)
os.makedirs(tmp_dir)
for dname in ("config", "data", "rplibs", "effects", "rpcore", "rpplugins", "toolkit"):
copy_tree(rp_dir, tmp_dir, rp_ignores, dname)
shutil.copyfile(join(rp_dir, "LICENSE.txt"), join(tmp_dir, "LICENSE.txt"))
print("Copying Panda3D build ...")
python_pth = realpath(dirname(sys.executable))
panda_pth = realpath(join(python_pth, ".."))
tmp_dir = join(base_dir, dist_folder_name, "panda3d")
if isdir(tmp_dir):
shutil.rmtree(tmp_dir)
os.makedirs(tmp_dir)
for dname in ("direct", "etc", "models", "panda3d", "pandac", "python"):
copy_tree(panda_pth, tmp_dir, panda_ignores, dname)
copy_tree(panda_pth, tmp_dir, panda_ignores + [".exe"], "bin")
shutil.copyfile(join(panda_pth, "LICENSE"), join(tmp_dir, "LICENSE.txt"))
# Copy launcher script
shutil.copyfile(
join(base_dir, "launch.templ.bat"), join(base_dir, dist_folder_name, "launch.bat"))
# Copy application
app_pth = join(base_dir, "../../../RenderPipeline-Samples/01-Material-Demo/")
tmp_dir = join(base_dir, dist_folder_name, "application")
copy_tree(app_pth, tmp_dir, app_ignores, ".")
if __name__ == "__main__":
distribute()