فهرست منبع

- Integrate new plugin certificate tool
- Support for wx-config (needed to compile p3dcert)
- Added some flags that make sure the windows linker won't accidentally pick up symbols from the debug runtime
- Some generic linker fixes

rdb 16 سال پیش
والد
کامیت
9261a7baad
2فایلهای تغییر یافته به همراه69 افزوده شده و 21 حذف شده
  1. 15 6
      makepanda/makepanda.py
  2. 54 15
      makepanda/makepandacore.py

+ 15 - 6
makepanda/makepanda.py

@@ -406,6 +406,9 @@ if (COMPILER=="LINUX"):
     else:
     else:
         exit("Failed to locate pkg-config binary!")
         exit("Failed to locate pkg-config binary!")
     
     
+    if (LocateBinary("wx-config")):
+        PkgConfigEnable("WX", "", tool = "wx-config")
+    
     if (platform.uname()[1]=="pcbsd"):
     if (platform.uname()[1]=="pcbsd"):
         IncDirectory("ALWAYS", "/usr/PCBSD/local/include")
         IncDirectory("ALWAYS", "/usr/PCBSD/local/include")
         LibDirectory("ALWAYS", "/usr/PCBSD/local/lib")
         LibDirectory("ALWAYS", "/usr/PCBSD/local/lib")
@@ -787,10 +790,10 @@ def CompileLink(dll, obj, opts):
         cmd += " /nod:libc /nod:libcmtd /nod:atlthunk /nod:atls"
         cmd += " /nod:libc /nod:libcmtd /nod:atlthunk /nod:atls"
         if (GetOrigExt(dll) != ".exe"): cmd += " /DLL"
         if (GetOrigExt(dll) != ".exe"): cmd += " /DLL"
         optlevel = GetOptimizeOption(opts)
         optlevel = GetOptimizeOption(opts)
-        if (optlevel==1): cmd += " /MAP /MAPINFO:EXPORTS /NOD:MSVCRT.LIB"
-        if (optlevel==2): cmd += " /MAP:NUL /NOD:MSVCRT.LIB"
-        if (optlevel==3): cmd += " /MAP:NUL /NOD:MSVCRTD.LIB"
-        if (optlevel==4): cmd += " /MAP:NUL /LTCG /NOD:MSVCRTD.LIB"
+        if (optlevel==1): cmd += " /MAP /MAPINFO:EXPORTS /NOD:MSVCRT.LIB /NOD:MSVCPRT.LIB /NOD:MSVCIRT.LIB"
+        if (optlevel==2): cmd += " /MAP:NUL /NOD:MSVCRT.LIB /NOD:MSVCPRT.LIB /NOD:MSVCIRT.LIB"
+        if (optlevel==3): cmd += " /MAP:NUL /NOD:MSVCRTD.LIB /NOD:MSVCPRTD.LIB /NOD:MSVCIRTD.LIB"
+        if (optlevel==4): cmd += " /MAP:NUL /LTCG /NOD:MSVCRTD.LIB /NOD:MSVCPRTD.LIB /NOD:MSVCIRTD.LIB"
         cmd += " /FIXED:NO /OPT:REF /STACK:4194304 /INCREMENTAL:NO "
         cmd += " /FIXED:NO /OPT:REF /STACK:4194304 /INCREMENTAL:NO "
         cmd += ' /OUT:' + BracketNameWithQuotes(dll)
         cmd += ' /OUT:' + BracketNameWithQuotes(dll)
         if (dll.endswith(".dll")):
         if (dll.endswith(".dll")):
@@ -2980,7 +2983,7 @@ elif (sys.platform == "win32"):
   TargetAdd('libtinydisplay.dll', opts=['WINIMM', 'WINGDI', 'WINKERNEL', 'WINOLDNAMES', 'WINUSER', 'WINMM'])
   TargetAdd('libtinydisplay.dll', opts=['WINIMM', 'WINGDI', 'WINKERNEL', 'WINOLDNAMES', 'WINUSER', 'WINMM'])
 else:
 else:
   TargetAdd('libtinydisplay.dll', input='x11display_composite.obj')
   TargetAdd('libtinydisplay.dll', input='x11display_composite.obj')
