Browse Source

Fix problems with incorrect side-by-side configuration on Windows

rdb 16 years ago
parent
commit
422587532d
2 changed files with 107 additions and 94 deletions
  1. 36 37
      makepanda/makepanda.py
  2. 71 57
      makepanda/makepandacore.py

+ 36 - 37
makepanda/makepanda.py

@@ -30,7 +30,6 @@ from installpanda import *
 ########################################################################
 ########################################################################
 
 
 COMPILER=0
 COMPILER=0
-VC90CRTVERSION=""
 INSTALLER=0
 INSTALLER=0
 GENMAN=0
 GENMAN=0
 COMPRESSOR="zlib"
 COMPRESSOR="zlib"
@@ -289,7 +288,7 @@ if (COMPILER=="MSVC"):
             elif (pkg[:2]=="DX"):
             elif (pkg[:2]=="DX"):
                 IncDirectory(pkg, SDK[pkg]      + "/include")
                 IncDirectory(pkg, SDK[pkg]      + "/include")
             else:
             else:
-                IncDirectory(pkg, THIRDPARTYLIBS + pkg.lower() + "/include")
+                IncDirectory(pkg, GetThirdpartyDir() + pkg.lower() + "/include")
     for pkg in DXVERSIONS:
     for pkg in DXVERSIONS:
         if (PkgSkip(pkg)==0):
         if (PkgSkip(pkg)==0):
             vnum=pkg[2:]
             vnum=pkg[2:]
@@ -320,35 +319,35 @@ if (COMPILER=="MSVC"):
     if (PkgSkip("DIRECTCAM")==0): LibName("DIRECTCAM", "quartz.lib")
     if (PkgSkip("DIRECTCAM")==0): LibName("DIRECTCAM", "quartz.lib")
     if (PkgSkip("DIRECTCAM")==0): LibName("DIRECTCAM", "odbc32.lib")
     if (PkgSkip("DIRECTCAM")==0): LibName("DIRECTCAM", "odbc32.lib")
     if (PkgSkip("DIRECTCAM")==0): LibName("DIRECTCAM", "odbccp32.lib")
     if (PkgSkip("DIRECTCAM")==0): LibName("DIRECTCAM", "odbccp32.lib")
