Browse Source

More work on makepanda/makepandacore separation

Josh Yelon 18 years ago
parent
commit
1f311e3daa
2 changed files with 232 additions and 293 deletions
  1. 193 281
      doc/makepanda/makepanda.py
  2. 39 12
      doc/makepanda/makepandacore.py

+ 193 - 281
doc/makepanda/makepanda.py

@@ -36,11 +36,10 @@ GENMAN=0
 VERBOSE=1
 COMPRESSOR="zlib"
 THREADCOUNT=0
-DXVERSIONS=["DX8","DX9"]
 
 PkgListSet(MAYAVERSIONS + MAXVERSIONS + DXVERSIONS + [
   "PYTHON","ZLIB","PNG","JPEG","TIFF","VRPN","FMOD","FMODEX",
-  "OPENAL","NVIDIACG","OPENSSL","FREETYPE","FFTW","MILES",
+  "OPENAL","NVIDIACG","OPENSSL","FREETYPE","FFTW",
   "ARTOOLKIT","DIRECTCAM","FFMPEG","PANDATOOL","PANDAAPP"
 ])
 
@@ -180,16 +179,6 @@ else:
 #
 ##########################################################################################
 
-if (PkgSkip("MILES")==0):
-    WARNINGS.append("makepanda currently does not support miles sound system")
-    WARNINGS.append("I have automatically added this command-line option: --no-miles")
-    PkgDisable("MILES")
-
-if (sys.platform != "win32"):
-    PkgDisable("DX8")
-    PkgDisable("DX9")
-    PkgDisable("DIRECTCAM")
-
 if (sys.platform == "win32"):
      os.environ["BISON_SIMPLE"] = "thirdparty/win-util/bison.simple"
 
@@ -231,6 +220,152 @@ def printStatus(header,warnings):
 
 printStatus("Makepanda Initial Status Report", WARNINGS)
 
