# -*- Makefile -*-
# 
# $Id$
#
# main makefile to build and test the C++ Standard library
#
########################################################################
#
# Licensed to the Apache Software  Foundation (ASF) under one or more
# contributor  license agreements.  See  the NOTICE  file distributed
# with  this  work  for  additional information  regarding  copyright
# ownership.   The ASF  licenses this  file to  you under  the Apache
# License, Version  2.0 (the  "License"); you may  not use  this file
# except in  compliance with the License.   You may obtain  a copy of
# the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the  License is distributed on an  "AS IS" BASIS,
# WITHOUT  WARRANTIES OR CONDITIONS  OF ANY  KIND, either  express or
# implied.   See  the License  for  the  specific language  governing
# permissions and limitations under the License.
#
# Copyright 1999-2007 Rogue Wave Software, Inc.
#
########################################################################
#
# Usage:
#
#   Invoke from $TOPDIR to create the build directory tree, $BUILDDIR
#   configure and build the library, example programs, utility programs
#   testsuite driver, and the testsuite.
#
#   $ make [ BUILDTYPE=<build-type> ] \
#          [ BUILDDIR=<build-dir> ] \
#          [ CONFIG=<config-file> ] \
#          [ PHDIR=<plumhall-testsuite-source-dir> ]
#          [ <targets> ]
#
#   From $BUILDDIR/include to [re]configure or just run one or more tests:
#
#   $ make [ config | config.h | <target> ... ]
#
#   From $TOPDIR or $BUILDDIR to configure if necessary and build the lib,
#   tests, plumhall testsuite, and examples:
#
#   $ make [ lib ] [ bin ] [ rwtest ] [ tests ] [ phtst ] [ examples ]
#
#   From $TOPDIR or $BUILDDIR to build the lib, tests, and examples, run the
#   built executables, and (by default, unless DRYRUN is non-empty)
#   post results in Perforce:
#
#   $ make run | runall | run_all [ RUN=<executables> | ALL ]
#
#   For every invocation of make the variables CPPOPTS, CXXOPTS, LDOPTS,
#   and RUNOPTS can be set on the command line to pass additional options to
#   the preprocessor, compiler, linker, and the runall.sh script, respectively.
#
#   The variable MAKE can be set to contain any additional make arguments
#   to be passed to recursive invokations of make (e.g., make -j).
#
#   The variable SHELL can be defined to override the default shell, /bin/sh.
#
########################################################################
#
# Targets:
#
#   builddir  - creates the build directory (BUILDDIR) and makefile.in
#
#   config    - performs configuration tests and creates the configuration
#               header, $(BUILDDIR)/include/config.h
#
#   libstd    - builds the library
#
#   rwtest    - builds the testsuite driver
#
#   tests     - builds the testsuite
#
#   examples  - builds the example programs
#
#   util      - builds the utility programs
# 
##############################################################################
#
# Nonstandard variables:
#
#   BUILDDIR  - (optional) the root of the build directory tree,
#               the default value is $(TOPDIR)/build
#
#   BUILDTAG  - (optional) a string appended to a report filename
#               the default value is empty
#
#   BUILDTYPE - (optional) one of
#                   8s, 8d, 11s, 11d, 12s, 12d, 15s, 15d,
#                   8S, 8D, 11S, 11D, 12S, 12D, 15S, 15D
#               where the capitalized forms are wide forms of the others
#               the default value is 11s
#
#   BUILDMODE - (optional) a comma separated list of at most one of each of
#                  debug, optimized, shared
#                  threads, pthreads, dcethreads, wide
#               where
#               *  debug turns on debugging and disables optimization
#               *  optimized enables optimization and disables debugging
#               *  shared creates and links with a shared library
#               *  threads uses Solaris threads for thread safety
#               *  pthreads uses POSIX threads for thread safety
#               *  dcethreads uses DCE threads for thread safety
#               *  wide uses wide (typically 64-bit) memory model
#               the default value is debug (same as 11s)
#
#   CATFILE   - name of library catalog file to be generated - see gencat(1)
#
#   CCVER     - compiler version (must contain no spaces)
#
#   DEPENDFLAGS - preprocessor flags used to generate dependencies
#
#   LIBBASE   - name of the library w/o the suffix suitable
#               for use by the linker after the -l option
#
#   DEPENDDIR - the subdirectory where dependency files will reside
#
#   LIBM      - the linker option to link with the math library
#               (typically -lm, may be unnecessary or not even exist
#               on some systems) 
#
#   LIBNAME   - full name of the library being built
#
#   LIBVER    - library version number in the <major>.<minor>.<micro> format
#
#   LIBSUFFIX - archive/shared library suffix (defaults to a)
#
#   LDSOFLAGS - linker flags used when building a shared lib
#
#   LDLIBS    - set of system libraries to link executables with
#
#   PHDIR     - directory containing the PlumHall testsuite distribution
#                 (e.g., ".../lvs99a")
#
#   PHWARNFLAGS - extra flags to suppress warnings coming from PlumHall tests
#
#   PICFLAGS  - flags to generate Position Independent Code
#               for shared libraries
#
#   PREFIX    - the root of the installation directory where the bin/
#               include/ and lib/ subdirectories will be rooted
#
#   PRELINKFLAGS - flags passed to the prelinker
#
#   RUNFLAGS  - default options passed to runall.sh when running executables
#   RUNOPTS   - additional options to pass to runall.sh (empty by default)
#
#   SHARED    - set to `true' if building a shared lib, `false' otherwise
#
#   WARNFLAGS - any compiler warning options
#
#   WITH_PURIFY - set to `true' to build with purify. additional flags
#                 can be specified in PURIFYFLAGS.
#
#   WITH_CADVISE - set to `true' to build with cadvise. additional flags
#                  can be specified in CADVISEFLAGS.
#
########################################################################

