## HDF5 Library Makefile(.in)
##
##
## Copyright by the Board of Trustees of the University of Illinois.
## All rights reserved.
##
## This file is part of HDF5.  The full HDF5 copyright notice, including
## terms governing use, modification, and redistribution, is contained in
## the files COPYING and Copyright.html.  COPYING can be found at the root
## of the source code distribution tree; Copyright.html can be found at the
## root level of an installed copy of the electronic HDF5 document set and
## is linked from the top-level documents page.  It can also be found at
## http://hdf.ncsa.uiuc.edu/HDF5/doc/Copyright.html.  If you do not have
## access to either file, you may request a copy from hdfhelp@ncsa.uiuc.edu.
##
top_srcdir=@top_srcdir@
top_builddir=..
srcdir=@srcdir@

@COMMENCE@

TRACE=$(PERL) $(top_srcdir)/bin/trace
.SUFFIXES: .c .o .lo .x

###############################################################################
## MODIFICATONS FOR CREATING THE PABLO INSTRUMENTED LIBRARY libhdf5-inst.a
## For Pablo instrumenation of parallel code, remove the # from in front of
## PABLO_MPIO_FLAGS.
###############################################################################
PARALLEL_PABLO=@PARALLEL_PABLO@

PABLO_MPIO_FLAGS=${PARALLEL_PABLO:yes=-DH5_HAVE_PARALLEL -DH5_HAVE_MPIOTRACE}
PABLO_INC=-I$(top_srcdir)/src -I$(top_srcdir)/pablo -I$(top_builddir)/src -I.
PABLO_DEFS=-DH5_HAVE_PABLO -DH5_DEBUG_API -DNDEBUG -D$(PABLO_BLD)_BUILD

PABLO_FLAGS=$(PABLO_DEFS) $(PABLO_MPIO_FLAGS) $(PABLO_INC)

CPPFLAGS=$(PABLO_FLAGS) @CPPFLAGS@

## This is our main target:
LIB=libhdf5-inst.a

SRCDIRS=$(top_srcdir)/pablo/. $(top_srcdir)/src/.

# Took out the GNU'isms for the SRCFILES and LIB_SRC variables.
#
# This may cause problems in two ways: any changes to the SRCDIRS
# variable should be make to the SRCFILES macro also and the LIB_SRC
# variable now has directory paths included in it (which may cause
# problems somewhere). - QAK
#
LIB_SRC=H5.c H5A.c H5AC.c H5B.c H5D.c H5Dio.c H5E.c H5F.c H5FD.c \
	H5FDcore.c H5FDfamily.c H5FDfphdf5.c H5FDgass.c H5FDlog.c \
	H5FDmpio.c H5FDmpiposix.c H5FDmulti.c H5FDsec2.c H5FDsrb.c \
	H5FDstdio.c H5FDstream.c H5FL.c H5FO.c H5FP.c H5FPclient.c \
	H5FPserver.c H5FS.c H5Fcompact.c H5Fcontig.c H5Fistore.c H5Fseq.c \
	H5G.c H5Gent.c H5Gnode.c H5Gstab.c H5HG.c H5HL.c H5HP.c H5I.c \
	H5MF.c H5MM.c H5O.c H5Oattr.c H5Obogus.c H5Ocont.c H5Odtype.c \
	H5Oefl.c H5Ofill.c H5Olayout.c H5Omtime.c H5Oname.c H5Onull.c \
 	H5Opline.c H5Osdspace.c H5Oshared.c H5Ostab.c H5P.c H5Pdcpl.c \
	H5Pdxpl.c H5Pfapl.c H5Pfcpl.c H5Ptest.c H5R.c H5RS.c H5S.c H5ST.c \
	H5Sall.c H5Shyper.c H5Smpio.c H5Snone.c H5Spoint.c H5Sselect.c \
	H5Stest.c H5T.c H5TB.c H5TS.c H5Tarray.c H5Tbit.c H5Tcommit.c \
	H5Tcompound.c H5Tconv.c H5Tcset.c H5Tenum.c H5Tfields.c H5Tfixed.c \
	H5Tfloat.c H5Tinit.c H5Tnative.c H5Toffset.c H5Topaque.c H5Torder.c \
	H5Tpad.c H5Tprecis.c H5Tstrpad.c H5Tvlen.c H5V.c H5Z.c H5Zdeflate.c \
	H5Zfletcher32.c H5Zshuffle.c H5Zszip.c H5detect.c

