Initial commit with first draft
This commit is contained in:
commit
b1ecba32a4
|
|
@ -0,0 +1,12 @@
|
||||||
|
# Git Module Manager for CMake
|
||||||
|
|
||||||
|
A simple function which clones a git repository and includes it's CMake project
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
1. download the file module-manager.cmake
|
||||||
|
2. include the file in your CMakeLists.txt
|
||||||
|
|
||||||
|
``include(module-manager.cmake)
|
||||||
|
|
||||||
|
load_module(TestModule SOURCE "http://git.fritz.box/Patrick/cmake-module-manager.git" UPDATE)``
|
||||||
|
|
@ -0,0 +1,66 @@
|
||||||
|
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()
|
||||||
|
|
||||||
Loading…
Reference in New Issue