+########################################################################
+##
+## External includes, external libraries, and external defsyms.
+##
+########################################################################
+
+if (COMPILER=="MSVC"):
+    if (PkgSkip("PYTHON")==0):
+        IncDirectory("ALWAYS", "thirdparty/win-python/include")
+        LibDirectory("ALWAYS", "thirdparty/win-python/libs")
+    for pkg in PkgListGet():
+        if (PkgSkip(pkg)==0):
+            if (pkg[:4]=="MAYA"):
+                IncDirectory(pkg, SDK[pkg]      + "/include")
+                DefSymbol(pkg, "MAYAVERSION", pkg)
+            elif (pkg[:3]=="MAX"):
+                IncDirectory(pkg, SDK[pkg]      + "/include")
+                IncDirectory(pkg, SDK[pkg+"CS"] + "/include")
+                DefSymbol(pkg, "MAX", pkg)
+            elif (pkg[:2]=="DX"):
+                IncDirectory(pkg, SDK[pkg]      + "/include")
+            else:
+                IncDirectory(pkg, "thirdparty/win-libs-vc8/" + pkg.lower() + "/include")
+    for pkg in DXVERSIONS:
+        if (PkgSkip(pkg)==0):
+            vnum=pkg[2:]
+            LibDirectory(pkg, SDK[pkg] + '/lib/x86')
+            LibDirectory(pkg, SDK[pkg] + '/lib')
+            LibName(pkg, 'd3dVNUM.lib'.replace("VNUM", vnum))
+            LibName(pkg, 'd3dxVNUM.lib'.replace("VNUM", vnum))
+            LibName(pkg, 'dxerrVNUM.lib'.replace("VNUM", vnum))
+            LibName(pkg, 'ddraw.lib')
+            LibName(pkg, 'dxguid.lib')
+    LibName("WINSOCK", "wsock32.lib")
+    LibName("WINSOCK2", "wsock32.lib")
+    LibName("WINSOCK2", "ws2_32.lib")
+    LibName("WINCOMCTL", "comctl32.lib")
+    LibName("WINCOMDLG", "comdlg32.lib")
+    LibName("WINUSER", "user32.lib")
+    LibName("WINMM", "winmm.lib")
+    LibName("WINIMM", "imm32.lib")
+    LibName("WINKERNEL", "kernel32.lib")
+    LibName("WINOLDNAMES", "oldnames.lib")
+    LibName("WINSHELL", "shell32.lib")
+    LibName("WINGDI", "gdi32.lib")
+    LibName("ADVAPI", "advapi32.lib")
+    LibName("GLUT", "opengl32.lib")
+    LibName("GLUT", "glu32.lib")
+    if (PkgSkip("DIRECTCAM")==0): LibName("DIRECTCAM", "strmiids.lib")
+    if (PkgSkip("DIRECTCAM")==0): LibName("DIRECTCAM", "quartz.lib")
+    if (PkgSkip("DIRECTCAM")==0): LibName("DIRECTCAM", "odbc32.lib")
+    if (PkgSkip("DIRECTCAM")==0): LibName("DIRECTCAM", "odbccp32.lib")
+    if (PkgSkip("PNG")==0):      LibName("PNG",      "thirdparty/win-libs-vc8/png/lib/libpandapng.lib")
+    if (PkgSkip("JPEG")==0):     LibName("JPEG",     "thirdparty/win-libs-vc8/jpeg/lib/libpandajpeg.lib")
+    if (PkgSkip("TIFF")==0):     LibName("TIFF",     "thirdparty/win-libs-vc8/tiff/lib/libpandatiff.lib")
+    if (PkgSkip("ZLIB")==0):     LibName("ZLIB",     "thirdparty/win-libs-vc8/zlib/lib/libpandazlib1.lib")
+    if (PkgSkip("VRPN")==0):     LibName("VRPN",     "thirdparty/win-libs-vc8/vrpn/lib/vrpn.lib")
+    if (PkgSkip("VRPN")==0):     LibName("VRPN",     "thirdparty/win-libs-vc8/vrpn/lib/quat.lib")
+    if (PkgSkip("FMOD")==0):     LibName("FMOD",     "thirdparty/win-libs-vc8/fmod/lib/fmod.lib")
+    if (PkgSkip("FMODEX")==0):   LibName("FMODEX",   "thirdparty/win-libs-vc8/fmodex/lib/fmodex_vc.lib")
+    if (PkgSkip("OPENAL")==0):   LibName("OPENAL",   "thirdparty/win-libs-vc8/openal/lib/pandaopenal32.lib")
+    if (PkgSkip("NVIDIACG")==0): LibName("CGGL",     "thirdparty/win-libs-vc8/nvidiacg/lib/cgGL.lib")
+    if (PkgSkip("NVIDIACG")==0): LibName("CGDX9",    "thirdparty/win-libs-vc8/nvidiacg/lib/cgD3D9.lib")
+    if (PkgSkip("NVIDIACG")==0): LibName("NVIDIACG", "thirdparty/win-libs-vc8/nvidiacg/lib/cg.lib")
+    if (PkgSkip("OPENSSL")==0):  LibName("OPENSSL",  "thirdparty/win-libs-vc8/openssl/lib/libpandassl.lib")
+    if (PkgSkip("OPENSSL")==0):  LibName("OPENSSL",  "thirdparty/win-libs-vc8/openssl/lib/libpandaeay.lib")
+    if (PkgSkip("FREETYPE")==0): LibName("FREETYPE", "thirdparty/win-libs-vc8/freetype/lib/freetype.lib")
+    if (PkgSkip("FFTW")==0):     LibName("FFTW",     "thirdparty/win-libs-vc8/fftw/lib/rfftw.lib")        
+    if (PkgSkip("FFTW")==0):     LibName("FFTW",     "thirdparty/win-libs-vc8/fftw/lib/fftw.lib")        
+    if (PkgSkip("FFMPEG")==0):   LibName("FFMPEG",   "thirdparty/win-libs-vc8/ffmpeg/lib/avcodec-51-panda.lib")
+    if (PkgSkip("FFMPEG")==0):   LibName("FFMPEG",   "thirdparty/win-libs-vc8/ffmpeg/lib/avformat-50-panda.lib")
+    if (PkgSkip("FFMPEG")==0):   LibName("FFMPEG",   "thirdparty/win-libs-vc8/ffmpeg/lib/avutil-49-panda.lib")
+    if (PkgSkip("ARTOOLKIT")==0):LibName("ARTOOLKIT","thirdparty/win-libs-vc8/artoolkit/lib/libAR.lib")
+    for pkg in MAYAVERSIONS:
+        if (PkgSkip(pkg)==0):
+            LibName(pkg, SDK[pkg] + '/lib/Foundation.lib')
+            LibName(pkg, SDK[pkg] + '/lib/OpenMaya.lib')
+            LibName(pkg, SDK[pkg] + '/lib/OpenMayaAnim.lib')
+            LibName(pkg, SDK[pkg] + '/lib/OpenMayaUI.lib')
+    for pkg in MAXVERSIONS:
+        if (PkgSkip(pkg)==0):
+            LibName(pkg, SDK[pkg] +  '/lib/core.lib')
+            LibName(pkg, SDK[pkg] +  '/lib/edmodel.lib')
+            LibName(pkg, SDK[pkg] +  '/lib/gfx.lib')
+            LibName(pkg, SDK[pkg] +  '/lib/geom.lib')
+            LibName(pkg, SDK[pkg] +  '/lib/mesh.lib')
+            LibName(pkg, SDK[pkg] +  '/lib/maxutil.lib')
+            LibName(pkg, SDK[pkg] +  '/lib/paramblk2.lib')
+
+if (COMPILER=="LINUX"):
+    if (PkgSkip("PYTHON")==0):
+        IncDirectory("ALWAYS", SDK["PYTHON"])
+    if (PkgSkip("VRPN")==0):      IncDirectory("VRPN",       'thirdparty/linux-libs-a/vrpn/include')
+    if (PkgSkip("FFTW")==0):      IncDirectory("FFTW",       'thirdparty/linux-libs-a/fftw/include')
+    if (PkgSkip("FMOD")==0):      IncDirectory("FMOD",       'thirdparty/linux-libs-a/fmod/include')
+    if (PkgSkip("FMODEX")==0):    IncDirectory("FMODEX",     'thirdparty/linux-libs-a/fmodex/include')
+    if (PkgSkip("OPENAL")==0):    IncDirectory("OPENAL",     'thirdparty/linux-libs-a/openal/include')
+    if (PkgSkip("NVIDIACG")==0):  IncDirectory("NVIDIACG",   'thirdparty/linux-libs-a/nvidiacg/include')
+    if (PkgSkip("FFMPEG")==0):    IncDirectory("FFMPEG",     'thirdparty/linux-libs-a/ffmpeg/include')
+    if (PkgSkip("ARTOOLKIT")==0): IncDirectory("ARTOOLKIT",  'thirdparty/linux-libs-a/artoolkit/include')
+    if (PkgSkip("FREETYPE")==0):  IncDirectory("FREETYPE2",  '/usr/include/freetype2')
+    IncDirectory("GTK2", "/usr/include/gtk-2.0")
+    IncDirectory("GTK2", "/usr/include/cairo")
+    IncDirectory("GTK2", "/usr/include/glib-2.0")
+    IncDirectory("GTK2", "/usr/lib/glib-2.0/include")
+    IncDirectory("GTK2", "/usr/include/pango-1.0")
+    IncDirectory("GTK2", "/usr/lib/gtk-2.0/include")
+    IncDirectory("GTK2", "/usr/include/atk-1.0")
+    LibName("GTK2", "-lgtk-x11-2.0")
+    if (PkgSkip("FMOD")==0):     LibDirectory("FMOD", "thirdparty/linux-libs-a/fmod/lib")
+    if (PkgSkip("FMOD")==0):     LibName("FMOD", "-lfmod")
+    if (PkgSkip("FMODEX")==0):   LibDirectory("FMODEX", "thirdparty/linux-libs-a/fmodex/lib")
+    if (PkgSkip("FMODEX")==0):   LibName("FMODEX", "-lfmodex")
+    if (PkgSkip("OPENAL")==0):   LibDirectory("OPENAL", "thirdparty/linux-libs-a/openal/lib")
+    if (PkgSkip("OPENAL")==0):   LibName("OPENAL", "-lpandaopenal")
+    if (PkgSkip("FFMPEG")==0):   LibName("FFMPEG", "-lavutil")
+    if (PkgSkip("NVIDIACG")==0): LibDirectory("NVIDIACG", "thirdparty/linux-libs-a/nvidiacg/lib")
+    if (PkgSkip("NVIDIACG")==0): LibName("NVIDIACG", "-lCgGL")
+    if (PkgSkip("NVIDIACG")==0): LibName("NVIDIACG", "-lCg")
+    if (PkgSkip("FFMPEG")==0):   LibDirectory("FFMPEG", "thirdparty/linux-libs-a/ffmpeg/lib")
+    if (PkgSkip("FFMPEG")==0):   LibName("FFMPEG", "-lavformat")
+    if (PkgSkip("FFMPEG")==0):   LibName("FFMPEG", "-lavcodec")
+    if (PkgSkip("FFMPEG")==0):   LibName("FFMPEG", "-lavformat")
+    if (PkgSkip("FFMPEG")==0):   LibName("FFMPEG", "-lavutil")
+    if (PkgSkip("ZLIB")==0):     LibName("ZLIB", "-lz")
+    if (PkgSkip("PNG")==0):      LibName("PNG", "-lpng")
+    if (PkgSkip("JPEG")==0):     LibName("JPEG", "-ljpeg")
+    if (PkgSkip("TIFF")==0):     LibName("TIFF", "-ltiff")
+    if (PkgSkip("SSL")==0):      LibName("SSL",  "-lssl")
+    if (PkgSkip("FREETYPE")==0): LibName("FREETYPE", "-lfreetype")
+    if (PkgSkip("VRPN")==0):     LibDirectory("VRPN", "thirdparty/linux-libs-a/vrpn/lib")
+    if (PkgSkip("VRPN")==0):     LibName("VRPN", "-lvrpn")
+    if (PkgSkip("VRPN")==0):     LibName("VRPN", "-lquat")
+    if (PkgSkip("FFTW")==0):     LibDirectory("FFTW", "thirdparty/linux-libs-a/fftw/lib")
+    if (PkgSkip("FFTW")==0):     LibName("FFTW", "-lrfftw")
+    if (PkgSkip("FFTW")==0):     LibName("FFTW", "-lfftw")
+    if (PkgSkip("ARTOOLKIT")==0):LibDirectory("ARTOOLKIT", "thirdparty/linux-libs-a/artoolkit/lib")
+    if (PkgSkip("ARTOOLKIT")==0):LibName("ARTOOLKIT", "-lar")
+    if (PkgSkip("GLUT")==0):     LibName("GLUT", "-lGL")
+    if (PkgSkip("GLUT")==0):     LibName("GLUT", "-lGLU")
+
+
+DefSymbol("WITHINPANDA", "WITHIN_PANDA", "1")
+IncDirectory("ALWAYS", "built/tmp")
+IncDirectory("ALWAYS", "built/include")
+
 ########################################################################
 ##
 ## CompileCxx