PABLO_OBJ=PabloHDF.o PabloHDF_RT.o PabloHDF_SDDF.o PabloHDF_MPIO.o

PABLO_INCLUDES=HDFentryNames.h HDFidList.h ProcIDs.h HDFTrace.h ProcTrace.h   \
               ProcTrace.inc

LIB_COBJ=$(LIB_SRC:.c=.o)
LIB_OBJ=$(PABLO_OBJ) $(LIB_COBJ)

$(LIB_COBJ): $(PABLO_INCLUDES)
$(PABLO_OBJ): $(PABLO_INCLUDES)
.c.o:
	if test "$*" != "H5Tinit"; then                                  \
	  $(CC) $(CFLAGS) $(CPPFLAGS) -c $(top_srcdir)/src/$*.c -o $*.o; \
	else                                                             \
	  $(CC) $(CFLAGS) $(CPPFLAGS) -c $(top_builddir)/src/$*.c -o $*.o; \
	fi;
#	cp $*.o $@

# 'vpath' directive is only supported in gmake, take out - QAK
#vpath %.c   $(shell echo $(SRCDIRS) | sed 's/ /:/g')

## Pablo header files (to be installed)...
PABLO_HDR=HDFentryNames.h HDFidList.h ProcIDs.h HDFTrace.h ProcTrace.h   \
          ProcTrace.inc

##------------------------------------------------------------ -*- makefile -*-
## The following section of this makefile comes from the
## `./config/conclude' file which was generated with config.status
## from `./config/conclude.in'.
##-----------------------------------------------------------------------------


## This is the target for the library described in the main body of the
## makefile.
##
lib: $(PABLO_INCLUDES) $(LIB)
$(LIB): $(PABLO_OBJ) $(LIB_COBJ) 
	$(AR) -rc $@ $(LIB_OBJ)
	$(RANLIB) $@
##
## Dummy this out so that there is no redundant make of the library
##
progs: 

## Build a tags file in this directory.
TAGS: $(LIB_SRC)
	$(RM) $@
	-etags $(LIB_SRC)

##
## Dummy this out so that there is no redundant make of the library
##
tests: 

## Install the library, the public header files, and programs.
install: $(LIB) $(PABLO_HDR)
	@test -d $(libdir) || mkdir $(libdir)
	@for f in X $(LIB); do                                                 \
	  if test $$f != X; then                                               \
	    (set -x; $(INSTALL_DATA) $$f $(libdir)/. || exit 1);               \
	  fi;                                                                  \
	done
	@test -d $(includedir) || mkdir $(includedir)
	@for f in X $(PABLO_HDR); do                                           \
	    if test $$f != X; then                                             \
	       if test -f $$f; then                                            \
	          (set -x; $(INSTALL_DATA) $$f $(includedir)/. || exit 1);     \
	       else                                                            \
	          (set -x; $(INSTALL_DATA) $(srcdir)/$$f $(includedir)/. ||    \
	             exit 1);                                                  \
	       fi;                                                             \
	    fi;                                                                \
	done

## Removes those things that `make install' (would have) installed.
uninstall:
	@if test "X$(LIB)" != X; then                                          \
	  set -x; cd $(libdir) && $(RM) $(LIB);                                \
	fi

## Removes temporary files without removing the final target files.  That is,
## remove things like object files but not libraries or executables.
##
mostlyclean:
	$(RM) $(LIB_OBJ) $(LIB_XOBJ) $(TEST_OBJ) $(PROG_OBJ) $(MOSTLYCLEAN)

