Fix various Windows build issues

This commit is contained in:
rdb 2015-03-27 23:17:35 +01:00
parent f624cdcac0
commit 477aa4bdfe
11 changed files with 155 additions and 126 deletions

View File

@ -2263,7 +2263,7 @@ class Packager:
self.executablePath.appendDirectory('/usr/lib') self.executablePath.appendDirectory('/usr/lib')
self.executablePath.appendDirectory('/usr/local/lib') self.executablePath.appendDirectory('/usr/local/lib')
if os.uname()[1] == "pcbsd": if self.platform.startswith('freebsd') and os.uname()[1] == "pcbsd":
self.executablePath.appendDirectory('/usr/PCBSD/local/lib') self.executablePath.appendDirectory('/usr/PCBSD/local/lib')
# Set this flag true to automatically add allow_python_dev to # Set this flag true to automatically add allow_python_dev to

View File

@ -2865,7 +2865,12 @@ define_array_type(InterrogateType &itype, CPPArrayType *cpptype) {
itype._flags |= InterrogateType::F_array; itype._flags |= InterrogateType::F_array;
itype._wrapped_type = get_type(cpptype->_element_type, false); itype._wrapped_type = get_type(cpptype->_element_type, false);
itype._array_size = cpptype->_bounds->evaluate().as_integer(); if (cpptype->_bounds == NULL) {
// This indicates an unsized array.
itype._array_size = -1;
} else {
itype._array_size = cpptype->_bounds->evaluate().as_integer();
}
} }
//////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////

View File

@ -19,6 +19,6 @@
NotifyCategoryDef(prc, ""); NotifyCategoryDef(prc, "");
ConfigVariableBool assert_abort ALIGN_16BYTE ConfigVariableBool assert_abort
("assert-abort", false, ("assert-abort", false,
PRC_DESC("Set this true to trigger a core dump and/or stack trace when the first assertion fails")); PRC_DESC("Set this true to trigger a core dump and/or stack trace when the first assertion fails"));

View File

@ -22,7 +22,8 @@ class ConfigVariableBool;
NotifyCategoryDecl(prc, EXPCL_DTOOLCONFIG, EXPTP_DTOOLCONFIG); NotifyCategoryDecl(prc, EXPCL_DTOOLCONFIG, EXPTP_DTOOLCONFIG);
extern ConfigVariableBool assert_abort; // This is aligned to match the shadowed definition in notify.cxx.
extern ALIGN_16BYTE ConfigVariableBool assert_abort;
#endif #endif

View File