-  TargetAdd('libtinydisplay.dll', opts=['X11'])
+  TargetAdd('libtinydisplay.dll', opts=['X11', 'XF86DGA'])
 TargetAdd('libtinydisplay.dll', input='tinydisplay_composite1.obj')
 TargetAdd('libtinydisplay.dll', input='tinydisplay_composite1.obj')
 TargetAdd('libtinydisplay.dll', input='tinydisplay_composite2.obj')
 TargetAdd('libtinydisplay.dll', input='tinydisplay_composite2.obj')
 TargetAdd('libtinydisplay.dll', input='tinydisplay_ztriangle_1.obj')
 TargetAdd('libtinydisplay.dll', input='tinydisplay_ztriangle_1.obj')
@@ -3196,6 +3199,12 @@ if (RUNTIME):
     TargetAdd('p3dpython.exe', input=COMMON_PANDA_LIBS)
     TargetAdd('p3dpython.exe', input=COMMON_PANDA_LIBS)
     TargetAdd('p3dpython.exe', opts=['PYTHON', 'TINYXML', 'WINUSER'])
     TargetAdd('p3dpython.exe', opts=['PYTHON', 'TINYXML', 'WINUSER'])
 
 
+  if (PkgSkip("OPENSSL")==0):
+    OPTS=['DIR:direct/src/plugin', 'OPENSSL', 'WX']
+    TargetAdd('plugin_p3dCert.obj', opts=OPTS, input='p3dCert.cxx')
+    TargetAdd('p3dcert.exe', input='plugin_p3dCert.obj')
+    TargetAdd('p3dcert.exe', opts=['OPENSSL', 'WX', 'CARBON'])
+
 #
 #
 # DIRECTORY: direct/src/plugin_npapi/
 # DIRECTORY: direct/src/plugin_npapi/
 #
 #
@@ -4237,7 +4246,7 @@ Priority: optional
 Architecture: ARCH
 Architecture: ARCH
 Essential: no
 Essential: no
 Depends: PYTHONV
 Depends: PYTHONV
-Recommends: panda3d-runtime, python-profiler (>= PV)
+Recommends: panda3d-runtime, python-wxversion, python-profiler (>= PV)
 Provides: panda3d
 Provides: panda3d
 Maintainer: [email protected]
 Maintainer: [email protected]
 Description: The Panda3D free 3D engine
 Description: The Panda3D free 3D engine

+ 54 - 15
makepanda/makepandacore.py

@@ -772,20 +772,26 @@ if os.path.isfile("direct/src/plugin/p3d_plugin_config.h.moved"):
 ##
 ##
 ########################################################################
 ########################################################################
 
 
-def PkgConfigHavePkg(pkgname):
+def PkgConfigHavePkg(pkgname, tool = "pkg-config"):
     """Returns a bool whether the pkg-config package is installed."""
     """Returns a bool whether the pkg-config package is installed."""
     if (sys.platform == "win32" or not LocateBinary("pkg-config")):
     if (sys.platform == "win32" or not LocateBinary("pkg-config")):
         return False
         return False
-    handle = os.popen(LocateBinary("pkg-config") + " --silence-errors --modversion " + pkgname)
+    if (tool == "pkg-config"):
+        handle = os.popen(LocateBinary("pkg-config") + " --silence-errors --modversion " + pkgname)
+    else:
+        return bool(LocateBinary(tool) != None)
     result = handle.read().strip()
     result = handle.read().strip()
     handle.close()
     handle.close()
     return bool(len(result) > 0)
     return bool(len(result) > 0)
 
 
-def PkgConfigGetLibs(pkgname):
+def PkgConfigGetLibs(pkgname, tool = "pkg-config"):
     """Returns a list of libs for the package, prefixed by -l."""
     """Returns a list of libs for the package, prefixed by -l."""
     if (sys.platform == "win32" or not LocateBinary("pkg-config")):
     if (sys.platform == "win32" or not LocateBinary("pkg-config")):
         return []
         return []
-    handle = os.popen(LocateBinary("pkg-config") + " --silence-errors --libs-only-l " + pkgname)
+    if (tool == "pkg-config"):
+        handle = os.popen(LocateBinary("pkg-config") + " --silence-errors --libs-only-l " + pkgname)
+    else:
+        handle = os.popen(LocateBinary(tool) + " --libs")
     result = handle.read().strip()
     result = handle.read().strip()
     handle.close()
     handle.close()
     libs = []
     libs = []
@@ -793,40 +799,73 @@ def PkgConfigGetLibs(pkgname):
         libs.append(l)
         libs.append(l)
     return libs
     return libs
 
 
