# -*- Makefile -*- # # $Id$ # # makefile to build the C++ Standard library # ############################################################################## include ../makefile.in # catalog to build and source files to build it from CATFILE := rwstderr.cat MSGFILES := rwstderr.msg # the name of the library to build (and in shared builds, # the name of the symbolic link pointing to it, for library # versioning) LIBLINK := $(LIBNAME) ifeq ($(findstring shared,$(BUILDMODE)),shared) ifneq ($(LIBSUFFIX),.dll) LIB := $(LIBLINK).$(LIBVER) else # on Cygwin use name libstd${BUILDTYPE}-X.Y.Z.dll LIB := $(basename $(LIBLINK))-$(LIBVER)$(LIBSUFFIX) endif TARGET := $(LIB) $(LIBLINK) else LIB := $(LIBLINK) TARGET := $(LIB) endif TARGET += $(CATFILE) SRCDIRS = $(TOPDIR)/src # do not compile these sources... OMIT_SRCS += rwstderr.cpp # include common variables setting for all makefiles ONE_REPOSITORY = 1 include ../makefile.common CXXFLAGS += $(PICFLAGS) LDFLAGS += $(LDSOFLAGS) $(MAPFLAGS) $(MAPFILE) # OBJS += $(shell [ -d ./cxx_repository/ ] && echo ./cxx_repository/*.o) # For AIX 5.1 xlC 5.0.2.0 ifneq ($(DEFAULT_SHROBJ),) SOBJS=$(DEFAULT_SHROBJ) else SOBJS=$(OBJS) endif # CXXPRELINK - command for compilers that use template # instantiation models that require a prelink stage ifneq ($(PRELINKFLAGS),) CXXPRELINK = $(CXX) $(CPPFLAGS) $(LDFLAGS) $(PRELINKFLAGS) $(OBJS) endif # ($(PRELINKFLAGS),) ############################################################################## # TARGETS ############################################################################## # Cancel implicit rules .SUFFIXES: all: $(TARGET) # do any directory specific cleanup using the realclean target realclean: dependclean clean # build an archive or shared library (repository included for DEC cxx 6.2) ifeq ($(findstring shared,$(BUILDMODE)),shared) ifeq ($(findstring archive,$(BUILDMODE)),archive) # shared archives are unique to IBM AIX # IBM VisualAge/XLC++ on AIX first "preprocesses" object files # with -qmkshrobj and then uses `ar' to create a shared archive $(LIB): $(OBJS) @echo "$(CXXPRELINK) -o $(LIBBASE).o" >> $(LOGFILE) $(CXXPRELINK) -o $(LIBBASE).o $(TEEOPTS) @echo "$(AR) $(ARFLAGS) $@ $(LIBBASE).o" >> $(LOGFILE) $(AR) $(ARFLAGS) $@ $(LIBBASE).o $(TEEOPTS) else $(LIB): $(OBJS) $(MAPFILE) @echo "$(LD) $(LDFLAGS) $< $(LDLIBS) -o $@" >> $(LOGFILE) $(LD) $(LDFLAGS) $(OBJS) $(LDLIBS) -o $@ $(TEEOPTS) endif # shared archive $(LIBLINK): $(LIB) @echo "ln -sf $< $@" >> $(LOGFILE) ln -sf $< $@ else $(LIB): $(OBJS) @echo "$(CXXPRELINK)" >> $(LOGFILE) $(CXXPRELINK) $(TEEOPTS) @echo "$(AR) $(ARFLAGS) $(LIBNAME) $(SOBJS)" >> $(LOGFILE) $(AR) $(ARFLAGS) $(LIBNAME) $(SOBJS) $(TEEOPTS) endif # ($(findstring shared,$(BUILDMODE)),shared) # Common rules used by all Makefiles include ../makefile.rules # create the $(PREFIX)/etc/ and $(PREFIX)/lib/ directories # and install the library binary and the message catalog(s) install: $(TARGET) mkdir -p $(PREFIX)/lib cp $(LIB) $(PREFIX)/lib if [ $(LIBLINK) != $(LIB) ]; then \ rm $(PREFIX)/lib/$(LIBLINK); \ ln -s $(LIB) $(PREFIX)/lib/$(LIBLINK); \ fi mkdir -p $(PREFIX)/etc cp $(CATFILE) $(PREFIX)/etc