cmake_minimum_required(VERSION 3.16)
project(signalunofficial VERSION 0.1.10 LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
option(SIGNAL_TESTS_ONLY "Build host tests without Lomiri or the real Signal runtime" OFF)
include(CTest)
find_package(Qt5 5.15 REQUIRED COMPONENTS Core)
find_library(SQLITE3_LIBRARY NAMES sqlite3 REQUIRED)
add_library(signal-storage STATIC src/SettingsStore.cpp src/Paths.cpp src/Database.cpp src/BackupManager.cpp src/RecordModel.cpp)
target_include_directories(signal-storage PUBLIC src)
target_link_libraries(signal-storage PUBLIC Qt5::Core ${SQLITE3_LIBRARY})
target_compile_options(signal-storage PRIVATE -Wall -Wextra -Wpedantic)
if(BUILD_TESTING)
    add_subdirectory(tests)
endif()
if(SIGNAL_TESTS_ONLY)
    return()
endif()
find_package(Qt5 5.15 REQUIRED COMPONENTS DBus Gui Multimedia Qml Quick)
find_package(Threads REQUIRED)
find_library(QRENCODE_LIBRARY NAMES qrencode REQUIRED)
if(NOT DEFINED ENV{ARCH_TRIPLET})
    message(FATAL_ERROR "Build the application with Clickable. For host storage tests use -DSIGNAL_TESTS_ONLY=ON.")
endif()
set(ARCH "$ENV{ARCH}")
set(ARCH_TRIPLET "$ENV{ARCH_TRIPLET}")
set(CLICK_FRAMEWORK "$ENV{CLICK_FRAMEWORK}")
set(APPARMOR_POLICY "$ENV{APPARMOR_POLICY}")
if(CLICK_FRAMEWORK STREQUAL "" OR APPARMOR_POLICY STREQUAL "" OR ARCH STREQUAL "")
    message(FATAL_ERROR "Clickable framework/architecture/AppArmor environment is incomplete.")
endif()
if(NOT EXISTS "${SIGNAL_ENGINE_DIR}/prepared.json" OR NOT EXISTS "${SIGNAL_ENGINE_DIR}/run-signal-cli"
    OR NOT EXISTS "${SIGNAL_ENGINE_DIR}/native/libsqlitejdbc.so"
    OR NOT EXISTS "${SIGNAL_ENGINE_DIR}/bootstrap/org/barrydegraaff/signalunofficial/EngineBootstrap.class")
    message(FATAL_ERROR "The pinned engine was not prepared. Run Clickable with its prebuild step; UI-only Click packages are refused.")
endif()
configure_file(manifest.json.in manifest.json @ONLY)
configure_file(signalunofficial.apparmor.in signalunofficial.apparmor @ONLY)
configure_file(signalunofficial-push-helper.apparmor.in signalunofficial-push-helper.apparmor @ONLY)
qt5_add_resources(APP_RESOURCES resources.qrc)
add_executable(signalunofficial src/main.cpp src/Backend.cpp src/Engine.cpp src/Notifications.cpp src/QrProvider.cpp src/QrProvider.h ${APP_RESOURCES})
target_link_libraries(signalunofficial PRIVATE signal-storage Qt5::DBus Qt5::Gui Qt5::Multimedia Qt5::Qml Qt5::Quick ${QRENCODE_LIBRARY} Threads::Threads)
target_compile_definitions(signalunofficial PRIVATE SIGNAL_BUILD_ENGINE_DIR="${SIGNAL_ENGINE_DIR}")
target_compile_options(signalunofficial PRIVATE -Wall -Wextra -Wpedantic)
install(TARGETS signalunofficial RUNTIME DESTINATION lib/${ARCH_TRIPLET}/bin)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/manifest.json ${CMAKE_CURRENT_BINARY_DIR}/signalunofficial.apparmor
    ${CMAKE_CURRENT_BINARY_DIR}/signalunofficial-push-helper.apparmor push-helper.json signalunofficial.desktop signalunofficial.contenthub DESTINATION .)
install(PROGRAMS signalunofficial-push-helper DESTINATION .)
install(DIRECTORY assets DESTINATION .)
install(DIRECTORY "${SIGNAL_ENGINE_DIR}/" DESTINATION share/signalunofficial/engine USE_SOURCE_PERMISSIONS)
install(DIRECTORY licenses DESTINATION share/signalunofficial)
install(FILES LICENSE README.md CHANGELOG.md OPENSTORE-DESCRIPTION.txt THIRD-PARTY.md DESTINATION share/signalunofficial)
