Files
Adminive/cmake/RunInstallConsumer.cmake
T
2026-08-08 22:39:18 +08:00

61 lines
4.2 KiB
CMake

if(NOT DEFINED ADMINIVE_BINARY_DIR)
message(FATAL_ERROR "ADMINIVE_BINARY_DIR is required")
endif()
if(NOT DEFINED ADMINIVE_CONFIG OR ADMINIVE_CONFIG STREQUAL "")
set(ADMINIVE_CONFIG Release)
endif()
get_filename_component(adminive_root "${CMAKE_CURRENT_LIST_DIR}/.." ABSOLUTE)
set(adminive_consumer_source "${adminive_root}/install_consumer")
set(adminive_test_root "${ADMINIVE_BINARY_DIR}/install_consumer_test")
set(adminive_prefix "${adminive_test_root}/prefix")
set(adminive_dependency_prefix "${adminive_test_root}/dependencies")
set(adminive_consumer_binary "${adminive_test_root}/build")
set(adminive_vendor_include "${adminive_root}/backend/service/third_party/include")
file(REMOVE_RECURSE "${adminive_test_root}")
execute_process(COMMAND "${CMAKE_COMMAND}" --install "${ADMINIVE_BINARY_DIR}" --prefix "${adminive_prefix}" --config "${ADMINIVE_CONFIG}" RESULT_VARIABLE install_result)
if(NOT install_result EQUAL 0)
message(FATAL_ERROR "Adminive install failed: ${install_result}")
endif()
foreach(path IN ITEMS "${adminive_prefix}/include/nlohmann" "${adminive_prefix}/include/magic_enum" "${adminive_prefix}/include/httplib.h")
if(EXISTS "${path}")
message(FATAL_ERROR "Installed Adminive package leaked bundled dependency into the public include namespace: ${path}")
endif()
endforeach()
foreach(path IN ITEMS "${adminive_prefix}/share/Adminive/THIRD_PARTY_NOTICES.md" "${adminive_prefix}/share/Adminive/RELEASE.md" "${adminive_prefix}/share/licenses/Adminive/nlohmann-json-LICENSE.MIT" "${adminive_prefix}/share/licenses/Adminive/magic-enum-LICENSE.MIT" "${adminive_prefix}/share/licenses/Adminive/cpp-httplib-LICENSE.MIT")
if(NOT EXISTS "${path}")
message(FATAL_ERROR "Installed Adminive package is missing release/license metadata: ${path}")
endif()
endforeach()
function(adminive_write_fake_dependency package version target)
set(package_dir "${adminive_dependency_prefix}/lib/cmake/${package}")
file(MAKE_DIRECTORY "${package_dir}")
file(WRITE "${package_dir}/${package}Config.cmake" "if(NOT TARGET ${target})\n add_library(${target} INTERFACE IMPORTED)\n set_property(TARGET ${target} PROPERTY INTERFACE_INCLUDE_DIRECTORIES \"${adminive_vendor_include}\")\nendif()\n")
file(WRITE "${package_dir}/${package}ConfigVersion.cmake" "set(PACKAGE_VERSION \"${version}\")\nif(PACKAGE_FIND_VERSION VERSION_GREATER PACKAGE_VERSION)\n set(PACKAGE_VERSION_COMPATIBLE FALSE)\nelse()\n set(PACKAGE_VERSION_COMPATIBLE TRUE)\n if(PACKAGE_FIND_VERSION VERSION_EQUAL PACKAGE_VERSION)\n set(PACKAGE_VERSION_EXACT TRUE)\n endif()\nendif()\n")
endfunction()
adminive_write_fake_dependency(nlohmann_json 3.12.0 nlohmann_json::nlohmann_json)
adminive_write_fake_dependency(magic_enum 0.9.8 magic_enum::magic_enum)
adminive_write_fake_dependency(httplib 0.48.0 httplib::httplib)
execute_process(COMMAND "${CMAKE_COMMAND}" -S "${adminive_consumer_source}" -B "${adminive_consumer_binary}" "-DCMAKE_PREFIX_PATH=${adminive_prefix};${adminive_dependency_prefix}" "-DCMAKE_BUILD_TYPE=${ADMINIVE_CONFIG}" RESULT_VARIABLE configure_result)
if(NOT configure_result EQUAL 0)
message(FATAL_ERROR "Install consumer configure failed: ${configure_result}")
endif()
execute_process(COMMAND "${CMAKE_COMMAND}" --build "${adminive_consumer_binary}" --config "${ADMINIVE_CONFIG}" RESULT_VARIABLE build_result)
if(NOT build_result EQUAL 0)
message(FATAL_ERROR "Install consumer build failed: ${build_result}")
endif()
if(WIN32)
set(adminive_consumer "${adminive_consumer_binary}/${ADMINIVE_CONFIG}/consumer.exe")
set(adminive_default_consumer "${adminive_consumer_binary}/${ADMINIVE_CONFIG}/default_consumer.exe")
else()
set(adminive_consumer "${adminive_consumer_binary}/consumer")
set(adminive_default_consumer "${adminive_consumer_binary}/default_consumer")
endif()
execute_process(COMMAND "${adminive_consumer}" RESULT_VARIABLE run_result)
if(NOT run_result EQUAL 0)
message(FATAL_ERROR "Core install consumer run failed: ${run_result}")
endif()
execute_process(COMMAND "${adminive_default_consumer}" RESULT_VARIABLE default_run_result)
if(NOT default_run_result EQUAL 0)
message(FATAL_ERROR "Default/Httplib install consumer run failed: ${default_run_result}")
endif()