@@ -238,27 +373,16 @@ printStatus("Makepanda Initial Status Report", WARNINGS)
 ########################################################################
 
 def CompileCxx(obj,src,opts):
-    ipath = ["built/tmp"] + GetListOption(opts, "DIR:") + ["built/include"]
+    ipath = GetListOption(opts, "DIR:")
     if (COMPILER=="MSVC"):
         cmd = "cl /wd4996 /Fo" + obj + " /nologo /c "
-        if (PkgSkip("PYTHON")==0): cmd = cmd + " /Ithirdparty/win-python/include"
-        for ver in DXVERSIONS:
-            if (PkgSelected(opts,ver)):
-                cmd = cmd + ' /I"' + SDK[ver] + '/include"'
-        for ver in MAYAVERSIONS:
-            if (PkgSelected(opts,ver)):
-                cmd = cmd + ' /I"' + SDK[ver] + '/include"'
-                cmd = cmd + ' /DMAYAVERSION=' + ver  
-        for ver in MAXVERSIONS:
-            if (PkgSelected(opts,ver)):
-                cmd = cmd + ' /I"' + SDK[ver] + '/include" /I"' + SDK[ver+"CS"] + '" /DMAX' + ver
-        for pkg in PkgListGet():
-            if (pkg[:4] != "MAYA") and (pkg[:3]!="MAX") and (pkg[:2]!="DX") and PkgSelected(opts,pkg):
-                cmd = cmd + " /I" + THIRDPARTYLIBS + pkg.lower() + "/include"
         for x in ipath: cmd = cmd + " /I" + x
+        for (opt,dir) in INCDIRECTORIES:
+            if (opt=="ALWAYS") or (opts.count(opt)): cmd = cmd + ' /I"' + dir + '"'
+        for (opt,var,val) in DEFSYMBOLS:
+            if (opt=="ALWAYS") or (opts.count(opt)): cmd = cmd + ' /D' + var + "=" + val
         if (opts.count('NOFLOATWARN')): cmd = cmd + ' /wd4244 /wd4305'
-        if (opts.count("WITHINPANDA")): cmd = cmd + ' /DWITHIN_PANDA'
-        if (opts.count("MSFORSCOPE")): cmd = cmd + ' /Zc:forScope-'
+        if (opts.count('MSFORSCOPE')): cmd = cmd + ' /Zc:forScope-'
         optlevel = GetOptimizeOption(opts,OPTIMIZE)
         if (optlevel==1): cmd = cmd + " /MD /Zi /RTCs /GS"
         if (optlevel==2): cmd = cmd + " /MD /Zi "
@@ -272,19 +396,11 @@ def CompileCxx(obj,src,opts):
     if (COMPILER=="LINUX"):
         if (src.endswith(".c")): cmd = 'gcc -fPIC -c -o ' + obj
         else:                    cmd = 'g++ -ftemplate-depth-30 -fPIC -c -o ' + obj
