diff --git a/makepanda/makepanda.py b/makepanda/makepanda.py index 3f7231922f..cb1f9cd6e4 100755 --- a/makepanda/makepanda.py +++ b/makepanda/makepanda.py @@ -12,7 +12,7 @@ # ######################################################################## -import sys,os,platform,time,stat,string,re,getopt,cPickle,fnmatch,threading,Queue,signal,shutil +import sys,os,platform,time,stat,string,re,getopt,fnmatch,threading,Queue,signal,shutil from makepandacore import * from installpanda import * @@ -33,6 +33,7 @@ THIRDPARTYLIBS=0 VC90CRTVERSION="" OPTIMIZE="3" INSTALLER=0 +RUNTIME=0 GENMAN=0 VERBOSE=1 COMPRESSOR="zlib" @@ -55,6 +56,24 @@ def keyboardInterruptHandler(x,y): signal.signal(signal.SIGINT, keyboardInterruptHandler) +######################################################################## +## +## Store version and platform for the runtime build. +## +######################################################################## + +RUNTIME_VERSION = "dev" +RUNTIME_PLATFORM = "other" +if (sys.platform.startswith("win")): + RUNTIME_PLATFORM = sys.platform +elif (sys.platform.startswith("linux")): + if (platform.architecture()[0] == "64bit"): + RUNTIME_PLATFORM = "linux.amd64" + else: + RUNTIME_PLATFORM = "linux.i386" +elif (sys.platform == "darwin"): + RUNTIME_PLATFORM = "osx.i386" + ######################################################################## ## ## Command-line parser. @@ -89,14 +108,14 @@ def usage(problem): print "" print " makepanda --everything" print "" - exit("") + os._exit(0) def parseopts(args): - global OPTIMIZE,INSTALLER,GENMAN + global OPTIMIZE,INSTALLER,RUNTIME,GENMAN global VERSION,COMPRESSOR,VERBOSE,THREADCOUNT longopts = [ "help", - "optimize=","everything","nothing","installer", + "optimize=","everything","nothing","installer","runtime", "version=","lzma","no-python","threads=","outputdir="] anything = 0 for pkg in PkgListGet(): longopts.append("no-"+pkg.lower()) @@ -107,6 +126,7 @@ def parseopts(args): if (option=="--help"): raise "usage" elif (option=="--optimize"): OPTIMIZE=value elif (option=="--installer"): INSTALLER=1 + elif (option=="--runtime"): RUNTIME=1 elif (option=="--genman"): GENMAN=1 elif (option=="--everything"): PkgEnableAll() elif (option=="--nothing"): PkgDisableAll() @@ -226,6 +246,9 @@ if (sys.platform == "win32"): if (INSTALLER) and (PkgSkip("PYTHON")): exit("Cannot build installer without python") +if (RUNTIME) and (PkgSkip("PLUGIN") or PkgSkip("TINYXML")): + exit("Cannot build runtime without plugin or tinyxml") + ######################################################################## ## ## External includes, external libraries, and external defsyms. @@ -484,6 +507,7 @@ def printStatus(header,warnings): if (sys.platform == "win32"): if INSTALLER: print "Makepanda: Build installer, using",COMPRESSOR else : print "Makepanda: Don't build installer" + if RUNTIME: print "Makepanda: Runtime will be built" print "Makepanda: Version ID: "+VERSION for x in warnings: print "Makepanda: "+x print "-------------------------------------------------------------------" @@ -553,7 +577,7 @@ def CompileCxx(obj,src,opts): if (optlevel==1): cmd = cmd + " -g" if (optlevel==2): cmd = cmd + " -O1" if (optlevel==3): cmd = cmd + " -O2" - if (optlevel==4): cmd = cmd + " -O2 -DNDEBUG" + if (optlevel==4): cmd = cmd + " -O3 -DNDEBUG" if (CFLAGS !=""): cmd = cmd + " " + CFLAGS building = GetValueOption(opts, "BUILDING:") if (building): cmd = cmd + " -DBUILDING_" + building @@ -1108,15 +1132,7 @@ def WriteConfigSettings(): plugin_config["P3D_PLUGIN_LOGFILE2"] = "" plugin_config["P3D_PLUGIN_P3D_PLUGIN"] = "" plugin_config["P3D_PLUGIN_P3DPYTHON"] = "" - if (sys.platform.startswith("win")): - plugin_config["P3D_PLUGIN_PLATFORM"] = sys.platform - elif (sys.platform.startswith("linux")): - if (platform.architecture()[0] == "64bit"): - plugin_config["P3D_PLUGIN_PLATFORM"] = "linux.amd64" - else: - plugin_config["P3D_PLUGIN_PLATFORM"] = "linux.i386" - elif (sys.platform == "darwin"): - plugin_config["P3D_PLUGIN_PLATFORM"] = "osx.i386" + plugin_config["P3D_PLUGIN_PLATFORM"] = RUNTIME_PLATFORM conf = "/* prc_parameters.h. Generated automatically by makepanda.py */\n" for key in prc_parameters.keys(): @@ -3882,6 +3898,79 @@ except: SaveDependencyCache() raise +########################################################################################## +# +# The Runtime +# +# This is a package that can be uploaded to a web server, to host panda3d versions +# for the plugin. +# +########################################################################################## + +RUNTIME_OMIT = ["libp3mayaloader*.*", "libp3ptloader.*", "libpandaskel.*", "libpanda*stripped.*", "lib*fmod*.*", "libpandaegg.*"] + +def MakeRuntime(): + # Delete the current. + if (os.path.exists(GetOutputDir()+"/stage")): + shutil.rmtree(GetOutputDir()+"/stage") + if (os.path.exists(GetOutputDir()+"/rlib")): + shutil.rmtree(GetOutputDir()+"/rlib") + + # Create a couple of directories. + coreapidir = GetOutputDir()+"/stage/coreapi/"+RUNTIME_VERSION+"/"+RUNTIME_PLATFORM+"/" + MakeDirectory(GetOutputDir()+"/rlib") + MakeDirectory(GetOutputDir()+"/stage") + MakeDirectory(GetOutputDir()+"/stage/coreapi") + MakeDirectory(GetOutputDir()+"/stage/coreapi/"+RUNTIME_VERSION) + MakeDirectory(coreapidir) + + # Copy the p3d_plugin file. + plugfile = CalcLocation("p3d_plugin.dll", None) + CopyFile(coreapidir + os.path.basename(plugfile), plugfile) + + # Copy the important libraries to built/rlib/. + plugfile = CalcLocation("p3dpython.exe", None) + + CopyFile(GetOutputDir()+"/rlib/"+os.path.basename(plugfile), plugfile) + if (sys.platform.startswith("win")): + for base in os.listdir(GetOutputDir()+"/bin"): + if (base.startswith("lib") and base.endswith(".dll")): + omit = False + for romit in RUNTIME_OMIT: + if fnmatch.fnmatch(base, romit): + omit = True + if omit: continue + CopyFile(GetOutputDir()+"/rlib/"+base, GetOutputDir()+"/bin/"+base) + else: + for base in os.listdir(GetOutputDir()+"/lib"): + if (base.startswith("lib")) and (base.endswith(".so") or base.endswith(".dylib")): + omit = False + for romit in RUNTIME_OMIT: + if fnmatch.fnmatch(base, romit): + omit = True + if omit: continue + CopyFile(GetOutputDir()+"/rlib/"+base, GetOutputDir()+"/lib/"+base) + oscmd("strip --strip-all "+GetOutputDir()+"/rlib/"+base) + + # Invoke the make_package and make_contents scripts. + command = sys.executable + " direct/src/plugin/make_package.py" + command += " -d \"" + GetOutputDir() + "/stage\"" + command += " -s \"" + GetOutputDir() + "/rlib\"" + command += " -p panda3d_%s_%s" % (RUNTIME_VERSION, RUNTIME_PLATFORM) + oscmd(command) + command = sys.executable + " direct/src/plugin/make_contents.py" + command += " -d \"" + GetOutputDir() + "/stage\"" + oscmd(command) + + # Tar the whole thing. + if (not sys.platform.startswith("win")): + if (os.path.exists("runtime_%s_%s.tar.bz2" % (RUNTIME_VERSION, RUNTIME_PLATFORM))): + os.remove("runtime_%s_%s.tar.bz2" % (RUNTIME_VERSION, RUNTIME_PLATFORM)) + oscmd("cd " + GetOutputDir() + "/stage/ && tar -cjvf " + os.getcwd() + "/runtime.tar.bz2 coreapi panda3d") + +if (RUNTIME != 0): + MakeRuntime() + ########################################################################################## # # The Installers