Browse Source

Mainly fixes for path problems

Josh Yelon 21 years ago
parent
commit
0ea72c30fb

+ 39 - 46
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<argc; i++) modargv[modargc++] = argv[i];
   modargv[modargc] = 0;
   
   // Run it.
+
   execv("/usr/bin/python", modargv);
 }
 

+ 1 - 1
direct/src/ffi/jGenPyCode.py

@@ -2,7 +2,7 @@
 #
 # This module should be invoked by a shell-script that says:
 #
-#    python direct\\src\\ffi\\jGenPyCode.py <arguments>
+#    python -c "import direct.ffi.jGenPyCode" <arguments>
 #
 # Before invoking python, the shell-script may need to set
 # these environment variables, to make sure that everything

+ 5 - 4
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
 

+ 34 - 32
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 <unistd.h>', '')
-            #WriteFile(wdst, ReadFile("built\\tmp\\lex.yy.c").replace("#include <unistd.h>",""))
         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.

+ 27 - 17
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