Files
Adminive/CMakeLists.txt
2026-08-09 22:47:14 +08:00

104 lines
4.7 KiB
CMake

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=$<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=$<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=$<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}" "$<CONFIG>")
endif()