-def PkgConfigGetIncDirs(pkgname):
+def PkgConfigGetIncDirs(pkgname, tool = "pkg-config"):
     """Returns a list of includes for the package, NOT prefixed by -I."""
     """Returns a list of includes for the package, NOT prefixed by -I."""
     if (sys.platform == "win32" or not LocateBinary("pkg-config")):
     if (sys.platform == "win32" or not LocateBinary("pkg-config")):
         return []
         return []
-    handle = os.popen(LocateBinary("pkg-config") + " --silence-errors --cflags-only-I " + pkgname)
+    if (tool == "pkg-config"):
+        handle = os.popen(LocateBinary("pkg-config") + " --silence-errors --cflags-only-I " + pkgname)
+    else:
+        handle = os.popen(LocateBinary(tool) + " --cflags")
     result = handle.read().strip()
     result = handle.read().strip()
-    handle.close()
     if len(result) == 0: return []
     if len(result) == 0: return []
+    handle.close()
     libs = []
     libs = []
     for l in result.split(" "):
     for l in result.split(" "):
-        libs.append(l.replace("-I", "").replace("\"", "").strip())
+        if (l.startswith("-I")):
+            libs.append(l.replace("-I", "").replace("\"", "").strip())
     return libs
     return libs
 
 
-def PkgConfigGetLibDirs(pkgname):
+def PkgConfigGetLibDirs(pkgname, tool = "pkg-config"):
     """Returns a list of library paths for the package, NOT prefixed by -L."""
     """Returns a list of library paths for the package, NOT prefixed by -L."""
     if (sys.platform == "win32" or not LocateBinary("pkg-config")):
     if (sys.platform == "win32" or not LocateBinary("pkg-config")):
         return []
         return []
-    handle = os.popen(LocateBinary("pkg-config") + " --silence-errors --libs-only-L " + pkgname)
+    if (tool == "pkg-config"):
+        handle = os.popen(LocateBinary("pkg-config") + " --silence-errors --libs-only-L " + pkgname)
+    elif (tool == "wx-config"):
+        return []
+    else:
+        handle = os.popen(LocateBinary(tool) + " --ldflags")
     result = handle.read().strip()
     result = handle.read().strip()
     handle.close()
     handle.close()
     if len(result) == 0: return []
     if len(result) == 0: return []
     libs = []
     libs = []
     for l in result.split(" "):
     for l in result.split(" "):
-        libs.append(l.replace("-L", "").replace("\"", "").strip())
+        if (l.startswith("-L")):
+            libs.append(l.replace("-L", "").replace("\"", "").strip())
     return libs
     return libs
 
 
-def PkgConfigEnable(opt, pkgname):
+def PkgConfigGetDefSymbols(pkgname, tool = "pkg-config"):
+    """Returns a dictionary of preprocessor definitions."""
+    if (sys.platform == "win32" or not LocateBinary("pkg-config")):
+        return []
+    if (tool == "pkg-config"):
+        handle = os.popen(LocateBinary("pkg-config") + " --silence-errors --cflags " + pkgname)
+    else:
+        handle = os.popen(LocateBinary(tool) + " --cflags")
+    result = handle.read().strip()
+    handle.close()
+    if len(result) == 0: return {}
+    defs = {}
+    for l in result.split(" "):
+        if (l.startswith("-D")):
+            d = l.replace("-D", "").replace("\"", "").strip().split("=")
+            if (len(d) == 1):
+                defs[d[0]] = ""
+            else:
+                defs[d[0]] = d[1]
+    return defs
+
+def PkgConfigEnable(opt, pkgname, tool = "pkg-config"):
     """Adds the libraries and includes to IncDirectory, LibName and LibDirectory."""
     """Adds the libraries and includes to IncDirectory, LibName and LibDirectory."""
-    for i in PkgConfigGetIncDirs(pkgname):
+    for i in PkgConfigGetIncDirs(pkgname, tool):
         IncDirectory(opt, i)
         IncDirectory(opt, i)
-    for i in PkgConfigGetLibDirs(pkgname):
+    for i in PkgConfigGetLibDirs(pkgname, tool):
         LibDirectory(opt, i)
         LibDirectory(opt, i)
-    for i in PkgConfigGetLibs(pkgname):
+    for i in PkgConfigGetLibs(pkgname, tool):
         LibName(opt, i)
         LibName(opt, i)
+    for i, j in PkgConfigGetDefSymbols(pkgname, tool).items():
+        DefSymbol(opt, i, j)
 
 
 ########################################################################
 ########################################################################
 ##
 ##