SHELL = /bin/sh

# define the value of OSNAME first so that it can be used in *.config files
OSNAME := $(shell uname)

# provide a value if it isn't already set by (an older version of) make
ifeq ($(CURDIR),)
  ifneq ($(PWD),)
    # use the shell PWD variable to avoid expanding NFS paths
    # as mount points instead of the user-visible directories
    CURDIR := $(PWD)
  else
    CURDIR := $(shell pwd)
  endif
endif


-include ./makefile.in


# buildpath must not be defined
ifneq ($(buildpath),)
  $(error "buildpath not empty ('$(buildpath)')")
endif


# check to see if BUILDDIR is defined
ifeq ($(BUILDDIR),)
  # the default value is $(TOPDIR)/build
  buildpath = $(CURDIR)/build
else
  # see if BUILDDIR is an absolute pathname
  ifeq ($(filter /%,$(BUILDDIR)),)
    # ...if not, prepend the name of CURDIR
    buildpath = $(CURDIR)/$(BUILDDIR)
  else
    # ...otherwise, make sure it doesn't refer to TOPDIR
    ifeq ($(BUILDDIR),$(TOPDIR))
      $(error "BUILDDIR ('$(BUILDDIR)') is same as TOPDIR ('$(TOPDIR)')")
    endif
    buildpath = $(BUILDDIR)
  endif   # ifneq ($(filter /%,$(BUILDDIR)),)
endif   # ifneq ($(BUILDDIR),)


ifeq ($(filter /%,$(buildpath)),)
  # buildpath must be an absolute pathname
  $(error "buildpath=$(buildpath): not an absolute pathname")
endif

ifeq ($(buildpath),$(TOPDIR))
  # buildpath must be distinct from TOPDIR
  $(error "buildpath=$(buildpath): not distinct from TOPDIR=$(TOPDIR)")
endif


MAKEFILE_IN = $(buildpath)/makefile.in
-include $(MAKEFILE_IN)


