cmake_minimum_required (VERSION 2.8.6)
PROJECT (HDFJAVA_TEST_OBJECT_MISC Java)

SET(CMAKE_VERBOSE_MAKEFILE 1)

INCLUDE_DIRECTORIES(
    ${JAVA_NCSA_HDF_HDF4_BINARY_DIR}
    ${JAVA_NCSA_HDF_HDF5_BINARY_DIR}
    ${JAVA_NCSA_HDF_OBJECT_BINARY_DIR}
    ${HDFJAVA_LIB_DIR}
)

SET (CMAKE_JAVA_INCLUDE_PATH ${CMAKE_JAVA_INCLUDE_PATH} ${HDFJAVA_JARS_TO_EXPORT})

###########################################################################
# TestH5Object
###########################################################################
ADD_JAR (TestH5Object TestH5Object.java)
GET_TARGET_PROPERTY(TestH5Object_JAR_FILE TestH5Object JAR_FILE)
ADD_DEPENDENCIES (TestH5Object ${HDFJAVA_NCSA_H5_LIB_TARGET})

IF (WIN32 AND NOT CYGWIN)
  SET(CMAKE_JAVA_INCLUDE_FLAG_SEP ";")
ELSE (WIN32 AND NOT CYGWIN)
  SET(CMAKE_JAVA_INCLUDE_FLAG_SEP ":")
ENDIF(WIN32 AND NOT CYGWIN)

SET (CMAKE_JAVA_CLASSPATH ".")
FOREACH (CMAKE_INCLUDE_PATH ${CMAKE_JAVA_INCLUDE_PATH})
  SET(CMAKE_JAVA_CLASSPATH "${CMAKE_JAVA_CLASSPATH}${CMAKE_JAVA_INCLUDE_FLAG_SEP}${CMAKE_INCLUDE_PATH}")
ENDFOREACH(CMAKE_INCLUDE_PATH)
SET (CMAKE_JAVA_CLASSPATH "${CMAKE_JAVA_CLASSPATH}${CMAKE_JAVA_INCLUDE_FLAG_SEP}${TestH5Object_JAR_FILE}")