@ -403,7 +403,7 @@ assert_failure(const char *expression, int line,
// This is redefined here, shadowing the defining in config_prc.h, // This is redefined here, shadowing the defining in config_prc.h,
// so we can guarantee it has already been constructed. // so we can guarantee it has already been constructed.
ConfigVariableBool assert_abort("assert-abort", false); ALIGN_16BYTE ConfigVariableBool assert_abort("assert-abort", false);
if (assert_abort) { if (assert_abort) {
#ifdef WIN32 #ifdef WIN32
// How to trigger an exception in VC++ that offers to take us into // How to trigger an exception in VC++ that offers to take us into

View File

@ -224,7 +224,7 @@ SectionGroup "Panda3D Libraries"
!endif !endif
!ifdef HAVE_PHYSX !ifdef HAVE_PHYSX
Section "PhysX support" SecPhysX Section "NVIDIA PhysX" SecPhysX
SectionIn 1 SectionIn 1
SetOutPath "$INSTDIR\bin" SetOutPath "$INSTDIR\bin"

View File

@ -290,7 +290,7 @@ def parseopts(args):
winver = sys.getwindowsversion() winver = sys.getwindowsversion()
if platsdk and os.path.isdir(platsdk) and winver[0] >= 6 and winver[1] >= 1: if platsdk and os.path.isdir(platsdk) and winver[0] >= 6 and winver[1] >= 1:
is_win7 = True is_win7 = True
if not is_win7: if RUNTIME or not is_win7:
PkgDisable("TOUCHINPUT") PkgDisable("TOUCHINPUT")
parseopts(sys.argv[1:]) parseopts(sys.argv[1:])
@ -598,14 +598,17 @@ if (COMPILER == "MSVC"):
LibName("FMODEX", GetThirdpartyDir() + "fmodex/lib/fmodex64_vc.lib") LibName("FMODEX", GetThirdpartyDir() + "fmodex/lib/fmodex64_vc.lib")
else: else:
LibName("FMODEX", GetThirdpartyDir() + "fmodex/lib/fmodex_vc.lib") LibName("FMODEX", GetThirdpartyDir() + "fmodex/lib/fmodex_vc.lib")
if (PkgSkip("FLTK")==0 and RTDIST):
LibName("FLTK", GetThirdpartyDir() + "fltk/lib/fltk.lib")
if not PkgSkip("FLTK"):
# If we have fltk, we don't need wx
PkgDisable("WX")
if (PkgSkip("WX")==0 and RTDIST): if (PkgSkip("WX")==0 and RTDIST):
LibName("WX", GetThirdpartyDir() + "wx/lib/wxbase28u.lib") LibName("WX", GetThirdpartyDir() + "wx/lib/wxbase28u.lib")
LibName("WX", GetThirdpartyDir() + "wx/lib/wxmsw28u_core.lib") LibName("WX", GetThirdpartyDir() + "wx/lib/wxmsw28u_core.lib")
DefSymbol("WX", "__WXMSW__", "") DefSymbol("WX", "__WXMSW__", "")
DefSymbol("WX", "_UNICODE", "") DefSymbol("WX", "_UNICODE", "")
DefSymbol("WX", "UNICODE", "") DefSymbol("WX", "UNICODE", "")
if (PkgSkip("FLTK")==0 and RTDIST):
LibName("FLTK", GetThirdpartyDir() + "fltk/lib/fltk.lib")
if (PkgSkip("VORBIS")==0): if (PkgSkip("VORBIS")==0):
LibName("VORBIS", GetThirdpartyDir() + "vorbis/lib/libogg_static.lib") LibName("VORBIS", GetThirdpartyDir() + "vorbis/lib/libogg_static.lib")
LibName("VORBIS", GetThirdpartyDir() + "vorbis/lib/libvorbis_static.lib") LibName("VORBIS", GetThirdpartyDir() + "vorbis/lib/libvorbis_static.lib")
@ -689,13 +692,12 @@ if (COMPILER=="GCC"):
IncDirectory("FREETYPE", "/usr/X11/include/freetype2") IncDirectory("FREETYPE", "/usr/X11/include/freetype2")
LibDirectory("FREETYPE", "/usr/X11/lib") LibDirectory("FREETYPE", "/usr/X11/lib")
if (os.path.isdir("/usr/PCBSD")):
IncDirectory("ALWAYS", "/usr/PCBSD/local/include")
LibDirectory("ALWAYS", "/usr/PCBSD/local/lib")
if (GetHost() == "freebsd"): if (GetHost() == "freebsd"):
IncDirectory("ALWAYS", "/usr/local/include") IncDirectory("ALWAYS", "/usr/local/include")
LibDirectory("ALWAYS", "/usr/local/lib") LibDirectory("ALWAYS", "/usr/local/lib")
if (os.path.isdir("/usr/PCBSD")):
IncDirectory("ALWAYS", "/usr/PCBSD/local/include")
LibDirectory("ALWAYS", "/usr/PCBSD/local/lib")
fcollada_libs = ("FColladaD", "FColladaSD", "FColladaS") fcollada_libs = ("FColladaD", "FColladaSD", "FColladaS")
# WARNING! The order of the ffmpeg libraries matters! # WARNING! The order of the ffmpeg libraries matters!
@ -889,22 +891,37 @@ def printStatus(header,warnings):
tkeep = "" tkeep = ""
tomit = "" tomit = ""
for x in PkgListGet(): for x in PkgListGet():
if (PkgSkip(x)==0): tkeep = tkeep + x + " " if PkgSkip(x):
else: tomit = tomit + x + " " tomit = tomit + x + " "
if RTDIST: print("Makepanda: Runtime distribution build") else:
elif RUNTIME: print("Makepanda: Runtime build") tkeep = tkeep + x + " "
else: print("Makepanda: Regular build")
print("Makepanda: Compiler:",COMPILER) if RTDIST:
print("Makepanda: Optimize:",GetOptimize()) print("Makepanda: Runtime distribution build")
print("Makepanda: Keep Pkg:",tkeep) elif RUNTIME:
print("Makepanda: Omit Pkg:",tomit) print("Makepanda: Runtime build")
if (GENMAN): print("Makepanda: Generate API reference manual") else:
else : print("Makepanda: Don't generate API reference manual") print("Makepanda: Regular build")
if (GetHost() == "windows" and not RTDIST):
if INSTALLER: print("Makepanda: Build installer, using",COMPRESSOR) print("Makepanda: Compiler: %s" % (COMPILER))
else : print("Makepanda: Don't build installer") print("Makepanda: Optimize: %d" % (GetOptimize()))
print("Makepanda: Version ID: "+VERSION) print("Makepanda: Keep Pkg: %s" % (tkeep))
for x in warnings: print("Makepanda: "+x) print("Makepanda: Omit Pkg: %s" % (tomit))
if GENMAN:
print("Makepanda: Generate API reference manual")
else:
print("Makepanda: Don't generate API reference manual")
if GetHost() == "windows" and not RTDIST:
if INSTALLER:
print("Makepanda: Build installer, using %s" % (COMPRESSOR))
else:
print("Makepanda: Don't build installer")
print("Makepanda: Version ID: %s" % (VERSION))
for x in warnings:
print("Makepanda: %s" % (x))
print("-------------------------------------------------------------------") print("-------------------------------------------------------------------")
print("") print("")
sys.stdout.flush() sys.stdout.flush()
@ -946,6 +963,8 @@ def CompileCxx(obj,src,opts):
# Enable Windows 7 interfaces if we need Touchinput. # Enable Windows 7 interfaces if we need Touchinput.
if PkgSkip("TOUCHINPUT") == 0: if PkgSkip("TOUCHINPUT") == 0:
cmd += "/DWINVER=0x601 " cmd += "/DWINVER=0x601 "
else:
cmd += "/DWINVER=0x501 "
cmd += "/Fo" + obj + " /nologo /c" cmd += "/Fo" + obj + " /nologo /c"
if GetTargetArch() != 'x64' and (not PkgSkip("SSE2") or 'SSE2' in opts): if GetTargetArch() != 'x64' and (not PkgSkip("SSE2") or 'SSE2' in opts):
cmd += " /arch:SSE2" cmd += " /arch:SSE2"
@ -996,6 +1015,8 @@ def CompileCxx(obj,src,opts):
# Enable Windows 7 interfaces if we need Touchinput. # Enable Windows 7 interfaces if we need Touchinput.
if PkgSkip("TOUCHINPUT") == 0: if PkgSkip("TOUCHINPUT") == 0:
cmd += "/DWINVER=0x601 " cmd += "/DWINVER=0x601 "
else:
cmd += "/DWINVER=0x501 "
cmd += "/Fo" + obj + " /c" cmd += "/Fo" + obj + " /c"
for x in ipath: cmd += " /I" + x for x in ipath: cmd += " /I" + x
for (opt,dir) in INCDIRECTORIES: for (opt,dir) in INCDIRECTORIES:
@ -1360,6 +1381,8 @@ def CompileLib(lib, obj, opts):
if not BOOUSEINTELCOMPILER: if not BOOUSEINTELCOMPILER:
#Use MSVC Linker #Use MSVC Linker
cmd = 'link /lib /nologo' cmd = 'link /lib /nologo'
if GetOptimizeOption(opts) == 4:
cmd += " /LTCG"
if HasTargetArch(): if HasTargetArch():
cmd += " /MACHINE:" + GetTargetArch().upper() cmd += " /MACHINE:" + GetTargetArch().upper()
cmd += ' /OUT:' + BracketNameWithQuotes(lib) cmd += ' /OUT:' + BracketNameWithQuotes(lib)
@ -3556,10 +3579,9 @@ if (not RUNTIME):
DefSymbol("TINYXML", "TIXML_USE_STL", "") DefSymbol("TINYXML", "TIXML_USE_STL", "")
if (RUNTIME or RTDIST): OPTS=['DIR:panda/src/dxml', 'TINYXML']
OPTS=['DIR:panda/src/dxml', 'TINYXML'] TargetAdd('tinyxml_composite1.obj', opts=OPTS, input='tinyxml_composite1.cxx')
TargetAdd('tinyxml_composite1.obj', opts=OPTS, input='tinyxml_composite1.cxx') TargetAdd('libp3tinyxml.ilb', input='tinyxml_composite1.obj')
TargetAdd('libp3tinyxml.ilb', input='tinyxml_composite1.obj')
if (not RUNTIME): if (not RUNTIME):
OPTS=['DIR:panda/src/dxml', 'BUILDING:PANDA', 'TINYXML'] OPTS=['DIR:panda/src/dxml', 'BUILDING:PANDA', 'TINYXML']
@ -3741,6 +3763,7 @@ if (not RUNTIME):
TargetAdd('core.pyd', input='p3display_pythonGraphicsWindowProc.obj') TargetAdd('core.pyd', input='p3display_pythonGraphicsWindowProc.obj')
TargetAdd('core.pyd', input='core_module.obj') TargetAdd('core.pyd', input='core_module.obj')
TargetAdd('core.pyd', input='libp3tinyxml.ilb')
TargetAdd('core.pyd', input=COMMON_PANDA_LIBS) TargetAdd('core.pyd', input=COMMON_PANDA_LIBS)
TargetAdd('core.pyd', opts=OPTS) TargetAdd('core.pyd', opts=OPTS)

View File

@ -2203,8 +2203,9 @@ def LibName(opt, name):
if not os.path.exists(name): if not os.path.exists(name):
WARNINGS.append(name + " not found. Skipping Package " + opt) WARNINGS.append(name + " not found. Skipping Package " + opt)
if (opt in PkgListGet()): if (opt in PkgListGet()):
print("%sWARNING:%s Could not locate thirdparty package %s, excluding from build" % (GetColor("red"), GetColor(), opt.lower())) if not PkgSkip(opt):
PkgDisable(opt) print("%sWARNING:%s Could not locate thirdparty package %s, excluding from build" % (GetColor("red"), GetColor(), opt.lower()))
PkgDisable(opt)
return return
else: else:
print("%sERROR:%s Could not locate thirdparty package %s, aborting build" % (GetColor("red"), GetColor(), opt.lower())) print("%sERROR:%s Could not locate thirdparty package %s, aborting build" % (GetColor("red"), GetColor(), opt.lower()))

View File

@ -26,8 +26,6 @@ distribution.
#ifndef TINYXML_INCLUDED #ifndef TINYXML_INCLUDED
#define TINYXML_INCLUDED #define TINYXML_INCLUDED
#include "pandasymbols.h"
#ifdef _MSC_VER #ifdef _MSC_VER
#pragma warning( push ) #pragma warning( push )
#pragma warning( disable : 4530 ) #pragma warning( disable : 4530 )
@ -98,7 +96,7 @@ const int TIXML_PATCH_VERSION = 1;
/* Internal structure for tracking location of items /* Internal structure for tracking location of items
in the XML file. in the XML file.
*/ */
struct EXPCL_PANDA TiXmlCursor struct TiXmlCursor
{ {
TiXmlCursor() { Clear(); } TiXmlCursor() { Clear(); }
void Clear() { row = col = -1; } void Clear() { row = col = -1; }
@ -127,7 +125,7 @@ struct EXPCL_PANDA TiXmlCursor
@sa TiXmlNode::Accept() @sa TiXmlNode::Accept()
*/ */
class EXPCL_PANDA TiXmlVisitor class TiXmlVisitor
{ {
public: public:
virtual ~TiXmlVisitor() {} virtual ~TiXmlVisitor() {}
@ -193,7 +191,7 @@ const TiXmlEncoding TIXML_DEFAULT_ENCODING = TIXML_ENCODING_UNKNOWN;
A Decleration contains: Attributes (not on tree) A Decleration contains: Attributes (not on tree)
@endverbatim @endverbatim
*/ */
class EXPCL_PANDA TiXmlBase class TiXmlBase
{ {
friend class TiXmlNode; friend class TiXmlNode;
friend class TiXmlElement; friend class TiXmlElement;
@ -422,7 +420,7 @@ private:
in a document, or stand on its own. The type of a TiXmlNode in a document, or stand on its own. The type of a TiXmlNode
can be queried, and it can be cast to its more defined type. can be queried, and it can be cast to its more defined type.
*/ */
class EXPCL_PANDA TiXmlNode : public TiXmlBase class TiXmlNode : public TiXmlBase
{ {
friend class TiXmlDocument; friend class TiXmlDocument;
friend class TiXmlElement; friend class TiXmlElement;
@ -778,7 +776,7 @@ private:
part of the tinyXML document object model. There are other part of the tinyXML document object model. There are other
suggested ways to look at this problem. suggested ways to look at this problem.
*/ */
class EXPCL_PANDA TiXmlAttribute : public TiXmlBase class TiXmlAttribute : public TiXmlBase
{ {
friend class TiXmlAttributeSet; friend class TiXmlAttributeSet;
@ -902,7 +900,7 @@ private:
- I like circular lists - I like circular lists
- it demonstrates some independence from the (typical) doubly linked list. - it demonstrates some independence from the (typical) doubly linked list.
*/ */
class EXPCL_PANDA TiXmlAttributeSet class TiXmlAttributeSet
{ {
public: public:
TiXmlAttributeSet(); TiXmlAttributeSet();
@ -939,7 +937,7 @@ private:
and can contain other elements, text, comments, and unknowns. and can contain other elements, text, comments, and unknowns.
Elements also contain an arbitrary number of attributes. Elements also contain an arbitrary number of attributes.
*/ */
class EXPCL_PANDA TiXmlElement : public TiXmlNode class TiXmlElement : public TiXmlNode
{ {
public: public:
/// Construct an element. /// Construct an element.
@ -1154,7 +1152,7 @@ private:
/** An XML comment. /** An XML comment.
*/ */
class EXPCL_PANDA TiXmlComment : public TiXmlNode class TiXmlComment : public TiXmlNode
{ {
public: public:
/// Constructs an empty comment. /// Constructs an empty comment.
@ -1204,7 +1202,7 @@ private:
you generally want to leave it alone, but you can change the output mode with you generally want to leave it alone, but you can change the output mode with
SetCDATA() and query it with CDATA(). SetCDATA() and query it with CDATA().
*/ */
class EXPCL_PANDA TiXmlText : public TiXmlNode class TiXmlText : public TiXmlNode
{ {
friend class TiXmlElement; friend class TiXmlElement;
public: public:
@ -1277,7 +1275,7 @@ private:
handled as special cases, not generic attributes, simply handled as special cases, not generic attributes, simply
because there can only be at most 3 and they are always the same. because there can only be at most 3 and they are always the same.
*/ */
class EXPCL_PANDA TiXmlDeclaration : public TiXmlNode class TiXmlDeclaration : public TiXmlNode
{ {
public: public:
/// Construct an empty declaration. /// Construct an empty declaration.
@ -1346,7 +1344,7 @@ private:
DTD tags get thrown into TiXmlUnknowns. DTD tags get thrown into TiXmlUnknowns.
*/ */
class EXPCL_PANDA TiXmlUnknown : public TiXmlNode class TiXmlUnknown : public TiXmlNode
{ {
public: public:
TiXmlUnknown() : TiXmlNode( TiXmlNode::TINYXML_UNKNOWN ) {} TiXmlUnknown() : TiXmlNode( TiXmlNode::TINYXML_UNKNOWN ) {}
@ -1385,7 +1383,7 @@ private:
XML pieces. It can be saved, loaded, and printed to the screen. XML pieces. It can be saved, loaded, and printed to the screen.
The 'value' of a document node is the xml file name. The 'value' of a document node is the xml file name.
*/ */
class EXPCL_PANDA TiXmlDocument : public TiXmlNode class TiXmlDocument : public TiXmlNode
{ {
public: public:
/// Create an empty document, that has no name. /// Create an empty document, that has no name.
@ -1630,7 +1628,7 @@ private:
} }
@endverbatim @endverbatim
*/ */
class EXPCL_PANDA TiXmlHandle class TiXmlHandle
{ {
public: public:
/// Create a handle from any node (at any depth of the tree.) This can be a null pointer. /// Create a handle from any node (at any depth of the tree.) This can be a null pointer.
@ -1729,7 +1727,7 @@ private:
fprintf( stdout, "%s", printer.CStr() ); fprintf( stdout, "%s", printer.CStr() );
@endverbatim @endverbatim
*/ */
class EXPCL_PANDA TiXmlPrinter : public TiXmlVisitor class TiXmlPrinter : public TiXmlVisitor
{ {
public: public:
TiXmlPrinter() : depth( 0 ), simpleTextPrint( false ), TiXmlPrinter() : depth( 0 ), simpleTextPrint( false ),

View File

@ -22,9 +22,9 @@
// The below functions can encode and decode sRGB colors in various // The below functions can encode and decode sRGB colors in various
// representations. Some of them are implemented using look-up tables, // representations. Some of them are implemented using look-up tables,
// some others using SSE2 intrinsics. // some others using SSE2 intrinsics.
extern EXPCL_PANDA_PNMIMAGE const unsigned char to_srgb8_table[256]; extern EXPCL_PANDA_PNMIMAGE ALIGN_64BYTE const unsigned char to_srgb8_table[256];
extern EXPCL_PANDA_PNMIMAGE const unsigned char to_linear_uchar_table[256]; extern EXPCL_PANDA_PNMIMAGE ALIGN_64BYTE const unsigned char to_linear_uchar_table[256];
extern EXPCL_PANDA_PNMIMAGE const float to_linear_float_table[256]; extern EXPCL_PANDA_PNMIMAGE ALIGN_64BYTE const float to_linear_float_table[256];
EXPCL_PANDA_PNMIMAGE CONSTEXPR float decode_sRGB_float(unsigned char val); EXPCL_PANDA_PNMIMAGE CONSTEXPR float decode_sRGB_float(unsigned char val);
EXPCL_PANDA_PNMIMAGE INLINE float decode_sRGB_float(float val); EXPCL_PANDA_PNMIMAGE INLINE float decode_sRGB_float(float val);

View File

@ -21,6 +21,7 @@
#include "extension.h" #include "extension.h"
#include "pythonCallbackObject.h" #include "pythonCallbackObject.h"
#include "pointerTo.h"
#include "py_panda.h" #include "py_panda.h"
//////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////