-        if (PkgSkip("PYTHON")==0): cmd = cmd + ' -I"' + SDK["PYTHON"] + '"'
-        if (PkgSelected(opts,"VRPN")):     cmd = cmd + ' -I' + THIRDPARTYLIBS + 'vrpn/include'
-        if (PkgSelected(opts,"FFTW")):     cmd = cmd + ' -I' + THIRDPARTYLIBS + 'fftw/include'
-        if (PkgSelected(opts,"FMOD")):     cmd = cmd + ' -I' + THIRDPARTYLIBS + 'fmod/include'
-        if (PkgSelected(opts,"FMODEX")):   cmd = cmd + ' -I' + THIRDPARTYLIBS + 'fmodex/include'
-        if (PkgSelected(opts,"OPENAL")):   cmd = cmd + ' -I' + THIRDPARTYLIBS + 'openal/include'
-        if (PkgSelected(opts,"NVIDIACG")): cmd = cmd + ' -I' + THIRDPARTYLIBS + 'nvidiacg/include'
-        if (PkgSelected(opts,"FFMPEG")):    cmd = cmd + ' -I' + THIRDPARTYLIBS + 'ffmpeg/include'
-        if (PkgSelected(opts,"ARTOOLKIT")): cmd = cmd + ' -I' + THIRDPARTYLIBS + 'artoolkit/include'
-        if (PkgSelected(opts,"FREETYPE")): cmd = cmd + ' -I/usr/include/freetype2'
-        if (opts.count("GTK2")): cmd = cmd + ' -I/usr/include/gtk-2.0 -I/usr/include/cairo -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/pango-1.0 -I/usr/lib/gtk-2.0/include -I/usr/include/atk-1.0'
+        for (opt, dir) in INCDIRECTORIES:
+            if (opt=="ALWAYS") or (opts.count(opt)): cmd = cmd + ' -I"' + expansion + '"'
+        for (opt,val) in DEFSYMBOLS:
+            if (opt=="ALWAYS") or (opts.count(opt)): cmd = cmd + ' -D' + var + '=' + val
         for x in ipath: cmd = cmd + ' -I' + x
-        if (opts.count("WITHINPANDA")): cmd = cmd + ' -DWITHIN_PANDA'
         optlevel = GetOptimizeOption(opts,OPTIMIZE)
         if (optlevel==1): cmd = cmd + " -g"
         if (optlevel==2): cmd = cmd + " -O1"
@@ -348,7 +464,7 @@ def CompileIgate(woutd,wsrc,opts):
     srcdir = GetValueOption(opts, "SRCDIR:")
     module = GetValueOption(opts, "IMOD:")
     library = GetValueOption(opts, "ILIB:")
-    ipath = ["built/tmp"] + GetListOption(opts, "DIR:") + ["built/include"]
+    ipath = GetListOption(opts, "DIR:")
     if (PkgSkip("PYTHON")):
         WriteFile(woutc,"")
         WriteFile(woutd,"")
@@ -359,61 +475,29 @@ def CompileIgate(woutd,wsrc,opts):
         cmd = "built/bin/interrogate -srcdir "+srcdir+" -I"+srcdir
         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'
-        optlevel=GetOptimizeOption(opts,OPTIMIZE)
-        if (optlevel==1): cmd = cmd + ' '
-        if (optlevel==2): cmd = cmd + ' '
-        if (optlevel==3): cmd = cmd + ' -DFORCE_INLINING'
-        if (optlevel==4): cmd = cmd + ' -DNDEBUG -DFORCE_INLINING'
-        cmd = cmd + ' -oc ' + woutc + ' -od ' + woutd
-        cmd = cmd + ' -fnames -string -refcount -assert -python-native'
-        cmd = cmd + ' -Sbuilt/include/parser-inc'
-        for x in ipath: cmd = cmd + ' -I' + x
-        cmd = cmd + ' -Sthirdparty/win-python/include'
-        for ver in DXVERSIONS:
-            if ((COMPILER=="MSVC") and PkgSelected(opts,ver)):
-                cmd = cmd + ' -S"' + SDK[ver] + '/include"'
-        for ver in MAYAVERSIONS:
-            if ((COMPILER=="MSVC") and PkgSelected(opts,ver)):
-                cmd = cmd + ' -S"' + SDK[ver] + '/include"'
-        for pkg in PkgListGet():
-            if (PkgSelected(opts,pkg)):
-                cmd = cmd + " -S" + THIRDPARTYLIBS + pkg.lower() + "/include"
-        building = GetValueOption(opts, "BUILDING:")
-        if (building): cmd = cmd + " -DBUILDING_"+building
-        if (opts.count("WITHINPANDA")): cmd = cmd + " -DWITHIN_PANDA"
-        cmd = cmd + ' -module ' + module + ' -library ' + library
-        for x in wsrc: cmd = cmd + ' ' + os.path.basename(x)
-        oscmd(cmd)
-        CompileCxx(wobj,woutc,opts)
-        return
     if (COMPILER=="LINUX"):
-        cmd = 'built/bin/interrogate -srcdir '+srcdir
+        cmd = "built/bin/interrogate -srcdir "+srcdir+" -I"+srcdir
         cmd = cmd + ' -DCPPPARSER -D__STDC__=1 -D__cplusplus -D__i386__ -D__const=const'