INCDIR      = $(buildpath)/include
LIBDIR      = $(buildpath)/lib
BINDIR      = $(buildpath)/bin
EXMDIR      = $(buildpath)/examples
TSTDIR      = $(buildpath)/tests
PHTSTDIR    = $(buildpath)/plumhall
MAKEDIRS    = $(buildpath)          \
              $(LIBDIR)             \
              $(buildpath)/rwtest   \
              $(BINDIR)             \
              $(buildpath)/nls      \
              $(TSTDIR)             \
              $(PHTSTDIR)           \
              $(EXMDIR)             \
              $(INCDIR)

# file to write log of the build to
LOGFILE = /dev/null

# convert a relative pathname to an absolute one
ifneq ($(shell echo $(LOGFILE) | sed -n "s/^ *\/.*/\//p"),/)
  LOGFILE := $(buildpath)/$(LOGFILE)
endif


ifeq ($(TOPDIR),)
  # this is the first invocation of make in TOPDIR
  in_topdir = 1
else
  ifeq ($(TOPDIR),$(CURDIR))
    # this is a recursive invocation of make in TOPDIR
    in_topdir = 1
  endif
endif


ifeq ($(in_topdir),1)

  ######################################################################
  # THIS BLOCK IS EVALUATED ONLY WHEN MAKE IS INVOKED IN TOPDIR
  ######################################################################

  # try to determine configuration (unless specified on the command line)
  # invoke $(SHELL) from within the $(shell) function to silence shell
  # any error messages when the compiler isn't found
  ifeq ($(CONFIG),)
    ifeq ($(shell $(SHELL) -c "g++ -v" >/dev/null 2>&1 \
                  && echo $$?),0)
      # use gcc on every OS by default
      CONFIG = gcc.config
    else
      ifeq ($(OSNAME),AIX)
        # check for VisualAge on AIX
        # avoid comparing the exit status to 0 since VAC++ return 249...
        ifneq ($(shell $(SHELL) -c "xlC -qversion" >/dev/null 2>&1; \
                       echo $$?),127)
          CONFIG = vacpp.config
        endif
      else
        ifeq ($(OSNAME),HP-UX)
          # check for aCC on HP-UX
          ifeq ($(shell $(SHELL) -c "aCC -V" >/dev/null 2>&1 && echo $$?),0)
            CONFIG = acc.config
          endif
        else
          ifeq ($(OSNAME),IRIX64)
            # check for MIPSpro on IRIX
            ifeq ($(shell $(SHELL) -c "CC -v" >/dev/null 2>&1 && echo $$?),0)
              CONFIG = mipspro.config
            endif
          else
            ifeq ($(OSNAME),OSF1)
              # check for Compaq C++ on Tru64 UNIX
              ifeq ($(shell $(SHELL) -c "cxx -V" >/dev/null 2>&1; echo $$?),0)
                CONFIG = osf_cxx.config
              endif
            else
              ifeq ($(OSNAME),SunOS)
                # check for SunPro on Solaris
                ifeq ($(shell $(SHELL) -c "CC -V" >/dev/null 2>&1 \
                              && echo $$?),0)
                  CONFIG = sunpro.config
                endif
              endif   # SunOS
            endif   # OSF1
          endif   # IRIX64
        endif   # HP-UX
      endif   # AIX
    endif   # gcc

    ifeq ($(CONFIG),)
      $(error "could not find a config file for this platform: $(OSNAME)")
    else
      $(warning "CONFIG not specified, using $(CONFIG)")
    endif

  endif   # ifeq ($(CONFIG),)

  ifeq ($(CONFIG),)
    $(error "CONFIG not defined")
  endif

  # decode the BUILDTYPE value and set BUILDMODE correspondingly
  ifeq ($(BUILDTYPE),8s)
    bmode = optimized,narrow
  endif   # ifeq ($(BUILDTYPE),8s)

  ifeq ($(BUILDTYPE),8S)
    bmode = optimized,wide
  endif   # ifeq ($(BUILDTYPE),8s)

  ifeq ($(BUILDTYPE),8d)
    bmode = shared,optimized,narrow
  endif   # ifeq ($(BUILDTYPE),8d)

  ifeq ($(BUILDTYPE),8D)
    bmode = shared,optimized,wide
  endif   # ifeq ($(BUILDTYPE),8d)

  ifeq ($(BUILDTYPE),11s)
    bmode = debug,narrow
  endif   # ifeq ($(BUILDTYPE),11s)

  ifeq ($(BUILDTYPE),11S)
    bmode = debug,wide
  endif   # ifeq ($(BUILDTYPE),11s)

  # 11d - single-thread, debug, shared
  ifeq ($(BUILDTYPE),11d)
    bmode = debug,shared,narrow
  endif   # ifeq ($(BUILDTYPE),11d)

  ifeq ($(BUILDTYPE),11D)
    bmode = debug,shared,wide
  endif   # ifeq ($(BUILDTYPE),11d)

  # 12s - multi-thread, optimized, static
  ifeq ($(BUILDTYPE),12s)
    bmode = pthreads,optimized,narrow
  endif   # ifeq ($(BUILDTYPE),12s)

  ifeq ($(BUILDTYPE),12S)
    bmode = pthreads,optimized,wide
  endif   # ifeq ($(BUILDTYPE),12s)

  # 12d - multi-thread, optimized, shared
  ifeq ($(BUILDTYPE),12d)
    bmode = pthreads,shared,optimized,narrow
  endif   # ifeq ($(BUILDTYPE),12d)

  ifeq ($(BUILDTYPE),12D)
    bmode = pthreads,shared,optimized,wide
  endif   # ifeq ($(BUILDTYPE),12d)

  # 15s - multi-thread, debug, static
  ifeq ($(BUILDTYPE),15s)
    bmode = debug,pthreads,narrow
  endif   # ifeq ($(BUILDTYPE),15s)

  ifeq ($(BUILDTYPE),15S)
    bmode = debug,pthreads,wide
  endif   # ifeq ($(BUILDTYPE),15s)

  # 15d - multi-thread, debug, shared
  ifeq ($(BUILDTYPE),15d)
    bmode = debug,pthreads,shared,narrow
  endif   # ifeq ($(BUILDTYPE),15d)

  ifeq ($(BUILDTYPE),15D)
    bmode = debug,pthreads,shared,wide
  endif   # ifeq ($(BUILDTYPE),15d)

  ifneq ($(BUILDTYPE),)
    ifeq ($(bmode),)
      $(error "unknown BUILDTYPE value: '$(BUILDTYPE)'")
    endif
  endif

  ifeq ($(TOPDIR),)
    # during the first (non-recursive) invocation only,
    # check to make sure at most one of BUILDTYPE and BUILDMODE
    # is defined
    ifneq ($(BUILDTYPE),)
      ifneq ($(BUILDMODE),)
        $(error "at most one of BUILDMODE and BUILDTYPE may be defined")
      else
        BUILDMODE=$(bmode)
      endif
    endif
    TOPDIR = $(CURDIR)
  endif

  ifeq ($(filter /%,$(CONFIG)),)
    ifeq ($(filter %/%,$(CONFIG)),)
      configpath = $(TOPDIR)/etc/config/$(CONFIG)
    else
      configpath = $(TOPDIR)/$(CONFIG)
    endif
  else
    configpath = $(CONFIG)
  endif

  include $(configpath)

  ETCDIR = $(TOPDIR)/etc/config

  ifeq ($(findstring debug,$(BUILDMODE)),debug)
    ifeq ($(findstring optimized,$(BUILDMODE)),optimized)
      $(error "cannot have both debug and optimized options")
    endif
  endif

  # unless $(LD) is set, use the same command to link as to compile
  ifeq ($(LD),ld)
    LD = $(CXX)
  endif

  ifeq ($(AS_EXT),)
    # assume the .S extension for assembly files by default,
    # unless specified otherwise in the config file
    AS_EXT = ".S"
  endif

  # debug/optimized
  ifeq ($(findstring debug,$(BUILDMODE)),debug)
    CXXFLAGS += $(DEBUG_CXXFLAGS)
    CPPFLAGS += -D_RWSTDDEBUG $(DEBUG_CPPFLAGS)
  else
    # TODO - check the number, check if the compiler supports it
    ifeq ($(findstring optimized,$(BUILDMODE)),optimized)
      CXXFLAGS  += $(OPTMZ_CXXFLAGS)
      CPPFLAGS  += $(OPTMZ_CPPFLAGS)
    endif
  endif

  ifeq ($(SHARED_SUFFIX),)
    # shared library suffix default (may be set in config file)
    SHARED_SUFFIX = .so
  endif

  ifeq ($(STATIC_SUFFIX),)
    # archive library suffix default (may be set in config file)
    STATIC_SUFFIX = .a
  endif

  # shared/archive
  ifeq ($(findstring shared,$(BUILDMODE)),shared)
    CXXFLAGS  += $(SHARED_CXXFLAGS)
    CPPFLAGS  += $(SHARED_CPPFLAGS)
    LDFLAGS   += $(SHARED_LDFLAGS)
    LIBSUFFIX  = $(SHARED_SUFFIX)
  else
    CXXFLAGS  += $(STATIC_CXXFLAGS)
    CPPFLAGS  += $(STATIC_CPPFLAGS)
    LDFLAGS   += $(STATIC_LDFLAGS)
    LIBSUFFIX  = $(STATIC_SUFFIX)

    # not applicable to non-shared builds
    PICFLAGS   =
    LDSOFLAGS  =
    RPATH      =
  endif

  # POSIX, Solaris, DCE threads
  ifeq ($(findstring pthreads,$(BUILDMODE)),pthreads)
    CPPFLAGS += $(MULTI_CPPFLAGS_POSIX)
    LDFLAGS  += $(MULTI_LDFLAGS_POSIX)
  else
    ifeq ($(findstring dcethreads,$(BUILDMODE)),dcethreads)
      ifneq ($(OSNAME),OSF1)
        $(error "DCE threads not suported on this platform:" $(OSNAME))
      endif

      CPPFLAGS += $(MULTI_CPPFLAGS_DCE)
      LDFLAGS  += $(MULTI_LDFLAGS_DCE)
    else
      ifeq ($(findstring threads,$(BUILDMODE)),threads)
        ifneq ($(OSNAME),SunOS)
          $(error "Solaris threads not suported on this platform: " $(OSNAME))
        endif

        CPPFLAGS +=  $(MULTI_CPPFLAGS_SOLARIS)
        LDFLAGS  +=  $(MULTI_LDFLAGS_SOLARIS)
      else
        CPPFLAGS += $(SINGL_CPPFLAGS)
        LDFLAGS   += $(SINGL_LDFLAGS)
      endif
    endif
  endif

  # wide (typically 64-bit) mode
  ifeq ($(findstring wide,$(BUILDMODE)),wide)
    CXXFLAGS  += $(CXXFLAGS.wide)
    LDFLAGS   += $(LDFLAGS.wide)
    LDSOFLAGS += $(LDSOFLAGS.wide)
    ARFLAGS   += $(ARFLAGS.wide)
  endif
  ifeq ($(findstring narrow,$(BUILDMODE)),narrow)
    CXXFLAGS  += $(CXXFLAGS.narrow)
    LDFLAGS   += $(LDFLAGS.narrow)
    LDSOFLAGS += $(LDSOFLAGS.narrow)
    ARFLAGS   += $(ARFLAGS.narrow)
  endif

  # platform is determined as {OS-name}-{OS-version}-{hardware}
  PLATFORM := $(shell uname -srm | sed "s/[ \/]/-/g")

  ifeq ($(OSNAME),SunOS)
    # Sun recommends to use uname -p rather than the POSIX uname -m
    PLATFORM := $(shell uname -srp | sed "s/[ \/]/-/g")
  else
    ifeq ($(OSNAME),AIX)
      PLATFORM := $(shell uname -srv | awk '{ print $$1 "-" $$3 "." $$2 }')
    else
      ifeq ($(findstring CYGWIN,$(OSNAME)),CYGWIN)
        PLATFORM := $(shell uname -sm | sed "s/[ \/]/-/g")
      endif
    endif
  endif

  # harmonize all the different Intel IA32 chips
  PLATFORM := $(subst i486,i86,$(PLATFORM))
  PLATFORM := $(subst i586,i86,$(PLATFORM))
  PLATFORM := $(subst i686,i86,$(PLATFORM))
  PLATFORM := $(shell echo $(PLATFORM) | tr "[:upper:]" "[:lower:]")

  CONFIG_H := $(CXX)-$(CCVER)-$(BUILDTYPE)

  # name of the library w/o the prefix and suffix
  # suitable for use by the linker after the -l option
  LIBBASE = std$(BUILDTYPE)

  # full library filename (including suffix)
  LIBNAME = lib$(LIBBASE)$(LIBSUFFIX)

  ifeq ($(DEPENDDIR),)
    DEPENDDIR=.depend
  endif

  # obtain library version number from the macro _RWSTD_VER
  # #defined in the rw/_config.h library header
  LIBVER := $(shell awk '/^.define _RWSTD_VER / { major = substr ($$3, 3, 2); minor = substr ($$3, 5, 2); micro = substr ($$3, 7, 2); print (major + 0) "." (minor + 0) "." (micro + 0) }' $(TOPDIR)/include/rw/_config.h)