-    if (PkgSkip("PNG")==0):      LibName("PNG",      THIRDPARTYLIBS + "png/lib/libpandapng.lib")
-    if (PkgSkip("JPEG")==0):     LibName("JPEG",     THIRDPARTYLIBS + "jpeg/lib/libpandajpeg.lib")
-    if (PkgSkip("TIFF")==0):     LibName("TIFF",     THIRDPARTYLIBS + "tiff/lib/libpandatiff.lib")
-    if (PkgSkip("ZLIB")==0):     LibName("ZLIB",     THIRDPARTYLIBS + "zlib/lib/libpandazlib1.lib")
-    if (PkgSkip("VRPN")==0):     LibName("VRPN",     THIRDPARTYLIBS + "vrpn/lib/vrpn.lib")
-    if (PkgSkip("VRPN")==0):     LibName("VRPN",     THIRDPARTYLIBS + "vrpn/lib/quat.lib")
-    if (PkgSkip("FMODEX")==0):   LibName("FMODEX",   THIRDPARTYLIBS + "fmodex/lib/fmodex_vc.lib")
-    if (PkgSkip("OPENAL")==0):   LibName("OPENAL",   THIRDPARTYLIBS + "openal/lib/pandaopenal32.lib")
-    if (PkgSkip("NVIDIACG")==0): LibName("CGGL",     THIRDPARTYLIBS + "nvidiacg/lib/cgGL.lib")
-    if (PkgSkip("NVIDIACG")==0): LibName("CGDX9",    THIRDPARTYLIBS + "nvidiacg/lib/cgD3D9.lib")
-    if (PkgSkip("NVIDIACG")==0): LibName("NVIDIACG", THIRDPARTYLIBS + "nvidiacg/lib/cg.lib")
-    if (PkgSkip("OPENSSL")==0):  LibName("OPENSSL",  THIRDPARTYLIBS + "openssl/lib/libpandassl.lib")
-    if (PkgSkip("OPENSSL")==0):  LibName("OPENSSL",  THIRDPARTYLIBS + "openssl/lib/libpandaeay.lib")
-    if (PkgSkip("FREETYPE")==0): LibName("FREETYPE", THIRDPARTYLIBS + "freetype/lib/freetype.lib")
-    if (PkgSkip("FFTW")==0):     LibName("FFTW",     THIRDPARTYLIBS + "fftw/lib/rfftw.lib")        
-    if (PkgSkip("FFTW")==0):     LibName("FFTW",     THIRDPARTYLIBS + "fftw/lib/fftw.lib")        
-    if (PkgSkip("FFMPEG")==0):   LibName("FFMPEG",   THIRDPARTYLIBS + "ffmpeg/lib/avcodec-51-panda.lib")
-    if (PkgSkip("FFMPEG")==0):   LibName("FFMPEG",   THIRDPARTYLIBS + "ffmpeg/lib/avformat-50-panda.lib")
-    if (PkgSkip("FFMPEG")==0):   LibName("FFMPEG",   THIRDPARTYLIBS + "ffmpeg/lib/avutil-49-panda.lib")
-    if (PkgSkip("ARTOOLKIT")==0):LibName("ARTOOLKIT",THIRDPARTYLIBS + "artoolkit/lib/libAR.lib")
-    if (PkgSkip("ODE")==0):      LibName("ODE",      THIRDPARTYLIBS + "ode/lib/ode.lib")
-    if (PkgSkip("FCOLLADA")==0): LibName("FCOLLADA", THIRDPARTYLIBS + "fcollada/lib/FCollada.lib")
-    if (PkgSkip("SQUISH")==0):   LibName("SQUISH",   THIRDPARTYLIBS + "squish/lib/squish.lib")
-    if (PkgSkip("OPENCV")==0):   LibName("OPENCV",   THIRDPARTYLIBS + "opencv/lib/cv.lib")
-    if (PkgSkip("OPENCV")==0):   LibName("OPENCV",   THIRDPARTYLIBS + "opencv/lib/highgui.lib")
-    if (PkgSkip("OPENCV")==0):   LibName("OPENCV",   THIRDPARTYLIBS + "opencv/lib/cvaux.lib")
-    if (PkgSkip("OPENCV")==0):   LibName("OPENCV",   THIRDPARTYLIBS + "opencv/lib/ml.lib")
-    if (PkgSkip("OPENCV")==0):   LibName("OPENCV",   THIRDPARTYLIBS + "opencv/lib/cxcore.lib")
-    if (PkgSkip("TINYXML")==0):  LibName("TINYXML",  THIRDPARTYLIBS + "tinyxml/lib/tinyxml.lib")
+    if (PkgSkip("PNG")==0):      LibName("PNG",      GetThirdpartyDir() + "png/lib/libpandapng.lib")
+    if (PkgSkip("JPEG")==0):     LibName("JPEG",     GetThirdpartyDir() + "jpeg/lib/libpandajpeg.lib")
+    if (PkgSkip("TIFF")==0):     LibName("TIFF",     GetThirdpartyDir() + "tiff/lib/libpandatiff.lib")
+    if (PkgSkip("ZLIB")==0):     LibName("ZLIB",     GetThirdpartyDir() + "zlib/lib/libpandazlib1.lib")
+    if (PkgSkip("VRPN")==0):     LibName("VRPN",     GetThirdpartyDir() + "vrpn/lib/vrpn.lib")
+    if (PkgSkip("VRPN")==0):     LibName("VRPN",     GetThirdpartyDir() + "vrpn/lib/quat.lib")
+    if (PkgSkip("FMODEX")==0):   LibName("FMODEX",   GetThirdpartyDir() + "fmodex/lib/fmodex_vc.lib")
+    if (PkgSkip("OPENAL")==0):   LibName("OPENAL",   GetThirdpartyDir() + "openal/lib/pandaopenal32.lib")
+    if (PkgSkip("NVIDIACG")==0): LibName("CGGL",     GetThirdpartyDir() + "nvidiacg/lib/cgGL.lib")
+    if (PkgSkip("NVIDIACG")==0): LibName("CGDX9",    GetThirdpartyDir() + "nvidiacg/lib/cgD3D9.lib")
+    if (PkgSkip("NVIDIACG")==0): LibName("NVIDIACG", GetThirdpartyDir() + "nvidiacg/lib/cg.lib")
+    if (PkgSkip("OPENSSL")==0):  LibName("OPENSSL",  GetThirdpartyDir() + "openssl/lib/libpandassl.lib")
+    if (PkgSkip("OPENSSL")==0):  LibName("OPENSSL",  GetThirdpartyDir() + "openssl/lib/libpandaeay.lib")
+    if (PkgSkip("FREETYPE")==0): LibName("FREETYPE", GetThirdpartyDir() + "freetype/lib/freetype.lib")
+    if (PkgSkip("FFTW")==0):     LibName("FFTW",     GetThirdpartyDir() + "fftw/lib/rfftw.lib")        
+    if (PkgSkip("FFTW")==0):     LibName("FFTW",     GetThirdpartyDir() + "fftw/lib/fftw.lib")        
+    if (PkgSkip("FFMPEG")==0):   LibName("FFMPEG",   GetThirdpartyDir() + "ffmpeg/lib/avcodec-51-panda.lib")
+    if (PkgSkip("FFMPEG")==0):   LibName("FFMPEG",   GetThirdpartyDir() + "ffmpeg/lib/avformat-50-panda.lib")
+    if (PkgSkip("FFMPEG")==0):   LibName("FFMPEG",   GetThirdpartyDir() + "ffmpeg/lib/avutil-49-panda.lib")
+    if (PkgSkip("ARTOOLKIT")==0):LibName("ARTOOLKIT",GetThirdpartyDir() + "artoolkit/lib/libAR.lib")
+    if (PkgSkip("ODE")==0):      LibName("ODE",      GetThirdpartyDir() + "ode/lib/ode.lib")
+    if (PkgSkip("FCOLLADA")==0): LibName("FCOLLADA", GetThirdpartyDir() + "fcollada/lib/FCollada.lib")
+    if (PkgSkip("SQUISH")==0):   LibName("SQUISH",   GetThirdpartyDir() + "squish/lib/squish.lib")
+    if (PkgSkip("OPENCV")==0):   LibName("OPENCV",   GetThirdpartyDir() + "opencv/lib/cv.lib")
+    if (PkgSkip("OPENCV")==0):   LibName("OPENCV",   GetThirdpartyDir() + "opencv/lib/highgui.lib")
+    if (PkgSkip("OPENCV")==0):   LibName("OPENCV",   GetThirdpartyDir() + "opencv/lib/cvaux.lib")
+    if (PkgSkip("OPENCV")==0):   LibName("OPENCV",   GetThirdpartyDir() + "opencv/lib/ml.lib")
+    if (PkgSkip("OPENCV")==0):   LibName("OPENCV",   GetThirdpartyDir() + "opencv/lib/cxcore.lib")
+    if (PkgSkip("TINYXML")==0):  LibName("TINYXML",  GetThirdpartyDir() + "tinyxml/lib/tinyxml.lib")
     for pkg in MAYAVERSIONS:
     for pkg in MAYAVERSIONS:
         if (PkgSkip(pkg)==0):
         if (PkgSkip(pkg)==0):
             LibName(pkg, '"' + SDK[pkg] + '/lib/Foundation.lib"')
             LibName(pkg, '"' + SDK[pkg] + '/lib/Foundation.lib"')