## Like `mostlyclean' except it also removes the final targets: things like
## libraries and executables.  This target doesn't remove any file that
## is part of the HDF5 distribution.
##
clean: mostlyclean pablo_clean
	$(RM) $(LIB) $(TESTS) $(PROGS) $(CLEAN) H*.c 

pablo_clean: clean
	$(RM) $(PABLO_CLEAN) H*.x


## Like `clean' except it also removes files that were created by running
## configure.  If you've unpacked the source and built HDF5 without creating
## any other files, then `make distclean' will leave only the files that were
## in the distribution.
##
distclean: clean
	$(RM) .depend TAGS *~ core *.core *.bak *.old *.new $(DISTCLEAN)
	@if test -f $(top_srcdir)/src/Makefile.in; then                       \
	  (set -x; $(RM) Makefile);                                           \
	fi

## Like `distclean' except it deletes all files that can be regenerated from
## the makefile, including those generated from autoheader and autoconf.
##
maintainer-clean: distclean
	$(RM) *~ core core.* *.core *.bak *.contrib gmon.out

.c.lo:
	@$(LT_COMPILE) $(CFLAGS) $(CPPFLAGS) -c $(top_srcdir)/src/$*.c $<

.PHONY: progs test _test check dep depend

PABLO_CLEAN=HDFentryNames.h HDFidList.h ProcMasks.h HDFentries.txt            \
            ProcTrace.inc

#
# Leave the following lines that are commented out.  These are needed to 
# create HDFentryNames.h, HDFidList.h, ProcMask.h and ProcTrace.inc whenever
# new procedures are added.
#
HDFentries.txt: $(top_srcdir)/src/*.c
	grep "FUNC_ENTER[_INITNOAPICLEARFS ]*(" $(top_srcdir)/src/*.[ch] |   \
       sed "s/.*FUNC_ENTER[_INITNOAPICLEARFS ]*( *//;s/[,)].*//" | sort -u > $@

HDFentryNames.h: HDFentries.txt
	sed "s/.*/\"&\",/" $? > $@

HDFidList.h: HDFentries.txt
	sed "s/.*/ID_&,/" $? > $@
	echo ID_ALLHDF, >> $@
	grep "#define[ 	]*PABLO_MASK" $(top_srcdir)/src/*.c |                 \
           sed "s/.*H5/ID_H5/;s/mask.*/c,/" | sort -u >> $@

ProcMasks.h: $(top_srcdir)/src/*.c
	grep "#define[ 	]*PABLO_MASK" $(top_srcdir)/src/*.c |                 \
           sed "s/.*[ 	]H5/H5/;s/_mask.*//;s/.*/#define &_mask ID_&_c/" >$@

ProcIDs.h: HDFidList.h ProcMasks.h

ProcTrace.inc: HDFidList.h
	sed "=" $? | sed -f $(top_srcdir)/pablo/PabloSedscr > $@

PabloHDF.o: PabloHDF.c $(PABLO_INCLUDES) 
	$(CC) -g $(CFLAGS) $(CPPFLAGS) $(PABLO_FLAGS) -c $<

PabloHDF_RT.o: PabloHDF_RT.c $(PABLO_INCLUDES) 
	$(CC) $(CFLAGS) $(CPPFLAGS) $(PABLO_FLAGS) -c $<

PabloHDF_SDDF.o: PabloHDF_SDDF.c $(PABLO_INCLUDES) 
	$(CC) $(CFLAGS) $(CPPFLAGS) $(PABLO_FLAGS) -c $<

PabloHDF_MPIO.o: PabloHDF_MPIO.c $(PABLO_INCLUDES) 
	$(CC) $(CFLAGS) $(CPPFLAGS) $(PABLO_FLAGS) -c $<

PabloHDFff.o: PabloHDFff.f $(PABLO_INCLUDES) 
	$(F77) $(FFLAGS) -O -c PabloHDFff.f