# apps/CMakeLists.txt
#
# dso-keygen, dso-sign, dso-verify — CLI tools for DSO signing
#
# Built only when plugin-sign (OpenSSL) is available.

cmake_minimum_required(VERSION 3.20)

if(NOT PLUGIN_SIGN_AVAILABLE)
    message(STATUS "apps: plugin-sign not available — skipping CLI tools")
    return()
endif()

find_package(OpenSSL REQUIRED)

set(APPS_INCLUDE_DIRS
    ${CMAKE_CURRENT_SOURCE_DIR}/../src
)

# ── dso-keygen ────────────────────────────────────────────────────────────────
add_executable(dso-keygen src/dso-keygen.cpp)
target_include_directories(dso-keygen PRIVATE ${APPS_INCLUDE_DIRS})
target_link_libraries(dso-keygen PRIVATE plugin-sign OpenSSL::SSL OpenSSL::Crypto)
target_compile_options(dso-keygen PRIVATE
    $<$<CXX_COMPILER_ID:GNU,Clang>:-Wall -Wextra -Wpedantic>)

# ── dso-sign ──────────────────────────────────────────────────────────────────
add_executable(dso-sign src/dso-sign.cpp)
target_include_directories(dso-sign PRIVATE ${APPS_INCLUDE_DIRS})
target_link_libraries(dso-sign PRIVATE plugin-sign OpenSSL::SSL OpenSSL::Crypto)
target_compile_options(dso-sign PRIVATE
    $<$<CXX_COMPILER_ID:GNU,Clang>:-Wall -Wextra -Wpedantic>)

# ── dso-verify ────────────────────────────────────────────────────────────────
add_executable(dso-verify src/dso-verify.cpp)
target_include_directories(dso-verify PRIVATE ${APPS_INCLUDE_DIRS})
target_link_libraries(dso-verify PRIVATE plugin-sign OpenSSL::SSL OpenSSL::Crypto)
target_compile_options(dso-verify PRIVATE
    $<$<CXX_COMPILER_ID:GNU,Clang>:-Wall -Wextra -Wpedantic>)

# ── Install ───────────────────────────────────────────────────────────────────
install(TARGETS dso-keygen dso-sign dso-verify
    RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
    COMPONENT plugin_apps)

# Shell completions travel with the tools they describe (they moved here from
# ffs/tools/auto-complete/ in the Conan migration). Installed where bash and
# zsh look by default; OPTIONAL so a stripped source tree still configures.
set(_ac "${CMAKE_CURRENT_SOURCE_DIR}/../tools/auto-complete")
foreach(_tool dso-keygen dso-sign dso-verify)
    install(FILES       "${_ac}/${_tool}.bash"
        DESTINATION     "${CMAKE_INSTALL_DATAROOTDIR}/bash-completion/completions"
        RENAME          "${_tool}"
        COMPONENT       plugin_apps
        OPTIONAL)
    install(FILES       "${_ac}/_${_tool}"
        DESTINATION     "${CMAKE_INSTALL_DATAROOTDIR}/zsh/site-functions"
        COMPONENT       plugin_apps
        OPTIONAL)
endforeach()
unset(_ac)