@@ -768,7 +767,7 @@ def CompileLink(dll, obj, opts):
         for (opt, name) in LIBNAMES:
         for (opt, name) in LIBNAMES:
             if (opt=="ALWAYS") or (opts.count(opt)): cmd += " " + BracketNameWithQuotes(name)
             if (opt=="ALWAYS") or (opts.count(opt)): cmd += " " + BracketNameWithQuotes(name)
         oscmd(cmd)
         oscmd(cmd)
-        SetVC90CRTVersion(dll+".manifest", VC90CRTVERSION)
+        SetVC90CRTVersion(dll+".manifest")
         mtcmd = "mt -manifest " + dll + ".manifest -outputresource:" + dll
         mtcmd = "mt -manifest " + dll + ".manifest -outputresource:" + dll
         if (dll.endswith(".exe")==0): mtcmd = mtcmd + ";2"
         if (dll.endswith(".exe")==0): mtcmd = mtcmd + ";2"
         else:                          mtcmd = mtcmd + ";1"
         else:                          mtcmd = mtcmd + ";1"
@@ -1435,14 +1434,14 @@ ConditionalWriteFile(GetOutputDir()+"/etc/Confauto.prc", confautoprc)
 for pkg in PkgListGet():
 for pkg in PkgListGet():
     if (PkgSkip(pkg)==0):
     if (PkgSkip(pkg)==0):
         if (COMPILER == "MSVC"):
         if (COMPILER == "MSVC"):
