* Attempt at making a Panda3D.app application bundle for the runtime on OSX

* Don't link python into panda3d.exe - link pystub instead
* Invoke ppackage.py with -OO, depending on optimize mode
* Don't attempt to pzip the models if compiled without zlib
This commit is contained in:
rdb 2009-10-24 09:29:32 +00:00
parent fe38ff0da5
commit f176b9fd1d
2 changed files with 66 additions and 19 deletions

View File

@ -904,7 +904,10 @@ def FreezePy(target, inputs, opts):
def Package(target, inputs, opts):
assert len(inputs) == 1
# Invoke the ppackage script.
command = SDK["PYTHONEXEC"] + " direct/src/p3d/ppackage.py"
command = SDK["PYTHONEXEC"]
if (GetOptimizeOption(opts) >= 4):
command += " -OO"
command += " direct/src/p3d/ppackage.py"
command += " -i \"" + GetOutputDir() + "/stage\""
command += " " + inputs[0]
oscmd(command)
@ -915,7 +918,7 @@ def Package(target, inputs, opts):
#
##########################################################################################
def CompileBundle(target, inputs, opts):
def CompileBundle(target, inputs, opts, exe):
if (sys.platform != "darwin"): return
plist = None
resources = []
@ -924,9 +927,9 @@ def CompileBundle(target, inputs, opts):
if (i.endswith(".plist")):
if (plist != None): exit("Only one plist file can be used when creating a bundle!")
plist = i
elif (i.endswith(".rsrc")):
elif (i.endswith(".rsrc") or i.endswith(".icns")):
resources.append(i)
elif (GetOrigExt(i) == ".obj"):
elif (GetOrigExt(i) == ".obj" or GetOrigExt(i) in SUFFIX_LIB or GetOrigExt(i) in SUFFIX_DLL):
objects.append(i)
else:
exit("Don't know how to bundle file %s" % i)
@ -938,7 +941,10 @@ def CompileBundle(target, inputs, opts):
oscmd("rm -rf %s" % target)
oscmd("mkdir -p %s/Contents/MacOS/" % target)
oscmd("mkdir -p %s/Contents/Resources/" % target)
SetOrigExt("%s/Contents/MacOS/%s" % (target, bundleName), ".dll")
if target.endswith(".app"):
SetOrigExt("%s/Contents/MacOS/%s" % (target, bundleName), ".exe")
else:
SetOrigExt("%s/Contents/MacOS/%s" % (target, bundleName), ".dll")
CompileLink("%s/Contents/MacOS/%s" % (target, bundleName), objects, opts + ["BUNDLE"])
oscmd("cp %s %s/Contents/Info.plist" % (plist, target))
for r in resources:
@ -1007,6 +1013,9 @@ def CompileAnything(target, inputs, opts, progress = None):
elif (origsuffix==".plugin"):
ProgressOutput(progress, "Building plugin bundle", target)
return CompileBundle(target, inputs, opts)
elif (origsuffix==".app"):
ProgressOutput(progress, "Building application bundle", target)
return CompileBundle(target, inputs, opts)
elif (origsuffix==".pz"):
ProgressOutput(progress, "Compressing", target)
return CompileEggPZ(target, infile, opts)
@ -1854,6 +1863,14 @@ TargetAdd('libp3pystub.dll', input='pystub_pystub.obj')
TargetAdd('libp3pystub.dll', input='libp3dtool.dll')
TargetAdd('libp3pystub.dll', opts=['ADVAPI'])
if (RUNTIME):
pref = ""
if (sys.platform.startswith("win")): pref = "static_"
TargetAdd(pref+'pystub_pystub.obj', opts=OPTS, input='pystub.cxx')
TargetAdd('libp3pystub_s.ilb', input=pref+'pystub_pystub.obj')
TargetAdd('libp3pystub_s.ilb', input='libp3dtool.dll')
TargetAdd('libp3pystub_s.ilb', opts=['ADVAPI'])
#
# DIRECTORY: dtool/src/interrogate/
#
@ -3247,14 +3264,40 @@ if (RUNTIME and PkgSkip("NPAPI")==0):
if (RUNTIME):
OPTS=['DIR:direct/src/plugin_standalone', 'PLUGIN', 'LINK_ALL_STATIC', 'TINYXML', 'OPENSSL']
TargetAdd('plugin_standalone_panda3d.obj', opts=OPTS, input='panda3d.cxx')
TargetAdd('panda3d.exe', input='plugin_standalone_panda3d.obj')
TargetAdd('panda3d.exe', input='plugin_common.obj')
if (sys.platform == "darwin"):
TargetAdd('panda3d.exe', input='plugin_find_root_dir_assist.obj')
TargetAdd('panda3d.exe', input='libpandaexpress_s.ilb')
TargetAdd('panda3d.exe', input='libp3dtoolconfig_s.ilb')
TargetAdd('panda3d.exe', input='libp3dtool_s.ilb')
TargetAdd('panda3d.exe', opts=['PYTHON', 'TINYXML', 'OPENSSL', 'ZLIB', 'WINGDI', 'WINUSER', 'WINSHELL', 'ADVAPI', 'WINSOCK2', 'WINOLE', 'CARBON'])
if (sys.platform != "darwin"):
TargetAdd('plugin_standalone_panda3dMain.obj', opts=OPTS, input='panda3dMain.cxx')
TargetAdd('panda3d.exe', input='plugin_standalone_panda3d.obj')
TargetAdd('panda3d.exe', input='plugin_standalone_panda3dMain.obj')
TargetAdd('panda3d.exe', input='plugin_common.obj')
TargetAdd('panda3d.exe', input='libpandaexpress_s.ilb')
TargetAdd('panda3d.exe', input='libp3dtoolconfig_s.ilb')
TargetAdd('panda3d.exe', input='libp3dtool_s.ilb')
TargetAdd('panda3d.exe', input='libp3pystub_s.ilb')
TargetAdd('panda3d.exe', opts=['TINYXML', 'OPENSSL', 'ZLIB', 'WINGDI', 'WINUSER', 'WINSHELL', 'ADVAPI', 'WINSOCK2', 'WINOLE', 'CARBON'])
else:
TargetAdd('plugin_standalone_panda3dMac.obj', opts=OPTS, input='panda3dMac.cxx')
TargetAdd('Panda3D.app', input='plugin_standalone_panda3d.obj')
TargetAdd('Panda3D.app', input='plugin_standalone_panda3dMac.obj')
TargetAdd('Panda3D.app', input='plugin_common.obj')
TargetAdd('Panda3D.app', input='plugin_find_root_dir_assist.obj')
TargetAdd('Panda3D.app', input='libpandaexpress_s.ilb')
TargetAdd('Panda3D.app', input='libp3dtoolconfig_s.ilb')
TargetAdd('Panda3D.app', input='libp3dtool_s.ilb')
TargetAdd('Panda3D.app', input='libp3pystub_s.ilb')
TargetAdd('Panda3D.app', input='panda3d_mac.plist')
TargetAdd('Panda3D.app', input='models/plugin_images/panda3d.icns')
TargetAdd('Panda3D.app', opts=['TINYXML', 'OPENSSL', 'ZLIB', 'WINGDI', 'WINUSER', 'WINSHELL', 'ADVAPI', 'WINSOCK2', 'WINOLE', 'CARBON'])
if (sys.platform.startswith("win")):
TargetAdd('plugin_standalone_panda3dWinMain.obj', opts=OPTS, input='panda3dWinMain.cxx')
TargetAdd('panda3dw.exe', input='plugin_standalone_panda3dWinMain.obj')
TargetAdd('panda3dw.exe', input='plugin_standalone_panda3d.obj')
TargetAdd('panda3dw.exe', input='plugin_common.obj')
TargetAdd('panda3dw.exe', input='libpandaexpress_s.ilb')
TargetAdd('panda3dw.exe', input='libp3dtoolconfig_s.ilb')
TargetAdd('panda3dw.exe', input='libp3dtool_s.ilb')
TargetAdd('panda3dw.exe', input='libp3pystub_s.ilb')
TargetAdd('panda3dw.exe', opts=['TINYXML', 'OPENSSL', 'ZLIB', 'WINGDI', 'WINUSER', 'WINSHELL', 'ADVAPI', 'WINSOCK2', 'WINOLE', 'CARBON'])
#
# DIRECTORY: pandatool/src/pandatoolbase/
@ -4079,16 +4122,19 @@ if (not RUNTIME):
model_extensions.append("*.flt")
for model in GetDirectoryContents("dmodels/src/misc", model_extensions):
eggpz = model[:-4] + ".egg.pz"
TargetAdd(GetOutputDir()+"/models/misc/"+eggpz, input="dmodels/src/misc/"+model)
if (PkgSkip("ZLIB")==0): newname = model[:-4] + ".egg.pz"
else: newname = model[:-4] + ".egg"
TargetAdd(GetOutputDir()+"/models/misc/"+newname, input="dmodels/src/misc/"+model)
for model in GetDirectoryContents("dmodels/src/gui", model_extensions):
eggpz = model[:-4] + ".egg.pz"
TargetAdd(GetOutputDir()+"/models/gui/"+eggpz, input="dmodels/src/gui/"+model)
if (PkgSkip("ZLIB")==0): newname = model[:-4] + ".egg.pz"
else: newname = model[:-4] + ".egg"
TargetAdd(GetOutputDir()+"/models/gui/"+newname, input="dmodels/src/gui/"+model)
for model in GetDirectoryContents("models", model_extensions):
eggpz = model[:-4] + ".egg.pz"
TargetAdd(GetOutputDir()+"/models/"+eggpz, input="models/"+model)
if (PkgSkip("ZLIB")==0): newname = model[:-4] + ".egg.pz"
else: newname = model[:-4] + ".egg"
TargetAdd(GetOutputDir()+"/models/"+newname, input="models/"+model)
CopyAllFiles(GetOutputDir()+"/models/audio/sfx/", "dmodels/src/audio/sfx/", ".wav")
CopyAllFiles(GetOutputDir()+"/models/icons/", "dmodels/src/icons/", ".gif")

View File

@ -1582,6 +1582,7 @@ def CalcLocation(fn, ipath):
if (fn.endswith(".dat")): return OUTPUTDIR+"/tmp/"+fn
if (fn.endswith(".rsrc")): return OUTPUTDIR+"/tmp/"+fn
if (fn.endswith(".plugin")):return OUTPUTDIR+"/plugins/"+fn
if (fn.endswith(".app")): return OUTPUTDIR+"/"+fn
if (fn.endswith(".in")): return OUTPUTDIR+"/pandac/input/"+fn
else:
if (fn.endswith(".obj")): return OUTPUTDIR+"/tmp/"+fn[:-4]+".o"