cmake_minimum_required(VERSION 3.0)

project(UKRmol+)

enable_language(Fortran)

set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin")
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib")
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib")

set(CMAKE_Fortran_MODULE_DIRECTORY "mod")

find_package(OpenMP REQUIRED)
find_package(BLAS REQUIRED)
find_package(LAPACK REQUIRED)

set(libscatci-sources
    "davidson.f"
    "m_2_matrix_sparse.f90"
    "scatci_data.f"
    "scatci_diag.F"
    "scatci_routines.f"
)

if(ARPACK_LIBRARIES)
    message(STATUS "SCATCI will be built with Arpack")
    add_definitions(-Darpack)
    set(libscatci-sources
        ${libscatci-sources}
        "m_3_arpack_diagonalizers.f90"
        "m_4_mkarp.f90")
endif()

add_library(libscatci ${libscatci-sources})

add_executable(scatci "scatci_build.f")

target_include_directories(libscatci PUBLIC
    "${CMAKE_BINARY_DIR}/source/gbtolib/mod"
    "${CMAKE_BINARY_DIR}/source/global/mod"
    "${CMAKE_BINARY_DIR}/source/interfaces/mod"
)

target_include_directories(scatci PUBLIC
    "${CMAKE_BINARY_DIR}/source/utilities/mod"
)

target_compile_options(libscatci PUBLIC ${OpenMP_Fortran_FLAGS})

target_link_libraries(libscatci
    libukplus_interfaces
    libukplus_utilities
    libGBTO
    libukplus_global
    ${ARPACK_LIBRARIES}
    ${LAPACK_LIBRARIES}
    ${BLAS_LIBRARIES}
)

target_link_libraries(scatci
    libscatci
)

set_target_properties(libscatci PROPERTIES
    OUTPUT_NAME scatci
    LINK_FLAGS ${OpenMP_Fortran_FLAGS}
)

set_target_properties(scatci PROPERTIES
    LINK_FLAGS ${OpenMP_Fortran_FLAGS}
)

install(TARGETS libscatci scatci
        RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}/bin"
        ARCHIVE DESTINATION "${CMAKE_INSTALL_PREFIX}/lib"
        LIBRARY DESTINATION "${CMAKE_INSTALL_PREFIX}/lib"
)
install(DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_Fortran_MODULE_DIRECTORY}/"
        DESTINATION "${CMAKE_INSTALL_PREFIX}/include/ci-diag")