-            if (os.path.exists(THIRDPARTYLIBS+pkg.lower()+"/bin")):
-                CopyAllFiles(GetOutputDir()+"/bin/",THIRDPARTYLIBS+pkg.lower()+"/bin/")
+            if (os.path.exists(GetThirdpartyDir()+pkg.lower()+"/bin")):
+                CopyAllFiles(GetOutputDir()+"/bin/",GetThirdpartyDir()+pkg.lower()+"/bin/")
         if (COMPILER == "LINUX"):
         if (COMPILER == "LINUX"):
-            if (os.path.exists(THIRDPARTYLIBS+pkg.lower()+"/lib")):
-                CopyAllFiles(GetOutputDir()+"/lib/",THIRDPARTYLIBS+pkg.lower()+"/lib/")
+            if (os.path.exists(GetThirdpartyDir()+pkg.lower()+"/lib")):
+                CopyAllFiles(GetOutputDir()+"/lib/",GetThirdpartyDir()+pkg.lower()+"/lib/")
 
 
 if (COMPILER=="MSVC"):
 if (COMPILER=="MSVC"):
-    CopyAllFiles(GetOutputDir()+"/bin/", THIRDPARTYLIBS+"extras"+"/bin/")
+    CopyAllFiles(GetOutputDir()+"/bin/", GetThirdpartyDir()+"extras"+"/bin/")
 if (sys.platform.startswith("win")):
 if (sys.platform.startswith("win")):
     if (PkgSkip("PYTHON")==0):
     if (PkgSkip("PYTHON")==0):
         pydll = "/" + SDK["PYTHONVERSION"].replace(".", "")
         pydll = "/" + SDK["PYTHONVERSION"].replace(".", "")

+ 71 - 57
makepanda/makepandacore.py

@@ -19,6 +19,7 @@ STARTTIME=time.time()
 MAINTHREAD=threading.currentThread()
 MAINTHREAD=threading.currentThread()
 OUTPUTDIR="built"
 OUTPUTDIR="built"
 CUSTOM_OUTPUTDIR=False
 CUSTOM_OUTPUTDIR=False
+THIRDPARTYDIR=None
 OPTIMIZE="3"
 OPTIMIZE="3"
 VERBOSE=False
 VERBOSE=False
 
 
@@ -644,58 +645,6 @@ def CreateFile(file):
     if (os.path.exists(file)==0):
     if (os.path.exists(file)==0):
         WriteFile(file,"")
         WriteFile(file,"")
 
 
