SET(SRC
    qrupdate.f90
    qrupdate_blas.f90
    qrupdate_error.f90
    caxcpy.f90
    cch1dn.f90
    cch1up.f90
    cchdex.f90
    cchinx.f90
    cchshx.f90
    cdotc.f90
    cdotu.f90
    cgqvec.f90
    clu1up.f90
    clup1up.f90
    cqhqr.f90
    cqr1up.f90
    cqrdec.f90
    cqrder.f90
    cqrinc.f90
    cqrinr.f90
    cqrot.f90
    cqrqh.f90
    cqrshc.f90
    cqrtv1.f90
    dch1dn.f90
    dch1up.f90
    dchdex.f90
    dchinx.f90
    dchshx.f90
    dgqvec.f90
    dlu1up.f90
    dlup1up.f90
    dqhqr.f90
    dqr1up.f90
    dqrdec.f90
    dqrder.f90
    dqrinc.f90
    dqrinr.f90
    dqrot.f90
    dqrqh.f90
    dqrshc.f90
    dqrtv1.f90
    sch1dn.f90
    sch1up.f90
    schdex.f90
    schinx.f90
    schshx.f90
    sgqvec.f90
    slu1up.f90
    slup1up.f90
    sqhqr.f90
    sqr1up.f90
    sqrdec.f90
    sqrder.f90
    sqrinc.f90
    sqrinr.f90
    sqrot.f90
    sqrqh.f90
    sqrshc.f90
    sqrtv1.f90
    zaxcpy.f90
    zch1dn.f90
    zch1up.f90
    zchdex.f90
    zchinx.f90
    zchshx.f90
    zdotc.f90
    zdotu.f90
    zgqvec.f90
    zlu1up.f90
    zlup1up.f90
    zqhqr.f90
    zqr1up.f90
    zqrdec.f90
    zqrder.f90
    zqrinc.f90
    zqrinr.f90
    zqrot.f90
    zqrqh.f90
    zqrshc.f90
    zqrtv1.f90
)

SET(ITARGETS)

IF (TARGET lapack_missing)
    if (BUILD_SHARED_LIBS)
        ADD_LIBRARY(qrupdate SHARED ${SRC} $<TARGET_OBJECTS:lapack_missing>)
    endif()
    if (BUILD_STATIC_LIBS)
        ADD_LIBRARY(qrupdate_static STATIC ${SRC} $<TARGET_OBJECTS:lapack_missing>)
    endif()
ELSE()
    if (BUILD_SHARED_LIBS)
        ADD_LIBRARY(qrupdate SHARED ${SRC})
    endif()
    if (BUILD_STATIC_LIBS)
        ADD_LIBRARY(qrupdate_static STATIC ${SRC})
    endif()
ENDIF()

if (BUILD_SHARED_LIBS)
    TARGET_LINK_LIBRARIES(qrupdate PRIVATE LAPACK::LAPACK BLAS::BLAS)
    add_library(qrupdate::qrupdate ALIAS qrupdate)
    SET_PROPERTY(TARGET qrupdate PROPERTY VERSION ${PROJECT_VERSION})
    SET_PROPERTY(TARGET qrupdate PROPERTY SOVERSION ${PROJECT_VERSION_MAJOR})

    SET_TARGET_PROPERTIES(qrupdate PROPERTIES Fortran_MODULE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/fortran-modules")

    TARGET_INCLUDE_DIRECTORIES(qrupdate
        PUBLIC
        $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/fortran-modules>
        $<INSTALL_INTERFACE:include/qrupdate>
    )

    ADD_COVERAGE(qrupdate)
    list(APPEND ITARGETS qrupdate)
endif()

if (BUILD_STATIC_LIBS)
    TARGET_LINK_LIBRARIES(qrupdate_static PRIVATE LAPACK::LAPACK BLAS::BLAS)
    add_library(qrupdate::qrupdate_static ALIAS qrupdate_static)

    SET_TARGET_PROPERTIES(qrupdate_static PROPERTIES Fortran_MODULE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/fortran-modules-static")
    SET_TARGET_PROPERTIES(qrupdate_static PROPERTIES OUTPUT_NAME qrupdate)
    TARGET_INCLUDE_DIRECTORIES(qrupdate_static
        PUBLIC
        $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/fortran-modules-static>
        $<INSTALL_INTERFACE:include/qrupdate>
    )

    list(APPEND ITARGETS qrupdate_static )
    ADD_COVERAGE(qrupdate_static)
endif()

if (BUILD_SHARED_LIBS)
INSTALL(DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/fortran-modules/" DESTINATION ${CMAKE_INSTALL_FULL_MODULEDIR} )
else()
INSTALL(DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/fortran-modules-static/" DESTINATION ${CMAKE_INSTALL_FULL_MODULEDIR} )
endif()

INSTALL(TARGETS ${ITARGETS}
        EXPORT  qrupdatetargets
        LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
        ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
        RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
        )

