cmake-module-manager/module-manager.cmake

67 lines
1.7 KiB
CMake

cmake_minimum_required(VERSION 3.16)
function(load_module MODULE_NAME)
set(keyword_optional_args UPDATE RECURSIVE)
set(keyword_single_arg_args SOURCE DESTINATION VERSION)
set(keyword_multi_arg_args)
cmake_parse_arguments(LOAD_MODULE ${keyword_optional_args} ${keyword_single_arg_args} ${keyword_multi_arg_args} ${ARGN})
if (NOT LOAD_MODULE_DESTINATION)
set(LOAD_MODULE_DESTINATION "${CMAKE_CURRENT_LIST_DIR}/modules")
endif()
if (LOAD_MODULE_VERSION)
set(MODULE_DIR_NAME "${MODULE_NAME}-${LOAD_MODULE_VERSION}")
else()
set(MODULE_DIR_NAME ${MODULE_NAME})
endif()
set(MODULE_PATH "${LOAD_MODULE_DESTINATION}/${MODULE_DIR_NAME}")
message(CHECK_START "Loading module ${MODULE_NAME}")
if (EXISTS ${MODULE_PATH})
message(CHECK_PASS "Module already installed")
if (LOAD_MODULE_UPDATE)
message(CHECK_START "Updating Module ${MODULE_NAME}")
execute_process(
COMMAND git pull
WORKING_DIRECTORY ${MODULE_PATH}
RESULT_VARIABLE GIT_PULL_RESULT)
if (GIT_PULL_RESULT EQUAL 0)
message(CHECK_PASS "successful")
else()
message(CHECK_FAIL "failed")
endif()
endif()
else()
message(CHECK_FAIL "Module not installed")
message(CHECK_START "Downloading module ${MODULE_NAME}")
# Create module destination directory
file(MAKE_DIRECTORY ${LOAD_MODULE_DESTINATION})
execute_process(
COMMAND git clone ${LOAD_MODULE_SOURCE} ${MODULE_NAME}
WORKING_DIRECTORY ${LOAD_MODULE_DESTINATION}
RESULT_VARIABLE GIT_CLONE_RESULT)
if (GIT_CLONE_RESULT EQUAL 0)
message(CHECK_PASS "successful")
else()
message(CHECK_FAIL "failed")
message(SEND_ERROR "Failed to load module ${MODULE_NAME}")
return()
endif()
endif()
add_subdirectory(${MODULE_PATH})
endfunction()