From c3ba3083851f04bdae980374f9142ce6e5c71f27 Mon Sep 17 00:00:00 2001 From: gaburici Date: Mon, 17 Jun 2002 17:04:03 +0000 Subject: [PATCH] Compilation fixes for gcc 3.1, MSVC 6.0 & 7.0 --- common/h/Dictionary.h | 7 ++++-- common/h/List.h | 41 ++++++++++++++++++++++++---------- common/h/Vector.h | 7 ++++-- common/h/list.h | 41 ++++++++++++++++++++++++---------- common/src/String.C | 5 +++-- dyninstAPI/h/BPatch_Set.h | 21 +++++++++++++---- dyninstAPI/h/BPatch_Vector.h | 9 +++++--- dyninstAPI/h/BPatch_dll.h | 3 +++ dyninstAPI/i386-unknown-nt4.0/DEPENDS | 6 ++++- dyninstAPI/i386-unknown-nt4.0/Makefile | 5 +++-- dyninstAPI/src/arch-ia32.C | 11 +++++++-- dyninstAPI/src/arch-ia32.h | 19 +++++++++++++--- dyninstAPI/src/arch-x86.C | 6 ++++- dyninstAPI/src/pdwinnt.C | 10 ++++----- make.config | 8 ++++--- nmake.config | 18 +++++++-------- 16 files changed, 154 insertions(+), 63 deletions(-) diff --git a/common/h/Dictionary.h b/common/h/Dictionary.h index 0ad6b74..915e214 100644 --- a/common/h/Dictionary.h +++ b/common/h/Dictionary.h @@ -80,6 +80,9 @@ * ************************************************************************/ +//ifdef this to nothing if it bothers old broken compilers +#define TYPENAME typename + template class dictionary_hash_iter; template @@ -257,8 +260,8 @@ class dictionary_hash_iter { private: typedef const V &RET; // RET: type returned by operator*() const dictionary_hash &dict; - vector< dictionary_hash::entry >::const_iterator i; - vector< dictionary_hash::entry >::const_iterator the_end; + TYPENAME vector< TYPENAME dictionary_hash::entry >::const_iterator i; + TYPENAME vector< TYPENAME dictionary_hash::entry >::const_iterator the_end; // too bad we need to store the_end (for make_valid_or_end()) void move_to_next() { diff --git a/common/h/List.h b/common/h/List.h index aa4a7dd..e092c0e 100644 --- a/common/h/List.h +++ b/common/h/List.h @@ -257,22 +257,25 @@ template DO_INLINE_F Type List::find(void *data) return((Type) 0); } +template ostream &operator<<(ostream &os, HTable &data); + template class HTable { public: // placing function def here makes gcc happy - friend ostream &operator<<(ostream &os, - HTable &data) { - int i, total; - - total = 0; - for (i=0; i < data.tableSize; i++) { - if (data.table[i]) { - os << *data.table[i]; - } - } - return os; - } + // VG(06/15/02): that nonstandard hack doesn't work with gcc 3.1... + // let's do this properly: + // (1) the function needs to be already declared (above) + // (2) add <> after name here, so only that instantiation is friended + // (3) the function is defined after this class + // Of course, old broken compilers don't like the standard, so we just + // write something that compiles (as was the case before). +#if defined(i386_unknown_nt4_0) && _MSC_VER < 1300 + friend ostream& operator<< (ostream &os, HTable &data); +#else + friend ostream& operator<< <> (ostream &os, HTable &data); +#endif + HTable(Type data) { (void) HTable(); add(data, (void *) data); } DO_INLINE_F void add(Type data, void *key); DO_INLINE_F HTable(); @@ -345,6 +348,20 @@ template class HTable { }; +template ostream &operator<<(ostream &os, + HTable &data) { + int i, total; + + total = 0; + for (i=0; i < data.tableSize; i++) { + if (data.table[i]) { + os << *data.table[i]; + } + } + return os; +} + + template DO_INLINE_F HTable HTable::operator =(HTable arg) { table = arg.table; tableSize = arg.tableSize; diff --git a/common/h/Vector.h b/common/h/Vector.h index 4f9bcf7..ba77a4b 100644 --- a/common/h/Vector.h +++ b/common/h/Vector.h @@ -46,6 +46,9 @@ #pragma interface #endif +//ifdef this to nothing if it bothers old broken compilers +#define TYPENAME typename + #if defined(i386_unknown_nt4_0) //turn off 255 char identifier truncation message #pragma warning (disable: 4786) @@ -563,7 +566,7 @@ void vector::reserve_roundup(unsigned nelems) { template DO_INLINE_F -vector::iterator +TYPENAME vector::iterator vector::append_with_inplace_construction() { reserve_roundup(sz_ + 1); // used to be reserve_exact(), but with huge performance penalty! @@ -576,7 +579,7 @@ vector::append_with_inplace_construction() { template DO_INLINE_F -vector::iterator +TYPENAME vector::iterator vector::reserve_for_inplace_construction(unsigned nelems) { // NOTE: while I hunt down a certain mem leak, I'm declaring that this // routine must only be called on a default-constructor vector or one that diff --git a/common/h/list.h b/common/h/list.h index aa4a7dd..e092c0e 100644 --- a/common/h/list.h +++ b/common/h/list.h @@ -257,22 +257,25 @@ template DO_INLINE_F Type List::find(void *data) return((Type) 0); } +template ostream &operator<<(ostream &os, HTable &data); + template class HTable { public: // placing function def here makes gcc happy - friend ostream &operator<<(ostream &os, - HTable &data) { - int i, total; - - total = 0; - for (i=0; i < data.tableSize; i++) { - if (data.table[i]) { - os << *data.table[i]; - } - } - return os; - } + // VG(06/15/02): that nonstandard hack doesn't work with gcc 3.1... + // let's do this properly: + // (1) the function needs to be already declared (above) + // (2) add <> after name here, so only that instantiation is friended + // (3) the function is defined after this class + // Of course, old broken compilers don't like the standard, so we just + // write something that compiles (as was the case before). +#if defined(i386_unknown_nt4_0) && _MSC_VER < 1300 + friend ostream& operator<< (ostream &os, HTable &data); +#else + friend ostream& operator<< <> (ostream &os, HTable &data); +#endif + HTable(Type data) { (void) HTable(); add(data, (void *) data); } DO_INLINE_F void add(Type data, void *key); DO_INLINE_F HTable(); @@ -345,6 +348,20 @@ template class HTable { }; +template ostream &operator<<(ostream &os, + HTable &data) { + int i, total; + + total = 0; + for (i=0; i < data.tableSize; i++) { + if (data.table[i]) { + os << *data.table[i]; + } + } + return os; +} + + template DO_INLINE_F HTable HTable::operator =(HTable arg) { table = arg.table; tableSize = arg.tableSize; diff --git a/common/src/String.C b/common/src/String.C index 0c23542..ce0ff14 100644 --- a/common/src/String.C +++ b/common/src/String.C @@ -39,7 +39,7 @@ * incur to third parties resulting from your use of Paradyn. */ -// $Id: String.C,v 1.18 2002/05/13 19:51:29 mjbrim Exp $ +// $Id: String.C,v 1.19 2002/06/17 17:04:03 gaburici Exp $ #include #include "common/h/headers.h" @@ -528,7 +528,8 @@ string operator+(const char *ptr, const string &str) { void string::initialize_static_stuff() { // should only get called once: - assert(nilptr == NULL); + // VG(06/15/02): this assertion doesn't hold w/VC.NET because nilptr is never initialized! + //assert(nilptr == NULL); nilptr = new string((char*)NULL); // the typecast is essential, lest NULL be interpreted diff --git a/dyninstAPI/h/BPatch_Set.h b/dyninstAPI/h/BPatch_Set.h index 2dd95ad..48bd343 100644 --- a/dyninstAPI/h/BPatch_Set.h +++ b/dyninstAPI/h/BPatch_Set.h @@ -1,6 +1,9 @@ #ifndef _BPatch_Set_h_ #define _BPatch_Set_h_ +//ifdef this to nothing if it bothers old broken compilers +#define TYPENAME typename + #if defined(external_templates) #pragma interface #endif @@ -25,6 +28,7 @@ * class for BPatch_Set operations. */ +// VG: shouldn't this be a dll export? template struct comparison { /** default comparison operator @@ -277,9 +281,13 @@ public: }; +// VG(06/15/02): VC.NET doesn't like definitions for dll imports +#ifndef BPATCH_DLL_IMPORT + template DO_INLINE_P -BPatch_Set::entry* BPatch_Set::replicateTree(entry* node,entry* parent, +TYPENAME BPatch_Set::entry* +BPatch_Set::replicateTree(entry* node,entry* parent, entry* oldNil,entry* newNil) { if(node == oldNil) @@ -484,7 +492,8 @@ void BPatch_Set::rightRotate(entry* pivot){ template DO_INLINE_P -BPatch_Set::entry* BPatch_Set::find(const T& element) const{ +TYPENAME BPatch_Set::entry* +BPatch_Set::find(const T& element) const{ entry* x = setData; while(x != nil){ int check = compareFunc(element,x->data); @@ -516,7 +525,8 @@ DO_INLINE_F bool BPatch_Set::contains(const T& element) const{ */ template DO_INLINE_P -BPatch_Set::entry* BPatch_Set::treeInsert(const T& element){ +TYPENAME BPatch_Set::entry* +BPatch_Set::treeInsert(const T& element){ entry* y = NULL; entry* x = setData; while(x != nil){ @@ -546,7 +556,8 @@ BPatch_Set::entry* BPatch_Set::treeInsert(const T& element /** finds the minimum value node when x is being deleted */ template DO_INLINE_P -BPatch_Set::entry* BPatch_Set::treeSuccessor(entry* x) const{ +TYPENAME BPatch_Set::entry* +BPatch_Set::treeSuccessor(entry* x) const{ if(!x || (x == nil)) return NULL; if(x->right != nil){ @@ -700,5 +711,7 @@ bool BPatch_Set::extract(T& element){ remove(element); return true; } + +#endif /* BPATCH_DLL_IMPORT */ #endif /* _BPatch_Set_h_ */ diff --git a/dyninstAPI/h/BPatch_Vector.h b/dyninstAPI/h/BPatch_Vector.h index 0746b1f..0a78e97 100644 --- a/dyninstAPI/h/BPatch_Vector.h +++ b/dyninstAPI/h/BPatch_Vector.h @@ -39,7 +39,7 @@ * incur to third parties resulting from your use of Paradyn. */ -// $Id: BPatch_Vector.h,v 1.11 2002/01/16 23:24:56 jaw Exp $ +// $Id: BPatch_Vector.h,v 1.12 2002/06/17 17:04:04 gaburici Exp $ #ifndef _BPatch_Vector_h_ #define _BPatch_Vector_h_ @@ -91,6 +91,9 @@ public: T& operator[](int n) const; }; +// VG(06/15/02): VC.NET doesn't like definitions for dll imports +#ifndef BPATCH_DLL_IMPORT + // Reserve space for at least n entries in the vector template void BPatch_Vector::reserve(int n) @@ -195,6 +198,6 @@ T& BPatch_Vector::operator[](int n) const return data[n]; } -#endif - +#endif /* BPATCH_DLL_IMPORT */ +#endif /* USE_STL_VECTOR */ #endif /* _BPatch_Vector_h_ */ diff --git a/dyninstAPI/h/BPatch_dll.h b/dyninstAPI/h/BPatch_dll.h index 889622e..f3c2557 100644 --- a/dyninstAPI/h/BPatch_dll.h +++ b/dyninstAPI/h/BPatch_dll.h @@ -62,6 +62,9 @@ // we are not building the dyninstAPI DLL #define BPATCH_DLL_EXPORT __declspec(dllimport) +#if _MSC_VER >= 1300 +#define BPATCH_DLL_IMPORT 1 +#endif #endif // BPATCH_DLL_BUILD #else diff --git a/dyninstAPI/i386-unknown-nt4.0/DEPENDS b/dyninstAPI/i386-unknown-nt4.0/DEPENDS index bb71aeb..3b48fdc 100644 --- a/dyninstAPI/i386-unknown-nt4.0/DEPENDS +++ b/dyninstAPI/i386-unknown-nt4.0/DEPENDS @@ -35,7 +35,11 @@ inst-x86.obj: ../src/inst-x86.C ../../common/h/headers.h \ ../../dyninstAPI/src/arch.h \ ../../dyninstAPI/src/LocalAlteration-x86.h arch-x86.obj: ../src/arch-x86.C ../../common/h/Types.h \ - ../../dyninstAPI/src/arch-x86.h + ../../dyninstAPI/src/arch-x86.h \ + ../../dyninstAPI/src/arch-ia32.h +arch-ia32.obj: ../src/arch-ia32.C ../../common/h/Types.h \ + ../../dyninstAPI/src/arch-x86.h \ + ../../dyninstAPI/src/arch-ia32.h func-reloc.obj: ../src/func-reloc.C ../../dyninstAPI/src/func-reloc.h \ ../../common/h/headers.h ../../common/h/Types.h \ ../../common/h/ntHeaders.h ../../dyninstAPI/src/process.h \ diff --git a/dyninstAPI/i386-unknown-nt4.0/Makefile b/dyninstAPI/i386-unknown-nt4.0/Makefile index 035f3d5..d32f318 100755 --- a/dyninstAPI/i386-unknown-nt4.0/Makefile +++ b/dyninstAPI/i386-unknown-nt4.0/Makefile @@ -1,5 +1,5 @@ # -# $Id: Makefile,v 1.18 2002/06/07 23:02:26 gaburici Exp $ +# $Id: Makefile,v 1.19 2002/06/17 17:04:04 gaburici Exp $ # # Define any symbols needed to invoke configuration changes in make.config @@ -38,7 +38,8 @@ OBJS = pdwinnt.obj \ LocalAlteration.obj \ LocalAlteration-x86.obj \ FunctionExpansionRecord.obj \ - InstrucIter-x86.obj + InstrucIter-x86.obj \ + arch-ia32.obj # MapSymbols.obj # ccw 13 july 2001 diff --git a/dyninstAPI/src/arch-ia32.C b/dyninstAPI/src/arch-ia32.C index f9cf151..54219b6 100644 --- a/dyninstAPI/src/arch-ia32.C +++ b/dyninstAPI/src/arch-ia32.C @@ -1,4 +1,4 @@ -// $Id: arch-ia32.C,v 1.4 2002/06/13 00:45:53 gaburici Exp $ +// $Id: arch-ia32.C,v 1.5 2002/06/17 17:04:04 gaburici Exp $ // Official documentation used: - IA-32 Intel Architecture Software Developer Manual // volume 2: Instruction Set Reference @@ -1703,9 +1703,12 @@ static ia32_entry ssegrpMap[][2] = { static unsigned int ia32_decode_modrm(const unsigned int addrSzAttr, const unsigned char* addr); - +#if defined(i386_unknown_nt4_0) && _MSC_VER < 1300 +ia32_instruction& ia32_decode(unsigned int capa, const unsigned char* addr, ia32_instruction& instruct) +#else template ia32_instruction& ia32_decode(const unsigned char* addr, ia32_instruction& instruct) +#endif { ia32_prefixes& pref = instruct.prf; unsigned int table, nxtab; @@ -1802,7 +1805,10 @@ ia32_instruction& ia32_decode(const unsigned char* addr, ia32_instruction& instr return instruct; } +#if !defined(i386_unknown_nt4_0) || _MSC_VER >= 1300 +// MS VS 6.0 compiler gives internal compiler error on this template ia32_instruction& ia32_decode<0>(const unsigned char* addr, ia32_instruction& instruct); +#endif ia32_instruction& ia32_decode_FP(const ia32_prefixes& pref, const unsigned char* addr, ia32_instruction& instruct) @@ -1865,6 +1871,7 @@ static unsigned int ia32_decode_modrm(const unsigned int addrSzAttr, const unsig assert(0); } } + return 0; // MS compiler from VS 6.0 wants this } diff --git a/dyninstAPI/src/arch-ia32.h b/dyninstAPI/src/arch-ia32.h index cc9443a..e3dd9bd 100644 --- a/dyninstAPI/src/arch-ia32.h +++ b/dyninstAPI/src/arch-ia32.h @@ -1,4 +1,4 @@ -// $Id: arch-ia32.h,v 1.3 2002/06/10 20:01:31 gaburici Exp $ +// $Id: arch-ia32.h,v 1.4 2002/06/17 17:04:04 gaburici Exp $ // VG(02/06/2002): configurable IA-32 decoder #if !(defined(i386_unknown_linux2_0) || defined(i386_unknown_nt4_0)) @@ -49,13 +49,18 @@ class ia32_prefixes ia32_prefixes& ia32_decode_prefixes(const unsigned char* addr, ia32_prefixes&); -class ia32_entry; +struct ia32_entry; class ia32_instruction { friend unsigned int ia32_decode_operands (const ia32_prefixes& pref, const ia32_entry& gotit, const char* addr, ia32_instruction& instruct); +#if defined(i386_unknown_nt4_0) && _MSC_VER < 1300 + friend ia32_instruction& ia32_decode(unsigned int capa, const unsigned char* addr, + ia32_instruction& instruct); +#else template friend ia32_instruction& ia32_decode(const unsigned char* addr, ia32_instruction& instruct); +#endif friend unsigned int ia32_decode_operands (const ia32_prefixes& pref, const ia32_entry& gotit, const unsigned char* addr, ia32_instruction& instruct); friend ia32_instruction& ia32_decode_FP(const ia32_prefixes& pref, const unsigned char* addr, @@ -88,12 +93,20 @@ class ia32_instruction { #define IA32_FULL_DECODER 0xffffffffffffffffu #define IA32_SIZE_DECODER 0 +// old broken MS compiler cannot do this properly, so we revert to args +#if defined(i386_unknown_nt4_0) && _MSC_VER < 1300 + +ia32_instruction& ia32_decode(unsigned int capabilities, const unsigned char* addr, ia32_instruction&); + +#else + template ia32_instruction& ia32_decode(const unsigned char* addr, ia32_instruction&); - // If typing the template every time is a pain, the following should help: #define ia32_decode_all ia32_decode #define ia32_decode_size ia32_decode #define ia32_size(a,i) ia32_decode_size((a),(i)).size #endif + +#endif diff --git a/dyninstAPI/src/arch-x86.C b/dyninstAPI/src/arch-x86.C index ef6c62b..d61cb99 100644 --- a/dyninstAPI/src/arch-x86.C +++ b/dyninstAPI/src/arch-x86.C @@ -39,7 +39,7 @@ * incur to third parties resulting from your use of Paradyn. */ -// $Id: arch-x86.C,v 1.16 2002/06/07 20:17:54 gaburici Exp $ +// $Id: arch-x86.C,v 1.17 2002/06/17 17:04:04 gaburici Exp $ // x86 instruction decoder #include @@ -1033,7 +1033,11 @@ unsigned get_instruction(const unsigned char* addr, unsigned &insnType) unsigned insnType1; ia32_instruction i; +#if defined(i386_unknown_nt4_0) && _MSC_VER < 1300 + ia32_decode(0, addr, i); +#else ia32_decode<0>(addr, i); +#endif r1 = i.getSize(); insnType1 = ia32_emulate_old_type(i); diff --git a/dyninstAPI/src/pdwinnt.C b/dyninstAPI/src/pdwinnt.C index f84607f..b6986e8 100644 --- a/dyninstAPI/src/pdwinnt.C +++ b/dyninstAPI/src/pdwinnt.C @@ -39,7 +39,7 @@ * incur to third parties resulting from your use of Paradyn. */ -// $Id: pdwinnt.C,v 1.52 2002/06/03 20:10:49 chadd Exp $ +// $Id: pdwinnt.C,v 1.53 2002/06/17 17:04:04 gaburici Exp $ #include #include "dyninstAPI/src/symtab.h" #include "common/h/headers.h" @@ -254,7 +254,7 @@ findFunctionFromAddress( process* proc, Address addr ) // for the VC++ compiler to turn this optimization off.) // -void process::walkStack(Frame /* currentFrame */, vector &stackWalk, bool paused) +bool process::walkStack(Frame /* currentFrame */, vector &stackWalk, bool paused) { bool needToCont = paused ? false : (status() == running); @@ -275,7 +275,7 @@ void process::walkStack(Frame /* currentFrame */, vector &stackWalk, bool #ifndef BPATCH_LIBRARY stopTimingStackwalk(); #endif - return; + return false; } // establish the current execution context @@ -291,7 +291,7 @@ void process::walkStack(Frame /* currentFrame */, vector &stackWalk, bool #ifndef BPATCH_LIBRARY stopTimingStackwalk(); #endif - return; + return false; } STACKFRAME sf; @@ -482,7 +482,7 @@ void process::walkStack(Frame /* currentFrame */, vector &stackWalk, bool stopTimingStackwalk(); #endif - return; + return true; } #endif diff --git a/make.config b/make.config index 050d373..ed47601 100644 --- a/make.config +++ b/make.config @@ -1,6 +1,6 @@ # Paradyn overall build configuration (unix) # -# $Id: make.config,v 1.112 2002/06/07 20:17:53 gaburici Exp $ +# $Id: make.config,v 1.113 2002/06/17 17:04:03 gaburici Exp $ # SUITE_NAME = Paradyn @@ -125,7 +125,7 @@ ASFLAGS = -P $(ARCH_DEF) # SILENCE_WARNINGS=true ifndef SILENCE_WARNINGS -BASICWARNINGS = -W -Wall +BASICWARNINGS = -W -Wall -Wno-deprecated COMMONWARNINGS = -W -Wall -Wshadow -Wpointer-arith \ -Wcast-qual \ @@ -138,7 +138,8 @@ USEFULWARNINGS = -W -Wall -Wpointer-arith \ -Wcast-qual \ -Wconversion \ -Wmissing-prototypes \ - -Woverloaded-virtual + -Woverloaded-virtual \ + -Wno-deprecated # being nice to poor old pathetic tcl/tk header files --ari TCLFRIENDLYWARNINGS = -W -Wall -Wpointer-arith \ @@ -157,6 +158,7 @@ USEFULWARNINGS += -Wcast-align endif endif # SILENCE_WARNINGS + ifndef GCC_2_95 GCC_VER := $(shell gcc --version) ifneq (,$(findstring 2.95,$(GCC_VER))) diff --git a/nmake.config b/nmake.config index 1ff5564..1bd5134 100644 --- a/nmake.config +++ b/nmake.config @@ -1,6 +1,6 @@ # Paradyn overall build configuration (Windows/NT) # -# $Id: nmake.config,v 1.37 2002/02/12 17:59:57 pcroth Exp $ +# $Id: nmake.config,v 1.38 2002/06/17 17:04:03 gaburici Exp $ # SUITE_NAME = Paradyn @@ -49,10 +49,10 @@ LINK = link RANLIB = RPCPKG = p:\paradyn\packages\winnt\oncrpc RPC_LIB = oncrpc.lib -#X11DIR = +#X11DIR = YACC = bison YFLAGS = -d -y -LDFLAGS = -nologo +LDFLAGS = -nologo PERL = perl # NB: perl v5 or higher required! @@ -73,7 +73,7 @@ CP = copy MV = move RM = del MKDIR = md -BUILDSTAMP = cmd /c $(TO_CORE)/../scripts/buildstamp.bat +BUILDSTAMP = cmd /c $(TO_CORE)\..\scripts\buildstamp.bat !endif # COLLECTOR is only used by purify & quantify @@ -96,7 +96,7 @@ IFLAGS = -I. -I$(TO_CORE) -I$(RPCPKG) #ASFLAGS = -P $(ARCH_DEF) #don't inline -- for the files that won't emit template code -INLINE_DEFINES = +INLINE_DEFINES = #inline the private members of the class -- templates.o can use this TEMP_INLINE_DEFINES = -DDO_INLINE_P="inline" @@ -104,7 +104,7 @@ TEMP_INLINE_DEFINES = -DDO_INLINE_P="inline" # inline everything -- the way things should be ALL_INLINE_DEFINES = -DDO_INLINE_F="inline" -DDO_INLINE_P="inline" -# NO_OPT_FLAG = 1 +NO_OPT_FLAG = 1 # if we don't want OPT_FLAG defined for a particular part of the code # (e.g. rtinst for aix), we just need to define NO_OPT_FLAG before doing # the include of make.config - naim @@ -112,14 +112,14 @@ ALL_INLINE_DEFINES = -DDO_INLINE_F="inline" -DDO_INLINE_P="inline" OPT_FLAG = -Ox !endif -DEFCFLAGS = -Z7 -W3 -GR -DNOMINMAX +DEFCFLAGS = -Z7 -W3 -GR -DNOMINMAX /wd4995 CFLAGS = $(DEFCFLAGS) $(OPT_FLAG) $(IFLAGS) \ $(ARCH_DEF) -D_WIN32_WINNT=0x0500 # ccw 20 june 2001 was 0x0400 CXXFLAGS = $(DEFCFLAGS) $(OPT_FLAG) $(IFLAGS) \ $(ARCH_DEF) -TP -DWIN32 -D_WIN32_WINNT=0x0500 # ccw 20 june 2001 was 0x0400 - + # flags for kludge files, won't have warnings generated KFLAGS = $(IFLAGS) $(ARCH_DEF) @@ -142,7 +142,7 @@ LIBDIR = -LIBPATH:$(TO_CORE)\$(LIBRARY_DEST) \ # Set IGEN to point to $(TO_CORE)/../bin/$(PLATFORM)/igen, if it exists, # else set it to $(BACKUP_CORE)/../bin/$(PLATFORM)/igen, if it exists, # else set it to just "igen" (i.e. assume it's in the user's path) -IGEN = $(TO_CORE)\igen\$(PLATFORM) +IGEN = $(TO_CORE)\igen\$(PLATFORM) !ifdef NO_IMPLICIT_TEMPLATES #CFLAGS += -fno-implicit-templates -- 1.8.3.1