#  (C) 1993 by Argonne National Laboratory and Mississipi State University.
#      All rights reserved.  See COPYRIGHT in top-level directory.
#

##### User configurable options #####

top_srcdir           = /tmp/mpich2-1.0.5p4/src/mpe2/src/logging

CC                   = gcc
CC_SHL               = @CC_SHL@
CLINKER              = gcc
MPI_CC               = /tmp/mpich2-1.0.5p4/bin/mpicc
MPI_CLINKER          = $(MPI_CC)
AR                   = ar
ARFLAGS              = cr
RANLIB               = ranlib
MAKE                 = make --no-print-directory
MPI_INC              = 
MPI_LIBS             = 
INCLUDE_DIR          = -I.. -I${top_srcdir}/include \
                       -I${includebuild_dir} \
                       -I../../.. -I${top_srcdir}/../../include \
                       $(MPI_INC)
PROF_LIBNAME         = mpe
CFLAGS               = 
MPE_LIBDIR           = /tmp/mpich2-1.0.5p4/src/mpe2/lib
LIB_PATH             = $(MPI_LIBS)
PROF_LIBS            = -L$(MPE_LIBDIR) @PROF_LIBS@ $(MPI_LIBS)
LDFLAGS              = 
MPE_BUILD_FORTRAN2C  = yes

### End User configurable options ###

SHELL            = /bin/sh
RM               = rm
MV               = mv

VPATH=.:$(srcdir)

# Installation directories
prefix           = /usr/local
exec_prefix      = ${prefix}
bindir           = ${exec_prefix}/bin
includedir       = ${prefix}/include
libdir           = ${exec_prefix}/lib
# Build directories
includebuild_dir = /tmp/mpich2-1.0.5p4/src/mpe2/include
libbuild_dir     = /tmp/mpich2-1.0.5p4/src/mpe2/lib
binbuild_dir     = /tmp/mpich2-1.0.5p4/src/mpe2/bin
srcdir           = /tmp/mpich2-1.0.5p4/src/mpe2/src/logging/src

EXECS            = ${binbuild_dir}/clog2_print \
                   ${binbuild_dir}/clog2_join \
                   ${binbuild_dir}/clog2_repair

# GETNAME_DEFS are needed by mpehname.c
CC_FLAGS         = $(CFLAGS) $(INCLUDE_DIR) $(MPE_COPTS)
CC_LDFLAGS       = $(LDFLAGS) $(CFLAGS) $(MPE_LDOPTS)

MPE_CSOURCES     = clog_util.c clog_timer.c clog_uuid.c clog_commset.c \
                   clog_preamble.c clog_record.c clog_sync.c \
                   clog_block.c clog_buffer.c clog_merger.c \
                   clog_cache.c clog_joiner.c clog.c mpe_log.c
MPE_P_COBJECTS   = $(MPE_CSOURCES:.c=.po)
MPE_N_COBJECTS   = $(MPE_CSOURCES:.c=.no)

MPE_WSOURCES     = mpe_logf.c
MPE_P_WOBJECTS   = $(MPE_WSOURCES:.c=.po)
MPE_N_WOBJECTS   = $(MPE_WSOURCES:.c=.no)

MPE_XSOURCES     = mpe_log_null.c
MPE_P_XOBJECTS   = $(MPE_XSOURCES:.c=.po)
MPE_N_XOBJECTS   = $(MPE_XSOURCES:.c=.no)

MPE_SHLCOBJECTS  = $(MPE_COBJECTS:.o=.lo)
MPE_SHLWOBJECTS  = $(MPE_WOBJECTS:.o=.lo)

.SUFFIXES: .c .o .po .no .lo .a 

.c.po:
	$(MPI_CC) $(CC_FLAGS) -c $<
	$(MV) $*.o $*.po

.c.no:
	$(CC) $(CC_FLAGS) -DCLOG_NOMPI -c $<
	$(MV) $*.o $*.no

# Allow compilers that do not allow -o for renaming object files
.c.lo:
	$(CC_SHL) $(CC_FLAGS) -c $< $(INC_DIR)
	@$(MV) $*.o $*.lo

# default_all is the same as default, but without the RANLIB.  This
# can speed up the build (ranlibs can take a LONG time).  profile_all 
# is the same, but for the profile library
# **** Currently the same as default for simplicity ****
default_all: default
profile_all: 