########################################################################
#  TARGETS
########################################################################

all: libstd

# make-builddir function: creates the build directory tree
# defined as a single shell command to avoid executing each command
# in a separate subshell
define make-builddir
    [ "$(buildpath)" = "" -o -x $(buildpath) ] && exit 0;                    \
    echo "creating BUILDDIR=$(buildpath)";                                   \
    mkdir -p $(MAKEDIRS);                                                    \
    [ $$? -ne 0 ] && {                                                       \
        echo "unable to create build directory";                             \
        exit 1;                                                              \
    };                                                                       \
    ln -sf $(TOPDIR)/GNUmakefile         $(buildpath);                       \
    ln -sf $(ETCDIR)/GNUmakefile.cfg     $(buildpath)/include/GNUmakefile;   \
    ln -sf $(ETCDIR)/GNUmakefile.lib     $(LIBDIR)/GNUmakefile;              \
    ln -sf $(ETCDIR)/GNUmakefile.rwt     $(buildpath)/rwtest/GNUmakefile;    \
    ln -sf $(ETCDIR)/GNUmakefile.exm     $(EXMDIR)/GNUmakefile;              \
    ln -sf $(ETCDIR)/GNUmakefile.tst     $(TSTDIR)/GNUmakefile;              \
    ln -sf $(ETCDIR)/GNUmakefile.ph      $(PHTSTDIR)/GNUmakefile;            \
    ln -sf $(ETCDIR)/GNUmakefile.bin     $(BINDIR)/GNUmakefile;              \
    ln -sf $(ETCDIR)/makefile.common     $(buildpath);                       \
    ln -sf $(ETCDIR)/makefile.rules      $(buildpath);                       \
    ln -sf $(ETCDIR)/configure.sh        $(buildpath)/include/configure;     \
    ln -sf $(BINDIR)/exec                $(buildpath)/run;                   \
    ln -sf $(BINDIR)/exec                $(BINDIR)/run;                      \
    ln -sf $(ETCDIR)/run_locale_utils.sh $(BINDIR)/run_utils;                \
    ln -sf $(BINDIR)/exec                $(TSTDIR)/run;                      \
    ln -sf $(BINDIR)/exec                $(PHTSTDIR)/run;                    \
    ln -sf $(BINDIR)/exec                $(EXMDIR)/run