-        optlevel = GetOptimizeOption(opts,OPTIMIZE)
-        if (optlevel==1): cmd = cmd + ' '
-        if (optlevel==2): cmd = cmd + ' '
-        if (optlevel==3): cmd = cmd + ' '
-        if (optlevel==4): cmd = cmd + ' -DNDEBUG '
-        cmd = cmd + ' -oc ' + woutc + ' -od ' + woutd
-        cmd = cmd + ' -fnames -string -refcount -assert -python-native'
-        cmd = cmd + ' -Sbuilt/include/parser-inc'
-        for x in ipath: cmd = cmd + ' -I' + x
-        cmd = cmd + ' -S'+SDK["PYTHON"]
-        for pkg in PkgListGet():
-            if (PkgSelected(opts,pkg)):
-                cmd = cmd + " -S" + THIRDPARTYLIBS + pkg.lower() + "/include"
-        cmd = cmd + ' -S/usr/include'
-        building = GetValueOption(opts, "BUILDING:")
-        if (building): cmd = cmd + " -DBUILDING_"+building
-        if (opts.count("WITHINPANDA")): cmd = cmd + " -DWITHIN_PANDA"
-        cmd = cmd + ' -module ' + module + ' -library ' + library
-        for ver in MAYAVERSIONS:
-            if (PkgSelected(opts, ver)):
-                cmd = cmd + ' -I"' + SDK[ver] + '/include"'
-        for x in wsrc: cmd = cmd + ' ' + os.path.basename(x)
-        oscmd(cmd)
-        CompileCxx(wobj,woutc,opts)
-        return
+    optlevel=GetOptimizeOption(opts,OPTIMIZE)
+    if (optlevel==1): cmd = cmd + ' '
+    if (optlevel==2): cmd = cmd + ' '
+    if (optlevel==3): cmd = cmd + ' -DFORCE_INLINING'
+    if (optlevel==4): cmd = cmd + ' -DNDEBUG -DFORCE_INLINING'
+    cmd = cmd + ' -oc ' + woutc + ' -od ' + woutd
+    cmd = cmd + ' -fnames -string -refcount -assert -python-native'
+    cmd = cmd + ' -Sbuilt/include/parser-inc'
+    for x in ipath: cmd = cmd + ' -I' + x
+    for (opt,dir) in INCDIRECTORIES:
+        if (opt=="ALWAYS") or (opts.count(opt)): cmd = cmd + ' -S"' + dir + '"'
+    for (opt,var,val) in DEFSYMBOLS:
+        if (opt=="ALWAYS") or (opts.count(opt)): cmd = cmd + ' -D' + var + '=' + val
+    building = GetValueOption(opts, "BUILDING:")
+    if (building): cmd = cmd + " -DBUILDING_"+building
+    cmd = cmd + ' -module ' + module + ' -library ' + library
+    for x in wsrc: cmd = cmd + ' ' + os.path.basename(x)
+    oscmd(cmd)
+    CompileCxx(wobj,woutc,opts)
+    return
 
 ########################################################################
 ##
@@ -430,20 +514,14 @@ def CompileImod(wobj, wsrc, opts):
         return
     if (COMPILER=="MSVC"):
 	woutc = wobj[:-4]+".cxx"
-        cmd = 'built/bin/interrogate_module '
-        cmd = cmd + ' -oc ' + woutc + ' -module ' + module + ' -library ' + library + ' -python-native '
-        for x in wsrc: cmd = cmd + ' ' + x
-        oscmd(cmd)
-        CompileCxx(wobj,woutc,opts)
-        return
     if (COMPILER=="LINUX"):
 	woutc = wobj[:-2]+".cxx"
-        cmd = 'built/bin/interrogate_module '
-        cmd = cmd + ' -oc ' + woutc + ' -module ' + module + ' -library ' + library + ' -python-native '
-        for x in wsrc: cmd = cmd + ' ' + x
-        oscmd(cmd)
-        CompileCxx(wobj,woutc,opts)
-        return
+    cmd = 'built/bin/interrogate_module '
+    cmd = cmd + ' -oc ' + woutc + ' -module ' + module + ' -library ' + library + ' -python-native '
+    for x in wsrc: cmd = cmd + ' ' + x
+    oscmd(cmd)
+    CompileCxx(wobj,woutc,opts)
+    return
 
 ########################################################################
 ##
@@ -481,7 +559,8 @@ def CompileLink(dll, obj, opts):
         cmd = cmd + ' /OUT:' + dll
         if (dll.endswith(".dll")):
             cmd = cmd + ' /IMPLIB:built/lib/'+dll[10:-4]+".lib"
-        if (PkgSkip("PYTHON")==0): cmd = cmd + ' /LIBPATH:thirdparty/win-python/libs '
+        for (opt, dir) in LIBDIRECTORIES:
+            if (opt=="ALWAYS") or (opts.count(opt)): cmd = cmd + ' /LIBPATH:"' + dir + '"'
         for x in obj:
             if (x.endswith(".dll")):
                 cmd = cmd + ' built/lib/' + x[10:-4] + ".lib"
@@ -497,76 +576,8 @@ def CompileLink(dll, obj, opts):
             else: cmd = cmd + ' ' + x
         if (GetOrigExt(dll)==".exe"):
 	    cmd = cmd + ' panda/src/configfiles/pandaIcon.obj'
