# $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
# <http://www.vovida.org/>.
#
#
# 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
syntax highlighted by Code2HTML, v. 0.9.1