67 lines
1.7 KiB
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()
|
|
|