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