##
# Copyright by The HDF Group.
# 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://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have
# access to either file, you may request a copy from help@hdfgroup.org.
##
## HDF5 Library Test Makefile(.in)
##
top_srcdir=@top_srcdir@
top_builddir=..
srcdir=@srcdir@
@COMMENCE@

## Add include directory to the C preprocessor flags and the h5test and hdf5
## libraries to the library list.
CPPFLAGS=-I. -I$(srcdir) -I../src -I$(top_srcdir)/src @CPPFLAGS@

## These are our main targets. They should be listed in the order to be
## executed, generally most specific tests to least specific tests.
TEST_PROGS=testhdf5 lheap ohdr stab gheap cache hyperslab istore bittests    \
    dtypes dsets cmpd_dset extend external links unlink big mtime fillval    \
    mount flush1 flush2 enum gass_write gass_read gass_append set_extent     \
    srb_write srb_append srb_read ttsafe getname file_handle     \
    ntypes dangle reserved

TIMINGS=testmeta

## The libh5test.a library provides common support code for the tests. We link
## this library statically because some systems can only link executables to
## a single shared library and libhdf5 is much bigger than libh5test.
LIBHDF5=../src/libhdf5.la
LIB=libh5test.la
LIB_SRC=h5test.c testframe.c
LIB_OBJ=$(LIB_SRC:.c=.lo)
PUB_LIB=

## Temporary files.  These files are the ones created by setting the
## HDF5_NOCLEANUP environment variable and running `make test' without
## specifying a file prefix or low-level driver.  Changing the file
## prefix or low-level driver with environment variables will influence 
## the temporary file name in ways that the makefile is not aware of.
MOSTLYCLEAN=cmpd_dset.h5 compact_dataset.h5 dataset.h5 extend.h5 istore.h5   \
            tfile[1-3].h5 th5s1.h5 th5s3.h5 lheap.h5 ohdr.h5 stab[1-2].h5 \
            extern_[1-3].h5 extern_[1-4][ab].raw gheap[0-4].h5      \
            links.h5 links[1-3].h5 big.data big[0-9][0-9][0-9][0-9][0-9].h5  \
            sec2.h5 stdio.h5 dtypes[1-7].h5 tattr.h5 coord.h5         \
            tselect.h5 mtime.h5 unlink.h5 fillval_[0-9].h5 fillval.raw       \
            mount_[0-9].h5 testmeta.h5 ttime.h5 trefer[1-3].h5 tvltypes.h5   \
            tvlstr.h5 tvlstr2.h5 flush.h5 enum1.h5 titerate.h5 ttsafe.h5     \
            tarray1.h5 tgenprop.h5 tmisc1.h5 tmisc2a.h5 tmisc2b.h5 tmisc3.h5 \
            tmisc4a.h5 tmisc4b.h5 tmisc5.h5 tmisc6.h5 tmisc7.h5 tmisc8.h5    \
            tmisc9.h5 tmisc10.h5 tmisc11.h5 tmisc12.h5 tmisc13a.h5           \
            tmisc13b.h5 tmisc14.h5 set_extent_read.h5 set_extent_create.h5   \
            getname.h5 getname1.h5 getname2.h5 getname3.h5 sec2_file.h5      \
            family_file000[0-3][0-9].h5 multi_file-[rs].h5 core_file         \
            new_move_[ab].h5 ntypes.h5 dangle.h5 test_filters.h5 	     \
	    tstint[1-2].h5 unlink_chunked.h5

CLEAN=$(TIMINGS)

## Source and object files for programs...  The TEST_SRC list contains all the
## source files and is used for things like dependencies, archiving, etc.  The
## other source lists are for the individual tests, the files of which may
## overlap with other tests.

TEST_SRC=big.c bittests.c cache.c cmpd_dset.c dsets.c dtypes.c extend.c      \
    external.c fillval.c flush1.c flush2.c gheap.c h5test.c hyperslab.c      \
    istore.c lheap.c links.c mount.c mtime.c ohdr.c stab.c tarray.c          \
    tattr.c tconfig.c tcoords.c testhdf5.c testmeta.c tfile.c                \
    tgenprop.c th5s.c theap.c titerate.c tmeta.c tmisc.c trefer.c trefstr.c  \
    tselect.c tskiplist.c ttime.c ttst.c tvltypes.c tvlstr.c                 \
    unlink.c enum.c ttsafe.c ttsafe_dcreate.c ttsafe_error.c                 \
    ttsafe_cancel.c ttsafe_acreate.c gass_write.c gass_read.c                \
    gass_append.c srb_read.c srb_write.c srb_append.c \
    set_extent.c getname.c file_handle.c ntypes.c dangle.c reserved.c

