61 lines
4.2 KiB
CMake
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()
|