From 8fd5a5147d54776cde7f8879cd333f478ebf3714 Mon Sep 17 00:00:00 2001 From: Josh Yelon Date: Thu, 9 Jun 2005 22:30:06 +0000 Subject: [PATCH] Conflict fix --- doc/makepanda/makepanda.py | 491 +++++++++++++++++++++---------------- 1 file changed, 285 insertions(+), 206 deletions(-) diff --git a/doc/makepanda/makepanda.py b/doc/makepanda/makepanda.py index d2ca4d2ee0..e4f640e962 100755 --- a/doc/makepanda/makepanda.py +++ b/doc/makepanda/makepanda.py @@ -160,6 +160,7 @@ def WriteFile(wfile,data): dsthandle = open(wfile, "wb") dsthandle.write(data) dsthandle.close() + updatefiledate(wfile) except: sys.exit("Cannot write "+wfile) def prettyTime(t): @@ -183,7 +184,8 @@ def MakeDirectory(path): ## ## You might be tempted to change the defaults by editing them ## here. Don't do it. Instead, create a script that compiles -## panda with your preferred options. +## panda with your preferred options. Or, create +## a 'makepandaPreferences' file and put it into your python path. ## ######################################################################## @@ -199,7 +201,7 @@ THIRDPARTY="thirdparty" VERSION="0.0.0" VERBOSE=1 COMPRESSOR="zlib" -PACKAGES=["ZLIB","PNG","JPEG","TIFF","VRPN","FMOD","NVIDIACG","HELIX","NSPR", +PACKAGES=["PYTHON","ZLIB","PNG","JPEG","TIFF","VRPN","FMOD","NVIDIACG","HELIX","NSPR", "SSL","FREETYPE","FFTW","MILES","MAYA5","MAYA6","MAYA65","MAX5","MAX6","MAX7"] OMIT=PACKAGES[:] WARNINGS=[] @@ -207,6 +209,8 @@ DIRECTXSDK = None MAYASDK = {} MAXSDK = {} MAXSDKCS = {} +PYTHONSDK=0 +STARTTIME=time.time() try: # If there is a makepandaPreferences.py, import it: @@ -215,8 +219,6 @@ except ImportError: # If it's not there, no problem: pass -STARTTIME=time.time() - ########################################################################################## # # Read the default version number out of dtool/PandaVersion.pp @@ -503,7 +505,7 @@ def parseopts(args): longopts = [ "help","package-info","prefix=","compiler=","directx-sdk=","thirdparty=", "optimize=","everything","nothing","installer","ppgame=","quiet","verbose", - "version=","lzma"] + "version=","lzma","no-python"] anything = 0 for pkg in PACKAGES: longopts.append("no-"+pkg.lower()) for pkg in PACKAGES: longopts.append("use-"+pkg.lower()) @@ -569,6 +571,8 @@ if (PREFIX.count(" ") or THIRDPARTY.count(" ")): sys.exit("The --prefix and --thirdparty may not contain spaces") if (PREFIX.count('"') or THIRDPARTY.count('"')): sys.exit("The --prefix and --thirdparty may not contain quotation marks") +if (INSTALLER) and (OMIT.count("PYTHON")): + sys.exit("Cannot build installer without python") ######################################################################## # @@ -691,21 +695,12 @@ for version,key1,key2,subdir in MAXVERSIONS: ## ######################################################################## -if sys.platform == "win32": - PythonSDK="python2.2" - if 0: # Needs testing: - if (os.path.isdir("C:/Python22")): PythonSDK = "C:/Python22" - elif (os.path.isdir("C:/Python23")): PythonSDK = "C:/Python23" - elif (os.path.isdir("C:/Python24")): PythonSDK = "C:/Python24" - elif (os.path.isdir("C:/Python25")): PythonSDK = "C:/Python25" - else: sys.exit("Cannot find the python SDK") -else: - if (os.path.isdir("/usr/include/python2.5")): PythonSDK = "/usr/include/python2.5" - elif (os.path.isdir("/usr/include/python2.4")): PythonSDK = "/usr/include/python2.4" - elif (os.path.isdir("/usr/include/python2.3")): PythonSDK = "/usr/include/python2.3" - elif (os.path.isdir("/usr/include/python2.2")): PythonSDK = "/usr/include/python2.2" +if (OMIT.count("PYTHON")==0): + if (os.path.isdir("/usr/include/python2.5")): PYTHONSDK = "/usr/include/python2.5" + elif (os.path.isdir("/usr/include/python2.4")): PYTHONSDK = "/usr/include/python2.4" + elif (os.path.isdir("/usr/include/python2.3")): PYTHONSDK = "/usr/include/python2.3" + elif (os.path.isdir("/usr/include/python2.2")): PYTHONSDK = "/usr/include/python2.2" else: sys.exit("Cannot find the python SDK") - # this is so that the user can find out which version of python was used. ######################################################################## ## @@ -872,16 +867,18 @@ MakeDirectory(PREFIX+"/bin") MakeDirectory(PREFIX+"/lib") MakeDirectory(PREFIX+"/etc") MakeDirectory(PREFIX+"/plugins") -MakeDirectory(PREFIX+"/pandac") -MakeDirectory(PREFIX+"/pandac/input") MakeDirectory(PREFIX+"/include") MakeDirectory(PREFIX+"/include/parser-inc") MakeDirectory(PREFIX+"/include/parser-inc/openssl") MakeDirectory(PREFIX+"/include/parser-inc/Cg") MakeDirectory(PREFIX+"/include/openssl") -MakeDirectory(PREFIX+"/direct") MakeDirectory(PREFIX+"/tmp") +if (OMIT.count("PYTHON")==0): + MakeDirectory(PREFIX+"/direct") + MakeDirectory(PREFIX+"/pandac") + MakeDirectory(PREFIX+"/pandac/input") + ######################################################################## ## ## PkgSelected(package-list,package) @@ -1092,7 +1089,6 @@ def CopyFile(dstfile,srcfile): if VERBOSE >= 1: print "Copying \"%s\" --> \"%s\""%(srcfile, dstfile) WriteFile(dstfile,ReadFile(srcfile)) - updatefiledate(dstfile) ALLTARGETS.append(dstfile) ######################################################################## @@ -1183,13 +1179,13 @@ def checkIfNewDir(path): print "\nStarting compile in \"%s\" (%s):\n"%(path,prettyTime(time.time()-STARTTIME),) priorIPath=path -def CompileC(obj=0,src=0,ipath=[],opts=[]): +def CompileC(obj=0,src=0,ipath=[],opts=[],xdep=[]): global VERBOSE if ((obj==0)|(src==0)): sys.exit("syntax error in CompileC directive") ipath = [PREFIX+"/tmp"] + ipath + [PREFIX+"/include"] fullsrc = CxxFindSource(src, ipath) if (fullsrc == 0): sys.exit("Cannot find source file "+src) - dep = CxxCalcDependencies(fullsrc, ipath, []) + dep = CxxCalcDependencies(fullsrc, ipath, []) + xdep if (COMPILER=="MSVC7"): wobj = PREFIX+"/tmp/"+obj @@ -1197,7 +1193,7 @@ def CompileC(obj=0,src=0,ipath=[],opts=[]): if VERBOSE >= 0: checkIfNewDir(ipath[1]) cmd = "cl.exe /Fo" + wobj + " /nologo /c" - cmd = cmd + " /I" + PREFIX + "/python/include" + if (OMIT.count("PYTHON")==0): cmd = cmd + " /I" + PREFIX + "/python/include" if (opts.count("DXSDK")): cmd = cmd + ' /I"' + DIRECTXSDK + '/include"' for ver in ["MAYA5","MAYA6","MAYA65"]: if (opts.count(ver)): cmd = cmd + ' /I"' + MAYASDK[ver] + '/include"' @@ -1228,7 +1224,7 @@ def CompileC(obj=0,src=0,ipath=[],opts=[]): checkIfNewDir(ipath[1]) if (src[-2:]==".c"): cmd = 'gcc -c -o ' + wobj else: cmd = 'g++ -ftemplate-depth-30 -c -o ' + wobj - cmd = cmd + ' -I"' + PythonSDK + '"' + if (OMIT.count("PYTHON")==0): cmd = cmd + ' -I"' + PYTHONSDK + '"' if (PkgSelected(opts,"VRPN")): cmd = cmd + ' -I' + THIRDPARTY + '/linux-libs-a/vrpn/include' if (PkgSelected(opts,"FFTW")): cmd = cmd + ' -I' + THIRDPARTY + '/linux-libs-a/fftw/include' if (PkgSelected(opts,"FMOD")): cmd = cmd + ' -I' + THIRDPARTY + '/linux-libs-a/fmod/include' @@ -1286,11 +1282,15 @@ def Interrogate(ipath=0, opts=0, outd=0, outc=0, src=0, module=0, library=0, fil if ((ipath==0)|(opts==0)|(outd==0)|(outc==0)|(src==0)|(module==0)|(library==0)|(files==0)): sys.exit("syntax error in Interrogate directive") ALLIN.append(outd) - ipath = [PREFIX+"/tmp"] + ipath + [PREFIX+"/include"] outd = PREFIX+"/pandac/input/"+outd outc = PREFIX+"/tmp/"+outc + if (OMIT.count("PYTHON")): + ConditionalWriteFile(outc,"") + return + ipath = [PREFIX+"/tmp"] + ipath + [PREFIX+"/include"] paths = xpaths(src+"/",files,"") dep = CxxCalcDependenciesAll(paths, ipath) + dep.append(PREFIX+"/tmp/dtool_have_python.dat") dotdots = "" for i in range(0,src.count("/")+1): dotdots = dotdots + "../" building = 0 @@ -1348,8 +1348,12 @@ def InterrogateModule(outc=0, module=0, library=0, files=0): if ((outc==0)|(module==0)|(library==0)|(files==0)): sys.exit("syntax error in InterrogateModule directive") outc = PREFIX+"/tmp/"+outc + if (OMIT.count("PYTHON")): + ConditionalWriteFile(outc,"") + return files = xpaths(PREFIX+"/pandac/input/",files,"") - if (older(outc, files)): + dep = files + [PREFIX+"/tmp/dtool_have_python.dat"] + if (older(outc, dep)): global VERBOSE if VERBOSE >= 1: print "Generating Python-stub cxx file for %s"%(library,) @@ -1434,7 +1438,7 @@ def CompileLink(dll=0, obj=[], opts=[], xdep=[]): if (opts.count("NOLIBCI")): cmd = cmd + " /NODEFAULTLIB:LIBCI.LIB " if (opts.count("MAXEGGDEF")): cmd = cmd + ' /DEF:pandatool/src/maxegg/MaxEgg.def' cmd = cmd + ' /OUT:' + dll + ' /IMPLIB:' + lib + ' /MAP:NUL' - cmd = cmd + ' /LIBPATH:' + PREFIX + '/python/libs ' + if (OMIT.count("PYTHON")==0): cmd = cmd + ' /LIBPATH:' + PREFIX + '/python/libs ' for x in wobj: cmd = cmd + ' ' + x if (dll[-4:]==".exe"): cmd = cmd + ' ' + PREFIX + '/tmp/pandaIcon.res' if (opts.count("D3D8") or opts.count("D3D9") or opts.count("DXDRAW") or opts.count("DXSOUND") or opts.count("DXGUID")): @@ -1616,7 +1620,7 @@ CxxIgnoreHeader["afxres.h"] = 1 ########################################################################################## # -# Generate pandaVersion.h +# Generate pandaVersion.h, pythonversion, null.cxx # ########################################################################################## @@ -1673,7 +1677,10 @@ conf = conf.replace("NVERSION",str(NVERSION)) ConditionalWriteFile(PREFIX+'/include/checkPandaVersion.h',conf) -ConditionalWriteFile(PREFIX + "/tmp/pythonversion", os.path.basename(PythonSDK)) +if (OMIT.count("PYTHON")==0): + ConditionalWriteFile(PREFIX + "/tmp/pythonversion", os.path.basename(PYTHONSDK)) + +ConditionalWriteFile(PREFIX+"/tmp/null.cxx","") ########################################################################################## # @@ -1700,7 +1707,8 @@ if (os.path.isdir(srcdir1)): __path__[0] = srcdir1 elif (os.path.isdir(srcdir2)): __path__[0] = srcdir2 else: sys.exit("Cannot find the 'direct' tree") """ -ConditionalWriteFile(PREFIX+'/direct/__init__.py', DIRECTINIT) +if (OMIT.count("PYTHON")==0): + ConditionalWriteFile(PREFIX+'/direct/__init__.py', DIRECTINIT) ########################################################################################## # @@ -1915,8 +1923,9 @@ for pkg in (PACKAGES + ["extras"]): CopyAllFiles(PREFIX+"/lib/",THIRDPARTY+"/linux-libs-a/"+pkg.lower()+"/lib/") if (sys.platform == "win32"): - CopyTree(PREFIX+'/python', 'thirdparty/win-python') - CopyFile(PREFIX+'/bin/', 'thirdparty/win-python/python22.dll') + CopyFile(PREFIX+'/bin/', 'thirdparty/win-python/python22.dll') + if (OMIT.count("PYTHON")==0): + CopyTree(PREFIX+'/python', 'thirdparty/win-python') ######################################################################## ## @@ -1926,11 +1935,12 @@ if (sys.platform == "win32"): CopyFile(PREFIX+"/", "doc/LICENSE") CopyFile(PREFIX+"/", "doc/ReleaseNotes") -CopyTree(PREFIX+'/Pmw', 'thirdparty/Pmw') -CopyTree(PREFIX+'/epydoc', 'thirdparty/epydoc') -CopyTree(PREFIX+'/SceneEditor', 'SceneEditor') CopyAllFiles(PREFIX+"/plugins/", "pandatool/src/scripts/", ".mel") CopyAllFiles(PREFIX+"/plugins/", "pandatool/src/scripts/", ".ms") +if (OMIT.count("PYTHON")==0): + CopyTree(PREFIX+'/Pmw', 'thirdparty/Pmw') + CopyTree(PREFIX+'/epydoc', 'thirdparty/epydoc') + CopyTree(PREFIX+'/SceneEditor', 'SceneEditor') ######################################################################## ## @@ -1938,13 +1948,13 @@ CopyAllFiles(PREFIX+"/plugins/", "pandatool/src/scripts/", ".ms") ## ######################################################################## -IPATH=['direct/src/directbase'] -CompileC(ipath=IPATH, opts=['BUILDING_PPYTHON'], src='ppython.cxx', obj='ppython.obj') -CompileLink(opts=['WINUSER'], dll='ppython.exe', obj=['ppython.obj']) - -IPATH=['direct/src/directbase'] -CompileC(ipath=IPATH, opts=['BUILDING_GENPYCODE'], src='ppython.cxx', obj='genpycode.obj') -CompileLink(opts=['WINUSER'], dll='genpycode.exe', obj=['genpycode.obj']) +if (OMIT.count("PYTHON")==0): + IPATH=['direct/src/directbase'] + CompileC(ipath=IPATH, opts=['BUILDING_PPYTHON'], src='ppython.cxx', obj='ppython.obj') + CompileLink(opts=['WINUSER'], dll='ppython.exe', obj=['ppython.obj']) + IPATH=['direct/src/directbase'] + CompileC(ipath=IPATH, opts=['BUILDING_GENPYCODE'], src='ppython.cxx', obj='genpycode.obj') + CompileLink(opts=['WINUSER'], dll='genpycode.exe', obj=['genpycode.obj']) ######################################################################## # @@ -3698,10 +3708,12 @@ CompileC(ipath=IPATH, opts=OPTS, src='interrogatedb_composite2.cxx', obj='interr # DIRECTORY: dtool/metalibs/dtoolconfig/ # -IPATH=['dtool/metalibs/dtoolconfig'] +IPATH=['dtool/metalibs/dtoolconfig', PREFIX+"/tmp"] OPTS=['BUILDING_DTOOLCONFIG', 'NSPR'] CompileC(ipath=IPATH, opts=OPTS, src='dtoolconfig.cxx', obj='dtoolconfig_dtoolconfig.obj') -CompileC(ipath=IPATH, opts=OPTS, src='pydtool.cxx', obj='dtoolconfig_pydtool.obj') +SRCFILE="pydtool.cxx" +if (OMIT.count("PYTHON")): SRCFILE="null.cxx" +CompileC(ipath=IPATH, opts=OPTS, src=SRCFILE, obj='dtoolconfig_pydtool.obj', xdep=[PREFIX+"/tmp/dtool_have_python.dat"]) CompileLink(opts=['ADVAPI', 'NSPR', 'SSL'], dll='libdtoolconfig.dll', obj=[ 'dtoolconfig_dtoolconfig.obj', 'dtoolconfig_pydtool.obj', @@ -4874,165 +4886,164 @@ CompileLink(dll='pview.exe', opts=['ADVAPI', 'NSPR'], obj=[ # DIRECTORY: direct/src/directbase/ # -IPATH=['direct/src/directbase'] -OPTS=['BUILDING_DIRECT', 'NSPR'] -CompileC(ipath=IPATH, opts=OPTS, src='directbase.cxx', obj='directbase_directbase.obj') +if (OMIT.count("PYTHON")==0): + IPATH=['direct/src/directbase'] + OPTS=['BUILDING_DIRECT', 'NSPR'] + CompileC(ipath=IPATH, opts=OPTS, src='directbase.cxx', obj='directbase_directbase.obj') # # DIRECTORY: direct/src/dcparser/ # -CompileBison(pre='dcyy', dstc='dcParser.cxx', dsth='dcParser.h', src='direct/src/dcparser/dcParser.yxx') -CompileFlex(pre='dcyy', dst='dcLexer.cxx', src='direct/src/dcparser/dcLexer.lxx', dashi=0) -IPATH=['direct/src/dcparser'] -OPTS=['WITHINPANDA', 'BUILDING_DIRECT', 'NSPR'] -CompileC(ipath=IPATH, opts=OPTS, src='dcparser_composite1.cxx', obj='dcparser_composite1.obj') -CompileC(ipath=IPATH, opts=OPTS, src='dcparser_composite2.cxx', obj='dcparser_composite2.obj') -CompileC(ipath=IPATH, opts=OPTS, src='dcParser.cxx', obj='dcparser_dcParser.obj') -CompileC(ipath=IPATH, opts=OPTS, src='dcLexer.cxx', obj='dcparser_dcLexer.obj') -Interrogate(ipath=IPATH, opts=OPTS, outd='libdcparser.in', outc='libdcparser_igate.cxx', - src='direct/src/dcparser', module='direct', library='libdcparser', - files=['dcAtomicField.h', 'dcClass.h', 'dcDeclaration.h', 'dcField.h', 'dcFile.h', - 'dcLexerDefs.h', 'dcMolecularField.h', 'dcParserDefs.h', 'dcSubatomicType.h', - 'dcPackData.h', 'dcPacker.h', 'dcPackerCatalog.h', 'dcPackerInterface.h', - 'dcParameter.h', 'dcClassParameter.h', 'dcArrayParameter.h', 'dcSimpleParameter.h', - 'dcSwitchParameter.h', 'dcNumericRange.h', 'dcSwitch.h', 'dcTypedef.h', 'dcPython.h', - 'dcbase.h', 'dcindent.h', 'hashGenerator.h', 'primeNumberGenerator.h', - 'dcparser_composite1.cxx', 'dcparser_composite2.cxx']) -CompileC(ipath=IPATH, opts=OPTS, src='libdcparser_igate.cxx', obj='libdcparser_igate.obj') +if (OMIT.count("PYTHON")==0): + CompileBison(pre='dcyy', dstc='dcParser.cxx', dsth='dcParser.h', src='direct/src/dcparser/dcParser.yxx') + CompileFlex(pre='dcyy', dst='dcLexer.cxx', src='direct/src/dcparser/dcLexer.lxx', dashi=0) + IPATH=['direct/src/dcparser'] + OPTS=['WITHINPANDA', 'BUILDING_DIRECT', 'NSPR'] + CompileC(ipath=IPATH, opts=OPTS, src='dcparser_composite1.cxx', obj='dcparser_composite1.obj') + CompileC(ipath=IPATH, opts=OPTS, src='dcparser_composite2.cxx', obj='dcparser_composite2.obj') + CompileC(ipath=IPATH, opts=OPTS, src='dcParser.cxx', obj='dcparser_dcParser.obj') + CompileC(ipath=IPATH, opts=OPTS, src='dcLexer.cxx', obj='dcparser_dcLexer.obj') + Interrogate(ipath=IPATH, opts=OPTS, outd='libdcparser.in', outc='libdcparser_igate.cxx', + src='direct/src/dcparser', module='direct', library='libdcparser', + files=['dcAtomicField.h', 'dcClass.h', 'dcDeclaration.h', 'dcField.h', 'dcFile.h', + 'dcLexerDefs.h', 'dcMolecularField.h', 'dcParserDefs.h', 'dcSubatomicType.h', + 'dcPackData.h', 'dcPacker.h', 'dcPackerCatalog.h', 'dcPackerInterface.h', + 'dcParameter.h', 'dcClassParameter.h', 'dcArrayParameter.h', 'dcSimpleParameter.h', + 'dcSwitchParameter.h', 'dcNumericRange.h', 'dcSwitch.h', 'dcTypedef.h', 'dcPython.h', + 'dcbase.h', 'dcindent.h', 'hashGenerator.h', 'primeNumberGenerator.h', + 'dcparser_composite1.cxx', 'dcparser_composite2.cxx']) + CompileC(ipath=IPATH, opts=OPTS, src='libdcparser_igate.cxx', obj='libdcparser_igate.obj') # # DIRECTORY: direct/src/deadrec/ # -IPATH=['direct/src/deadrec'] -OPTS=['BUILDING_DIRECT', 'NSPR'] -CompileC(ipath=IPATH, opts=OPTS, src='deadrec_composite1.cxx', obj='deadrec_composite1.obj') -Interrogate(ipath=IPATH, opts=OPTS, outd='libdeadrec.in', outc='libdeadrec_igate.cxx', - src='direct/src/deadrec', module='direct', library='libdeadrec', - files=['smoothMover.h', 'deadrec_composite1.cxx']) -CompileC(ipath=IPATH, opts=OPTS, src='libdeadrec_igate.cxx', obj='libdeadrec_igate.obj') +if (OMIT.count("PYTHON")==0): + IPATH=['direct/src/deadrec'] + OPTS=['BUILDING_DIRECT', 'NSPR'] + CompileC(ipath=IPATH, opts=OPTS, src='deadrec_composite1.cxx', obj='deadrec_composite1.obj') + Interrogate(ipath=IPATH, opts=OPTS, outd='libdeadrec.in', outc='libdeadrec_igate.cxx', + src='direct/src/deadrec', module='direct', library='libdeadrec', + files=['smoothMover.h', 'deadrec_composite1.cxx']) + CompileC(ipath=IPATH, opts=OPTS, src='libdeadrec_igate.cxx', obj='libdeadrec_igate.obj') # # DIRECTORY: direct/src/distributed/ # -IPATH=['direct/src/distributed', 'direct/src/dcparser'] -OPTS=['WITHINPANDA', 'BUILDING_DIRECT', 'SSL', 'NSPR'] -CompileC(ipath=IPATH, opts=OPTS, src='config_distributed.cxx', obj='distributed_config_distributed.obj') -CompileC(ipath=IPATH, opts=OPTS, src='cConnectionRepository.cxx', obj='distributed_cConnectionRepository.obj') -CompileC(ipath=IPATH, opts=OPTS, src='cDistributedSmoothNodeBase.cxx', obj='distributed_cDistributedSmoothNodeBase.obj') -Interrogate(ipath=IPATH, opts=OPTS, outd='libdistributed.in', outc='libdistributed_igate.cxx', - src='direct/src/distributed', module='direct', library='libdistributed', - files=['config_distributed.cxx', 'config_distributed.h', 'cConnectionRepository.cxx', - 'cConnectionRepository.h', 'cDistributedSmoothNodeBase.cxx', 'cDistributedSmoothNodeBase.h']) -CompileC(ipath=IPATH, opts=OPTS, src='libdistributed_igate.cxx', obj='libdistributed_igate.obj') +if (OMIT.count("PYTHON")==0): + IPATH=['direct/src/distributed', 'direct/src/dcparser'] + OPTS=['WITHINPANDA', 'BUILDING_DIRECT', 'SSL', 'NSPR'] + CompileC(ipath=IPATH, opts=OPTS, src='config_distributed.cxx', obj='distributed_config_distributed.obj') + CompileC(ipath=IPATH, opts=OPTS, src='cConnectionRepository.cxx', obj='distributed_cConnectionRepository.obj') + CompileC(ipath=IPATH, opts=OPTS, src='cDistributedSmoothNodeBase.cxx', obj='distributed_cDistributedSmoothNodeBase.obj') + Interrogate(ipath=IPATH, opts=OPTS, outd='libdistributed.in', outc='libdistributed_igate.cxx', + src='direct/src/distributed', module='direct', library='libdistributed', + files=['config_distributed.cxx', 'config_distributed.h', 'cConnectionRepository.cxx', + 'cConnectionRepository.h', 'cDistributedSmoothNodeBase.cxx', 'cDistributedSmoothNodeBase.h']) + CompileC(ipath=IPATH, opts=OPTS, src='libdistributed_igate.cxx', obj='libdistributed_igate.obj') # # DIRECTORY: direct/src/interval/ # -IPATH=['direct/src/interval'] -OPTS=['BUILDING_DIRECT', 'NSPR'] -#CompileC(ipath=IPATH, opts=OPTS, src='config_interval.cxx', obj='interval_config_interval.obj') -#CompileC(ipath=IPATH, opts=OPTS, src='cInterval.cxx', obj='interval_cInterval.obj') -#CompileC(ipath=IPATH, opts=OPTS, src='cIntervalManager.cxx', obj='interval_cIntervalManager.obj') -#CompileC(ipath=IPATH, opts=OPTS, src='cLerpInterval.cxx', obj='interval_cLerpInterval.obj') -#CompileC(ipath=IPATH, opts=OPTS, src='cLerpNodePathInterval.cxx', obj='interval_cLerpNodePathInterval.obj') -#CompileC(ipath=IPATH, opts=OPTS, src='cLerpAnimEffectInterval.cxx', obj='interval_cLerpAnimEffectInterval.obj') -#CompileC(ipath=IPATH, opts=OPTS, src='cMetaInterval.cxx', obj='interval_cMetaInterval.obj') -#CompileC(ipath=IPATH, opts=OPTS, src='hideInterval.cxx', obj='interval_hideInterval.obj') -#CompileC(ipath=IPATH, opts=OPTS, src='showInterval.cxx', obj='interval_showInterval.obj') -#CompileC(ipath=IPATH, opts=OPTS, src='waitInterval.cxx', obj='interval_waitInterval.obj') -CompileC(ipath=IPATH, opts=OPTS, src='interval_composite1.cxx', obj='interval_composite1.obj') -Interrogate(ipath=IPATH, opts=OPTS, outd='libinterval.in', outc='libinterval_igate.cxx', - src='direct/src/interval', module='direct', library='libinterval', - files=['config_interval.cxx', 'config_interval.h', 'cInterval.cxx', 'cInterval.h', - 'cIntervalManager.cxx', 'cIntervalManager.h', 'cLerpInterval.cxx', 'cLerpInterval.h', - 'cLerpNodePathInterval.cxx', 'cLerpNodePathInterval.h', 'cLerpAnimEffectInterval.cxx', - 'cLerpAnimEffectInterval.h', 'cMetaInterval.cxx', 'cMetaInterval.h', 'hideInterval.cxx', - 'hideInterval.h', 'showInterval.cxx', 'showInterval.h', 'waitInterval.cxx', 'waitInterval.h', - 'lerp_helpers.h']) -CompileC(ipath=IPATH, opts=OPTS, src='libinterval_igate.cxx', obj='libinterval_igate.obj') +if (OMIT.count("PYTHON")==0): + IPATH=['direct/src/interval'] + OPTS=['BUILDING_DIRECT', 'NSPR'] + CompileC(ipath=IPATH, opts=OPTS, src='interval_composite1.cxx', obj='interval_composite1.obj') + Interrogate(ipath=IPATH, opts=OPTS, outd='libinterval.in', outc='libinterval_igate.cxx', + src='direct/src/interval', module='direct', library='libinterval', + files=['config_interval.cxx', 'config_interval.h', 'cInterval.cxx', 'cInterval.h', + 'cIntervalManager.cxx', 'cIntervalManager.h', 'cLerpInterval.cxx', 'cLerpInterval.h', + 'cLerpNodePathInterval.cxx', 'cLerpNodePathInterval.h', 'cLerpAnimEffectInterval.cxx', + 'cLerpAnimEffectInterval.h', 'cMetaInterval.cxx', 'cMetaInterval.h', 'hideInterval.cxx', + 'hideInterval.h', 'showInterval.cxx', 'showInterval.h', 'waitInterval.cxx', 'waitInterval.h', + 'lerp_helpers.h']) + CompileC(ipath=IPATH, opts=OPTS, src='libinterval_igate.cxx', obj='libinterval_igate.obj') # # DIRECTORY: direct/src/showbase/ # -IPATH=['direct/src/showbase'] -OPTS=['BUILDING_DIRECT', 'NSPR'] -CompileC(ipath=IPATH, opts=OPTS, src='showBase.cxx', obj='showbase_showBase.obj') -CompileC(ipath=IPATH, opts=OPTS, src='mersenne.cxx', obj='showbase_mersenne.obj') -Interrogate(ipath=IPATH, opts=OPTS, outd='libshowbase.in', outc='libshowbase_igate.cxx', - src='direct/src/showbase', module='direct', library='libshowbase', - files=['showBase.cxx', 'showBase.h', 'mersenne.cxx', 'mersenne.h']) -CompileC(ipath=IPATH, opts=OPTS, src='libshowbase_igate.cxx', obj='libshowbase_igate.obj') +if (OMIT.count("PYTHON")==0): + IPATH=['direct/src/showbase'] + OPTS=['BUILDING_DIRECT', 'NSPR'] + CompileC(ipath=IPATH, opts=OPTS, src='showBase.cxx', obj='showbase_showBase.obj') + CompileC(ipath=IPATH, opts=OPTS, src='mersenne.cxx', obj='showbase_mersenne.obj') + Interrogate(ipath=IPATH, opts=OPTS, outd='libshowbase.in', outc='libshowbase_igate.cxx', + src='direct/src/showbase', module='direct', library='libshowbase', + files=['showBase.cxx', 'showBase.h', 'mersenne.cxx', 'mersenne.h']) + CompileC(ipath=IPATH, opts=OPTS, src='libshowbase_igate.cxx', obj='libshowbase_igate.obj') # # DIRECTORY: direct/metalibs/direct/ # -IPATH=['direct/metalibs/direct'] -OPTS=['BUILDING_DIRECT', 'NSPR'] -CompileC(ipath=IPATH, opts=OPTS, src='direct.cxx', obj='direct_direct.obj') -InterrogateModule(outc='libdirect_module.cxx', module='direct', library='libdirect', - files=['libdcparser.in', 'libshowbase.in', 'libdeadrec.in', 'libinterval.in', 'libdistributed.in']) -CompileC(ipath=IPATH, opts=OPTS, src='libdirect_module.cxx', obj='libdirect_module.obj') -CompileLink(dll='libdirect.dll', opts=['ADVAPI', 'NSPR', 'SSL'], obj=[ - 'direct_direct.obj', - 'libdirect_module.obj', - 'directbase_directbase.obj', - 'dcparser_composite1.obj', - 'dcparser_composite2.obj', - 'dcparser_dcParser.obj', - 'dcparser_dcLexer.obj', - 'libdcparser_igate.obj', - 'showbase_showBase.obj', - 'showbase_mersenne.obj', - 'libshowbase_igate.obj', - 'deadrec_composite1.obj', - 'libdeadrec_igate.obj', - 'interval_composite1.obj', - 'libinterval_igate.obj', - 'distributed_config_distributed.obj', - 'distributed_cConnectionRepository.obj', - 'distributed_cDistributedSmoothNodeBase.obj', - 'libdistributed_igate.obj', - 'libpanda.dll', - 'libpandaexpress.dll', - 'libdtoolconfig.dll', - 'libdtool.dll', -]) +if (OMIT.count("PYTHON")==0): + IPATH=['direct/metalibs/direct'] + OPTS=['BUILDING_DIRECT', 'NSPR'] + CompileC(ipath=IPATH, opts=OPTS, src='direct.cxx', obj='direct_direct.obj') + InterrogateModule(outc='libdirect_module.cxx', module='direct', library='libdirect', + files=['libdcparser.in', 'libshowbase.in', 'libdeadrec.in', 'libinterval.in', 'libdistributed.in']) + CompileC(ipath=IPATH, opts=OPTS, src='libdirect_module.cxx', obj='libdirect_module.obj') + CompileLink(dll='libdirect.dll', opts=['ADVAPI', 'NSPR', 'SSL'], obj=[ + 'direct_direct.obj', + 'libdirect_module.obj', + 'directbase_directbase.obj', + 'dcparser_composite1.obj', + 'dcparser_composite2.obj', + 'dcparser_dcParser.obj', + 'dcparser_dcLexer.obj', + 'libdcparser_igate.obj', + 'showbase_showBase.obj', + 'showbase_mersenne.obj', + 'libshowbase_igate.obj', + 'deadrec_composite1.obj', + 'libdeadrec_igate.obj', + 'interval_composite1.obj', + 'libinterval_igate.obj', + 'distributed_config_distributed.obj', + 'distributed_cConnectionRepository.obj', + 'distributed_cDistributedSmoothNodeBase.obj', + 'libdistributed_igate.obj', + 'libpanda.dll', + 'libpandaexpress.dll', + 'libdtoolconfig.dll', + 'libdtool.dll', + ]) # # DIRECTORY: direct/src/dcparse/ # -IPATH=['direct/src/dcparse', 'direct/src/dcparser'] -OPTS=['WITHINPANDA', 'NSPR'] -CompileC(ipath=IPATH, opts=OPTS, src='dcparse.cxx', obj='dcparse_dcparse.obj') -CompileLink(dll='dcparse.exe', opts=['ADVAPI', 'NSPR'], obj=[ - 'dcparse_dcparse.obj', - 'libdirect.dll', - 'libpandaexpress.dll', - 'libdtoolconfig.dll', - 'libdtool.dll', - 'libpystub.dll', -]) +if (OMIT.count("PYTHON")==0): + IPATH=['direct/src/dcparse', 'direct/src/dcparser'] + OPTS=['WITHINPANDA', 'NSPR'] + CompileC(ipath=IPATH, opts=OPTS, src='dcparse.cxx', obj='dcparse_dcparse.obj') + CompileLink(dll='dcparse.exe', opts=['ADVAPI', 'NSPR'], obj=[ + 'dcparse_dcparse.obj', + 'libdirect.dll', + 'libpandaexpress.dll', + 'libdtoolconfig.dll', + 'libdtool.dll', + 'libpystub.dll', + ]) # # DIRECTORY: direct/src/heapq/ # -IPATH=['direct/src/heapq'] -OPTS=['NSPR'] -CompileC(ipath=IPATH, opts=OPTS, src='heapq.cxx', obj='heapq_heapq.obj') -CompileLink(dll='libheapq.dll', opts=['ADVAPI', 'NSPR'], obj=[ - 'heapq_heapq.obj', - 'libpandaexpress.dll', - 'libdtoolconfig.dll', - 'libdtool.dll', -]) +if (OMIT.count("PYTHON")==0): + IPATH=['direct/src/heapq'] + OPTS=['NSPR'] + CompileC(ipath=IPATH, opts=OPTS, src='heapq.cxx', obj='heapq_heapq.obj') + CompileLink(dll='libheapq.dll', opts=['ADVAPI', 'NSPR'], obj=[ + 'heapq_heapq.obj', + 'libpandaexpress.dll', + 'libdtoolconfig.dll', + 'libdtool.dll', + ]) # # DIRECTORY: pandatool/src/pandatoolbase/ @@ -6221,15 +6232,16 @@ CompileBAM("../=", PREFIX+"/models/misc/Spotlight.bam", "dmodels/src/misc/S # ########################################################################################## -if (older(PREFIX+'/pandac/PandaModules.pyz',xpaths(PREFIX+"/pandac/input/",ALLIN,""))): - ALLTARGETS.append(PREFIX+'/pandac/PandaModules.pyz') - if (sys.platform=="win32"): - if (GENMAN): oscmd(PREFIX+"/bin/genpycode.exe -m") - else : oscmd(PREFIX+"/bin/genpycode.exe") - else: - if (GENMAN): oscmd(PREFIX+"/bin/genpycode -m") - else : oscmd(PREFIX+"/bin/genpycode") - updatefiledate(PREFIX+'/pandac/PandaModules.pyz') +if (OMIT.count("PYTHON")==0): + if (older(PREFIX+'/pandac/PandaModules.pyz',xpaths(PREFIX+"/pandac/input/",ALLIN,""))): + ALLTARGETS.append(PREFIX+'/pandac/PandaModules.pyz') + if (sys.platform=="win32"): + if (GENMAN): oscmd(PREFIX+"/bin/genpycode.exe -m") + else : oscmd(PREFIX+"/bin/genpycode.exe") + else: + if (GENMAN): oscmd(PREFIX+"/bin/genpycode -m") + else : oscmd(PREFIX+"/bin/genpycode") + updatefiledate(PREFIX+'/pandac/PandaModules.pyz') ######################################################################## ## @@ -6247,44 +6259,111 @@ if (icache!=0): # # The Installers # -# Under windows, the installer is built using NSIS -# Under linux, the installer is a Debian DEB archive +# Under windows, we can build an 'exe' package using NSIS +# Under linux, we can build an 'deb' package using dpkg-deb # Makepanda does not build RPMs. To do that, use 'rpm -tb' on the source tarball. # ########################################################################################## -if (sys.platform == "win32"): +def MakeInstallerNSIS(file,fullname,smdirectory,uninstallkey,installdir,ppgame): + if (older(file, ALLTARGETS)): + print "Building "+fullname+" installer. This can take up to an hour." + if (COMPRESSOR != "lzma"): + print("Note: you are using zlib, which is faster, but lzma gives better compression.") + if (os.path.exists(file)): + os.remove(file) + if (os.path.exists("nsis-output.exe")): + os.remove("nsis-output.exe") + def0 = '/DCOMPRESSOR="' + COMPRESSOR + '" ' + def1 = '/DFULLNAME="' + fullname + '" ' + def2 = '/DSMDIRECTORY="' + smdirectory + '" ' + def3 = '/DUNINSTALLKEY="' + uninstallkey + '" ' + def4 = '/DINSTALLDIR="' + installdir + '" ' + def5 = '' + if (ppgame): def5 = '/DPPGAME="' + ppgame + '" ' + oscmd("thirdparty/win-nsis/makensis.exe /V2 "+def0+def1+def2+def3+def4+def5+" makepanda/panda.nsi") + os.rename("nsis-output.exe", file) - def MakeInstaller(file,fullname,smdirectory,uninstallkey,installdir,ppgame): - if (older(file, ALLTARGETS)): - print "Building "+fullname+" installer. This can take up to an hour." - if (COMPRESSOR != "lzma"): - print("Note: you are using zlib, which is faster, but lzma gives better compression.") - if (os.path.exists(file)): - os.remove(file) - if (os.path.exists("nsis-output.exe")): - os.remove("nsis-output.exe") - def0 = '/DCOMPRESSOR="' + COMPRESSOR + '" ' - def1 = '/DFULLNAME="' + fullname + '" ' - def2 = '/DSMDIRECTORY="' + smdirectory + '" ' - def3 = '/DUNINSTALLKEY="' + uninstallkey + '" ' - def4 = '/DINSTALLDIR="' + installdir + '" ' - def5 = '' - if (ppgame): def5 = '/DPPGAME="' + ppgame + '" ' - oscmd("thirdparty/win-nsis/makensis.exe /V2 "+def0+def1+def2+def3+def4+def5+" makepanda/panda.nsi") - os.rename("nsis-output.exe", file) +def MakeInstallerDPKG(file): + if (older(file,ALLTARGETS)): + DEB=""" +Package: panda3d +Version: VERSION +Section: libdevel +Priority: optional +Architecture: i386 +Essential: no +Depends: PYTHONV +Provides: panda3d +Maintainer: etc-panda3d@lists.andrew.cmu.edu +Description: The panda3D free 3D engine +""" + import compileall + PYTHONV=os.path.basename(PYTHONSDK) + if (os.path.isdir("debtmp")): oscmd("chmod -R 755 debtmp") + oscmd("rm -rf debtmp data.tar.gz control.tar.gz ") + oscmd("mkdir -p debtmp/usr/bin") + oscmd("mkdir -p debtmp/usr/include") + oscmd("mkdir -p debtmp/usr/share/panda3d") + oscmd("mkdir -p debtmp/usr/lib/"+PYTHONV+"/lib-dynload") + oscmd("mkdir -p debtmp/usr/lib/"+PYTHONV+"/site-packages") + oscmd("mkdir -p debtmp/etc") + oscmd("mkdir -p debtmp/DEBIAN") + oscmd("sed -e 's@$THIS_PRC_DIR/[.][.]@/usr/share/panda3d@' < built/etc/Config.prc > debtmp/etc/Config.prc") + oscmd("cp built/etc/Confauto.prc debtmp/etc/Confauto.prc") + oscmd("cp --recursive built/include debtmp/usr/include/panda3d") + oscmd("cp --recursive direct debtmp/usr/share/panda3d/direct") + oscmd("cp --recursive built/pandac debtmp/usr/share/panda3d/pandac") + oscmd("cp --recursive built/Pmw debtmp/usr/share/panda3d/Pmw") + oscmd("cp --recursive built/epydoc debtmp/usr/share/panda3d/epydoc") + oscmd("cp built/direct/__init__.py debtmp/usr/share/panda3d/direct/__init__.py") + oscmd("cp --recursive SceneEditor debtmp/usr/share/panda3d/SceneEditor") + oscmd("cp --recursive built/models debtmp/usr/share/panda3d/models") + oscmd("cp --recursive samples debtmp/usr/share/panda3d/samples") + oscmd("cp doc/LICENSE debtmp/usr/share/panda3d/LICENSE") + oscmd("cp doc/LICENSE debtmp/usr/include/panda3d/LICENSE") + oscmd("cp doc/ReleaseNotes debtmp/usr/share/panda3d/ReleaseNotes") + oscmd("echo '/usr/share/panda3d' > debtmp/usr/lib/"+PYTHONV+"/site-packages/panda3d.pth") + oscmd("cp built/bin/* debtmp/usr/bin/") + for base in os.listdir("built/lib"): + oscmd("ln -sf /usr/lib/"+base+" debtmp/usr/lib/"+PYTHONV+"/lib-dynload/"+base) + oscmd("cp built/lib/"+base+" debtmp/usr/lib/"+base) + for base in os.listdir("debtmp/usr/share/panda3d/direct/src"): + if (base != "extensions"): + compileall.compile_dir("debtmp/usr/share/panda3d/direct/src/"+base) + compileall.compile_dir("debtmp/usr/share/panda3d/Pmw") + compileall.compile_dir("debtmp/usr/share/panda3d/epydoc") + compileall.compile_dir("debtmp/usr/share/panda3d/SceneEditor") + oscmd("chmod -R 555 debtmp/usr/share/panda3d") + oslocalcmd("debtmp","(find usr -type f -exec md5sum {} \;) > DEBIAN/md5sums") + oslocalcmd("debtmp","(find etc -type f -exec md5sum {} \;) >> DEBIAN/md5sums") + WriteFile("debtmp/DEBIAN/conffiles","/etc/Config.prc\n") + WriteFile("debtmp/DEBIAN/control",DEB[1:].replace("VERSION",str(VERSION)).replace("PYTHONV",PYTHONV)) + oscmd("dpkg-deb -b debtmp "+file) + oscmd("chmod -R 755 debtmp/usr/share/panda3d") + oscmd("rm -rf debtmp") - if (INSTALLER!=0): - MakeInstaller("Panda3D-"+VERSION+".exe", "Panda3D", "Panda3D "+VERSION, - "Panda3D "+VERSION, "C:\\Panda3D-"+VERSION, 0) - if (PPGAME!=0): - if (os.path.isdir(PPGAME)==0): - sys.exit("No such directory "+PPGAME) - if (os.path.exists(os.path.join(PPGAME,PPGAME+".py"))==0): - sys.exit("No such file "+PPGAME+"/"+PPGAME+".py") - MakeInstaller(PPGAME+"-"+VERSION+".exe", PPGAME, PPGAME+" "+VERSION, - PPGAME+" "+VERSION, "C:\\"+PPGAME+"-"+VERSION, PPGAME) +if (INSTALLER != 0): + if (sys.platform == "win32"): + MakeInstallerNSIS("Panda3D-"+VERSION+".exe", "Panda3D", "Panda3D "+VERSION, + "Panda3D "+VERSION, "C:\\Panda3D-"+VERSION, 0) + elif (sys.platform == "linux2") and (os.path.isfile("/usr/bin/dpkg-deb")): + MakeInstallerDPKG("panda3d_"+VERSION+"_i386.deb") + else: + sys.exit("Do not know how to make an installer for this platform") + + +if (PPGAME!=0): + if (os.path.isdir(PPGAME)==0): + sys.exit("No such directory "+PPGAME) + if (os.path.exists(os.path.join(PPGAME,PPGAME+".py"))==0): + sys.exit("No such file "+PPGAME+"/"+PPGAME+".py") + if (sys.platform == "win32"): + MakeInstallerNSIS(PPGAME+"-"+VERSION+".exe", PPGAME, PPGAME+" "+VERSION, + PPGAME+" "+VERSION, "C:\\"+PPGAME+"-"+VERSION, PPGAME) + else: + sys.exit("Do not know how to make a prepackaged game for this platform") DEB="""