endef   # make-builddir


# create $(MAKEFILE_IN)
#
# NOTE: adding a new variable here that is used by the configuration
#       machinery requires replacing $BUILDDIR/$(MAKEFILE_IN) as well
#       as $BUILDDIR/include/vars.sh generated from this file and
#       used by the libc_decl.sh script
$(MAKEFILE_IN): $(configpath)
	@(   $(make-builddir);                                              \
             echo "generating $(MAKEFILE_IN) from $(configpath)"            \
          && echo "TOPDIR     = $(TOPDIR)"               >> $(MAKEFILE_IN)  \
          && echo "BUILDDIR   = $(buildpath)"            >> $(MAKEFILE_IN)  \
          && echo "CONFIG     = $$""(TOPDIR)/etc/config/$(CONFIG)"          \
                                                         >> $(MAKEFILE_IN)  \
          && echo "CONFIG_H   = $(CONFIG_H)"             >> $(MAKEFILE_IN)  \
          && echo "BUILDTYPE  = $(BUILDTYPE)"            >> $(MAKEFILE_IN)  \
          && echo "BUILDMODE  = $(BUILDMODE)"            >> $(MAKEFILE_IN)  \
          && echo "CXX        = $(CXX)"                  >> $(MAKEFILE_IN)  \
          && echo "CXXFLAGS   = $(CXXFLAGS)"             >> $(MAKEFILE_IN)  \
          && echo "PRELINKFLAGS = $(PRELINKFLAGS)"       >> $(MAKEFILE_IN)  \
          && echo "PICFLAGS   = $(PICFLAGS)"             >> $(MAKEFILE_IN)  \
          && echo "CPPFLAGS   = $(CPPFLAGS)"             >> $(MAKEFILE_IN)  \
          && echo "WARNFLAGS  = $(WARNFLAGS)"            >> $(MAKEFILE_IN)  \
          && echo "DEPENDFLAGS     = $(DEPENDFLAGS)"     >> $(MAKEFILE_IN)  \
          && echo "DEPENDFLAGS.cpp = $(DEPENDFLAGS.cpp)" >> $(MAKEFILE_IN)  \
          && echo "DEPENDFLAGS$(AS_EXT) = $(value DEPENDFLAGS$(AS_EXT))"    \
                                                         >> $(MAKEFILE_IN)  \
          && echo "AS_EXT     = $(AS_EXT)"               >> $(MAKEFILE_IN)  \
          && echo "LD         = $(LD)"                   >> $(MAKEFILE_IN)  \
          && echo "LDFLAGS    = $(LDFLAGS)"              >> $(MAKEFILE_IN)  \
          && echo "LDLIBS     = $(LDLIBS)"               >> $(MAKEFILE_IN)  \
          && echo "LDSOFLAGS  = $(LDSOFLAGS)"            >> $(MAKEFILE_IN)  \
          && echo "LIBM       = $(LIBM)"                 >> $(MAKEFILE_IN)  \
          && echo "MAPFLAGS   = $(MAPFLAGS)"             >> $(MAKEFILE_IN)  \
          && echo "RPATH      = $(RPATH)"                >> $(MAKEFILE_IN)  \
          && [ "$(MAPFILE)" = "" ]                                          \
          || echo "MAPFILE    = $$""(TOPDIR)/$(MAPFILE)" >> $(MAKEFILE_IN)  \
          && echo "RUNFLAGS   = -t 300"                  >> $(MAKEFILE_IN)  \
          && echo "DEPENDDIR  = $(DEPENDDIR)"            >> $(MAKEFILE_IN)  \
          && echo "PHDIR      = $(PHDIR)"                >> $(MAKEFILE_IN)  \
          && echo "PHWARNFLAGS = $(PHWARNFLAGS)"         >> $(MAKEFILE_IN)  \
          && echo "LIBSUFFIX  = $(LIBSUFFIX)"            >> $(MAKEFILE_IN)  \
          && echo "LIBBASE    = std$$""(BUILDTYPE)"      >> $(MAKEFILE_IN)  \
          && echo "LIBVER     = $(LIBVER)"               >> $(MAKEFILE_IN)  \
          && echo "LIBNAME    = lib$$""(LIBBASE)$$""(LIBSUFFIX)"            \
                                                         >> $(MAKEFILE_IN)  \
          && echo "AR         = $(AR)"                   >> $(MAKEFILE_IN)  \
          && echo "ARFLAGS    = $(ARFLAGS)"              >> $(MAKEFILE_IN)  \
          && echo "CCVER      = $(CCVER)"                >> $(MAKEFILE_IN)  \
          && echo "SHARED     = $(SHARED)"               >> $(MAKEFILE_IN)  \
          && echo "CATFILE    = $(CATFILE)"              >> $(MAKEFILE_IN)  \
          && echo "OMIT_EXM_SRCS = $(OMIT_EXM_SRCS)"     >> $(MAKEFILE_IN)  \
          && echo "OMIT_TST_SRCS = $(OMIT_TST_SRCS)"     >> $(MAKEFILE_IN)  \
          && echo "BUILDTAG   = $(BUILDTAG)"             >> $(MAKEFILE_IN)  \
          && echo "PLATFORM   = $(PLATFORM)"             >> $(MAKEFILE_IN)  \
          && echo "DEFAULT_SHROBJ = $(DEFAULT_SHROBJ)"   >> $(MAKEFILE_IN)  \
          && echo "WITH_CADVISE = $(WITH_CADVISE)"       >> $(MAKEFILE_IN)  \
          && echo "CADVISEFLAGS = $(CADVISEFLAGS)"       >> $(MAKEFILE_IN)  \
          && echo "WITH_PURIFY = $(WITH_PURIFY)"         >> $(MAKEFILE_IN)  \
          && echo "PURIFYFLAGS = $(PURIFYFLAGS)"         >> $(MAKEFILE_IN)  \
          && echo "CXX_REPOSITORY = $(CXX_REPOSITORY)"   >> $(MAKEFILE_IN));

