# Copyright (c) 2007-2017 Hartmut Kaiser
# Copyright (c) 2011      Bryce Lelbach
#
# SPDX-License-Identifier: BSL-1.0
# Distributed under the Boost Software License, Version 1.0. (See accompanying
# file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)

if(HPX_WITH_EXAMPLES_HDF5)
  if(NOT HDF5_CXX_LIBRARIES)
    hpx_error("The ShenEos example requires HDF C++ library")
  endif()

  # add a custom target for this example
  add_hpx_pseudo_target(examples.sheneos.sheneos_)

  add_subdirectory(sheneos)

  # make pseudo-targets depend on master pseudo-target
  add_hpx_pseudo_dependencies(examples.sheneos examples.sheneos.sheneos_)

  ###############################################################################
  # add example executable
  add_hpx_executable(sheneos_client
    SOURCES sheneos_client.cpp
    DEPENDENCIES sheneos_component
    FOLDER "Examples/ShenEOS")

  # add dependencies to pseudo-target
  add_hpx_pseudo_dependencies(examples.sheneos sheneos_client)

  add_hpx_executable(sheneos_test
    SOURCES sheneos_test.cpp
    DEPENDENCIES sheneos_component
    FOLDER "Examples/ShenEOS")

  # add dependencies to pseudo-target
  add_hpx_pseudo_dependencies(examples.sheneos sheneos_test)

  # TODO: Fix example. Not added to unit tests until fixed.

  if(HPX_WITH_FORTRAN)
    if(CMAKE_Fortran_COMPILER AND HDF5_FORTRAN_FOUND)
      add_hpx_executable(sheneos_compare
        SOURCES
            sheneos_compare.cpp
            eos_driver/read_nuc_table.F90
            eos_driver/eosmodule.F90
            eos_driver/readtable.F90
            eos_driver/nuc_eos.F90
            eos_driver/findrho.F90
            eos_driver/findtemp.F90
            eos_driver/linterp.f
            eos_driver/linterp_many.F90
            eos_driver/bisection.F90
        DEPENDENCIES sheneos_component
        FOLDER "Examples/ShenEOS")

      target_include_directories(sheneos_compare PRIVATE ${HDF5_INCLUDE_DIRS})
      target_link_libraries(sheneos_compare PRIVATE ${HDF5_FORTRAN_LIBRARY}
        ${HDF5_LIBRARY})

      target_compile_options(sheneos_compare ${OpenMP_CXX_FLAGS})
      set_target_properties(sheneos_compare
          PROPERTIES LINK_FLAGS "${OpenMP_CXX_FLAGS}")

      # add dependencies to pseudo-target
      add_hpx_pseudo_dependencies(examples.sheneos sheneos_compare)
    endif()
  endif()
endif()