-########################################################################
-##
-## Visual Studio Manifest Manipulation.
-##
-########################################################################
-
-VC90CRTVERSIONRE=re.compile("name=['\"]Microsoft.VC90.CRT['\"]\\s+version=['\"]([0-9.]+)['\"]")
-
-def GetVC90CRTVersion(fn):
-    manifest = ReadFile(fn)
-    version = VC90CRTVERSIONRE.search(manifest)
-    if (version == None):
-        exit("Cannot locate version number in "+fn)
-    return version.group(1)
-
-def SetVC90CRTVersion(fn, ver):
-    manifest = ReadFile(fn)
-    subst = " name='Microsoft.VC90.CRT' version='"+ver+"' "
-    manifest = VC90CRTVERSIONRE.sub(subst, manifest)
-    WriteFile(fn, manifest)
-
-########################################################################
-##
-## Thirdparty libraries paths
-##
-########################################################################
-
-if (sys.platform == "win32"):
-    if (platform.architecture()[0] == "64bit"):
-        THIRDPARTYLIBS="thirdparty/win-libs-vc9-x64/"
-    else:
-        THIRDPARTYLIBS="thirdparty/win-libs-vc9/"
-    if not os.path.isdir(THIRDPARTYLIBS):
-        THIRDPARTYLIBS="thirdparty/win-libs-vc9/"
-    VC90CRTVERSION = GetVC90CRTVersion(THIRDPARTYLIBS+"extras/bin/Microsoft.VC90.CRT.manifest")
-else:
-    if (sys.platform == "darwin"):
-        THIRDPARTYLIBS="thirdparty/darwin-libs-a/"
-    elif (sys.platform.startswith("linux")):
-      if (platform.architecture()[0] == "64bit"):
-          THIRDPARTYLIBS="thirdparty/linux-libs-x64/"
-      else:
-          THIRDPARTYLIBS="thirdparty/linux-libs-a/"
-    elif (sys.platform.startswith("freebsd")):
-      if (platform.architecture()[0] == "64bit"):
-          THIRDPARTYLIBS="thirdparty/freebsd-libs-x64/"
-      else:
-          THIRDPARTYLIBS="thirdparty/freebsd-libs-a/"
-    else:
-        exit("Unknown platform: %s" % sys.platform)
-    VC90CRTVERSION = 0
-
 ########################################################################
 ########################################################################
 #
 #
 # Create the panda build tree.
 # Create the panda build tree.
@@ -733,6 +682,71 @@ def CheckPandaSourceTree():
         (os.path.exists(os.path.join(dir, "panda","src","pandabase","pandabase.h"))==0)):
         (os.path.exists(os.path.join(dir, "panda","src","pandabase","pandabase.h"))==0)):
         exit("Current directory is not the root of the panda tree.")
         exit("Current directory is not the root of the panda tree.")
 
 
