cmake_minimum_required(VERSION 3.2.2)
PROJECT (H4H5_LIB_SRC C CXX)

#-----------------------------------------------------------------------------
# Setup include Directories
#-----------------------------------------------------------------------------
LINK_DIRECTORIES (
    ${H4H5_LIB_SRC_BINARY_DIR}
    ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}
)

INCLUDE_DIRECTORIES (${H4H5_LIB_SRC_SOURCE_DIR} ${HDF4_INCLUDE_DIRS} ${HDF5_INCLUDE_DIRS})

set (H4H5_LIB_SRC_CSRCS
    ${H4H5_LIB_SRC_SOURCE_DIR}/H4TOH5I.c
    ${H4H5_LIB_SRC_SOURCE_DIR}/h4toh5anno.c
    ${H4H5_LIB_SRC_SOURCE_DIR}/h4toh5pal.c
    ${H4H5_LIB_SRC_SOURCE_DIR}/h4toh5sds.c
    ${H4H5_LIB_SRC_SOURCE_DIR}/h4toh5util.c
    ${H4H5_LIB_SRC_SOURCE_DIR}/h4toh5vdata.c
    ${H4H5_LIB_SRC_SOURCE_DIR}/h4toh5vgroup.c
    ${H4H5_LIB_SRC_SOURCE_DIR}/h4toh5image.c
    ${H4H5_LIB_SRC_SOURCE_DIR}/h4toh5main.c
    ${H4H5_LIB_SRC_SOURCE_DIR}/h4toh5eos.c
)

set (H4H5_PUBLIC_HEADERS
    ${H4H5_LIB_SRC_SOURCE_DIR}/h4toh5.h
    ${H4H5_LIB_SRC_SOURCE_DIR}/H4TOH5api_adpt.h
    ${H4H5_LIB_SRC_SOURCE_DIR}/h4toh5vector.h
    ${H4H5_LIB_SRC_SOURCE_DIR}/h4toh5apicompatible.h
)

if (H5_USE_HDFEOS2)
  add_definitions (-DHAVE_LIBHDFEOS)
endif ()

add_library (${H4H5_SRC_LIB_TARGET} STATIC ${H4H5_LIB_SRC_CSRCS} ${H4H5_PUBLIC_HEADERS})
if (H5_USE_16_API_DEFAULT)
  add_definitions (-DH5_USE_16_API)
endif ()
TARGET_C_PROPERTIES (${H4H5_SRC_LIB_TARGET} STATIC " " " ")
if (MSVC)
  target_link_libraries (${H4H5_SRC_LIB_TARGET} "ws2_32.lib")
endif ()
target_link_libraries (${H4H5_SRC_LIB_TARGET} ${LINK_LIBS})
SET_GLOBAL_VARIABLE (H4H5_LIBRARIES_TO_EXPORT "${H4H5_LIBRARIES_TO_EXPORT};${H4H5_SRC_LIB_TARGET}")
H4H5_SET_LIB_OPTIONS (${H4H5_SRC_LIB_TARGET} ${H4H5_SRC_LIB_NAME} STATIC)
set_target_properties (${H4H5_SRC_LIB_TARGET} PROPERTIES
    FOLDER libraries
    INTERFACE_INCLUDE_DIRECTORIES "$<INSTALL_INTERFACE:$<INSTALL_PREFIX>/include>"
)
set (install_targets ${H4H5_SRC_LIB_TARGET})

if (BUILD_SHARED_LIBS)
  add_library (${H4H5_SRC_LIBSH_TARGET} SHARED ${H4H5_LIB_SRC_CSRCS} ${H4H5_PUBLIC_HEADERS})
  if (H5_USE_16_API_DEFAULT)
    add_definitions (-DH5_USE_16_API)
  endif ()
  TARGET_C_PROPERTIES (${H4H5_SRC_LIBSH_TARGET} SHARED " " " ")
  if (MSVC)
    target_link_libraries (${H4H5_SRC_LIBSH_TARGET} "ws2_32.lib")
  endif ()
  target_link_libraries (${H4H5_SRC_LIBSH_TARGET} ${LINK_SHLIBS})
  SET_GLOBAL_VARIABLE (H4H5_LIBRARIES_TO_EXPORT "${H4H5_LIBRARIES_TO_EXPORT};${H4H5_SRC_LIBSH_TARGET}")
  H4H5_SET_LIB_OPTIONS (${H4H5_SRC_LIBSH_TARGET} ${H4H5_SRC_LIB_NAME} SHARED)
  set_target_properties (${H4H5_SRC_LIBSH_TARGET} PROPERTIES
      FOLDER libraries
      COMPILE_DEFINITIONS "H4H5_BUILT_AS_DYNAMIC_LIB"
      INTERFACE_INCLUDE_DIRECTORIES "$<INSTALL_INTERFACE:$<INSTALL_PREFIX>/include>"
      INTERFACE_COMPILE_DEFINITIONS H4H5_BUILT_AS_DYNAMIC_LIB=1
  )
  set (install_targets ${install_targets} ${H4H5_SRC_LIBSH_TARGET})
endif ()

#-----------------------------------------------------------------------------
# Add file(s) to CMake Install
#-----------------------------------------------------------------------------
if (NOT H4H5_INSTALL_NO_DEVELOPMENT)
  install (
      FILES
          ${H4H5_PUBLIC_HEADERS}
      DESTINATION
          ${H4H5_INSTALL_INCLUDE_DIR}
      COMPONENT
          headers
  )
endif ()

#-----------------------------------------------------------------------------
# Add Target(s) to CMake Install for import into other projects
#-----------------------------------------------------------------------------
if (H4H5_EXPORTED_TARGETS)
  if (BUILD_SHARED_LIBS)
    INSTALL_TARGET_PDB (${H4H5_SRC_LIBSH_TARGET} ${H4H5_INSTALL_LIB_DIR} libraries)
  endif ()

  install (
      TARGETS
          ${install_targets}
      EXPORT
          ${H4H5_EXPORTED_TARGETS}
      LIBRARY DESTINATION ${H4H5_INSTALL_LIB_DIR} COMPONENT libraries
      ARCHIVE DESTINATION ${H4H5_INSTALL_LIB_DIR} COMPONENT libraries
      RUNTIME DESTINATION ${H4H5_INSTALL_BIN_DIR} COMPONENT libraries
  )
endif ()