SET (TESTH5OBJECT_TEST_RUNNER ${PROJECT_BINARY_DIR}/testh5object.cmake)
FILE (WRITE ${TESTH5OBJECT_TEST_RUNNER} 
  "EXECUTE_PROCESS(COMMAND
  ${CMAKE_Java_RUNTIME} -Xmx1024M 
  -Djava.library.path=${CMAKE_RUNTIME_OUTPUT_DIRECTORY}
  -cp \"${CMAKE_JAVA_CLASSPATH}\"
  test.object.misc.TestH5Object
  WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
  RESULT_VARIABLE RESULT)
  IF(RESULT)
    MESSAGE(SEND_ERROR \"Error during TESTH5OBJECT OBJECT-MISC Tests\")
  ENDIF(RESULT)
  ")

IF (WIN32 AND NOT CYGWIN)
  SET (CMAKE_JAVA_PATH_EXPORT "PATH=${CMAKE_RUNTIME_OUTPUT_DIRECTORY};%PATH%")
ELSE (WIN32 AND NOT CYGWIN)
  SET (CMAKE_JAVA_PATH_EXPORT "LD_LIBRARY_PATH=${CMAKE_RUNTIME_OUTPUT_DIRECTORY}:$LD_LIBRARY_PATH")
ENDIF (WIN32 AND NOT CYGWIN)

ADD_TEST (TESTH5OBJECT-object-misc  ${CMAKE_COMMAND} -P ${TESTH5OBJECT_TEST_RUNNER})
SET_TESTS_PROPERTIES (TESTH5OBJECT-object-misc PROPERTIES
    ENVIRONMENT "${CMAKE_JAVA_PATH_EXPORT}"
)

###########################################################################
# TestH5Table
###########################################################################
ADD_JAR (TestH5Table TestH5Table.java)
GET_TARGET_PROPERTY(TestH5Table_JAR_FILE TestH5Table JAR_FILE)
ADD_DEPENDENCIES (TestH5Table ${HDFJAVA_NCSA_H5_LIB_TARGET})

IF (HDFJAVA_TEST_H5TABLE)
  IF (WIN32 AND NOT CYGWIN)
    SET(CMAKE_JAVA_INCLUDE_FLAG_SEP ";")
  ELSE (WIN32 AND NOT CYGWIN)
  SET(CMAKE_JAVA_INCLUDE_FLAG_SEP ":")
  ENDIF(WIN32 AND NOT CYGWIN)

  SET (CMAKE_JAVA_CLASSPATH ".")
  FOREACH (CMAKE_INCLUDE_PATH ${CMAKE_JAVA_INCLUDE_PATH})
    SET(CMAKE_JAVA_CLASSPATH "${CMAKE_JAVA_CLASSPATH}${CMAKE_JAVA_INCLUDE_FLAG_SEP}${CMAKE_INCLUDE_PATH}")
  ENDFOREACH(CMAKE_INCLUDE_PATH)
  SET (CMAKE_JAVA_CLASSPATH "${CMAKE_JAVA_CLASSPATH}${CMAKE_JAVA_INCLUDE_FLAG_SEP}${TestH5Object_JAR_FILE}")

  SET (TESTH5TABLE_TEST_RUNNER ${PROJECT_BINARY_DIR}/testh5table.cmake)
  FILE (WRITE ${TESTH5TABLE_TEST_RUNNER} 
    "EXECUTE_PROCESS(COMMAND
    ${CMAKE_Java_RUNTIME} -Xmx1024M 
    -Djava.library.path=${CMAKE_RUNTIME_OUTPUT_DIRECTORY}
    -cp \"${CMAKE_JAVA_CLASSPATH}\"
    test.object.misc.TestH5Table
    WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
    RESULT_VARIABLE RESULT)
    IF(RESULT)
      MESSAGE(SEND_ERROR \"Error during TESTH5TABLE OBJECT-MISC Tests\")
    ENDIF(RESULT)
    ")

  IF (WIN32 AND NOT CYGWIN)
    SET (CMAKE_JAVA_PATH_EXPORT "PATH=${CMAKE_RUNTIME_OUTPUT_DIRECTORY};%PATH%")
  ELSE (WIN32 AND NOT CYGWIN)
    SET (CMAKE_JAVA_PATH_EXPORT "LD_LIBRARY_PATH=${CMAKE_RUNTIME_OUTPUT_DIRECTORY}:$LD_LIBRARY_PATH")
  ENDIF (WIN32 AND NOT CYGWIN)

  ADD_TEST (TESTH5TABLE-object-misc  ${CMAKE_COMMAND} -P ${TESTH5TABLE_TEST_RUNNER})
  SET_TESTS_PROPERTIES (TESTH5TABLE-object-misc PROPERTIES
      ENVIRONMENT "${CMAKE_JAVA_PATH_EXPORT}"
  )
ENDIF (HDFJAVA_TEST_H5TABLE)

###########################################################################
# TestDebugHDF
###########################################################################
ADD_JAR (TestDebugHDF DebugHDF.java)
GET_TARGET_PROPERTY(TestDebugHDF_JAR_FILE TestDebugHDF JAR_FILE)
ADD_DEPENDENCIES (TestDebugHDF ${HDFJAVA_NCSA_H5_LIB_TARGET})

IF (HDFJAVA_TEST_DEBUGHDF)
  IF (WIN32 AND NOT CYGWIN)
    SET(CMAKE_JAVA_INCLUDE_FLAG_SEP ";")
  ELSE (WIN32 AND NOT CYGWIN)
  SET(CMAKE_JAVA_INCLUDE_FLAG_SEP ":")
  ENDIF(WIN32 AND NOT CYGWIN)

  SET (CMAKE_JAVA_CLASSPATH ".")
  FOREACH (CMAKE_INCLUDE_PATH ${CMAKE_JAVA_INCLUDE_PATH})
    SET(CMAKE_JAVA_CLASSPATH "${CMAKE_JAVA_CLASSPATH}${CMAKE_JAVA_INCLUDE_FLAG_SEP}${CMAKE_INCLUDE_PATH}")
  ENDFOREACH(CMAKE_INCLUDE_PATH)
  SET (CMAKE_JAVA_CLASSPATH "${CMAKE_JAVA_CLASSPATH}${CMAKE_JAVA_INCLUDE_FLAG_SEP}${TestH5Object_JAR_FILE}")

  SET (TESTDEBUGHDF_TEST_RUNNER ${PROJECT_BINARY_DIR}/testh5debughdf.cmake)
  FILE (WRITE ${TESTDEBUGHDF_TEST_RUNNER} 
    "EXECUTE_PROCESS(COMMAND
    ${CMAKE_Java_RUNTIME} -Xmx1024M 
    -Djava.library.path=${CMAKE_RUNTIME_OUTPUT_DIRECTORY}
    -cp \"${CMAKE_JAVA_CLASSPATH}\"
    test.object.misc.DebugHDF
    WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
    RESULT_VARIABLE RESULT)
    IF(RESULT)
      MESSAGE(SEND_ERROR \"Error during TESTDEBUGHDF OBJECT-MISC Tests\")
    ENDIF(RESULT)
    ")

  IF (WIN32 AND NOT CYGWIN)
    SET (CMAKE_JAVA_PATH_EXPORT "PATH=${CMAKE_RUNTIME_OUTPUT_DIRECTORY};%PATH%")
  ELSE (WIN32 AND NOT CYGWIN)
    SET (CMAKE_JAVA_PATH_EXPORT "LD_LIBRARY_PATH=${CMAKE_RUNTIME_OUTPUT_DIRECTORY}:$LD_LIBRARY_PATH")
  ENDIF (WIN32 AND NOT CYGWIN)

  ADD_TEST (TESTDEBUGHDF-object-misc  ${CMAKE_COMMAND} -P ${TESTDEBUGHDF_TEST_RUNNER})
  SET_TESTS_PROPERTIES (TESTDEBUGHDF-object-misc PROPERTIES
      ENVIRONMENT "${CMAKE_JAVA_PATH_EXPORT}"
  )
ENDIF (HDFJAVA_TEST_DEBUGHDF)

###########################################################################
# TestH5File
###########################################################################
ADD_JAR (TestH5File TestH5File.java)
GET_TARGET_PROPERTY(TestH5File_JAR_FILE TestH5File JAR_FILE)
ADD_DEPENDENCIES (TestH5File ${HDFJAVA_NCSA_H5_LIB_TARGET})

IF (HDFJAVA_TEST_H5FILE)
  IF (WIN32 AND NOT CYGWIN)
    SET(CMAKE_JAVA_INCLUDE_FLAG_SEP ";")
  ELSE (WIN32 AND NOT CYGWIN)
  SET(CMAKE_JAVA_INCLUDE_FLAG_SEP ":")
  ENDIF(WIN32 AND NOT CYGWIN)

  SET (CMAKE_JAVA_CLASSPATH ".")
  FOREACH (CMAKE_INCLUDE_PATH ${CMAKE_JAVA_INCLUDE_PATH})
    SET(CMAKE_JAVA_CLASSPATH "${CMAKE_JAVA_CLASSPATH}${CMAKE_JAVA_INCLUDE_FLAG_SEP}${CMAKE_INCLUDE_PATH}")
  ENDFOREACH(CMAKE_INCLUDE_PATH)
  SET (CMAKE_JAVA_CLASSPATH "${CMAKE_JAVA_CLASSPATH}${CMAKE_JAVA_INCLUDE_FLAG_SEP}${TestH5Object_JAR_FILE}")

  SET (TESTH5FILE_TEST_RUNNER ${PROJECT_BINARY_DIR}/testh5file.cmake)
  FILE (WRITE ${TESTH5FILE_TEST_RUNNER} 
    "EXECUTE_PROCESS(COMMAND
    ${CMAKE_Java_RUNTIME} -Xmx1024M 
    -Djava.library.path=${CMAKE_RUNTIME_OUTPUT_DIRECTORY}
    -cp \"${CMAKE_JAVA_CLASSPATH}\"
    test.object.misc.TestH5File
    WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
    RESULT_VARIABLE RESULT)
    IF(RESULT)
      MESSAGE(SEND_ERROR \"Error during TESTH5FILE OBJECT-MISC Tests\")
    ENDIF(RESULT)
    ")

  IF (WIN32 AND NOT CYGWIN)
    SET (CMAKE_JAVA_PATH_EXPORT "PATH=${CMAKE_RUNTIME_OUTPUT_DIRECTORY};%PATH%")
  ELSE (WIN32 AND NOT CYGWIN)
    SET (CMAKE_JAVA_PATH_EXPORT "LD_LIBRARY_PATH=${CMAKE_RUNTIME_OUTPUT_DIRECTORY}:$LD_LIBRARY_PATH")
  ENDIF (WIN32 AND NOT CYGWIN)

  ADD_TEST (TESTH5FILE-object-misc  ${CMAKE_COMMAND} -P ${TESTH5FILE_TEST_RUNNER})
  SET_TESTS_PROPERTIES (TESTH5FILE-object-misc PROPERTIES
      ENVIRONMENT "${CMAKE_JAVA_PATH_EXPORT}"
  )
ENDIF (HDFJAVA_TEST_H5FILE)

###########################################################################
# TestH5MemoryLeak
###########################################################################
ADD_JAR (TestH5MemoryLeak TestH5MemoryLeak.java)
GET_TARGET_PROPERTY(TestH5MemoryLeak_JAR_FILE TestH5MemoryLeak JAR_FILE)
ADD_DEPENDENCIES (TestH5MemoryLeak ${HDFJAVA_NCSA_H5_LIB_TARGET})

IF (HDFJAVA_TEST_MEMORYLEAK)
  IF (WIN32 AND NOT CYGWIN)
    SET(CMAKE_JAVA_INCLUDE_FLAG_SEP ";")
  ELSE (WIN32 AND NOT CYGWIN)
  SET(CMAKE_JAVA_INCLUDE_FLAG_SEP ":")
  ENDIF(WIN32 AND NOT CYGWIN)

  SET (CMAKE_JAVA_CLASSPATH ".")
  FOREACH (CMAKE_INCLUDE_PATH ${CMAKE_JAVA_INCLUDE_PATH})
    SET(CMAKE_JAVA_CLASSPATH "${CMAKE_JAVA_CLASSPATH}${CMAKE_JAVA_INCLUDE_FLAG_SEP}${CMAKE_INCLUDE_PATH}")
  ENDFOREACH(CMAKE_INCLUDE_PATH)
  SET (CMAKE_JAVA_CLASSPATH "${CMAKE_JAVA_CLASSPATH}${CMAKE_JAVA_INCLUDE_FLAG_SEP}${TestH5Object_JAR_FILE}")

  SET (TESTMEMORYLEAK_TEST_RUNNER ${PROJECT_BINARY_DIR}/testh5memleak.cmake)
  FILE (WRITE ${TESTMEMORYLEAK_TEST_RUNNER} 
    "EXECUTE_PROCESS(COMMAND
    ${CMAKE_Java_RUNTIME} -Xmx1024M 
    -Djava.library.path=${CMAKE_RUNTIME_OUTPUT_DIRECTORY}
    -cp \"${CMAKE_JAVA_CLASSPATH}\"
    test.object.misc.TestH5MemoryLeak
    WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
    RESULT_VARIABLE RESULT)
    IF(RESULT)
      MESSAGE(SEND_ERROR \"Error during TESTMEMORYLEAK OBJECT-MISC Tests\")
    ENDIF(RESULT)
    ")

  IF (WIN32 AND NOT CYGWIN)
    SET (CMAKE_JAVA_PATH_EXPORT "PATH=${CMAKE_RUNTIME_OUTPUT_DIRECTORY};%PATH%")
  ELSE (WIN32 AND NOT CYGWIN)
    SET (CMAKE_JAVA_PATH_EXPORT "LD_LIBRARY_PATH=${CMAKE_RUNTIME_OUTPUT_DIRECTORY}:$LD_LIBRARY_PATH")
  ENDIF (WIN32 AND NOT CYGWIN)

  ADD_TEST (TESTMEMORYLEAK-object-misc  ${CMAKE_COMMAND} -P ${TESTMEMORYLEAK_TEST_RUNNER})
  SET_TESTS_PROPERTIES (TESTMEMORYLEAK-object-misc PROPERTIES
      ENVIRONMENT "${CMAKE_JAVA_PATH_EXPORT}"
  )
ENDIF (HDFJAVA_TEST_MEMORYLEAK)

###########################################################################
# TestH4File
###########################################################################
ADD_JAR (TestH4File TestH4File.java)
GET_TARGET_PROPERTY(TestH4File_JAR_FILE TestH4File JAR_FILE)
ADD_DEPENDENCIES (TestH4File ${HDFJAVA_NCSA_H4_LIB_TARGET})

IF (HDFJAVA_TEST_H4FILE)
  IF (WIN32 AND NOT CYGWIN)
    SET(CMAKE_JAVA_INCLUDE_FLAG_SEP ";")
  ELSE (WIN32 AND NOT CYGWIN)
  SET(CMAKE_JAVA_INCLUDE_FLAG_SEP ":")
  ENDIF(WIN32 AND NOT CYGWIN)

  SET (CMAKE_JAVA_CLASSPATH ".")
  FOREACH (CMAKE_INCLUDE_PATH ${CMAKE_JAVA_INCLUDE_PATH})
    SET(CMAKE_JAVA_CLASSPATH "${CMAKE_JAVA_CLASSPATH}${CMAKE_JAVA_INCLUDE_FLAG_SEP}${CMAKE_INCLUDE_PATH}")
  ENDFOREACH(CMAKE_INCLUDE_PATH)
  SET (CMAKE_JAVA_CLASSPATH "${CMAKE_JAVA_CLASSPATH}${CMAKE_JAVA_INCLUDE_FLAG_SEP}${TestH4Object_JAR_FILE}")

  SET (TESTH4FILE_TEST_RUNNER ${PROJECT_BINARY_DIR}/testh4file.cmake)
  FILE (WRITE ${TESTH4FILE_TEST_RUNNER} 
    "EXECUTE_PROCESS(COMMAND
    ${CMAKE_Java_RUNTIME} -Xmx1024M 
    -Djava.library.path=${CMAKE_RUNTIME_OUTPUT_DIRECTORY}
    -cp \"${CMAKE_JAVA_CLASSPATH}\"
    test.object.misc.TestH4File
    WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
    RESULT_VARIABLE RESULT)
    IF(RESULT)
      MESSAGE(SEND_ERROR \"Error during TESTH4FILE OBJECT-MISC Tests\")
    ENDIF(RESULT)
    ")

  IF (WIN32 AND NOT CYGWIN)
    SET (CMAKE_JAVA_PATH_EXPORT "PATH=${CMAKE_RUNTIME_OUTPUT_DIRECTORY};%PATH%")
  ELSE (WIN32 AND NOT CYGWIN)
    SET (CMAKE_JAVA_PATH_EXPORT "LD_LIBRARY_PATH=${CMAKE_RUNTIME_OUTPUT_DIRECTORY}:$LD_LIBRARY_PATH")
  ENDIF (WIN32 AND NOT CYGWIN)

  ADD_TEST (TESTH4FILE-object-misc  ${CMAKE_COMMAND} -P ${TESTH4FILE_TEST_RUNNER})
  SET_TESTS_PROPERTIES (TESTH4FILE-object-misc PROPERTIES
      ENVIRONMENT "${CMAKE_JAVA_PATH_EXPORT}"
  )
ENDIF (HDFJAVA_TEST_H4FILE)