# creates the build directory tree and generates makefile.in
builddir: $(MAKEFILE_IN)
	@echo "build directory created: BUILDDIR=$(BUILDDIR)"


# prevent trying to make makefile.in when $(BUILDDIR) is
# not defined and -include $(BUILDDIR)/makefile.in fails
makefile.in:


.DEFAULT:
	@$(MAKE) -C$(buildpath) $(MAKEFLAGS) $(MAKECMDGOALS) \
                 BUILDDIR=$(buildpath)


else   # ifneq ($(in_topdir),1) ##############################################

  ######################################################################
  # THIS BLOCK IS EVALUATED ONLY WHEN MAKE IS INVOKED IN BUILDDIR
  ######################################################################

all: config lib examples util rwtest tests $(PHDTSTDIR)

# configure (create config.h)
config:
	@$(MAKE) -C$(BUILDDIR)/include

# build utilities
util:
	@$(MAKE) -C$(BINDIR)

# build library
lib:
	@$(MAKE) -C$(LIBDIR)

# build the test library
rwtest:
	@$(MAKE) -C$(BUILDDIR)/rwtest

# build tests, ignore failures
tests:
	-$(MAKE) -C$(TSTDIR)

# build the Plum Hall test suite, ignore failures
phtst:
	-@$(MAKE) -C$(PHTSTDIR)

# make examples, ignore failures
examples:
	-@$(MAKE) -C$(EXMDIR)

# install library, headers, and utilities
install:
	mkdir -p $(PREFIX)
	$(MAKE) -Clib $@
	$(MAKE) -Cbin $@
	mkdir -p $(PREFIX)/include
	cp include/config.h $(PREFIX)/include
	cp -Rf $(TOPDIR)/include $(PREFIX)

# try each submakefile
.DEFAULT:
	-@$(MAKE) -C$(BUILDDIR)/include $@
	-@$(MAKE) -C$(LIBDIR) $@
	-@$(MAKE) -C$(BUILDDIR)/rwtest $@
	-@$(MAKE) -C$(BUILDDIR)/bin $@
	-@$(MAKE) -C$(TSTDIR) $@
	-@$(MAKE) -C$(PHTSTDIR) $@
	-@$(MAKE) -C$(EXMDIR) $@

endif   # ($(CURDIR),$(TOPDIR))


.PHONY: all bin builddir examples install lib phtst post rwtest tests util
