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()