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})

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
GET_TARGET_PROPERTY(CURRENT_LINK_FLAGS ${BASENAME3} LINK_FLAGS) 
GET_TARGET_PROPERTY(CURRENT_COMPILE_FLAGS ${BASENAME3} COMPILE_FLAGS)
IF(CURRENT_LINK_FLAGS)
  SET(CURR_LFLAGS "${CURRENT_LINK_FLAGS};${MPI_Fortran_LINK_FLAGS}")
ELSE()
  SET(CURR_LFLAGS "${MPI_Fortran_LINK_FLAGS}")
ENDIF()
IF(CURRENT_COMPILE_FLAGS)
  SET(CURR_CFLAGS "${CURRENT_COMPILE_FLAGS};${MPI_Fortran_COMPILE_FLAGS}")
ELSE()
  SET(CURR_CFLAGS "${MPI_Fortran_COMPILE_FLAGS}")
ENDIF()

SET_TARGET_PROPERTIES(${BASENAME3} PROPERTIES PREFIX "")  
SET_TARGET_PROPERTIES(${BASENAME3} PROPERTIES LINK_FLAGS "${CURR_LFLAGS}")
SET_TARGET_PROPERTIES(${BASENAME3} PROPERTIES COMPILE_FLAGS "${CURR_CFLAGS}")
SET_TARGET_PROPERTIES(${BASENAME3} PROPERTIES LINKER_LANGUAGE Fortran)

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