-        for ver in DXVERSIONS:
-	    vnum=ver[2:]
-            if (PkgSelected(opts,ver)):
-                cmd = cmd + ' /LIBPATH:"' + SDK[ver] + '/lib/x86"'
-                cmd = cmd + ' /LIBPATH:"' + SDK[ver] + '/lib"'
-                cmd = cmd + ' d3dVNUM.lib d3dxVNUM.lib dxerrVNUM.lib ddraw.lib dxguid.lib'.replace("VNUM",vnum)
-        if (opts.count("WINSOCK")):     cmd = cmd + " wsock32.lib"
-        if (opts.count("WINSOCK2")):    cmd = cmd + " wsock32.lib ws2_32.lib"
-        if (opts.count("WINCOMCTL")):   cmd = cmd + ' comctl32.lib'
-        if (opts.count("WINCOMDLG")):   cmd = cmd + ' comdlg32.lib'
-        if (opts.count("WINUSER")):     cmd = cmd + " user32.lib"
-        if (opts.count("WINMM")):       cmd = cmd + " winmm.lib"
-        if (opts.count("WINIMM")):      cmd = cmd + " imm32.lib"
-        if (opts.count("WINKERNEL")):   cmd = cmd + " kernel32.lib"
-        if (opts.count("WINOLDNAMES")): cmd = cmd + " oldnames.lib"
-        if (opts.count("WINSHELL")):    cmd = cmd + " shell32.lib"
-        if (opts.count("WINGDI")):      cmd = cmd + " gdi32.lib"
-        if (opts.count("ADVAPI")):      cmd = cmd + " advapi32.lib"
-        if (opts.count("GLUT")):        cmd = cmd + " opengl32.lib glu32.lib"
-        if (PkgSelected(opts,"DIRECTCAM")): cmd = cmd + " strmiids.lib quartz.lib odbc32.lib odbccp32.lib"
-        if (PkgSelected(opts,"PNG")):       cmd = cmd + ' ' + THIRDPARTYLIBS + 'png/lib/libpandapng.lib'
-        if (PkgSelected(opts,"JPEG")):      cmd = cmd + ' ' + THIRDPARTYLIBS + 'jpeg/lib/libpandajpeg.lib'
-        if (PkgSelected(opts,"TIFF")):      cmd = cmd + ' ' + THIRDPARTYLIBS + 'tiff/lib/libpandatiff.lib'
-        if (PkgSelected(opts,"ZLIB")):      cmd = cmd + ' ' + THIRDPARTYLIBS + 'zlib/lib/libpandazlib1.lib'
-        if (PkgSelected(opts,"VRPN")):
-            cmd = cmd + ' ' + THIRDPARTYLIBS + 'vrpn/lib/vrpn.lib'
-            cmd = cmd + ' ' + THIRDPARTYLIBS + 'vrpn/lib/quat.lib'
-        if (PkgSelected(opts,"FMOD")):
-            cmd = cmd + ' ' + THIRDPARTYLIBS + 'fmod/lib/fmod.lib'
-        if (PkgSelected(opts,"FMODEX")):
-            cmd = cmd + ' ' + THIRDPARTYLIBS + 'fmodex/lib/fmodex_vc.lib'
-        if (PkgSelected(opts,"OPENAL")):
-            cmd = cmd + ' ' + THIRDPARTYLIBS + 'openal/lib/pandaopenal32.lib'
-        if (PkgSelected(opts,"MILES")):
-            cmd = cmd + ' ' + THIRDPARTYLIBS + 'miles/lib/mss32.lib'
-        if (PkgSelected(opts,"NVIDIACG")):
-            if (opts.count("CGGL")):
-                cmd = cmd + ' ' + THIRDPARTYLIBS + 'nvidiacg/lib/cgGL.lib'
-            if (opts.count("CGDX9")):
-                cmd = cmd + ' ' + THIRDPARTYLIBS + 'nvidiacg/lib/cgD3D9.lib'
-            cmd = cmd + ' ' + THIRDPARTYLIBS + 'nvidiacg/lib/cg.lib'
-        if (PkgSelected(opts,"OPENSSL")):
-            cmd = cmd + ' ' + THIRDPARTYLIBS + 'openssl/lib/libpandassl.lib'
-            cmd = cmd + ' ' + THIRDPARTYLIBS + 'openssl/lib/libpandaeay.lib'
-        if (PkgSelected(opts,"FREETYPE")):
-            cmd = cmd + ' ' + THIRDPARTYLIBS + 'freetype/lib/freetype.lib'
-        if (PkgSelected(opts,"FFTW")):
-            cmd = cmd + ' ' + THIRDPARTYLIBS + 'fftw/lib/rfftw.lib'
-            cmd = cmd + ' ' + THIRDPARTYLIBS + 'fftw/lib/fftw.lib'
-        if (PkgSelected(opts,"FFMPEG")):
-            cmd = cmd + ' ' + THIRDPARTYLIBS + 'ffmpeg/lib/avcodec-51-panda.lib'
-            cmd = cmd + ' ' + THIRDPARTYLIBS + 'ffmpeg/lib/avformat-50-panda.lib'
-            cmd = cmd + ' ' + THIRDPARTYLIBS + 'ffmpeg/lib/avutil-49-panda.lib'
-        if (PkgSelected(opts,"ARTOOLKIT")):
-            cmd = cmd + ' ' + THIRDPARTYLIBS + 'artoolkit/lib/libAR.lib'
-        for ver in MAYAVERSIONS:
-            if (PkgSelected(opts,ver)):
-                cmd = cmd + ' "' + SDK[ver] +  '/lib/Foundation.lib"'
-                cmd = cmd + ' "' + SDK[ver] +  '/lib/OpenMaya.lib"'
-                cmd = cmd + ' "' + SDK[ver] +  '/lib/OpenMayaAnim.lib"'
-                cmd = cmd + ' "' + SDK[ver] +  '/lib/OpenMayaUI.lib"'
-        for ver in MAXVERSIONS:
-            if (PkgSelected(opts,ver)):
-                cmd = cmd + ' "' + SDK[ver] +  '/lib/core.lib"'
-                cmd = cmd + ' "' + SDK[ver] +  '/lib/edmodel.lib"'
-                cmd = cmd + ' "' + SDK[ver] +  '/lib/gfx.lib"'
-                cmd = cmd + ' "' + SDK[ver] +  '/lib/geom.lib"'
-                cmd = cmd + ' "' + SDK[ver] +  '/lib/mesh.lib"'
-                cmd = cmd + ' "' + SDK[ver] +  '/lib/maxutil.lib"'
-                cmd = cmd + ' "' + SDK[ver] +  '/lib/paramblk2.lib"'
+        for (opt, name) in LIBNAMES:
+            if (opt=="ALWAYS") or (opts.count(opt)): cmd = cmd + ' ' + name
         oscmd(cmd)
         SetVC80CRTVersion(dll+".manifest", VC80CRTVERSION)
         mtcmd = 'mt -manifest ' + dll + '.manifest -outputresource:' + dll
@@ -583,26 +594,10 @@ def CompileLink(dll, obj, opts):
                     cmd = cmd + ' -l' + base[3:-3]
                 else:
                     cmd = cmd + ' ' + x
