From ed45cccc25bd693c1c0414cbdec0dac891eb6b1e Mon Sep 17 00:00:00 2001 From: Robert Osfield Date: Sat, 9 Feb 2002 10:24:39 +0000 Subject: [PATCH] Fixes for cygwin and mingw builds. --- Make/makedefs.cyg | 20 ++++++ Make/makedefs.irix.nonstd | 67 ------------------- Make/makedefs.mingw | 98 ++++++++++++++++++++++++++++ Make/makerules.cyg | 14 ++-- Make/makerules.mingw | 72 ++++++++++++++++++++ Makefile | 27 ++++---- include/osg/Math | 5 ++ include/osg/Timer | 24 +++++-- src/Demos/osgcluster/broadcaster.cpp | 2 + src/osg/GLExtensions.cpp | 4 +- src/osgDB/FileUtils.cpp | 2 +- src/osgPlugins/flt/flt.h | 2 +- 12 files changed, 246 insertions(+), 91 deletions(-) delete mode 100644 Make/makedefs.irix.nonstd create mode 100644 Make/makedefs.mingw create mode 100644 Make/makerules.mingw diff --git a/Make/makedefs.cyg b/Make/makedefs.cyg index b7e111bd8..6c23ef801 100755 --- a/Make/makedefs.cyg +++ b/Make/makedefs.cyg @@ -15,6 +15,9 @@ YFLAGS = -d CFLAGS = -O2 -DWIN32 -W -Wall $(LCINCS) #CFLAGS = -g -DWIN32 -W -Wall $(LCINCS) +# need thunking when using wxWindows +# CFLAGS += -fvtable-thunks + C++FLAGS = ${CFLAGS} CPPFLAGS = ${CFLAGS} @@ -24,6 +27,9 @@ DL_EXT = dll LDFLAGS = -O2 -W -Wall #LDFLAGS = -g -W -Wall +# need thunking when using wxWindows +# LDFLAGS += -fvtable-thunks + LINKERARGS = DYNAMICLIBRARYLIB = @@ -73,3 +79,17 @@ TARGET_BIN_FILES = "" TARGET_INCLUDE_FILES = "" TARGET_DATA_FILES = "" TARGET_LOADER_FILES = "" + +WXDIR = /src/wxMSW + +WX_CFLAGS = -DWXUSINGDLL -D_X86_=1 -DWIN32 -D_WIN32 -DWINVER=0x0400 -D__WIN95__ -D__GNUWIN32__ -D__WIN32__ -I$(WXDIR)/include -I$(WXDIR)/contrib/include -I$(WXDIR)/src/png -I$(WXDIR)/src/jpeg -I$(WXDIR)/src/zlib -I$(WXDIR)/src/tiff -I$(WXDIR)/include/wx/msw/gnuwin32 -DSTRICT -D__WXMSW__ -D__WINDOWS__ -D__WXDEBUG__ -Wall -mwin32 -fno-pcc-struct-return -O2 -fno-exceptions -DWIN32_LEAN_AND_MEAN +# -fno-rtti + +WX_CPPFLAGS = -DWXUSINGDLL -D_X86_=1 -DWIN32 -D_WIN32 -DWINVER=0x0400 -D__WIN95__ -D__GNUWIN32__ -D__WIN32__ -I$(WXDIR)/include -I$(WXDIR)/contrib/include -I$(WXDIR)/src/png -I$(WXDIR)/src/jpeg -I$(WXDIR)/src/zlib -I$(WXDIR)/src/tiff -I$(WXDIR)/include/wx/msw/gnuwin32 -DSTRICT -D__WXMSW__ -D__WINDOWS__ -D__WXDEBUG__ -Wall -mwin32 -fno-pcc-struct-return -O2 -fno-exceptions -DWXMAKINGDLL=1 -D_DLL=1 -D_WINDLL=1 +# -fno-rtti + +WX_LDFLAGS = -L$(WXDIR)/lib -L$(WXDIR)/contrib/lib + +WX_LD_LIBS = + +WX_LIBS = $(WXDIR)/lib/libwx23_1.a -lpng -ljpeg -ltiff -lz -lwinspool -lwinmm -lshell32 -lcomctl32 -lctl3d32 -lodbc32 -ladvapi32 -lodbc32 -lwsock32 -lopengl32 -lglu32 -lole32 -loleaut32 -luuid diff --git a/Make/makedefs.irix.nonstd b/Make/makedefs.irix.nonstd deleted file mode 100644 index b37524c98..000000000 --- a/Make/makedefs.irix.nonstd +++ /dev/null @@ -1,67 +0,0 @@ -MAKEDIR = $(OSGHOME)/Make -INSTRULES = $(MAKEDIR)/instrules -MAKEDEPEND = Makedepend -OBJS = $(C++FILES:.cpp=.o) $(CFILES:.c=.o) $(YACCFILES:.y=.o) $(LEXFILES:.l=.o) - -DEPFILES = $(OBJS:.o=.d) - - -C++ = CC -YFLAGS = -d -#CFLAGS = -O2 -n32 -MDupdate $(MAKEDEPEND) -OPT:Olimit=0 -DEBUG:woff=1682 -DEBUG:woff=3303 -CFLAGS = -O2 -n32 --OPT:Olimit=0 -DEBUG:woff=1682 -DEBUG:woff=3303 -C++FLAGS = ${CFLAGS} -CPPFLAGS = ${CFLAGS} - -SO_EXT = so -DL_EXT = so - -LDFLAGS = -O2 -n32 -OPT:Olimit=0 - -.SUFFIXES: .cpp .o -.cpp.o: - $(C++) $(C++FLAGS) -c $< - -LINKERARGS = -DYNAMICLIBRARYLIB = -PFLOADERPATH = /usr/lib32/libpfdb -GLUTLIB = -lglut - -# -# TARGET_DIRS are directories that would not exist on the system except -# for the presence of OpenSceneGraph. 'make instclean' removes these -# directories -# -TARGET_DIRS = \ - /usr/include/osg \ - /usr/include/osgDB \ - /usr/include/osgGLUT \ - /usr/include/osgUtil \ - /usr/include/osgText \ - /usr/share/OpenSceneGraph\ - /usr/share/OpenSceneGraph/data\ - /usr/share/OpenSceneGraph/data/Images\ - /usr/share/OpenSceneGraph/data/Test\ - /usr/lib32/osgPlugins\ - -TARGET_BIN = /usr/bin -TARGET_LIB = /usr/lib32 -TARGET_INCLUDE = /usr/include -TARGET_DATA = /usr/share/OpenSceneGraph/data -TARGET_LOADER_LIB = /usr/lib/osgPlugins - -# -# This definitions are necessary for IRIX. The following statement -# does not work for smake using a sh: -# -# for variable in $(LIST); do ...; done -# -# .. if $(LIST) is a NULL variable. So we have to define 0 length -# strings and check for them inside the for loop -# - -TARGET_LIB_FILES = "" -TARGET_BIN_FILES = "" -TARGET_INCLUDE_FILES = "" -TARGET_DATA_FILES = "" -TARGET_LOADER_FILES = "" diff --git a/Make/makedefs.mingw b/Make/makedefs.mingw new file mode 100644 index 000000000..7593898d2 --- /dev/null +++ b/Make/makedefs.mingw @@ -0,0 +1,98 @@ +MAKEDIR = $(OSGHOME)/Make +INSTRULES = $(MAKEDIR)/instrules +MAKEDEPEND = Makedepend + +MINGW_HOME = d:/usr/mingw + +OBJS = $(C++FILES:.cpp=.o) $(CFILES:.c=.o) $(YACCFILES:.y=.o) $(LEXFILES:.l=.o) + +DEPFILES = $(OBJS:.o=.d) + +C++ = c++ + +# need thunking when using wxWindows +# C++ += -fvtable-thunks + +YFLAGS = -d + +#LCINCS += -I/usr/X11R6/include +#LC++INCS += ${LCINCS} + +OPT_FLAGS = -O +DBG_FLAGS = -g +WARN_FLAGS = -Wall -W + +LDFLAGS = $(OPT_FLAGS) $(DBG_FLAGS) $(WARN_FLAGS) + +CFLAGS = -DWIN32 $(LDFLAGS) $(LCINCS) + +C++FLAGS = ${CFLAGS} +CPPFLAGS = ${CFLAGS} + +SO_EXT = dll +DL_EXT = dll + +LINKERARGS = + +DYNAMICLIBRARYLIB = + +PFLOADERPATH = /usr/lib/libpfdb + +GLUTLIB = -lglut32 +GL_LIBS = -lglu32 -lopengl32 +X_LIBS = -lgdi32 -luser32 +OSGDB_LIBS = -losgdb_3ds -losgdb_bmp -losgdb_dw -losgdb_flt -losgdb_jpg -losgdb_lwo -losgdb_obj -losgdb_osg -losgdb_osgtgz -losgdb_pic -losgdb_png -losgdb_rgb -losgdb_tga -losgdb_tgz -losgdb_tiff -losgdb_zip + +# +# TARGET_DIRS are directories that would not exist on the system except +# for the presence of OpenSceneGraph. 'make instclean' removes these +# directories +# +TARGET_DIRS = \ + $(MINGW_HOME)/include/osg \ + $(MINGW_HOME)/include/osgDB \ + $(MINGW_HOME)/include/osgGLUT \ + $(MINGW_HOME)/include/osgUtil \ + $(MINGW_HOME)/include/osgText \ + $(MINGW_HOME)/share/OpenSceneGraph\ + $(MINGW_HOME)/share/OpenSceneGraph/data\ + $(MINGW_HOME)/share/OpenSceneGraph/data/Images\ + $(MINGW_HOME)/share/OpenSceneGraph/data/Test\ + $(MINGW_HOME)/lib/osgPlugins\ + + +TARGET_BIN = $(MINGW_HOME)/bin +TARGET_LIB = $(MINGW_HOME)/lib +TARGET_INCLUDE = $(MINGW_HOME)/include +TARGET_DATA = $(MINGW_HOME)/share/OpenSceneGraph/data + +# +# This definitions are necessary for IRIX. The following statement +# does not work for smake using a sh: +# +# for variable in $(LIST); do ...; done +# +# .. if $(LIST) is a NULL variable. So we have to define 0 length +# strings and check for them inside the for loop +# + +TARGET_LIB_FILES = "" +TARGET_BIN_FILES = "" +TARGET_INCLUDE_FILES = "" +TARGET_DATA_FILES = "" +TARGET_LOADER_FILES = "" + +# set to your wxWindows TOP directory +WXDIR = d:/src/wxMSW + +WX_CFLAGS = -DWXUSINGDLL -D_X86_=1 -DWIN32 -D_WIN32 -DWINVER=0x0400 -D__WIN95__ -D__GNUWIN32__ -D__WIN32__ -I$(WXDIR)/include -I$(WXDIR)/contrib/include -I$(WXDIR)/src/png -I$(WXDIR)/src/jpeg -I$(WXDIR)/src/zlib -I$(WXDIR)/src/tiff -I$(WXDIR)/include/wx/msw/gnuwin32 -DSTRICT -D__WXMSW__ -D__WINDOWS__ -D__WXDEBUG__ -Wall -mwin32 -fno-pcc-struct-return -O2 -fno-exceptions -DWIN32_LEAN_AND_MEAN +# -fno-rtti + +WX_CPPFLAGS = -DWXUSINGDLL -D_X86_=1 -DWIN32 -D_WIN32 -DWINVER=0x0400 -D__WIN95__ -D__GNUWIN32__ -D__WIN32__ -I$(WXDIR)/include -I$(WXDIR)/contrib/include -I$(WXDIR)/src/png -I$(WXDIR)/src/jpeg -I$(WXDIR)/src/zlib -I$(WXDIR)/src/tiff -I$(WXDIR)/include/wx/msw/gnuwin32 -DSTRICT -D__WXMSW__ -D__WINDOWS__ -D__WXDEBUG__ -Wall -mwin32 -fno-pcc-struct-return -O2 -fno-exceptions -DWXMAKINGDLL=1 -D_DLL=1 -D_WINDLL=1 +# -fno-rtti + +WX_LDFLAGS = -L$(WXDIR)/lib -L$(WXDIR)/contrib/lib + +WX_LD_LIBS = + +WX_LIBS = $(WXDIR)/lib/libwx23_1.a -lpng -ljpeg -ltiff -lz -lwinspool -lwinmm -lshell32 -lcomctl32 -lctl3d32 -lodbc32 -ladvapi32 -lodbc32 -lwsock32 -lopengl32 -lglu32 -lole32 -loleaut32 -luuid diff --git a/Make/makerules.cyg b/Make/makerules.cyg index 5fdfe05db..e63f3712d 100755 --- a/Make/makerules.cyg +++ b/Make/makerules.cyg @@ -5,12 +5,18 @@ $(TARGET) : $(OBJS) $(C++) $(LDFLAGS) $(OBJS) $(LIBS) -o $@ $(LOADABLE) : $(OBJS) - $(C++) $(LDFLAGS) -shared -Wl,--export-all-symbols $(OBJS) $(LIBS) \ - -Wl,--output-def,lib$(TARGET_BASENAME).def -Wl,--out-implib,$(OSGHOME)/lib/lib$(TARGET_BASENAME).a -o $@ + $(C++) $(LDFLAGS) -shared \ + -Wl,--export-all-symbols \ + -Wl,--output-def,lib$(TARGET_BASENAME).def \ + -Wl,--out-implib,$(OSGHOME)/lib/lib$(TARGET_BASENAME).a \ + -o $@ $(OBJS) $(LIBS) $(LIB) : $(OBJS) - $(C++) $(LDFLAGS) -shared -Wl,--export-all-symbols $(OBJS) $(LIBS) \ - -Wl,--output-def,lib$(TARGET_BASENAME).def -Wl,--out-implib,$(OSGHOME)/lib/lib$(TARGET_BASENAME).a -o $@ + $(C++) $(LDFLAGS) -shared \ + -Wl,--export-all-symbols \ + -Wl,--output-def,lib$(TARGET_BASENAME).def \ + -Wl,--out-implib,$(OSGHOME)/lib/lib$(TARGET_BASENAME).a \ + -o $@ $(OBJS) $(LIBS) clean : rm -f $(OBJS) core $(TARGET) $(MAKEDEPEND) diff --git a/Make/makerules.mingw b/Make/makerules.mingw new file mode 100644 index 000000000..e63f3712d --- /dev/null +++ b/Make/makerules.mingw @@ -0,0 +1,72 @@ + +all : $(MAKEDEPEND) $(TARGET) $(LOADABLE) $(LIB) + +$(TARGET) : $(OBJS) + $(C++) $(LDFLAGS) $(OBJS) $(LIBS) -o $@ + +$(LOADABLE) : $(OBJS) + $(C++) $(LDFLAGS) -shared \ + -Wl,--export-all-symbols \ + -Wl,--output-def,lib$(TARGET_BASENAME).def \ + -Wl,--out-implib,$(OSGHOME)/lib/lib$(TARGET_BASENAME).a \ + -o $@ $(OBJS) $(LIBS) + +$(LIB) : $(OBJS) + $(C++) $(LDFLAGS) -shared \ + -Wl,--export-all-symbols \ + -Wl,--output-def,lib$(TARGET_BASENAME).def \ + -Wl,--out-implib,$(OSGHOME)/lib/lib$(TARGET_BASENAME).a \ + -o $@ $(OBJS) $(LIBS) + +clean : + rm -f $(OBJS) core $(TARGET) $(MAKEDEPEND) + touch $(MAKEDEPEND) + +clobber : clean + rm -f $(TARGET) a.out $(LIB) + +to_unix : + for f in *.cpp ; do to_unix $$f $$f; done + for f in *.h ; do to_unix $$f $$f; done + +beautify : + for f in *.cpp ; do mv $$f $$f.bak; bcpp $$f.bak $$f; rm $$f.bak; done + for f in *.h ; do mv $$f $$f.bak; bcpp $$f.bak $$f; rm $$f.bak; done + + +# force it +depend : + $(C++) $(C++FLAGS) -M $(C++FILES) $(CFILES) > $(MAKEDEPEND) + +$(MAKEDEPEND) : $(C++FILES) $(CFILES) + $(C++) $(C++FLAGS) -M $(C++FILES) $(CFILES) > $(MAKEDEPEND) + +%.o : %.cpp + $(C++) $(C++FLAGS) -c $*.cpp -o $*.o + +%.o : %.c + $(CC) $(C++FLAGS) -c $*.c -o $*.o + +docs: + [ "$(TARGET_BASENAME)" != "" ] && \ + mkdir -p ../../doc/doc++/$(TARGET_BASENAME) && \ + doc++ -d ../../doc/doc++/$(TARGET_BASENAME) -H -A ../../include/$(TARGET_BASENAME)/* && \ + echo $(TARGET_BASENAME) HTML documentation created in ../../doc/doc++/$(TARGET_BASENAME) + +install : home + @ make __install + +instlinks : home + @ make __instlinks + +instclean : home + @ make __instclean + + +home : + @ [ -n "$(OSGHOME)" ] || (echo ; echo "-------------> Please define OSGHOME"; echo) + @ [ -n "$(OSGHOME)" ] && echo > /dev/null; + +sinclude $(INSTRULES) + +include $(MAKEDEPEND) diff --git a/Makefile b/Makefile index 4952f2b18..7bec8de42 100644 --- a/Makefile +++ b/Makefile @@ -6,11 +6,7 @@ DIRS = src VERSION = osg-0.8.44 -ifeq (IRIX|IRIX64,true) - export OSGHOME = `pwd` -else - export OSGHOME := $(shell pwd) -endif +export OSGHOME = $(shell pwd) all : $(MAKE_PREP) for f in $(DIRS) ; do cd $$f; $(MAKE) || exit 1; cd ..; done @@ -53,6 +49,12 @@ cygwin: ln -sf makerules.cyg makerules $(MAKE) +mingw: + cd Make;\ + ln -sf makedefs.mingw makedefs;\ + ln -sf makerules.mingw makerules + $(MAKE) + freebsd: cd Make;\ ln -sf makedefs.freebsd makedefs;\ @@ -72,12 +74,6 @@ irix64: ln -sf makerules.irix makerules $(MAKE) -irix.old: - cd Make;\ - ln -sf makedefs.irix.nonstd makedefs ;\ - ln -sf makerules.irix makerules - $(MAKE) - macosx: cd Make;\ ln -sf makedefs.macosx makedefs;\ @@ -90,17 +86,24 @@ help : @echo \ $(MAKE) @echo \ $(MAKE) linux @echo \ $(MAKE) cygwin + @echo \ $(MAKE) mingw + @echo \ $(MAKE) freebsd + @echo \ $(MAKE) macosx @echo \ $(MAKE) irix - @echo \ $(MAKE) irix.old + @echo \ $(MAKE) irix64 + @echo @echo \ $(MAKE) depend @echo \ $(MAKE) clean @echo \ $(MAKE) clobber + @echo @echo \ $(MAKE) doc @echo \ $(MAKE) release @echo \ $(MAKE) dev + @echo @echo \ $(MAKE) install @echo \ $(MAKE) instlinks @echo \ $(MAKE) instclean + @echo clean : $(MAKE_PREP) diff --git a/include/osg/Math b/include/osg/Math index 6d0a1de69..5b944f36e 100644 --- a/include/osg/Math +++ b/include/osg/Math @@ -56,6 +56,11 @@ namespace osg { // define the stand trig values +#ifdef PI +#undef PI +#undef PI_2 +#undef PI_4 +#endif const double PI = 3.14159265358979323846; const double PI_2 = 1.57079632679489661923; const double PI_4 = 0.78539816339744830962; diff --git a/include/osg/Timer b/include/osg/Timer index 16be9d32c..57088b76a 100644 --- a/include/osg/Timer +++ b/include/osg/Timer @@ -10,9 +10,9 @@ namespace osg { -#if defined(WIN32 ) && !defined(__CYGWIN__) +#if defined(WIN32 ) && !(defined(__CYGWIN__) || defined(__MINGW32__)) typedef __int64 Timer_t; -#elif defined(__linux) || defined(__FreeBSD__) || defined(__CYGWIN__) +#elif defined(__linux) || defined(__FreeBSD__) || defined(__CYGWIN__)|| defined(__MINGW32__) typedef unsigned long long Timer_t; #elif defined(__sgi) typedef unsigned long long Timer_t; @@ -91,8 +91,24 @@ namespace osg{ } #pragma optimize("",on) - -#elif defined(__linux) || defined(__FreeBSD__) || defined(__CYGWIN__) || defined(__MINGW32__) +#elif defined(__MINGW32__) +#include + +#define CLK(x) __asm__ volatile (".byte 0x0f, 0x31" : "=A" (x)) +namespace osg{ + + inline Timer_t Timer::tick() const + { + if (_useStandardClock) + return clock(); + else + { + Timer_t x;CLK(x);return x; + } + } + +} +#elif defined(__linux) || defined(__FreeBSD__) || defined(__CYGWIN__) #include diff --git a/src/Demos/osgcluster/broadcaster.cpp b/src/Demos/osgcluster/broadcaster.cpp index 4015ddcb4..655fefa55 100644 --- a/src/Demos/osgcluster/broadcaster.cpp +++ b/src/Demos/osgcluster/broadcaster.cpp @@ -19,6 +19,8 @@ # include #elif defined(__sgi) # include +#elif defined(__CYGWIN__) +// nothing needed #else # error Teach me how to build on this system #endif diff --git a/src/osg/GLExtensions.cpp b/src/osg/GLExtensions.cpp index a0364c079..8c45facbe 100644 --- a/src/osg/GLExtensions.cpp +++ b/src/osg/GLExtensions.cpp @@ -1,4 +1,4 @@ -#if defined(_WIN32) || defined(__CYGWIN__) +#if defined(WIN32) #include #elif !defined macintosh #include @@ -60,7 +60,7 @@ const bool osg::isGLExtensionSupported(const char *extension) void* osg::getGLExtensionFuncPtr(const char *funcName) { -#if defined(_WIN32) || defined(__CYGWIN__) +#if defined(WIN32) return wglGetProcAddress(funcName); #elif defined(macintosh) return NULL; diff --git a/src/osgDB/FileUtils.cpp b/src/osgDB/FileUtils.cpp index 256fe8d94..6a0ebf0d0 100644 --- a/src/osgDB/FileUtils.cpp +++ b/src/osgDB/FileUtils.cpp @@ -347,7 +347,7 @@ std::string osgDB::findFileInDirectory(const std::string& fileName,const std::st } -#if defined(WIN32) &&!defined(__CYGWIN__) +#if defined(WIN32) && !defined(__CYGWIN__) #include #include diff --git a/src/osgPlugins/flt/flt.h b/src/osgPlugins/flt/flt.h index 9856e10df..4650d64bd 100644 --- a/src/osgPlugins/flt/flt.h +++ b/src/osgPlugins/flt/flt.h @@ -6,7 +6,7 @@ #include -#ifdef __CYGWIN__ +#if defined(__CYGWIN__) || defined(__MINGW32__) #include #endif