Initial commit with first draft

This commit is contained in:
Patrick Maschek 2024-08-26 00:45:24 +02:00
commit b1ecba32a4
2 changed files with 78 additions and 0 deletions

12
README.md Normal file
View File

@ -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)``

66
module-manager.cmake Normal file
View File

@ -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()