-        #if (PkgSelected(opts,"FMOD")):     cmd = cmd + ' -L' + THIRDPARTYLIBS + 'fmod/lib -lfmod'
-        if (PkgSelected(opts,"FMODEX")):   cmd = cmd + ' -L' + THIRDPARTYLIBS + 'fmodex/lib -lfmodex'
-        #if (PkgSelected(opts,"OPENAL")):   cmd = cmd + ' -L' + THIRDPARTYLIBS + 'openal/lib -lopenal'
-        if (PkgSelected(opts,"NVIDIACG")):
-            cmd = cmd + ' -Lthirdparty/nvidiacg/lib '
-            if (opts.count("CGGL")):  cmd = cmd + " -lCgGL"
-            cmd = cmd + " -lCg "
-        if (PkgSelected(opts,"FFMPEG")):   cmd = cmd + ' -L' + THIRDPARTYLIBS + 'ffmpeg/lib -lavformat -lavcodec -lavformat -lavutil'
-        if (PkgSelected(opts,"OPENAL")):   cmd = cmd + ' -L' + THIRDPARTYLIBS + 'openal/lib -lpandaopenal'
-        if (PkgSelected(opts,"ZLIB")):     cmd = cmd + " -lz"
-        if (PkgSelected(opts,"PNG")):      cmd = cmd + " -lpng"
-        if (PkgSelected(opts,"JPEG")):     cmd = cmd + " -ljpeg"
-        if (PkgSelected(opts,"TIFF")):     cmd = cmd + " -ltiff"
-        if (PkgSelected(opts,"OPENSSL")):  cmd = cmd + " -lssl"
-        if (PkgSelected(opts,"FREETYPE")): cmd = cmd + " -lfreetype"
-        if (opts.count("GTK2")):           cmd = cmd + ' -lgtk-x11-2.0'
-        if (PkgSelected(opts,"VRPN")):     cmd = cmd + ' -L' + THIRDPARTYLIBS + 'vrpn/lib -lvrpn -lquat'
-        if (PkgSelected(opts,"FFTW")):     cmd = cmd + ' -L' + THIRDPARTYLIBS + 'fftw/lib -lrfftw -lfftw'
-	if (PkgSelected(opts,"ARTOOLKIT")):cmd = cmd + ' -L' + THIRDPARTYLIBS + 'artoolkit/lib -lAR'
-        if (opts.count("GLUT")):           cmd = cmd + " -lGL -lGLU"
+        for (opt, dir) in LIBDIRECTORIES:
+            if (opt=="ALWAYS") or (opts.count(opt)): cmd = cmd + ' -L"' + name + '"'
+        for (opt, name) in LIBNAMES:
+            if (opt=="ALWAYS") or (opts.count(opt)): cmd = cmd + ' ' + name
         cmd = cmd + " -lpthread -ldl"
         oscmd(cmd)
 
@@ -651,82 +646,6 @@ def CompileAnything(target, inputs, opts):
             return CompileImod(target, inputs, opts)
     exit("Don't know how to compile: "+target)
 
-##########################################################################################
-#
-# If the 'make depend' process discovers an 'include'
-# directive that includes one of the following files,
-# the specified file is not added as a dependency,
-# nor is it traversed.
-#
-##########################################################################################
-
-CxxIgnoreHeader["Python.h"] = 1
-CxxIgnoreHeader["Python/Python.h"] = 1
-CxxIgnoreHeader["Cg/cg.h"] = 1
-CxxIgnoreHeader["Cg/cgGL.h"] = 1
-CxxIgnoreHeader["alloc.h"] = 1
-CxxIgnoreHeader["ctype.h"] = 1
-CxxIgnoreHeader["stdlib.h"] = 1
-CxxIgnoreHeader["ipc_thread.h"] = 1
-CxxIgnoreHeader["platform/symbian/symbian_print.h"] = 1
-CxxIgnoreHeader["hxtypes.h"] = 1
-CxxIgnoreHeader["hxcom.h"] = 1
-CxxIgnoreHeader["hxiids.h"] = 1
-CxxIgnoreHeader["hxpiids.h"] = 1
-CxxIgnoreHeader["dsound.h"] = 1
-CxxIgnoreHeader["hlxosstr.h"] = 1
-CxxIgnoreHeader["ddraw.h"] = 1
-CxxIgnoreHeader["mss.h"] = 1
-CxxIgnoreHeader["MacSocket.h"] = 1
-CxxIgnoreHeader["textureTransition.h"] = 1
-CxxIgnoreHeader["transformTransition.h"] = 1
-CxxIgnoreHeader["billboardTransition.h"] = 1
-CxxIgnoreHeader["transformTransition.h"] = 1
-CxxIgnoreHeader["transparencyTransition.h"] = 1
-CxxIgnoreHeader["allTransitionsWrapper.h"] = 1
-CxxIgnoreHeader["allTransitionsWrapper.h"] = 1
-CxxIgnoreHeader["namedNode.h"] = 1
-CxxIgnoreHeader["renderRelation.h"] = 1
-CxxIgnoreHeader["renderTraverser.h"] = 1
-CxxIgnoreHeader["get_rel_pos.h"] = 1
-
-# Ignore Windows headers.
-CxxIgnoreHeader["windows.h"] = 1
-CxxIgnoreHeader["windef.h"] = 1
-CxxIgnoreHeader["afxres.h"] = 1
-
-# Ignore MAX headers
-CxxIgnoreHeader["Max.h"] = 1
-CxxIgnoreHeader["iparamb2.h"] = 1
-CxxIgnoreHeader["iparamm2.h"] = 1
-CxxIgnoreHeader["istdplug.h"] = 1
-CxxIgnoreHeader["iskin.h"] = 1
-CxxIgnoreHeader["stdmat.h"] = 1
-CxxIgnoreHeader["phyexp.h"] = 1
-CxxIgnoreHeader["bipexp.h"] = 1
-CxxIgnoreHeader["modstack.h"] = 1
-CxxIgnoreHeader["decomp.h"] = 1
-CxxIgnoreHeader["shape.h"] = 1
-CxxIgnoreHeader["simpobj.h"] = 1
-CxxIgnoreHeader["surf_api.h"] = 1
-
-# OpenSSL headers
-CxxIgnoreHeader["openssl/evp.h"] = 1
-CxxIgnoreHeader["openssl/rand.h"] = 1
-CxxIgnoreHeader["openssl/md5.h"] = 1
-CxxIgnoreHeader["openssl/err.h"] = 1
-CxxIgnoreHeader["openssl/ssl.h"] = 1
-CxxIgnoreHeader["openssl/pem.h"] = 1
-CxxIgnoreHeader["openssl/rsa.h"] = 1
-CxxIgnoreHeader["openssl/bio.h"] = 1
-CxxIgnoreHeader["openssl/x509.h"] = 1
-
-# STD headers
-CxxIgnoreHeader["map"] = 1
-CxxIgnoreHeader["vector"] = 1
-CxxIgnoreHeader["set"] = 1
-CxxIgnoreHeader["algorithm"] = 1
-
 ##########################################################################################
 #
 # Generate dtool_config.h, prc_parameters.h, and dtool_have_xxx.dat
