find_package(Boost REQUIRED)
find_package(OpenSSL REQUIRED)
find_package(Threads)

include(FetchContent)
find_package(CLI11 2.6 QUIET)
if(NOT CLI11_FOUND)
    set(CLI11_PRECOMPILED ON CACHE BOOL "Build CLI11 as a compiled library" FORCE)
    FetchContent_Declare(CLI11
        GIT_REPOSITORY https://github.com/CLIUtils/CLI11.git
        GIT_TAG v2.6.2
        GIT_SHALLOW TRUE)
    FetchContent_MakeAvailable(CLI11)
endif()

add_library(pki_library STATIC
    asn1.cpp
    at_request.cpp
    at_response.cpp
    authorization.cpp
    certificate.cpp
    certificate_filesystem_storage.cpp
    certificate_revocation_list.cpp
    certificate_trust_list.cpp
    config.cpp
    credential_filesystem_storage.cpp
    crl_store.cpp
    dc_command.cpp
    distribution_centre.cpp
    ea_request.cpp
    ea_response.cpp
    ecies.cpp
    encrypted_data.cpp
    filesystem.cpp
    hashed_id8.cpp
    hexstring.cpp
    http.cpp
    key_command.cpp
    keys.cpp
    openssl.cpp
    openssl_security_module.cpp
    pem.cpp
    prune_command.cpp
    psid_ssp.cpp
    response_codes.cpp
    security_module.cpp
    signed_builder.cpp
    signed_data.cpp
    station_config_filesystem.cpp
    time.cpp
    trust_list_filesystem_storage.cpp
    validation.cpp
    xdg.cpp
)
target_link_libraries(pki_library PUBLIC
    OpenSSL::Crypto OpenSSL::SSL
    Boost::headers
    CLI11::CLI11
    asn1 common security)
target_compile_definitions(pki_library PRIVATE OPENSSL_API_COMPAT=0x10101000L)
target_compile_features(pki_library PUBLIC cxx_std_17)

add_executable(pki
    cpoc.cpp
    enrolment.cpp
    main.cpp
    printing.cpp
    station.cpp
)
target_link_libraries(pki PUBLIC pki_library)
set_target_properties(pki PROPERTIES INSTALL_RPATH $ORIGIN/../${CMAKE_INSTALL_LIBDIR})
install(TARGETS pki DESTINATION ${CMAKE_INSTALL_BINDIR})

add_test_subdirectory(tests)