+########################################################################
+##
+## Thirdparty libraries paths
+##
+########################################################################
+
+def GetThirdpartyDir():
+    global THIRDPARTYDIR
+    if (THIRDPARTYDIR != None):
+        return THIRDPARTYDIR
+    if (sys.platform.startswith("win")):
+        if (platform.architecture()[0] == "64bit"):
+            THIRDPARTYDIR="thirdparty/win-libs-vc9-x64/"
+        else:
+            THIRDPARTYDIR="thirdparty/win-libs-vc9/"
+        if not os.path.isdir(THIRDPARTYDIR):
+            THIRDPARTYDIR="thirdparty/win-libs-vc9/"
+    elif (sys.platform == "darwin"):
+        THIRDPARTYDIR="thirdparty/darwin-libs-a/"
+    elif (sys.platform.startswith("linux")):
+        if (platform.architecture()[0] == "64bit"):
+            THIRDPARTYDIR="thirdparty/linux-libs-x64/"
+        else:
+            THIRDPARTYDIR="thirdparty/linux-libs-a/"
+    elif (sys.platform.startswith("freebsd")):
+        if (platform.architecture()[0] == "64bit"):
+            THIRDPARTYDIR="thirdparty/freebsd-libs-x64/"
+        else:
+            THIRDPARTYDIR="thirdparty/freebsd-libs-a/"
+    else:
+        print GetColor("red") + "WARNING:" + GetColor("Unsupported platform: " + sys.platform)
+    return THIRDPARTYDIR
+
+########################################################################
+##
+## Visual Studio Manifest Manipulation.
+##
+########################################################################
+
+VC90CRTVERSIONRE=re.compile("name=['\"]Microsoft.VC90.CRT['\"]\\s+version=['\"]([0-9.]+)['\"]")
+VC90CRTVERSION=None
+
+def GetVC90CRTVersion(fn = None):
+    global VC90CRTVERSION
+    if (VC90CRTVERSION != None):
+        return VC90CRTVERSION
+    if (not sys.platform.startswith("win")):
+        VC90CRTVERSION = 0
+        return 0
+    if (fn == None):
+        fn = GetThirdpartyDir()+"extras/bin/Microsoft.VC90.CRT.manifest"
+    manifest = ReadFile(fn)
+    version = VC90CRTVERSIONRE.search(manifest)
+    if (version == None):
+        exit("Cannot locate version number in "+fn)
+    VC90CRTVERSION = version.group(1)
+    return version.group(1)
+
+def SetVC90CRTVersion(fn, ver = None):
+    if (ver == None): ver = GetVC90CRTVersion()
+    manifest = ReadFile(fn)
+    subst = " name='Microsoft.VC90.CRT' version='"+ver+"' "
+    manifest = VC90CRTVERSIONRE.sub(subst, manifest)
+    WriteFile(fn, manifest)
+
 ########################################################################
 ########################################################################
 ##
 ##
 ## Gets or sets the output directory, by default "built".
 ## Gets or sets the output directory, by default "built".
@@ -976,16 +990,16 @@ def PkgEnable(pkg, pkgconfig = None, libs = None, incs = None, defs = None, fram
         for d in olddefs:
         for d in olddefs:
             defs[d] = ""
             defs[d] = ""
     
     
-    if (os.path.isdir(THIRDPARTYLIBS + pkg.lower())):
-        IncDirectory(pkg, THIRDPARTYLIBS + pkg.lower() + "/include")
-        LibDirectory(pkg, THIRDPARTYLIBS + pkg.lower() + "/lib")
+    if (os.path.isdir(GetThirdpartyDir() + pkg.lower())):
+        IncDirectory(pkg, GetThirdpartyDir() + pkg.lower() + "/include")
+        LibDirectory(pkg, GetThirdpartyDir() + pkg.lower() + "/lib")
         for l in libs:
         for l in libs:
             libname = l
             libname = l
             if (l.startswith("lib")):
             if (l.startswith("lib")):
                 libname = l[3:]
                 libname = l[3:]
             # This is for backward compatibility - in the thirdparty dir, we kept some libs with "panda" prefix, like libpandatiff.
             # This is for backward compatibility - in the thirdparty dir, we kept some libs with "panda" prefix, like libpandatiff.
-            if (len(glob.glob(THIRDPARTYLIBS + pkg.lower() + "/lib/libpanda%s.*" % libname)) > 0 and
-                len(glob.glob(THIRDPARTYLIBS + pkg.lower() + "/lib/lib%s.*" % libname)) == 0):
+            if (len(glob.glob(GetThirdpartyDir() + pkg.lower() + "/lib/libpanda%s.*" % libname)) > 0 and
+                len(glob.glob(GetThirdpartyDir() + pkg.lower() + "/lib/lib%s.*" % libname)) == 0):
                 libname = "panda" + libname
                 libname = "panda" + libname
             LibName(pkg, "-l" + libname)
             LibName(pkg, "-l" + libname)
         for d, v in defs.values():
         for d, v in defs.values():