cmake_minimum_required (VERSION 2.8)
PROJECT (HDF5_TOOLS_H5LS)

#-----------------------------------------------------------------------------
# Setup include Directories
#-----------------------------------------------------------------------------
INCLUDE_DIRECTORIES (${HDF5_TOOLS_SOURCE_DIR}/lib)
INCLUDE_DIRECTORIES (${HDF5_PROJECT_DIR}/test)

# --------------------------------------------------------------------
# If testing was NOT enabled, then we need to build the tools library
# --------------------------------------------------------------------
#-- Add the h5ls executable
ADD_EXECUTABLE (h5ls ${HDF5_TOOLS_H5LS_SOURCE_DIR}/h5ls.c)
H5_NAMING (h5ls)
TARGET_LINK_LIBRARIES (h5ls  ${HDF5_TOOLS_LIB_TARGET} ${HDF5_LIB_TARGET})

SET (H5_DEP_EXECUTABLES
    h5ls
)

IF (BUILD_TESTING)
  #-- Copy all the HDF5 files from the test directory into the source directory
  SET (HDF5_REFERENCE_FILES
      help-1.ls
      help-2.ls
      help-3.ls
      nosuchfile.ls
      tall-1.ls
      tall-2.ls
      tarray1.ls
      tattr2.ls
      tcomp-1.ls
      tdataregbe.ls
      tdataregle.ls
      tdset-1.ls
      tempty.ls
      textlink-1.ls
      textlinksrc-1.ls
      textlinksrc-2.ls
      textlinksrc-3.ls
      textlinksrc-4.ls
      textlinksrc-5.ls
      textlinksrc-6.ls
      textlinksrc-7.ls
      tgroup.ls
      tgroup-1.ls
      tgroup-2.ls
      tgroup-3.ls
      thlink-1.ls
      tloop-1.ls
      tnestcomp-1.ls
      tsaf.ls
      tslink-1.ls
      tstr-1.ls
      tudlink-1.ls
      tvldtypes1.ls
      tvldtypes2le.ls
      tvldtypes2be.ls
  )
  SET (HDF5_REFERENCE_TEST_FILES
      tall.h5
      tarray1.h5
      tattr2.h5
      tcompound.h5
      tdatareg.h5
      tdset.h5
      tempty.h5
      textlink.h5
      textlinksrc.h5
      textlinktar.h5
      tgroup.h5
      thlink.h5
      tloop.h5
      tnestedcomp.h5
      tsaf.h5
      tslink.h5
      tstr.h5
      tudlink.h5
      tvldtypes1.h5
  )

  FOREACH (ls_file ${HDF5_REFERENCE_FILES})
    SET (lsdest "${PROJECT_BINARY_DIR}/${ls_file}")
    #MESSAGE (STATUS " Translating ${ls_file}")
    ADD_CUSTOM_COMMAND (
        TARGET     h5ls
        POST_BUILD
        COMMAND    ${XLATE_UTILITY}
        ARGS       ${HDF5_TOOLS_SOURCE_DIR}/testfiles/${ls_file} ${lsdest} -l3
    )
  ENDFOREACH (ls_file ${HDF5_REFERENCE_FILES})

  FOREACH (h5_file ${HDF5_REFERENCE_TEST_FILES})
    SET (dest "${PROJECT_BINARY_DIR}/${h5_file}")
    #MESSAGE (STATUS " Copying ${h5_file}")
    ADD_CUSTOM_COMMAND (
        TARGET     h5ls
        POST_BUILD
        COMMAND    ${CMAKE_COMMAND}
        ARGS       -E copy_if_different ${HDF5_TOOLS_SOURCE_DIR}/testfiles/${h5_file} ${dest}
    )
  ENDFOREACH (h5_file ${HDF5_REFERENCE_TEST_FILES})

  MACRO (ADD_H5_TEST resultfile resultcode)
    ADD_TEST (
        NAME H5LS-${resultfile}
        COMMAND "${CMAKE_COMMAND}"
            -D "TEST_PROGRAM=$<TARGET_FILE:h5ls>"
            -D "TEST_ARGS=${ARGN}"
            -D "TEST_FOLDER=${PROJECT_BINARY_DIR}"
            -D "TEST_OUTPUT=${resultfile}.out"
            -D "TEST_EXPECT=${resultcode}"
            -D "TEST_REFERENCE=${resultfile}.ls"
            -P "${HDF5_RESOURCES_DIR}/runTest.cmake"
    )
  ENDMACRO (ADD_H5_TEST file)

  ADD_H5_TEST (help-1 0 -w80 -h)
  ADD_H5_TEST (help-2 0 -w80 --help)
  ADD_H5_TEST (help-3 0 -w80 -?)
  ADD_H5_TEST (tall-1 0 -w80 tall.h5)
  ADD_H5_TEST (tall-2 0 -w80 -r -d tall.h5)
  ADD_H5_TEST (tgroup 0 -w80 tgroup.h5)
  ADD_H5_TEST (tgroup-3 0 -w80 tgroup.h5/g1)
  ADD_H5_TEST (tgroup-1 1 -w80 -r -g tgroup.h5)
  ADD_H5_TEST (tgroup-2 0 -w80 -g tgroup.h5/g1)
  ADD_H5_TEST (tdset-1 0 -w80 -r -d tdset.h5)
  ADD_H5_TEST (tslink-1 0 -w80 -r tslink.h5)
  ADD_H5_TEST (textlink-1 0 -w80 -r textlink.h5)
  ADD_H5_TEST (textlinksrc-1 0 -w80 -Er textlinksrc.h5)
  ADD_H5_TEST (textlinksrc-2 0 -w80 -Erv textlinksrc.h5/ext_link5)
  ADD_H5_TEST (textlinksrc-3 0 -w80 -Er textlinksrc.h5/ext_link1)
  ADD_H5_TEST (textlinksrc-4 0 -w80 -r textlinksrc.h5)
  ADD_H5_TEST (textlinksrc-5 0 -w80 -r textlinksrc.h5/ext_link1)
  ADD_H5_TEST (textlinksrc-6 0 -w80 -E textlinksrc.h5)
  ADD_H5_TEST (textlinksrc-7 0 -w80 -E textlinksrc.h5/ext_link1)
  ADD_H5_TEST (tudlink-1 0 -w80 -r tudlink.h5)
  ADD_H5_TEST (thlink-1 0 -w80 thlink.h5)
  ADD_H5_TEST (tcomp-1 0 -w80 -r -d tcompound.h5)
  ADD_H5_TEST (tnestcomp-1 0 -w80 -r -d tnestedcomp.h5)
  ADD_H5_TEST (tloop-1 0 -w80 -r -d tloop.h5)
  ADD_H5_TEST (tstr-1 0 -w80 -r -d tstr.h5)
  ADD_H5_TEST (tsaf 0 -w80 -r -d tsaf.h5)
  ADD_H5_TEST (tvldtypes1 0 -w80 -r -d tvldtypes1.h5)
  ADD_H5_TEST (tarray1 0 -w80 -r -d tarray1.h5)
  ADD_H5_TEST (tempty 0 -w80 -d tempty.h5)
  ADD_H5_TEST (tattr2 0 -w80 -v -S tattr2.h5)
  ADD_H5_TEST (nosuchfile 1 nosuchfile.h5)
  IF (WORDS_BIGENDIAN)
    ADD_H5_TEST (tvldtypes2be 0 -v tvldtypes1.h5)
    ADD_H5_TEST (tdataregbe 0 -v tdatareg.h5)
  ELSE (WORDS_BIGENDIAN)
    ADD_H5_TEST (tvldtypes2le 0 -v tvldtypes1.h5)
    ADD_H5_TEST (tdataregle 0 -v tdatareg.h5)
  ENDIF (WORDS_BIGENDIAN)

ENDIF (BUILD_TESTING)

#-----------------------------------------------------------------------------
# Rules for Installation of tools using make Install target
#-----------------------------------------------------------------------------
INSTALL (
    TARGETS
        h5ls
    RUNTIME DESTINATION
        bin/tools
)
