cmake_minimum_required(VERSION 3.20) project(Adminive VERSION 1.0.0 LANGUAGES CXX) include(CTest) option(ADMINIVE_ENABLE_REAL_DROGON_TESTS "Build and run release gates against installed Drogon" OFF) if(ADMINIVE_ENABLE_REAL_DROGON_TESTS) find_package(nlohmann_json 3.12.0 CONFIG REQUIRED) find_package(Drogon CONFIG REQUIRED) endif() include("${CMAKE_CURRENT_LIST_DIR}/cmake/AdminiveVerification.cmake") set(_adminive_embedded_structive_dir "${CMAKE_CURRENT_LIST_DIR}/third_party/Structive") set(_adminive_sibling_structive_dir "${CMAKE_CURRENT_LIST_DIR}/../Structive") if(EXISTS "${_adminive_embedded_structive_dir}/CMakeLists.txt") set(_adminive_default_structive_dir "${_adminive_embedded_structive_dir}") elseif(EXISTS "${_adminive_sibling_structive_dir}/CMakeLists.txt") set(_adminive_default_structive_dir "${_adminive_sibling_structive_dir}") else() set(_adminive_default_structive_dir "${_adminive_embedded_structive_dir}") endif() set(ADMINIVE_STRUCTIVE_SOURCE_DIR "${_adminive_default_structive_dir}" CACHE PATH "Structive source tree used by Adminive") get_filename_component(ADMINIVE_STRUCTIVE_SOURCE_DIR "${ADMINIVE_STRUCTIVE_SOURCE_DIR}" ABSOLUTE) if(NOT EXISTS "${ADMINIVE_STRUCTIVE_SOURCE_DIR}/CMakeLists.txt") message(FATAL_ERROR "Structive source tree not found at ${ADMINIVE_STRUCTIVE_SOURCE_DIR}. Set ADMINIVE_STRUCTIVE_SOURCE_DIR explicitly.") endif() if(NOT TARGET structive::property_core) add_subdirectory("${ADMINIVE_STRUCTIVE_SOURCE_DIR}" "${CMAKE_CURRENT_BINARY_DIR}/third_party/Structive") endif() add_subdirectory("${CMAKE_CURRENT_LIST_DIR}/backend") set(adminive_package_includes "/.agents/" "/.gitignore" "/AGENTS.md" "/backend/" "/cmake/" "/config/" "/CMakeLists.txt" "/frontend/" "/install_consumer/" "/README.md" "/RELEASE.md" "/THIRD_PARTY_NOTICES.md" "/scripts/" "/third_party/" ) set(adminive_package_excludes "/.git/" "/third_party/Structive/.git/" "/third_party/Structive/cmake-build-*/" "/third_party/Structive/verification/" "/.idea/" "/build/" "/cmake-build-*/" "/doc/" "/node_modules/" "/frontend/frontend.zip" "/frontend/node_modules/" "/frontend_dist/" "/verification/" "/frontend/playwright-report/" "/frontend/test-results/" "*.tsbuildinfo" "*.zip" ) include("${CMAKE_CURRENT_LIST_DIR}/cmake/PackageZip.cmake") if("${ADMINIVE_STRUCTIVE_SOURCE_DIR}" STREQUAL "${_adminive_embedded_structive_dir}") add_project_zip_target(package_zip "${CMAKE_CURRENT_LIST_DIR}/Adminive.zip" "${CMAKE_CURRENT_LIST_DIR}" adminive_package_includes adminive_package_excludes) else() set(adminive_structive_package_includes "/.agents/" "/.gitignore" "/AGENTS.md" "/cmake/" "/core/" "/docs/" "/extensions/" "/install_consumer/" "/tests/" "/CMakeLists.txt" "/README.md" "/README.zh-CN.md" "/RELEASE.md" "/THIRD_PARTY_NOTICES.md" ) set(adminive_structive_package_excludes "/.git/" "/.idea/" "/build/" "/cmake-build-*/" "/verification/" "*.zip" ) add_project_zip_target(package_zip "${CMAKE_CURRENT_LIST_DIR}/Adminive.zip" "${CMAKE_CURRENT_LIST_DIR}" adminive_package_includes adminive_package_excludes "${ADMINIVE_STRUCTIVE_SOURCE_DIR}" "third_party/Structive" adminive_structive_package_includes adminive_structive_package_excludes) endif() if(BUILD_TESTING) add_test(NAME Adminive_Install_Consumer_Test COMMAND "${CMAKE_COMMAND}" "-DADMINIVE_BINARY_DIR=${CMAKE_BINARY_DIR}" "-DADMINIVE_CONFIG=$" -P "${CMAKE_CURRENT_LIST_DIR}/cmake/RunInstallConsumer.cmake") set_tests_properties(Adminive_Install_Consumer_Test PROPERTIES LABELS "install;package") if(ADMINIVE_ENABLE_REAL_DROGON_TESTS) add_test(NAME Adminive_Real_Drogon_Install_Consumer_Test COMMAND "${CMAKE_COMMAND}" "-DADMINIVE_BINARY_DIR=${CMAKE_BINARY_DIR}" "-DADMINIVE_CONFIG=$" "-DDrogon_DIR=${Drogon_DIR}" "-Dnlohmann_json_DIR=${nlohmann_json_DIR}" -P "${CMAKE_CURRENT_LIST_DIR}/cmake/RunRealDrogonInstallConsumer.cmake") set_tests_properties(Adminive_Real_Drogon_Install_Consumer_Test PROPERTIES LABELS "install;package;drogon;real-dependency;release") endif() add_test(NAME Adminive_Package_Zip_Test COMMAND "${CMAKE_COMMAND}" "-DADMINIVE_BINARY_DIR=${CMAKE_BINARY_DIR}" "-DADMINIVE_CONFIG=$" -P "${CMAKE_CURRENT_LIST_DIR}/cmake/RunPackageZipTest.cmake") set_tests_properties(Adminive_Package_Zip_Test PROPERTIES LABELS "package;archive") adminive_register_frontend_tests("${CMAKE_BINARY_DIR}" "$") endif()