# $Id: Makefile.post,v 1.95.2.8 2003/02/18 19:36:33 bko Exp $ # The license applies to all software incorporated in the "Vovida # Open Communication Application Library" except for those portions # incorporating third party software specifically identified as being # licensed under separate license. # # # # The Vovida Software License, Version 1.0 # Copyright (c) 2000 Vovida Networks, Inc. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in # the documentation and/or other materials provided with the # distribution. # # 3. The names "VOCAL", "Vovida Open Communication Application Library", # and "Vovida Open Communication Application Library (VOCAL)" must # not be used to endorse or promote products derived from this # software without prior written permission. For written # permission, please contact vocal@vovida.org. # # 4. Products derived from this software may not be called "VOCAL", nor # may "VOCAL" appear in their name, without prior written # permission of Vovida Networks, Inc. # # THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED # WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES # OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE AND # NON-INFRINGEMENT ARE DISCLAIMED. IN NO EVENT SHALL VOVIDA # NETWORKS, INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT DAMAGES # IN EXCESS OF $1,000, NOR FOR ANY INDIRECT, INCIDENTAL, SPECIAL, # EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, # PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR # PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY # OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE # USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH # DAMAGE. # # ==================================================================== # # This software consists of voluntary contributions made by Vovida # Networks, Inc. and many individuals on behalf of Vovida Networks, # Inc. For more information on Vovida Networks, Inc., please see # . # # # All third party licenses and copyright notices and other required # legends also need to be complied with as well. # ifdef USE_DMALLOC LDLIBS += -L/usr/local/lib -ldmallocth endif -include $(BUILD)/Makefile.pkg ifeq ($(HAS_REPO),true) ifeq ($(USE_REPO),true) CFLAGS += $(REPO_FLAG) CXXFLAGS += $(REPO_FLAG) endif endif ifneq ($(MAKE_SEPARATE_DEPENDENCY),1) CFLAGS += $(DFLAG_INTEGRATED) CXXFLAGS += $(DFLAG_INTEGRATED) endif PURIFY = purify PURIFY5 = /usr/pure/purify-5.3-solaris2/purify #PURIFY5 = /usr/local/purify-5.1-beta-L2-solaris2/purify-5.1-beta-L2-solaris2/purify QUANTIFY = quantify # this section adds the appropriate flags, headers, etc. for packages. # See the Makefile.pkg for further information about how packages work. INCDIRS += $(foreach package,$(PACKAGES), $($(package)_INCLUDEDIRS)) CXXFLAGS += $(foreach package,$(PACKAGES), $($(package)_CXXFLAGS)) LDFLAGS += $(foreach package,$(PACKAGES), $($(package)_LDFLAGS)) LIBDIRS += $(foreach package,$(PACKAGES), $($(package)_LIBDIRS)) LIBNAMES += $(foreach package,$(PACKAGES), $($(package)_LIBNAME) ) LDLIBS_LAST += $(foreach package,$(PACKAGES), $($(package)_LDLIBS_LAST)) LDLIBS += $(foreach libs,$(LIBDIRS), -L$(libs)) $(foreach libs,$(LIBNAMES), -l$(libs)) DEFINES += $(foreach package,$(PACKAGES), $($(package)_DEFINES) ) LDLIBS_PURE = $(LDLIBS) # because order is important LDLIBS += $(LDLIBS_LAST) ifndef LDLIBS_LAST_PURE LDLIBS_LAST_PURE = $(LDLIBS_LAST) endif LDLIBS_PURE += $(LDLIBS_LAST_PURE) DEPEND_FILES += $(foreach pkg,$(PACKAGES), $($(pkg)_DEPENDS)) DEPEND_TARGETS += $(foreach pkg,$(PACKAGES), $($(pkg)_TARGETS)) ifeq ($(VOCAL_BUILD_SHARED_LIBS),yes) .dependlibs: $(patsubst %.a,%.so,$(DEPEND_FILES)) else .dependlibs: $(DEPEND_FILES) endif touch .dependlibs LEAKTRACE = $(patsubst %/build,%/contrib/andreasen/LeakTracer/LeakTracer.o, $(BUILD)) LTNEW = $(patsubst %/build,%/contrib/andreasen/newLT/LeakTracer.o, $(BUILD)) LTHEAP = $(patsubst %/build,%/contrib/andreasen/Heap/Heap.o, $(BUILD)) RELEASE = $(patsubst %/build,%/release, $(BUILD)) INCLUDE_LIST = $(foreach dir,$(INCDIRS),-I$(dir)) DEFINE_LIST = $(foreach dir,$(DEFINES),-D$(dir)) CXXFLAGS += $(INCLUDE_LIST) $(DEFINE_LIST) CFLAGS += $(INCLUDE_LIST) $(DEFINE_LIST) OBJ = obj.$(TARGET_NAME) #OBJ = $(shell $(TOOLS)/reportbuilddir $(ROOT)/.make_prefs)/obj.$(TARGET_NAME) BIN = bin.$(TARGET_NAME) #BIN = $(shell $(TOOLS)/reportbuilddir $(ROOT)/.make_prefs)/bin.$(TARGET_NAME) .PHONY : all code clean default install copy-files doc $(BIN) $(OBJ) test prefs full headercheck verify fakepre cppdoc SRC += $(SRC_$(OSCLASS)) TESTPROGRAMS += $(VERIFY_TESTCASES) ALLSRC += $(TESTPROGRAMS) $(SRC) OBJS = $(patsubst %.c,$(OBJ)/%.o,$(patsubst %.cxx,$(OBJ)/%.o,$(SRC))) $(EXTRA_OBJS) TESTPROGRAM_OBJS = $(patsubst %.c,$(OBJ)/%.o,$(patsubst %.cxx,$(OBJ)/%.o,$(TESTPROGRAMS))) $(EXTRA_OBJS) HWOBJS = $(patsubst %.c,$(OBJ)/%.o,$(patsubst %.cxx,$(OBJ)/%.o,$(HWSRC))) DEPENDENCIES = $(patsubst %.c,$(OBJ)/%.d,$(patsubst %.cxx,$(OBJ)/%.d,$(ALLSRC))) SHARED_LIB = $(patsubst %,$(OBJ)/%.so,$(strip $(TARGET_LIBRARY))) STATIC_LIB = $(patsubst %,$(OBJ)/%.a,$(strip $(TARGET_LIBRARY))) LIBTARGETS += $(STATIC_LIB) ifeq ($(BUILD_SHARED_LIBRARY),true) LIBTARGETS += $(SHARED_LIB) endif ifeq ($(VOCAL_BUILD_SHARED_LIBS),yes) LIBTARGETS += $(SHARED_LIB) endif LIBTARGETS_PURE5 = $(patsubst %.a,$(OBJ)/%_pure_p9_c0_103222355_32.a,$(filter %.a,$(TARGET_LIBRARY))) EXTRAS = $(HWOBJS) HEADERS = $(wildcard *.h) $(wildcard *.hxx) $(wildcard *.h) $(EXTRA_HEADERS) HEADERCHECKDIR = headercheck.$(TARGET_NAME) HEADERCHECK = $(patsubst %.hxx, $(HEADERCHECKDIR)/%.oxx, $(patsubst %.h, $(HEADERCHECKDIR)/%.o, $(HEADERS))) HEADERCHECKOBJS = $(patsubst %.cxx, %.o, $(HEADERCHECK)) CODETARGETS = $(patsubst %.c,$(BIN)/%,$(patsubst %.cxx,$(BIN)/%,$(TESTPROGRAMS))) TESTCASE_PROGRAMS = $(patsubst %,$(BIN)/%,$(TESTCASES)) VERIFY_TESTCASE_PROGRAMS = $(patsubst %.c,$(BIN)/%,$(patsubst %.cxx,$(BIN)/%,$(VERIFY_TESTCASES))) ifdef USE_LEAKTRACE $(LEAKTRACE): cd $(ROOT)/contrib ; $(MAKE) all CODETARGETS_LT = $(patsubst %,%.lt,$(strip $(CODETARGETS))) endif ifdef USE_LTNEW $(LTNEW): cd $(ROOT)/contrib/andreasen/newLT ; $(MAKE) all CODETARGETS_LT = $(patsubst %,%.ltnew,$(strip $(CODETARGETS))) endif ifdef USE_LTHEAP $(LTNEW): cd $(ROOT)/contrib/andreasen/Heap ; $(MAKE) CODETARGETS_LT = $(patsubst %,%.ltheap,$(strip $(CODETARGETS))) endif CODETARGETS_PURE = $(patsubst %,%.pure,$(strip $(CODETARGETS))) CODETARGETS_PURE5 = $(patsubst %,%.pure5,$(strip $(CODETARGETS))) CODETARGETS_QUANTIFY = $(patsubst %,%.quantify,$(strip $(CODETARGETS))) ifneq "$(strip $(COPYFILES))" "" COPY += copy-files endif ifdef CROSS_COMPILE CROSS_FLAG = -c endif # here is the start of the appropriate rules HEADERS_SPECIAL = $(BUILD)/vocalconfig-config.h #DATESTAMP = $(BUILD)/vocal_build_date.c DATESTAMP = #DATESTAMP_DIR = $(BUILD)/$(OBJ) #DATESTAMP = $(BUILD)/$(OBJ)/vocal_build_date.o code: $(HEADERS_SPECIAL) $(OBJ) $(HWOBJS) $(BIN) $(AUTO_FILES) $(TARGETS) $(LIBTARGETS) $(CODETARGETS) $(CODETARGETS_LT) $(COPY) $(TESTPROGRAM_OBJS) # this rule does anything that needs to be done before dependency generation $(BUILD)/fakepre: $(HEADERS_SPECIAL) @touch $(BUILD)/fakepre # this is a special rule for building vocalconfig.h if it doesn't # exist. $(BUILD)/installpath: sed -e 's#@prefix@#default#g' < $(BUILD)/installpath.in > $(BUILD)/installpath $(BUILD)/vocalconfig-config.h: $(BUILD)/vocalconfig-defaults.h $(BUILD)/installpath $(BUILD)/buildhfile $(BUILD) # $(TOOLS)/makeprefs $@ $(ROOT)/.make_prefs: echo 'USE_BUILDDIR=no' > $@ include $(ROOT)/.make_prefs prefs: $(TOOLS)/makeprefs $(ROOT)/.make_prefs dependencies: $(DEPENDENCIES) ifdef ROOT_TARGET target: cd $(ROOT) ; $(MAKE) $(ROOT_TARGET) endif all: code test copy-files: cp -r $(COPYFILES) $(COPYTO) foo: echo html/$(subst .a,,$(PROG)).html install-lib: -$(INSTALL) -m 0644 $(LIBTARGETS) $(RELEASE)/lib.$(TARGET_NAME) for hfile in *.hxx *.h ; do ( $(INSTALL) -m 0644 $$hfile $(RELEASE)/include ) ; done install-code: $(INSTALL) -m 0755 $(CODETARGETS) $(RELEASE)/bin.$(TARGET_NAME) install-subdirs: -@ for subdirectory in $(SUBDIR) ; do ( cd $$subdirectory ; $(MAKE) install ) ; done ifneq "$(strip $(LIBTARGETS))" "" INSTALL_TARGETS += install-lib endif ifneq "$(strip $(CODETARGETS))" "" INSTALL_TARGETS += install-code endif ifneq "$(strip $(SUBDIR))" "" INSTALL_TARGETS += install-subdirs endif install: $(INSTALL_TARGETS) #install_bin: doc: html html/HIER.html html/$(subst .a,,$(PROG)).html cppdoc: cppdoc_dir DIR=`pwd` ; ( cd cppdoc_dir ; cppdoc -D__FAKE_CPPDOC__ -accept3slash -namespaces-global $$DIR ) cppdoc_dir: -mkdir $@ clean: -rm -f *.rpo core *~ \#* .make* *.a *.d *.S -rm -rf html -rm obj.*/*.[oda] -rm obj.*/*/*.[oda] -rm bin.*/* -rm bin.*/*/* cleanall: clean -rm -rf bin.* obj.* pure: $(CODETARGETS_PURE) pure5: $(CODETARGETS_PURE5) pure5_lib: $(LIBTARGETS_PURE5) quantify: $(CODETARGETS_QUANTIFY) backup: tar cvf - $(SRC) $(OSRC) | gzip > `date +"backup_$(PROG)-%Y%m%d-%H%M.tgz"` $(BIN): -@ $(TOOLS)/mkbuildlinks $(BIN) $(ROOT)/.make_prefs ifdef CODE_SUBDIRS -@ for subdir in $(CODE_SUBDIRS) ; do ( mkdir -p $(BIN)/$$subdir ) ; done endif $(OBJ): -@ $(TOOLS)/mkbuildlinks $(OBJ) $(ROOT)/.make_prefs test: code -if [ -d test ] ; then cd test ; $(MAKE) test ; fi -$(ROOT)/tools/run-tests $(CROSS_FLAG) $(ROOT) `pwd` $(BIN) TESTS $(ROOT)/testall.log verify_report: $(BIN) $(OBJ) $(VERIFY_TESTCASE_PROGRAMS) @( for program in $(VERIFY_TESTCASE_PROGRAMS) ; do ( ./$$program 2>&1 ) ; done ) | grep '^VerifySummary' verify: $(BIN) $(VERIFY_TESTCASE_PROGRAMS) @$(TOOLS)/run-tests $(VERIFY_TESTCASE_PROGRAMS) verifyall: $(BIN) $(VERIFY_TESTCASE_PROGRAMS) @$(TOOLS)/run-tests -a $(VERIFY_TESTCASE_PROGRAMS) $(HEADERCHECKDIR)/%.o: %.h $(CXX) -x c++ $(CXXFLAGS) -c -o $@ $< $(HEADERCHECKDIR)/%.oxx: %.hxx $(CXX) -x c++ $(CXXFLAGS) -c -o $@ $< $(HEADERCHECKDIR): -@ $(TOOLS)/mkbuildlinks $(HEADERCHECKDIR) $(ROOT)/.make_prefs ifdef CODE_SUBDIRS -@ for subdir in $(CODE_SUBDIRS) ; do ( mkdir -p $(HEADERCHECKDIR)/$$subdir ) ; done endif headercheck: $(HEADERCHECKDIR) $(HEADERCHECKOBJS) test_report: test -$(MAKE) test > /dev/null 2>&1 -@if [ -f T_RESULTS.$(BIN) ] ; then $(ROOT)/tools/test-analyzer -r T_RESULTS.$(BIN) $(BIN)/testresults.log ; fi html: - mkdir html html/HIER.html: $(HEADERS) doc++ -H -B noBanner -p -d html $^ html/$(subst .a,,$(PROG)).html: $(ALLSRC) $(HEADERS) # cvs2html -a -k -o html ifeq ($(CXXFLAGS),$(shell cat $(OBJ)/cxxflags)) else .PHONY: $(OBJ)/cflags $(OBJ)/cxxflags endif $(OBJ)/cflags: echo '$(CFLAGS)' > $@ $(OBJ)/cxxflags: echo '$(CXXFLAGS)' > $@ ifeq ($(USE_VARARG_HACK),1) %.i: %.cxx $(OBJ)/%.d $(OBJ)/cxxflags if [ "z$<" != "zcpLog.cxx" ] ; then $(FILEPP) -p -lrn -V -u -k '-DcpLog(priority__,fmt__)=do {if (priority__ <= cpLogGetPriority()) cpLog_impl_ (priority__, __FILE__, __LINE__, fmt__);}while (0)' -lcn $< > $@ ; else cp $< $@ ; fi $(OBJ)/%.o: %.i $(OBJ)/%.d $(OBJ)/cflags $(CXX) $(CXXFLAGS) -c -o $@ $< endif ifeq ($(OSTYPE),cygwin) OUTPUT_FLAG=-Fo else OUTPUT_FLAG=-o endif # compile c code $(OBJ)/%.o: %.c $(OBJ)/%.d $(OBJ)/cflags $(CC) $(CFLAGS) -c $(OUTPUT_FLAG)$@ $< ifeq ($(ACCEPT_I_FILES),1) else # compile c++ code $(OBJ)/%.o: %.cxx $(OBJ)/%.d $(OBJ)/cxxflags $(CXX) $(CXXFLAGS) -c $(OUTPUT_FLAG)$@ $< endif # build assembly listings %.S: %.cxx $(CXX) $(CXXFLAGS) -fverbose-asm -g -Wa,-ahln -c \ -o /tmp/cjJunk.o $< > $@ #$(DATESTAMP_DIR): # mkdir -p $@ #$(DATESTAMP): $(DATESTAMP_DIR) # $(CC) $(CFLAGS) -c -o $@ $(DATESRC) # build executables $(BIN)/%: $(OBJ)/%.o $(OBJS) $(EXTRAS) .dependlibs $(LINKER) $(LDFLAGS) -o $@ $(DATESTAMP) $(patsubst %.dependlibs,%, $^) $(LDLIBS) # build leaktraced version of executable ifdef USE_LEAKTRACE .dependlibs: $(LEAKTRACE) $(BIN)/%.lt: $(OBJ)/%.o $(OBJS) $(EXTRAS) .dependlibs $(LINKER) $(LDFLAGS) -o $@ $(DATESTAMP) $(patsubst %.dependlibs,%, $^) $(LDLIBS) $(LEAKTRACE) endif ifdef USE_LTNEW .dependlibs: $(LTNEW) $(BIN)/%.ltnew: $(OBJ)/%.o $(OBJS) $(EXTRAS) .dependlibs $(LINKER) $(LDFLAGS) -o $@ $(DATESTAMP) $(patsubst %.dependlibs,%, $^) $(LDLIBS) $(LTNEW) endif ifdef USE_LTHEAP .dependlibs: $(LTNEW) $(BIN)/%.ltheap: $(OBJ)/%.o $(OBJS) $(EXTRAS) .dependlibs $(LINKER) $(LDFLAGS) -o $@ $(DATESTAMP) $(patsubst %.dependlibs,%, $^) $(LDLIBS) $(LTHEAP) endif # build purified version of executable $(BIN)/%.pure: $(OBJ)/%.o $(OBJS) $(EXTRAS) .dependlibs $(PURIFY) $(LINKER) $(LDFLAGS) -o $@ $(DATESTAMP) $(patsubst %.dependlibs,%, $^) $(LDLIBS_PURE) # build purified version of executable $(BIN)/%.pure5: $(OBJ)/%.o $(OBJS) $(EXTRAS) .dependlibs $(PURIFY5) $(LINKER) $(LDFLAGS) -o $@ $(DATESTAMP) $(patsubst %.dependlibs,%, $^) $(LDLIBS_PURE) # build quantify version of executable $(BIN)/%.quantify: $(OBJ)/%.o $(OBJS) $(EXTRAS) .dependlibs $(QUANTIFY) $(LINKER) $(LDFLAGS) -o $@ $(DATESTAMP) $(patsubst %.dependlibs,%, $^) $(LDLIBS_PURE) # these rules build dependency files in the cases that need them. ifeq ($(OSTYPE),cygwin) $(OBJ)/%.d: %.c $(OBJ) echo > $@ $(OBJ)/%.d: %.cxx $(OBJ) echo > $@ else $(OBJ)/%.d: %.c $(NOCOMPILE_SRC) $(ROOT)/.make_prefs -@ $(TOOLS)/mkbuildlinks $(OBJ) $(ROOT)/.make_prefs ifdef CODE_SUBDIRS -@for subdir in $(CODE_SUBDIRS) ; do ( mkdir -p $(OBJ)/$$subdir ) ; done endif ifeq ($(MAKE_SEPARATE_DEPENDENCY),1) @echo "Making $@" @$(SHELL) -ec '$(DEP) $(CFLAGS) $(CXXFLAGS) $(CPPFLAGS) $(DFLAGS) $< \ $(DMANGLE) | sed -e "s#^$(*F).o[ :]*#$(@D)\/$(*F).o $@ : #" \ > $@; [ -s $@ ] || rm -f $@' endif $(OBJ)/%.d: %.cxx $(NOCOMPILE_SRC) $(ROOT)/.make_prefs -@ $(TOOLS)/mkbuildlinks $(OBJ) $(ROOT)/.make_prefs ifdef CODE_SUBDIRS -@for subdir in $(CODE_SUBDIRS) ; do ( mkdir -p $(OBJ)/$$subdir ) ; done endif ifeq ($(MAKE_SEPARATE_DEPENDENCY),1) @echo "Making $@" @$(SHELL) -ec '$(DEP) $(CFLAGS) $(CXXFLAGS) $(CPPFLAGS) $(DFLAGS) $< \ $(DMANGLE) | sed -e "s#^$(*F).o[ :]*#$(@D)\/$(*F).o $@ : #" \ > $@; [ -s $@ ] || rm -f $@' endif endif .SECONDARY: $(DEPENDENCIES) $(OBJS) # this rule builds a target library if that is what is called for in # the make file. If not, the object files are not linked together. ifdef TARGET_LIBRARY $(OBJ)/$(strip $(TARGET_LIBRARY)).a: $(OBJS) $(OTHERLIBS) -@ /bin/rm $@ ifeq ($(USE_REPO),true) -@echo 'int main(){return 0;}' > $(OBJ)/closure.cxx $(LINKER) $(LDFLAGS) -o $(OBJ)/closure $(OBJ)/closure.cxx $(patsubst %.dependlibs,%, $^) $(LDLIBS) endif $(AR) $(ARFLAGS) $@ $^ || rm $@ $(RANLIB) $@ || rm $@ $(OBJ)/$(strip $(TARGET_LIBRARY)).so: $(OBJS) $(OTHERLIBS) -@ /bin/rm $@ ifeq ($(USE_REPO),true) -@echo 'int main(){return 0;}' > $(OBJ)/closure.cxx $(LINKER) $(LDFLAGS) -o $(OBJ)/closure $(OBJ)/closure.cxx $(patsubst %.dependlibs,%, $^) $(LDLIBS) endif $(MKSHLIB) -o $@ $^ -@ mkdir -p $(ROOT)/lib.$(TARGET_NAME) -@ ln -s $(shell pwd)/$@ $(ROOT)/lib.$(TARGET_NAME) $(OBJ)/%_pure_p9_c0_103222355_32.a: $(PURIFY5) -force-rebuild -nolink ld ./obj.debug.sun4u/*.o $(AR) -$(ARFLAGS) $@ $(OBJ)/*_pure_p9_c0_103222355_32.o || rm $@ endif -include $(DEPENDENCIES) # this MUST be the last item in the makefile -- it will be done first always. -include $(BUILD)/fakepre