1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- function(ctkFunctionAddPluginRepo)
- ctkMacroParseArguments("" "NAME;GIT_URL;GIT_TAG;GIT_PROTOCOL" "" ${ARGN})
-
- foreach(_required_arg NAME GIT_URL)
- if(NOT _${_required_arg})
- message(FATAL_ERROR "${_required_arg} is empty")
- endif()
- endforeach()
-
- ctkFunctionCheckoutRepo(
- NAME ${_NAME}
- GIT_URL ${_GIT_URL}
- GIT_TAG ${_GIT_TAG}
- GIT_PROTOCOL ${_GIT_PROTOCOL}
- )
-
- set(_gitmodules_files ${${_NAME}_DIR}/.gitmodules)
- if(NOT EXISTS ${_gitmodules_files})
- message(FATAL_ERROR "The repository at ${${_NAME}_DIR} does not contain a .gitmodules file")
- endif()
-
- # Parse the .gitmodules file and add the submodules as contributed plugins
- file(STRINGS "${_gitmodules_files}" _plugin_paths REGEX "path =.*")
- foreach(_plugin_path ${_plugin_paths})
- string(REPLACE " = " ";" _plugin_path_list ${_plugin_path})
- list(GET _plugin_path_list 1 _plugin_name)
- ctk_plugin_option(${_plugin_name} "Build the ${_plugin_name} plugin." OFF)
-
- # Push the value which might have been changed in ctk_plugin_option to the parent scope
- set(CTK_PLUGIN_${_plugin_name} ${CTK_PLUGIN_${_plugin_name}} PARENT_SCOPE)
-
- set(${_plugin_name}_SOURCE_DIR ${${_NAME}_DIR}/${_plugin_name})
- set(${_plugin_name}_SOURCE_DIR ${${_plugin_name}_SOURCE_DIR} PARENT_SCOPE)
-
- if(CTK_PLUGIN_${_plugin_name} AND NOT EXISTS ${${_plugin_name}_SOURCE_DIR})
- execute_process(
- COMMAND ${GIT_EXECUTABLE} submodule update ${_plugin_name}
- WORKING_DIRECTORY ${${_NAME}_DIR}
- RESULT_VARIABLE return_code
- ERROR_VARIABLE error_msg
- )
- if(return_code)
- message(FATAL_ERROR "Could not invoke git submodule update for ${${_plugin_name}_SOURCE_DIR}")
- endif()
- endif()
- endforeach()
-
- set(CTK_PLUGINS ${CTK_PLUGINS} PARENT_SCOPE)
- set(${_NAME}_DIR ${${_NAME}_DIR} PARENT_SCOPE)
- endfunction()
|