TEST_OBJ=$(TEST_SRC:.c=.lo)

VFD_LIST=sec2 stdio core split multi family

## Private header files (not to be installed)...
PRIVATE_HDR=testhdf5.h ttsafe.h

## Additional targets
.PHONY: timings _timings
timings _timings: $(TIMINGS)
	@for timing in $(TIMINGS) dummy; do				      \
	   if test $$timing != dummy; then				      \
	      echo "Running $$timing $(TEST_FLAGS)"; 			      \
	      $(RUNTEST) ./$$timing $(TEST_FLAGS) || exit 1; 		      \
	   fi;								      \
	done;

## Programs have to be built before they can be tested!
##
check test _test: $(TEST_PROGS)

## How to build the tests...  They all depend on the test and hdf5 libraries.
$(TEST_PROGS): $(LIB) $(LIBHDF5)

TESTHDF5_OBJ=testhdf5.lo tarray.lo tattr.lo tconfig.lo tfile.lo               \
    tgenprop.lo th5s.lo tcoords.lo theap.lo titerate.lo tmeta.lo tmisc.lo     \
    trefer.lo trefstr.lo tselect.lo tskiplist.lo ttime.lo ttst.lo             \
    tvltypes.lo tvlstr.lo

TTS_OBJ=ttsafe.lo ttsafe_dcreate.lo ttsafe_error.lo             \
    ttsafe_cancel.lo ttsafe_acreate.lo

testhdf5: $(TESTHDF5_OBJ)
	@$(LT_LINK_EXE) $(CFLAGS) -o $@ $(TESTHDF5_OBJ) $(LIB) $(LIBHDF5) $(LDFLAGS) $(LIBS)

lheap: lheap.lo
	@$(LT_LINK_EXE) $(CFLAGS) -o $@ lheap.lo $(LIB) $(LIBHDF5) $(LDFLAGS) $(LIBS)

cache: cache.lo
	@$(LT_LINK_EXE) $(CFLAGS) -o $@ cache.lo $(LIB) $(LIBHDF5) $(LDFLAGS) $(LIBS)

ohdr: ohdr.lo
	@$(LT_LINK_EXE) $(CFLAGS) -o $@ ohdr.lo $(LIB) $(LIBHDF5) $(LDFLAGS) $(LIBS)

stab: stab.lo
	@$(LT_LINK_EXE) $(CFLAGS) -o $@ stab.lo $(LIB) $(LIBHDF5) $(LDFLAGS) $(LIBS)

gheap: gheap.lo
	@$(LT_LINK_EXE) $(CFLAGS) -o $@ gheap.lo $(LIB) $(LIBHDF5) $(LDFLAGS) $(LIBS)

dsets: dsets.lo
	@$(LT_LINK_EXE) $(CFLAGS) -o $@ dsets.lo $(LIB) $(LIBHDF5) $(LDFLAGS) $(LIBS)

bittests: bittests.lo
	@$(LT_LINK_EXE) $(CFLAGS) -o $@ bittests.lo $(LIB) $(LIBHDF5) $(LDFLAGS) $(LIBS)

dtypes: dtypes.lo
	@$(LT_LINK_EXE) $(CFLAGS) -o $@ dtypes.lo $(LIB) $(LIBHDF5) $(LDFLAGS) $(LIBS)

hyperslab: hyperslab.lo
	@$(LT_LINK_EXE) $(CFLAGS) -o $@ hyperslab.lo $(LIB) $(LIBHDF5) $(LDFLAGS) $(LIBS)

istore: istore.lo
	@$(LT_LINK_EXE) $(CFLAGS) -o $@ istore.lo $(LIB) $(LIBHDF5) $(LDFLAGS) $(LIBS)

cmpd_dset: cmpd_dset.lo
	@$(LT_LINK_EXE) $(CFLAGS) -o $@ cmpd_dset.lo $(LIB) $(LIBHDF5) $(LDFLAGS) $(LIBS)

extend: extend.lo
	@$(LT_LINK_EXE) $(CFLAGS) -o $@ extend.lo $(LIB) $(LIBHDF5) $(LDFLAGS) $(LIBS)

external: external.lo
	@$(LT_LINK_EXE) $(CFLAGS) -o $@ external.lo $(LIB) $(LIBHDF5) $(LDFLAGS) $(LIBS)

big: big.lo
	@$(LT_LINK_EXE) $(CFLAGS) -o $@ big.lo $(LIB) $(LIBHDF5) $(LDFLAGS) $(LIBS)