@@ -2015,13 +1934,6 @@ if PkgSkip("OPENAL") == 0:
   TargetAdd('libp3openal_audio.dll', input=COMMON_PANDA_LIBS)
   TargetAdd('libp3openal_audio.dll', opts=['ADVAPI', 'WINUSER', 'WINMM', 'OPENAL'])
 
-if PkgSkip("MILES") == 0:
-  OPTS=['DIR:panda/src/audiotraits', 'BUILDING:MILES_AUDIO',  'MILES']
-  TargetAdd('miles_audio_miles_audio_composite.obj', opts=OPTS, input='miles_audio_composite.cxx')
-  TargetAdd('libp3miles_audio.dll', input='miles_audio_miles_audio_composite.obj')
-  TargetAdd('libp3miles_audio.dll', input=COMMON_PANDA_LIBS)
-  TargetAdd('libp3miles_audio.dll', opts=['ADVAPI', 'WINUSER', 'WINMM', 'MILES'])
-
 #
 # DIRECTORY: panda/src/downloadertools/
 #

+ 39 - 12
doc/makepanda/makepandacore.py

@@ -39,6 +39,7 @@ MAXVERSIONINFO = [("MAX6", "SOFTWARE\\Autodesk\\3DSMAX\\6.0", "installdir", "max
 
 MAYAVERSIONS=[]
 MAXVERSIONS=[]
+DXVERSIONS=["DX8","DX9"]
 
 for (ver,key) in MAYAVERSIONINFO:
     MAYAVERSIONS.append(ver)
@@ -228,8 +229,7 @@ def NeedsBuild(files,others):
         else:
             oldothers = BUILTFROMCACHE[key][0]
             if (oldothers != others):
-                for f in files:
-                    print "CAUTION: file dependencies changed: "+f
+                print "CAUTION: file dependencies changed: "+str(files)
     return 1
 
 ########################################################################
@@ -373,15 +373,11 @@ def CxxCalcDependencies(srcfile, ipath, ignore):
     dep[srcfile] = 1
     includes = CxxGetIncludes(srcfile)
     for include in includes:
-        if (CxxIgnoreHeader.has_key(include)==0):
-            header = CxxFindHeader(srcfile, include, ipath)
-            if (header!=0):
-                if (ignore.count(header)==0):
-                    hdeps = CxxCalcDependencies(header, ipath, [srcfile]+ignore)
-                    for x in hdeps: dep[x] = 1
-            else:
-                pass
-#               print "CAUTION: header file "+include+" cannot be found in "+srcfile+" IPATH="+str(ipath)
+        header = CxxFindHeader(srcfile, include, ipath)
+        if (header!=0):
+            if (ignore.count(header)==0):
+                hdeps = CxxCalcDependencies(header, ipath, [srcfile]+ignore)
+                for x in hdeps: dep[x] = 1
     result = dep.keys()
     CxxDependencyCache[srcfile] = result
     return result
@@ -657,6 +653,8 @@ def SdkLocateDirectX():
                     (os.path.isfile(dir+"\\Lib\\x86\\d3d9.lib")) and
                     (os.path.isfile(dir+"\\Lib\\x86\\d3dx9.lib"))):
                    SDK["DX9"] = dir.replace("\\", "/").rstrip("/")
+    if (SDK.has_key("DX9")):
+        SDK["DIRECTCAM"] = SDK["DX9"]
 
 def SdkLocateMaya():
     if (sys.platform != "win32"): return
@@ -728,7 +726,7 @@ def SdkLocateMSPlatform():
 ########################################################################
 
 def SdkAutoDisableDirectX():
-    for ver in ["DX8","DX9"]:
+    for ver in ["DX8","DX9","DIRECTCAM"]:
         if (PkgSkip(ver)==0):
             if (SDK.has_key(ver)==0):
                 WARNINGS.append("I cannot locate SDK for "+ver)
@@ -790,6 +788,35 @@ def SetupVisualStudioEnviron():
     AddToPathEnv("INCLUDE", SDK["MSPLATFORM"] + "include\\atl")
     AddToPathEnv("LIB",     SDK["MSPLATFORM"] + "lib")
 
+########################################################################
+#
+# Include and Lib directories.
+#
+# These allow you to add include and lib directories to the
+# compiler search paths.  These methods accept a "package"
+# parameter, which specifies which package the directory is
+# associated with.  The include/lib directory is not used
+# if the package is not selected.  The package can be 'ALWAYS'.
+#
+########################################################################
+
+INCDIRECTORIES = []
+LIBDIRECTORIES = []
+LIBNAMES = []
+DEFSYMBOLS = []
+
+def IncDirectory(opt, dir):
+    INCDIRECTORIES.append((opt, dir))
+
+def LibDirectory(opt, dir):
+    LIBDIRECTORIES.append((opt, dir))
+
+def LibName(opt, name):
+    LIBNAMES.append((opt, name))
+
+def DefSymbol(opt, sym, val):
+    DEFSYMBOLS.append((opt, sym, val))
+
 ########################################################################
 #
 # On Linux, to run panda, the dynamic linker needs to know how to find