diff --git a/direct/src/directbase/ppython.cxx b/direct/src/directbase/ppython.cxx index f666817891..df72205ada 100755 --- a/direct/src/directbase/ppython.cxx +++ b/direct/src/directbase/ppython.cxx @@ -51,7 +51,7 @@ void pathfail(void) int main(int argc, char **argv) { - char fnbuf[PATH_MAX],ppbuf[PATH_MAX],pabuf[PATH_MAX],prbuf[PATH_MAX],modcmd[PATH_MAX]; + char fnbuf[PATH_MAX],ppbuf[PATH_MAX],pabuf[PATH_MAX],modcmd[PATH_MAX]; int fnlen; // Ask windows for the file name of this executable. @@ -67,29 +67,12 @@ int main(int argc, char **argv) if (stricmp(fnbuf + fnlen - srclen, LINK_SOURCE)) pathfail(); fnlen -= srclen; fnbuf[fnlen] = 0; - // Fetch the command line and trim the first word. - - char *cmdline = GetCommandLine(); - char *args = cmdline; - bool inquote = false; - while (*args && ((*args != ' ')||(inquote))) { - if (*args == '"') inquote = !inquote; - args++; - } - while (*args==' ') args++; - - // Calculate MODCMD + // See if we can find the panda root. If not, abort. - if (GENPYCODE) { - sprintf(ppbuf,"%s\\direct\\src\\ffi\\jGenPyCode.py",fnbuf); - FILE *f = fopen(ppbuf,"r"); - if (f) { - fclose(f); - sprintf(modcmd,"python %s\\direct\\src\\ffi\\jGenPyCode.py %s",fnbuf,args); - } else { - sprintf(modcmd,"python %s\\..\\direct\\src\\ffi\\jGenPyCode.py %s",fnbuf,args); - } - } else sprintf(modcmd,"python %s",args); + sprintf(ppbuf,"%s/direct/__init__.py",fnbuf); + FILE *f = fopen(ppbuf,"r"); + if (f==0) pathfail(); + fclose(f); // Set the PYTHONPATH and PATH @@ -102,11 +85,28 @@ int main(int argc, char **argv) else sprintf(pabuf,"PATH=%s\\bin",fnbuf); putenv(pabuf); + // Fetch the command line and trim the first word. + + char *cmdline = GetCommandLine(); + char *args = cmdline; + bool inquote = false; + while (*args && ((*args != ' ')||(inquote))) { + if (*args == '"') inquote = !inquote; + args++; + } + while (*args==' ') args++; + // Append LINK_TARGET to the file name. if (fnlen + strlen(LINK_TARGET) > 1023) pathfail(); strcat(fnbuf, LINK_TARGET); + // Calculate MODCMD + + if (GENPYCODE) { + sprintf(modcmd,"python -c \"import direct.ffi.jGenPyCode\" %s",args); + } else sprintf(modcmd,"python %s",args); + // Run it. signal(SIGINT, SIG_IGN); @@ -162,7 +162,7 @@ void pathfail(void) int main(int argc, char **argv) { - char fnbuf[PATH_MAX],ppbuf[PATH_MAX],pabuf[PATH_MAX],prbuf[PATH_MAX],genpyc[PATH_MAX]; + char fnbuf[PATH_MAX],ppbuf[PATH_MAX]; char *modargv[1024]; int fnlen,modargc; @@ -180,38 +180,31 @@ int main(int argc, char **argv) if (strcmp(fnbuf + fnlen - srclen, LINK_SOURCE)) pathfail(); fnlen -= srclen; fnbuf[fnlen] = 0; - // Calculate GENPYC + // See if we can find the 'direct' tree locally. + // If not, continue anyway. It may be possible to succeed. - if (GENPYCODE) { - sprintf(ppbuf,"%s/direct/src/ffi/jGenPyCode.py",fnbuf); - FILE *f = fopen(ppbuf,"r"); - if (f) { - fclose(f); - sprintf(genpyc,"%s/direct/src/ffi/jGenPyCode.py",fnbuf); - } else { - sprintf(genpyc,"%s/../direct/src/ffi/jGenPyCode.py",fnbuf); - } + sprintf(ppbuf,"%s/direct/__init__.py",fnbuf); + FILE *f = fopen(ppbuf,"r"); + if (f) { + char *pp = getenv("PYTHONPATH"); + if (pp) sprintf(ppbuf,"PYTHONPATH=%s:%s/lib:%s",fnbuf,fnbuf,pp); + else sprintf(ppbuf,"PYTHONPATH=%s:%s/lib",fnbuf,fnbuf); + putenv(ppbuf); } - // Set the PYTHONPATH and PATH - - char *pp = getenv("PYTHONPATH"); - if (pp) sprintf(ppbuf,"PYTHONPATH=%s:%s/lib:%s",fnbuf,fnbuf,pp); - else sprintf(ppbuf,"PYTHONPATH=%s:%s/lib",fnbuf,fnbuf); - putenv(ppbuf); - char *path = getenv("PATH"); - if (path) sprintf(pabuf,"PATH=%s/bin;%s",fnbuf,path); - else sprintf(pabuf,"PATH=%s/bin",fnbuf); - putenv(pabuf); - // Calculate MODARGV + modargc=0; modargv[modargc++]="python"; - if (GENPYCODE) modargv[modargc++] = genpyc; + if (GENPYCODE) { + modargv[modargc++] = "-c"; + modargv[modargc++] = "import direct.ffi.jGenPyCode"; + } for (int i=1; i +# python -c "import direct.ffi.jGenPyCode" # # Before invoking python, the shell-script may need to set # these environment variables, to make sure that everything diff --git a/doc/doc/INSTALL-MK b/doc/doc/INSTALL-MK index c8c429620e..d66f85e167 100644 --- a/doc/doc/INSTALL-MK +++ b/doc/doc/INSTALL-MK @@ -181,12 +181,13 @@ BUILDING THE SOURCE TAR-BALL AND THE RPM If you are using Linux and you want to build an RPM, it is fairly easy to do so. First, you need a panda source tar-ball. If you do not already have one, build one using 'maketarball.py'. You will need to -specify a version number. +give your version of panda a version number. The version number can +be any three integers separated by dots. - maketarball.py --v1 58 --v2 23 --v3 95 + makepanda/maketarball.py 58.23.95 -This builds panda3d-58.23.95.tar.gz. Once you have the tar-ball, -it is easy to turn it into a binary RPM: +This builds panda3d-58.23.95.tar.gz and panda3d-58-23-95.zip. Once +you have the tar-ball, it is easy to turn it into a binary RPM: rpmbuild -tb panda3d-58.23.95.tar.gz diff --git a/doc/makepanda/makepanda.py b/doc/makepanda/makepanda.py index 9c29120207..eedb656f70 100755 --- a/doc/makepanda/makepanda.py +++ b/doc/makepanda/makepanda.py @@ -487,7 +487,7 @@ def parseopts(args): elif (option=="--prefix"): PREFIX=value elif (option=="--compiler"): COMPILER=value elif (option=="--directx-sdk"): DIRECTXSDK=value - elif (option=="--thirdparty"): THIRDPARTY=value + elif (option=="--thirdparty"): THIRDPARTY=value+"/" elif (option=="--optimize"): OPTIMIZE=value elif (option=="--quiet"): VERBOSE-=1 elif (option=="--verbose"): VERBOSE+=1 @@ -585,11 +585,12 @@ if sys.platform == "win32": 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.2")): PythonSDK = "/usr/include/python2.2" - elif (os.path.isdir("/usr/include/python2.3")): PythonSDK = "/usr/include/python2.3" + 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.5")): PythonSDK = "/usr/include/python2.5" + 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. ######################################################################## ## @@ -875,7 +876,7 @@ ALLTARGETS=[] global CxxIncludeCache CxxIncludeCache = {} -iCachePath=PREFIX+"/makepanda-icache" +iCachePath=PREFIX+"/tmp/makepanda-icache" try: icache = open(iCachePath,'rb') except: icache = 0 if (icache!=0): @@ -1064,8 +1065,8 @@ def CopyAllFiles(dstdir,srcdir): def CopyTree(dstdir,srcdir): if (os.path.isdir(dstdir)): return 0 - if (COMPILER=="MSVC7"): cmd = "xcopy.exe /I/Y/E/Q \""+srcdir+"\" \""+dstdir+"\"" - if (COMPILER=="LINUXA"): cmd = "cp --recursive --force "+srcdir+" "+dstdir + if (COMPILER=="MSVC7"): cmd = 'xcopy.exe /I/Y/E/Q "' + srcdir + '" "' + dstdir+ '"' + if (COMPILER=="LINUXA"): cmd = 'cp --recursive --force "' + srcdir + '" "' + dstdir + '"' oscmd(cmd) updatefiledate(dstdir) @@ -1105,11 +1106,10 @@ def CompileFlex(pre,dst,src,dashi): if (dashi): oslocalcmd(PREFIX+"/tmp", flexFullPath+" -i -P" + pre + " -olex.yy.c " + fn) else: oslocalcmd(PREFIX+"/tmp", flexFullPath+" -P" + pre + " -olex.yy.c " + fn) replaceInFile(PREFIX+'/tmp/lex.yy.c', dst, '#include ', '') - #WriteFile(wdst, ReadFile("built\\tmp\\lex.yy.c").replace("#include ","")) if (COMPILER=="LINUXA"): if (dashi): oslocalcmd(PREFIX+"/tmp", "flex -i -P" + pre + " -olex.yy.c " + fn) else: oslocalcmd(PREFIX+"/tmp", "flex -P" + pre + " -olex.yy.c " + fn) - oscmd('cp built/tmp/lex.yy.c '+dst) + oscmd('cp "'+PREFIX+'/tmp/lex.yy.c" "'+dst+'"') updatefiledate(dst) ######################################################################## @@ -1158,10 +1158,10 @@ def CompileC(obj=0,src=0,ipath=[],opts=[]): if (OPTIMIZE==2): cmd = cmd + " /D_DEBUG /Zc:forScope /MDd /Zi /RTCs /GS " if (OPTIMIZE==3): cmd = cmd + " /Zc:forScope /MD /O2 /Ob2 /G6 /Zi /DFORCE_INLINING " if (OPTIMIZE==4): cmd = cmd + " /Zc:forScope /MD /O2 /Ob2 /G6 /GL /Zi /DFORCE_INLINING /DNDEBUG " - cmd = cmd + " /Fd\"" + wobj[:-4] + ".pdb\"" + cmd = cmd + ' /Fd"' + wobj[:-4] + '.pdb"' building = buildingwhat(opts) if (building): cmd = cmd + " /DBUILDING_"+building - cmd = cmd + " /EHsc /Zm300 /DWIN32_VC /DWIN32 /W3 \"" + fullsrc + "\"" + cmd = cmd + ' /EHsc /Zm300 /DWIN32_VC /DWIN32 /W3 "' + fullsrc + '"' oscmd(cmd) updatefiledate(wobj) @@ -1170,8 +1170,8 @@ def CompileC(obj=0,src=0,ipath=[],opts=[]): if (older(wobj, dep)): if VERBOSE >= 0: checkIfNewDir(ipath[1]) - if (src[-2:]==".c"): cmd = "gcc -c -o "+wobj - else: cmd = "g++ -ftemplate-depth-30 -c -o "+wobj + if (src[-2:]==".c"): cmd = 'gcc -c -o "' + wobj + '"' + else: cmd = 'g++ -ftemplate-depth-30 -c -o "' + wobj + '"' cmd = cmd + ' -I"' + PythonSDK + '"' if (PkgSelected(opts,"VRPN")): cmd = cmd + ' -I"' + THIRDPARTY + 'vrpn/include"' if (PkgSelected(opts,"FFTW")): cmd = cmd + ' -I"' + THIRDPARTY + 'fftw/include"' @@ -1187,7 +1187,7 @@ def CompileC(obj=0,src=0,ipath=[],opts=[]): if (OPTIMIZE==4): cmd = cmd + " -O2" building = buildingwhat(opts) if (building): cmd = cmd + " -DBUILDING_" + building - cmd = cmd + " " + fullsrc + cmd = cmd + ' "' + fullsrc + '"' oscmd(cmd) updatefiledate(wobj) @@ -1242,7 +1242,7 @@ def Interrogate(ipath=0, opts=0, outd=0, outc=0, src=0, module=0, library=0, fil if (x[:9]=="BUILDING_"): building = x[9:] if (older(outc, dep) or older(outd, dep)): if (COMPILER=="MSVC7"): - cmd = dotdots + PREFIX+"/bin/interrogate.exe" + cmd = '"' + dotdots + PREFIX+'/bin/interrogate.exe"' cmd = cmd + ' -DCPPPARSER -D__STDC__=1 -D__cplusplus -longlong __int64 -D_X86_ -DWIN32_VC -D_WIN32' cmd = cmd + ' -D"_declspec(param)=" -D_near -D_far -D__near -D__far -D__stdcall' if (OPTIMIZE==1): cmd = cmd + ' ' @@ -1252,7 +1252,7 @@ def Interrogate(ipath=0, opts=0, outd=0, outc=0, src=0, module=0, library=0, fil cmd = cmd + ' -S"' + dotdots + PREFIX+'/include/parser-inc"' cmd = cmd + ' -I"' + dotdots + PREFIX+'/python/include"' if (COMPILER=="LINUXA"): - cmd = dotdots + PREFIX+"/bin/interrogate" + cmd = '"' + dotdots + PREFIX + '/bin/interrogate"' cmd = cmd + ' -DCPPPARSER -D__STDC__=1 -D__cplusplus -D__i386__ -D__const=const' if (OPTIMIZE==1): cmd = cmd + ' ' if (OPTIMIZE==2): cmd = cmd + ' ' @@ -1260,7 +1260,7 @@ def Interrogate(ipath=0, opts=0, outd=0, outc=0, src=0, module=0, library=0, fil if (OPTIMIZE==4): cmd = cmd + ' ' cmd = cmd + ' -S"' + dotdots + PREFIX+'/include/parser-inc" -S"/usr/include"' cmd = cmd + ' -I"' + dotdots + PREFIX+'/python/include"' - cmd = cmd + " -oc "+dotdots+outc+" -od "+dotdots+outd + cmd = cmd + ' -oc "' + dotdots + outc + '" -od "' + dotdots + outd + '"' cmd = cmd + ' -fnames -string -refcount -assert -python' for x in ipath: cmd = cmd + ' -I"' + dotdots + x + '"' if (building): cmd = cmd + " -DBUILDING_"+building @@ -1295,10 +1295,10 @@ def InterrogateModule(outc=0, module=0, library=0, files=0): if VERBOSE >= 1: print "Generating Python-stub cxx file for %s"%(library,) if (COMPILER=="MSVC7"): - cmd = PREFIX+"/bin/interrogate_module.exe " + cmd = '"' + PREFIX + '/bin/interrogate_module.exe" ' if (COMPILER=="LINUXA"): - cmd = PREFIX+"/bin/interrogate_module " - cmd = cmd + " -oc \"" + outc + '" -module "' + module + '" -library "' + library + '" -python ' + cmd = '"' + PREFIX + '/bin/interrogate_module" ' + cmd = cmd + ' -oc "' + outc + '" -module "' + module + '" -library "' + library + '" -python ' for x in files: cmd = cmd + ' "' + x + '" ' oscmd(cmd) updatefiledate(outc) @@ -1319,9 +1319,9 @@ def CompileLIB(lib=0, obj=[], opts=[]): wobj = xpaths(PREFIX+"/tmp/",obj,"") ALLTARGETS.append(wlib) if (older(wlib, wobj)): - cmd = 'lib.exe /nologo /OUT:'+wlib + cmd = 'lib.exe /nologo /OUT:"' + wlib + '"' if (OPTIMIZE==4): cmd = cmd + " /LTCG " - for x in wobj: cmd=cmd+" "+x + for x in wobj: cmd=cmd+' "'+x+'"' oscmd(cmd) updatefiledate(wlib) @@ -1330,8 +1330,8 @@ def CompileLIB(lib=0, obj=[], opts=[]): wobj = [] for x in obj: wobj.append(PREFIX+"/tmp/" + x[:-4] + ".o") if (older(wlib, wobj)): - cmd = "ar cru " + wlib - for x in wobj: cmd=cmd+" "+x + cmd = 'ar cru "' + wlib + '"' + for x in wobj: cmd=cmd+' "'+x+'"' oscmd(cmd) updatefiledate(wlib) @@ -1368,10 +1368,10 @@ def CompileLink(dll=0, obj=[], opts=[], xdep=[]): cmd = cmd + " /MAP /MAPINFO:EXPORTS /MAPINFO:LINES /fixed:no /incremental:no /stack:4194304 " 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\" " + cmd = cmd + ' /OUT:"' + dll + '" /IMPLIB:"' + lib + '" /MAP:NUL' + cmd = cmd + ' /LIBPATH:"' + PREFIX + '/python/libs" ' for x in wobj: cmd = cmd + ' "' + x + '"' - if (dll[-4:]==".exe"): cmd = cmd + " built/tmp/pandaIcon.res" + 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")): cmd = cmd + ' /LIBPATH:"' + DIRECTXSDK + 'lib/x86"' cmd = cmd + ' /LIBPATH:"' + DIRECTXSDK + 'lib"' @@ -1454,13 +1454,13 @@ def CompileLink(dll=0, obj=[], opts=[], xdep=[]): elif (suffix==".lib"): wobj.append(PREFIX+"/lib/"+x[:-4]+".a") else: sys.exit("unknown suffix in object list.") if (older(wdll, wobj+xdep)): - if (dll[-4:]==".exe"): cmd = "g++ -o " + wdll + " -L" + PREFIX + "/lib" - else: cmd = "g++ -shared -o " + wdll + " -L" + PREFIX + "/lib" + if (dll[-4:]==".exe"): cmd = 'g++ -o "' + wdll + '" -L"' + PREFIX + '/lib"' + else: cmd = 'g++ -shared -o "' + wdll + '" -L"' + PREFIX + '/lib"' for x in obj: suffix = x[-4:] - if (suffix==".obj"): cmd = cmd + " " + PREFIX + "/tmp/"+x[:-4]+".o" - elif (suffix==".dll"): cmd = cmd + " -l" + x[3:-4] - elif (suffix==".lib"): cmd = cmd + " " + PREFIX + "/lib/"+x[:-4]+".a" + if (suffix==".obj"): cmd = cmd + ' "' + PREFIX + '/tmp/' + x[:-4] + '.o"' + elif (suffix==".dll"): cmd = cmd + ' -l' + x[3:-4] + elif (suffix==".lib"): cmd = cmd + ' "' + PREFIX + '/lib/' + x[:-4] + '.a"' if (PkgSelected(opts,"FMOD")): cmd = cmd + ' -L"' + THIRDPARTY + 'fmod/lib" -lfmod-3.74' if (PkgSelected(opts,"NVIDIACG")): cmd = cmd + ' -L"' + THIRDPARTY + 'nvidiacg/lib" ' @@ -1587,6 +1587,8 @@ conf = conf.replace("NVERSION",str(NVERSION)) ConditionalWriteFile(PREFIX+'/include/checkPandaVersion.h',conf) +ConditionalWriteFile(PREFIX + "/tmp/pythonversion", os.path.basename(PythonSDK)) + ########################################################################################## # # If running under windows, compile up the icon. diff --git a/doc/makepanda/maketarball.py b/doc/makepanda/maketarball.py index 0d92c20693..bf45969eb2 100755 --- a/doc/makepanda/maketarball.py +++ b/doc/makepanda/maketarball.py @@ -100,32 +100,42 @@ The Panda3D engine. %build makepanda/makepanda.py --version VERSION --everything %install +PYTHONV=`cat built/tmp/pythonversion` rm -rf $RPM_BUILD_ROOT -PANDA=$RPM_BUILD_ROOT/usr/share/panda3d -mkdir -p $PANDA +mkdir -p $RPM_BUILD_ROOT/usr/bin +mkdir -p $RPM_BUILD_ROOT/usr/include +mkdir -p $RPM_BUILD_ROOT/usr/lib +mkdir -p $RPM_BUILD_ROOT/usr/share/panda3d +mkdir -p $RPM_BUILD_ROOT/usr/lib/$PYTHONV/lib-dynload mkdir -p $RPM_BUILD_ROOT/etc/ld.so.conf.d mkdir -p $RPM_BUILD_ROOT/usr/bin -cp --recursive built/bin $PANDA/bin -cp --recursive built/lib $PANDA/lib -cp --recursive built/etc $PANDA/etc -cp --recursive built/include $PANDA/include -cp --recursive direct $PANDA/direct -cp built/direct/__init__.py $PANDA/direct/__init__.py -cp --recursive models $PANDA/models -cp --recursive samples $PANDA/samples -cp --recursive SceneEditor $PANDA/SceneEditor -cp --recursive Config.prc $PANDA/Config.prc -cp --recursive LICENSE $PANDA/LICENSE -echo "/usr/share/panda3d/lib" > $RPM_BUILD_ROOT/etc/ld.so.conf.d/panda3d.conf -for x in $PANDA/bin/* ; do + +sed -e 's@$THIS_PRC_DIR/[.]@/usr/share/panda3d@' < doc/Config.prc > $RPM_BUILD_ROOT/etc/Config.prc + +cp --recursive built/lib $RPM_BUILD_ROOT/usr/lib/panda3d +cp --recursive built/include $RPM_BUILD_ROOT/usr/include/panda3d +cp --recursive direct $RPM_BUILD_ROOT/usr/lib/$PYTHONV/direct +cp --recursive built/pandac $RPM_BUILD_ROOT/usr/lib/$PYTHONV/pandac +cp built/direct/__init__.py $RPM_BUILD_ROOT/usr/lib/$PYTHONV/direct/__init__.py +cp --recursive models $RPM_BUILD_ROOT/usr/share/panda3d/models +cp --recursive samples $RPM_BUILD_ROOT/usr/share/panda3d/samples +cp --recursive SceneEditor $RPM_BUILD_ROOT/usr/lib/$PYTHONV/SceneEditor +cp doc/LICENSE $RPM_BUILD_ROOT/usr/lib/panda3d/LICENSE +cp doc/LICENSE $RPM_BUILD_ROOT/usr/share/panda3d/LICENSE +cp doc/LICENSE $RPM_BUILD_ROOT/usr/include/panda3d/LICENSE +echo "/usr/lib/panda3d" > $RPM_BUILD_ROOT/etc/ld.so.conf.d/panda3d.conf +cp built/bin/* $RPM_BUILD_ROOT/usr/bin/ + +for x in built/lib/* ; do base=`basename $x` - ln -sf /usr/share/panda3d/bin/$base $RPM_BUILD_ROOT/usr/bin + ln -sf /usr/lib/panda3d/$base $RPM_BUILD_ROOT/usr/lib/$PYTHONV/lib-dynload/$base done -for x in $PANDA/direct/src/* ; do +for x in $RPM_BUILD_ROOT/usr/lib/$PYTHONV/direct/src/* ; do if [ `basename $x` != extensions ] ; then python -c "import compileall; compileall.compile_dir('$x')" fi done + %post /sbin/ldconfig %postun