default : opt opt : $(EXEC:=.opt)\ $(LIB:=.opt)\ $(PLUGIN:=.opt)\ debug : $(EXEC:=.dbg)\ $(LIB:=.dbg)\ $(PLUGIN:=.dbg)\ cleandepend : cleandependopt cleandependdbg cleandependopt : @[ -d $(OPTDIR) ] && cd $(OPTDIR); rm -f Makedepend cleandependdbg : @[ -d $(DEBUGDIR) ] && cd $(DEBUGDIR); rm -f Makedepend cleantarget : cleantargetopt cleantargetdbg cleantargetopt : @[ -d $(OPTDIR) ] && cd $(OPTDIR); rm -f $(EXEC) $(LIB) $(PLUGIN) cleantargetdbg : @[ -d $(DEBUGDIR) ] && cd $(DEBUGDIR); rm -f $(EXEC) $(LIB) $(PLUGIN) clean : cleanopt cleandbg cleanopt : @[ -d $(OPTDIR) ] && cd $(OPTDIR); rm -f $(OBJS) Makedepend cleandbg : @[ -d $(DEBUGDIR) ] && cd $(DEBUGDIR); rm -f $(OBJS) Makedepend clobber : clobberdbg clobberopt clobberopt : rm -rf $(OPTDIR) clobberdbg : rm -rf $(DEBUGDIR) 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 $@ ## Mac OSX makes the distinction between -dynamiclib and -bundle ## causing us to have to make a special case here, rather than ## just redefining the SHARED argument. ifeq ($(OS),Darwin) $(LIB) : $(OBJS) $(C++) $(LDFLAGS) -dynamiclib $(OBJS) $(LIBS) -o $@ $(PLUGIN) : $(OBJS) $(C++) $(LDFLAGS) -bundle $(OBJS) $(LIBS) -o $@ else ifeq ($(OS),HP-UX) # we need to explicitly tell the linker the library name - else it will # include paths like ../../../libosg.sl into executables $(LIB) $(PLUGIN) : $(OBJS) $(C++) $(LDFLAGS) $(SHARED) $(OBJS) $(LIBS) -Wl,+h -Wl,$@ -o $@ else $(LIB) $(PLUGIN) : $(OBJS) $(C++) $(LDFLAGS) $(SHARED) $(OBJS) $(LIBS) -o $@ endif # not HP-UX endif # not Darwin $(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 : $(CXXFILES) $(CFILES) ifeq ($(OS),IRIX) touch $@ else $(C++) $(INC) $(DEPARG) $^ > $(MAKEDEPEND) endif .SUFFIXES: .cpp .o .cpp.o: $(C++) $(CXXFLAGS) -c $< ## This is an attempt at updating Makedepend file for each source ## file compiled rather than all files each time a source file changes ## Doesn't work too well, but leave the code here for later evaulation ifeq (0,1) ifneq ($(OS),IRIX) $(C++) $(INC) $(DEPARG) $< > .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 endif endif depend : $(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 pseudo-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 $(TOPDIR) 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 $(TOPDIR) # 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 # $(TOPDIR) # # Change directories in to the link destination directory # run the link command # ############################################################################### __link : @[ -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 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)`;\ $(LINK) $$LINK `basename $(LNDEST)`;\ fi __instfiles : @echo $(INSTFILES) sinclude $(MAKEDEPEND)