links: links.lo
	@$(LT_LINK_EXE) $(CFLAGS) -o $@ links.lo $(LIB) $(LIBHDF5) $(LDFLAGS) $(LIBS)

mtime: mtime.lo
	@$(LT_LINK_EXE) $(CFLAGS) -o $@ mtime.lo $(LIB) $(LIBHDF5) $(LDFLAGS) $(LIBS)

unlink: unlink.lo
	@$(LT_LINK_EXE) $(CFLAGS) -o $@ unlink.lo $(LIB) $(LIBHDF5) $(LDFLAGS) $(LIBS)

fillval: fillval.lo
	@$(LT_LINK_EXE) $(CFLAGS) -o $@ fillval.lo $(LIB) $(LIBHDF5) $(LDFLAGS) $(LIBS)

mount: mount.lo
	@$(LT_LINK_EXE) $(CFLAGS) -o $@ mount.lo $(LIB) $(LIBHDF5) $(LDFLAGS) $(LIBS)

flush1: flush1.lo
	@$(LT_LINK_EXE) $(CFLAGS) -o $@ flush1.lo $(LIB) $(LIBHDF5) $(LDFLAGS) $(LIBS)

flush2: flush2.lo
	@$(LT_LINK_EXE) $(CFLAGS) -o $@ flush2.lo $(LIB) $(LIBHDF5) $(LDFLAGS) $(LIBS)

enum: enum.lo
	@$(LT_LINK_EXE) $(CFLAGS) -o $@ enum.lo $(LIB) $(LIBHDF5) $(LDFLAGS) $(LIBS)

ttsafe: $(TTS_OBJ)
	@$(LT_LINK_EXE) $(CFLAGS) -o $@ $(TTS_OBJ) $(LIB) $(LIBHDF5) $(LDFLAGS) $(LIBS)

gass_write: gass_write.lo
	@$(LT_LINK_EXE) $(CFLAGS) -o $@ gass_write.lo $(LIB) $(LIBHDF5) $(LDFLAGS) $(LIBS)

gass_read: gass_read.lo
	@$(LT_LINK_EXE) $(CFLAGS) -o $@ gass_read.lo $(LIB) $(LIBHDF5) $(LDFLAGS) $(LIBS)

gass_append: gass_append.lo
	@$(LT_LINK_EXE) $(CFLAGS) -o $@ gass_append.lo $(LIB) $(LIBHDF5) $(LDFLAGS) $(LIBS)

set_extent: set_extent.lo
	@$(LT_LINK_EXE) $(CFLAGS) -o $@ set_extent.lo $(LIB) $(LIBHDF5) $(LDFLAGS) $(LIBS)

srb_read: srb_read.lo
	@$(LT_LINK_EXE) $(CFLAGS) -o $@ srb_read.lo $(LIB) $(LIBHDF5) $(LDFLAGS) $(LIBS)

srb_write: srb_write.lo
	@$(LT_LINK_EXE) $(CFLAGS) -o $@ srb_write.lo $(LIB) $(LIBHDF5) $(LDFLAGS) $(LIBS)

srb_append: srb_append.lo
	@$(LT_LINK_EXE) $(CFLAGS) -o $@ srb_append.lo $(LIB) $(LIBHDF5) $(LDFLAGS) $(LIBS)

testmeta: testmeta.lo
	@$(LT_LINK_EXE) $(CFLAGS) -o $@ testmeta.lo $(LIB) $(LIBHDF5) $(LDFLAGS) $(LIBS)

getname: getname.lo
	@$(LT_LINK_EXE) $(CFLAGS) -o $@ getname.lo $(LIB) $(LIBHDF5) $(LDFLAGS) $(LIBS)

file_handle: file_handle.lo
	@$(LT_LINK_EXE) $(CFLAGS) -o $@ file_handle.lo $(LIB) $(LIBHDF5) $(LDFLAGS) $(LIBS)

ntypes: ntypes.lo
	@$(LT_LINK_EXE) $(CFLAGS) -o $@ ntypes.lo $(LIB) $(LIBHDF5) $(LDFLAGS) $(LIBS)

dangle: dangle.lo
	@$(LT_LINK_EXE) $(CFLAGS) -o $@ dangle.lo $(LIB) $(LIBHDF5) $(LDFLAGS) $(LIBS)

reserved: reserved.lo
	@$(LT_LINK_EXE) $(CFLAGS) -o $@ reserved.lo $(LIB) $(LIBHDF5) $(LDFLAGS) $(LIBS)

@CONCLUDE@