#
default:
	$(MAKE) ${libbuild_dir}/lib$(PROF_LIBNAME)_nompi.a
	$(MAKE) ${libbuild_dir}/lib$(PROF_LIBNAME)_nompi_null.a
	$(MAKE) ${libbuild_dir}/lib$(PROF_LIBNAME)_null.a
	$(MAKE) ${libbuild_dir}/lib$(PROF_LIBNAME).a
	$(MAKE) $(EXECS)

#
# It is tempting here to use ... libmpe.a($(MPE_OBJECTS)) as the dependency,
# but this would require that all makes properly handle library dependencies.
# Since makes that DO are the exception rather than the rule, we don't
# use this form
#
# We've also had trouble with this.  Sometimes, under Solaris, the 
# first file in the dependency is built but not included with $? 
# This is clearly a bug in the make, since the determination of dependencies
# is done once (e.g., a blip in the filesystem time can't be 
# responsible if make works as Sun documents it).  To fix this, we
# add all the objects to the library, not just the "recent" ones.
${libbuild_dir}/lib$(PROF_LIBNAME).a: $(MPE_P_COBJECTS)
	$(AR) $(ARFLAGS) $@ $(MPE_P_COBJECTS)
	@if [ "$(MPE_BUILD_FORTRAN2C)" = "yes" ] ; then \
	     $(MAKE) $(MPE_P_WOBJECTS) ; \
	     $(AR) $(ARFLAGS) $@ $(MPE_P_WOBJECTS) ; \
	 fi
	$(RANLIB) $@

${libbuild_dir}/lib$(PROF_LIBNAME)_nompi.a: $(MPE_N_COBJECTS)
	$(AR) $(ARFLAGS) $@ $(MPE_N_COBJECTS)
	@if [ "$(MPE_BUILD_FORTRAN2C)" = "yes" ] ; then \
	     $(MAKE) $(MPE_N_WOBJECTS) ; \
	     $(AR) $(ARFLAGS) $@ $(MPE_N_WOBJECTS) ; \
	 fi
	$(RANLIB) $@

# -DCLOG_NOMPI can be used when creating lib$(PROF_LIBNAME)_null.a
${libbuild_dir}/lib$(PROF_LIBNAME)_null.a: $(MPE_P_XOBJECTS)
	$(AR) $(ARFLAGS) $@ $(MPE_P_XOBJECTS)
	@if [ "$(MPE_BUILD_FORTRAN2C)" = "yes" ] ; then \
	     $(MAKE) $(MPE_P_WOBJECTS) ; \
	     $(AR) $(ARFLAGS) $@ $(MPE_P_WOBJECTS) ; \
	 fi
	$(RANLIB) $@

# -DCLOG_NOMPI can be used when creating lib$(PROF_LIBNAME)_nompi_null.a
${libbuild_dir}/lib$(PROF_LIBNAME)_nompi_null.a: $(MPE_N_XOBJECTS)
	$(AR) $(ARFLAGS) $@ $(MPE_N_XOBJECTS)
	@if [ "$(MPE_BUILD_FORTRAN2C)" = "yes" ] ; then \
	     $(MAKE) $(MPE_N_WOBJECTS) ; \
	     $(AR) $(ARFLAGS) $@ $(MPE_N_WOBJECTS) ; \
	 fi
	$(RANLIB) $@

${binbuild_dir}/clog2_print: clog_print.no
	$(CLINKER) $(CC_LDFLAGS) -o $@ clog_print.no \
	                         -L${libbuild_dir} -l$(PROF_LIBNAME)_nompi

${binbuild_dir}/clog2_join: clog_join.no
	$(CLINKER) $(CC_LDFLAGS) -o $@ clog_join.no \
	                         -L${libbuild_dir} -l$(PROF_LIBNAME)_nompi

${binbuild_dir}/clog2_repair: clog_repair.no
	$(CLINKER) $(CC_LDFLAGS) -o $@ clog_repair.no \
	                         -L${libbuild_dir} -l$(PROF_LIBNAME)_nompi

#
# Remove the old libraries before rebuilding (in case they came from another
# architecture or are otherwise damaged)
rmlib:
	@-$(RM) -f ${libbuild_dir}/lib$(PROF_LIBNAME).a 
	@-$(RM) -f ${libbuild_dir}/lib$(PROF_LIBNAME)_null.a
	@-$(RM) -f ${libbuild_dir}/lib$(PROF_LIBNAME)_nompi_null.a
	@-$(RM) -f ${libbuild_dir}/lib$(PROF_LIBNAME)_nompi.a 

rmprog:
	@-$(RM) -f $(EXECS)

clean: rmprog
	@-$(RM) -f ${srcdir}/*.*o *.*o *~ PI*

distclean: clean rmlib
	@-$(RM) -f Makefile
