diff --git a/Make/makedefs.new b/Make/makedefs.new new file mode 100644 index 000000000..bbe1b2037 --- /dev/null +++ b/Make/makedefs.new @@ -0,0 +1,79 @@ + +# TOPDIR needs to be redefined for every Makefile +TOPDIR ?= ../ +THISDIR = . +MAKEDEPEND = Makedepend +SHELL = /bin/sh +OSTYPE := $(shell uname) + +OS := $(shell uname) + +INC = -I$(TOPDIR)/include +DEF = + +#### SUN OS Specific definitions +ifeq ($(OS),SunOS) + C++ = CC + DEPFLAGS = -xM1 + INC += + DEF += -features=extensions + OPTF = -xO2 + DBGF = -g + SHARED = -G + ARCHARGS = + LINKERARGS = + DYNAMICLIBRARYLIB = -ldl + OSG_LIBS = -losgGLUT -losgDB -losgUtil -losg + GLUT_LIB = -lglut + GL_LIBS = -lGLU -lGL + X_LIBS = -lXext -lXmu -lXi -lX11 + SOCKET_LIBS = -lsocket -lnsl + OTHER_LIBS = -lCstd +endif + +#### IRIX Specific definitions +ifeq ($(OS),IRIX) + C++ = CC + CXXFLAGS = $(DOF) $(INC) -LANG:std -OPT:Olimit=0 -DEBUG:wof=1682 -DEBUG:woff=3303 + LDFLAGS = $(DOF) -L$(TOPDIR)/lib -LANG:std + DEPFLAGS = -MDupdate $(MAKEFILE) +endif + +#### Linux specific definitions +ifeq ($(OS),Linux) + C++ = g++ + CXXFLAGS = $(DOF) -W -Wall $(INC) + LDFLAGS = $(DOF) -W -Wall -L/usr/X11R6/lib -L$(TOPDIR)/lib + DEPFLAGS = -M +endif + + +OBJS = $(C++FILES:.cpp=.o) $(CXXFILES:.cpp=.o) $(CFILES:.c=.o) $(YACCFILES:.y=.o) $(LEXFILES:.l=.o) +DOF = $(OPTF) +CXXFLAGS = $(DOF) $(DEF) $(INC) + +INC += + +DEBUGDIR = $(OS).Debug +OPTDIR = $(OS).Opt +BININST = bin +LIBINST = lib +PLUGININST = lib/osgPlugins + +LIBS = +LDFLAGS = $(DOF) -L$(TOPDIR)/lib + +ALL_TARGETS = \ + opt\ + debug\ + clean\ + cleandbg\ + cleanopt\ + clobber\ + beautify\ + docs\ + depend\ + + +VPATH=.. + diff --git a/Make/makerules.new b/Make/makerules.new new file mode 100644 index 000000000..ecbe99dca --- /dev/null +++ b/Make/makerules.new @@ -0,0 +1,186 @@ + +default : opt + +opt : $(EXEC:=.opt)\ + $(LIB:=.opt)\ + $(PLUGIN:=.opt)\ + +debug : $(EXEC:=.dbg)\ + $(LIB:=.dbg)\ + $(PLUGIN:=.dbg)\ + +clean : cleanopt cleandbg + rm -f $(MAKEDEPEND) + +cleanopt : + @[ -d $(OPTDIR) ] && cd $(OPTDIR); rm -f $(OBJS) + +cleandbg : + @[ -d $(DEBUGDIR) ] && cd $(DEBUGDIR); rm -f $(OBJS) + +clobberopt : + rm -rf $(OPTDIR) + +clobberdbg : + rm -rf $(DEBUGDIR) + +clobber : clobberdbg clobberopt + rm -rf $(MAKEDEPEND) + + +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 + +docs: + [ "$(TARGET_BASENAME)" != "" ] && \ + mkdir -p $(TOPDIR)/doc/doc++/$(TARGET_BASENAME) && \ + doc++ -d $(TOPDIR)/doc/doc++/$(TARGET_BASENAME) -H -A $(TOPDIR)/include/$(TARGET_BASENAME)/* && \ + echo $(TARGET_BASENAME) HTML documentation created in $(TOPDIR)/doc/doc++/$(TARGET_BASENAME) + +$(EXEC) : $(OBJS) + $(C++) $(LDFLAGS) $(OBJS) $(LIBS) -o $@ + + +$(LIB) $(PLUGIN) : $(OBJS) + $(C++) $(LDFLAGS) $(SHARED) $(OBJS) $(LIBS) -o $@ + +$(EXEC:=.dbg) : + @[ -d $(DEBUGDIR) ] || mkdir $(DEBUGDIR) + @cd $(DEBUGDIR); \ + $(MAKE) -f ../Makefile DOF=$(DBGF) TOPDIR=../${TOPDIR} \ + THISDIR=../$(THISDIR)\ + MAKEDEPEND=../$(MAKEDEPEND) $(EXEC) + @$(MAKE) LNSRC=$(DEBUGDIR)/$(EXEC) LNDEST=$(BININST)/$(EXEC) __link + +$(LIB:=.dbg) : + @[ -d $(DEBUGDIR) ] || mkdir $(DEBUGDIR) + @cd $(DEBUGDIR); \ + $(MAKE) -f ../Makefile DOF=$(DBGF) TOPDIR=../${TOPDIR} \ + THISDIR=../$(THISDIR)\ + MAKEDEPEND=../$(MAKEDEPEND) $(LIB) + @$(MAKE) LNSRC=$(DEBUGDIR)/$(LIB) LNDEST=$(LIBINST)/$(LIB) __link + +$(PLUGIN:=.dbg) : + @[ -d $(DEBUGDIR) ] || mkdir $(DEBUGDIR) + @cd $(DEBUGDIR); \ + $(MAKE) -f ../Makefile DOF=$(DBGF) TOPDIR=../${TOPDIR} \ + THISDIR=../$(THISDIR)\ + MAKEDEPEND=../$(MAKEDEPEND) $(PLUGIN) + @$(MAKE) LNSRC=$(DEBUGDIR)/$(PLUGIN) LNDEST=$(PLUGININST)/$(PLUGIN) __link + +$(EXEC:=.opt) : + @[ -d $(OPTDIR) ] || mkdir $(OPTDIR) + @cd $(OPTDIR); \ + $(MAKE) -f ../Makefile DOF=$(OPTF) TOPDIR=../${TOPDIR} \ + THISDIR=../$(THISDIR)\ + MAKEDEPEND=../$(MAKEDEPEND) $(EXEC) + @$(MAKE) LNSRC=$(OPTDIR)/$(EXEC) LNDEST=$(BININST)/$(EXEC) __link + + +$(LIB:=.opt) : + @[ -d $(OPTDIR) ] || mkdir $(OPTDIR) + @cd $(OPTDIR); \ + $(MAKE) -f ../Makefile DOF=$(OPTF) TOPDIR=../${TOPDIR} \ + THISDIR=../$(THISDIR)\ + MAKEDEPEND=../$(MAKEDEPEND) $(LIB) + @$(MAKE) LNSRC=$(OPTDIR)/$(LIB) LNDEST=$(LIBINST)/$(LIB) __link + +$(PLUGIN:=.opt) : + @[ -d $(OPTDIR) ] || mkdir $(OPTDIR) + @cd $(OPTDIR); \ + $(MAKE) -f ../Makefile DOF=$(OPTF) TOPDIR=../${TOPDIR} \ + THISDIR=../$(THISDIR)\ + MAKEDEPEND=../$(MAKEDEPEND) $(PLUGIN) + @$(MAKE) LNSRC=$(OPTDIR)/$(PLUGIN) LNDEST=$(PLUGININST)/$(PLUGIN) __link + +# +#$(MAKEDEPEND) : $(C++FILES) $(CXXFILES) +# $(C++) $(INC) $(CXXDEPFLAGS) $^ > $(MAKEDEPEND) +# +# Handle Make dependencies in the next target +# This improves performance drastically, by building Makedepend only for +# files that have changed. + +.SUFFIXES: .cpp .o +.cpp.o: + $(C++) $(CXXFLAGS) -c $< + +# @$(C++) $(INC) $(DEPFLAGS) $? > .temp.dep +# @if [ -f $(MAKEDEPEND) ] ; \ +# then \ +# grep -v $? $(MAKEDEPEND) > .temp.dep1;\ +# else \ +# touch .temp.dep1; \ +# fi +# @cat .temp.dep1 .temp.dep > $(MAKEDEPEND) +# @rm -f .temp.dep1 .temp.dep + + +depend : + $(C++) $(INC) $(DEPFLAGS) $(CXXFILES) > $(MAKEDEPEND) + + +######################################################################################## +# +# Ok.. If you are looking hard at the following lines of gnarled code, you deserve an +# explanation. This target makes a link from the installed directories (Assumed to be +# rooted at $(TOPDIR), usually $(TOPDIR)/bin or $(TOPDIR)/lib) to a just-built target. +# Both LNSRC (Link source) and LNDEST (Link destination) must be defined before calling +# 'make __link'. +# +# The first four lines check to see that both LNSRC and LNDEST have been defined. +# +# The (very long) following 'if' statement reads in speudo-code like this: +# +## if the current link is not pointing to the intended destination +# then +# announce (echo) intentions to reset link +# compute the link path by the following steps +# a) define SRCDIR as the current absolute directory +# appended by the directory of the intended source of the link +# b) define DESTDIR as the absolute path of $(ROOT) appended by +# the directory of the intended destination of the link +# c) define a temproary variable T to be the absolute path of +# the destination directory less the prefix of the absolute +# path of $(ROOT) +# e.g. /root/work/thisdir/bin/ - /root/work/thisdir/ = bin/ +# d) Run a loop, truncating the path represented by T until 'dirname' +# returns '.'. On each iteration increment PFX (Prefix) by '../' +# This will define the prefix for the path of the link. +# e.g. If DESTDIR is lib/osgPlugins, PFX is ../../ +# e) Define the link as a concatenation of PFX and the absolute path +# of the source directory less the absolute path of $(ROOT) +# +# Change directories in to the link destination directory +# run the link command +# +######################################################################################## + +__link : + @echo LNSRC is $(LNSRC) ... LNDEST is $(LNDEST) + @[ -n "$(LNSRC)" ] || echo "Internal error (LNSRC definition)" + @[ -n "$(LNSRC)" ] && echo > /dev/null + @[ -n "$(LNDEST)" ] || echo "Internal error (LNDEST definition)" + @[ -n "$(LNDEST)" ] && echo > /dev/null + @if diff -s $(TOPDIR)/$(LNDEST) $(LNSRC) >/dev/null 2>&1;\ + then\ + echo " =====> $(LNSRC) and $(TOPDIR)/$(LNDEST) are already in sync";\ + else\ + echo " =====> resetting $(TOPDIR)/$(LNDEST) to point to $(LNSRC)";\ + SRCDIR=`pwd`/`dirname $(LNSRC)`;\ + cd $(TOPDIR);\ + ROOTDIR=`pwd`;\ + DESTDIR=`dirname $$ROOTDIR/$(LNDEST)`;\ + T=`echo $$DESTDIR $$ROOTDIR | awk '{print substr($$1,length($$2)+2,512)}'`;\ + while [ "$$T" != "." ]; do T=`dirname $$T`;PFX=../"$$PFX";done;\ + LINK="$$PFX"`echo $$SRCDIR $$ROOTDIR | \ + awk '{ print substr($$1,length($$2)+2,512) }'`/`basename $(LNDEST)`;\ + cd `dirname $(LNDEST)`;\ + rm -f `basename $(LNDEST)`;\ + ln -sf $$LINK `basename $(LNDEST)`;\ + fi + + +sinclude $(MAKEDEPEND) +