SET(CMAKE_Fortran_MODULE_DIRECTORY
  ${PROJECT_BINARY_DIR}/fmodules CACHE PATH "Directory for Fortran modules")

# --------------------------------------------------------------------- #
# -- Compilation Scattered2DDataInterpolator with external libraries -- #
#                          NETCDF, CSA , NN 
# --------------------------------------------------------------------- #
MESSAGE(STATUS "Elmer/Ice package: Looking for [NN] & [CSA] libraries")
#FIND_PACKAGE(NETCDF)
#FIND_PACKAGE(PHDF5)

IF(NETCDF_FOUND)
  SET(WITH_NN TRUE)
  SET(WITH_CSA TRUE)
  FIND_PACKAGE(NN)
  FIND_PACKAGE(CSA)
  IF(CSA_FOUND AND NN_FOUND)
    SET(HAVE_NN TRUE)
    SET(HAVE_CSA TRUE)
    MARK_AS_ADVANCED(HAVE_NN HAVE_CSA)
    MESSAGE(STATUS "  NN & CSA: " "${NN_FOUND} & ${CSA_FOUND}")
    MESSAGE(STATUS "  NN_INC:   " "${NN_INCLUDE_DIR}")
    MESSAGE(STATUS "  NN_LIB:   " "${NN_LIBRARY}")
    MESSAGE(STATUS "  CSA_INC:  " "${CSA_INCLUDE_DIR}")
    MESSAGE(STATUS "  CSA_LIB:  " "${CSA_LIBRARY}")

    MESSAGE(STATUS "Compile Scattered2DDataInterpolator")
    INCLUDE_DIRECTORIES("${PROJECT_BINARY_DIR}")
  ELSE()
    MESSAGE(STATUS "Library not found: >NN_FOUND< = ${NN_FOUND} and/or >CSA_FOUND< =  ${CSA_FOUND}")
    MESSAGE(WARNING "  \n Missing: >NN_INCLUDE_DIR< , >NN_LIBRARY< , >CSA_INCLUDE_DIR< , >CSA_LIBRARY< \n to compile ScatteredDatainterpolator")
    RETURN()
  ENDIF()
ELSE()
  MESSAGE(WARNING "  \n Missing: >NETCDF_INCLUDE_DIR< , >NETCDF_LIBRARY< ,>NETCDFF_LIBRARY<,\n >NN_INCLUDE_DIR< , >NN_LIBRARY< , >CSA_INCLUDE_DIR< , >CSA_LIBRARY< \n to compile ScatteredDatainterpolator")
  RETURN()
ENDIF(NETCDF_FOUND)

MESSAGE(STATUS "------------------------------------------------")

#-- STEP1: csa_interpolate_points.o
SET(FNAME csa_interpolate_points.c)
GET_FILENAME_COMPONENT(BASENAME ${FNAME} NAME_WE)
SET(CMAKE_C_COMPILER ${MPI_C_COMPILER})
INCLUDE_DIRECTORIES(${CSA_INCLUDE_DIR})
ADD_LIBRARY(${BASENAME} OBJECT ${FNAME})
SET_TARGET_PROPERTIES(${BASENAME} PROPERTIES PREFIX "")

#-- STEP2: Scattered2D_FInterface.o
SET(FNAME2 Scattered2D_FInterface.F90)
GET_FILENAME_COMPONENT(BASENAME2 ${FNAME2} NAME_WE)
ADD_LIBRARY(${BASENAME2} OBJECT ${FNAME2})
SET_TARGET_PROPERTIES(${BASENAME2} PROPERTIES PREFIX "")
SET_TARGET_PROPERTIES(${BASENAME2} PROPERTIES LINKER_LANGUAGE Fortran)

#--  STEP3: Scattered2DDataInterpolator
SET(FNAME3 Scattered2DDataInterpolator.F90)
GET_FILENAME_COMPONENT(BASENAME3 ${FNAME3} NAME_WE)
#-- NN & CSA
ADD_LIBRARY(nn STATIC IMPORTED)
SET_PROPERTY(TARGET nn PROPERTY IMPORTED_LOCATION ${NN_LIBRARY})
ADD_LIBRARY(csa STATIC IMPORTED)
SET_PROPERTY(TARGET csa PROPERTY IMPORTED_LOCATION ${CSA_LIBRARY})
#-- Netcdf & NETCDFF
INCLUDE_DIRECTORIES(${NETCDF_INCLUDE_DIR})
#-- Scattered2DDataInterpolator
ADD_LIBRARY(${BASENAME3} SHARED
        $<TARGET_OBJECTS:${BASENAME}>
        $<TARGET_OBJECTS:${BASENAME2}> ${FNAME3})
TARGET_LINK_LIBRARIES(${BASENAME3} Elmer::MPI_Fortran)

IF(PHDF5_FOUND)
INCLUDE_DIRECTORIES(${PHDF5_INCLUDE_DIR})
TARGET_LINK_LIBRARIES(${BASENAME3} csa nn ${NETCDF_LIBRARIES} ${PHDF5_LIBRARIES} elmersolver)
ELSE()
TARGET_LINK_LIBRARIES(${BASENAME3} csa nn ${NETCDF_LIBRARIES} elmersolver)
ENDIF(PHDF5_FOUND)

#-- Library object
SET_TARGET_PROPERTIES(${BASENAME3} PROPERTIES PREFIX "")
SET_TARGET_PROPERTIES(${BASENAME3} PROPERTIES LINKER_LANGUAGE Fortran)

#-- Install
INSTALL(TARGETS ${BASENAME3} LIBRARY DESTINATION "share/elmersolver/lib"
            RUNTIME DESTINATION "share/elmersolver/lib")
