|
1 | | -# update submodules automatically |
2 | | - |
3 | 1 | OPTION(UPDATE_SUBMODULES "Update submodules automatically" ON) |
4 | | -IF(NOT UPDATE_SUBMODULES) |
5 | | - RETURN() |
6 | | -ENDIF() |
7 | 2 |
|
8 | | -IF(GIT_EXECUTABLE AND EXISTS "${CMAKE_SOURCE_DIR}/.git") |
| 3 | +IF(NOT UPDATE_SUBMODULES) |
| 4 | + SET(SUBMODULE_UPDATE_CONFIG_MESSAGE "Disabled by -DUPDATE_SUBMODULES=OFF") |
| 5 | +ELSEIF(NOT GIT_EXECUTABLE) |
| 6 | + SET(SUBMODULE_UPDATE_CONFIG_MESSAGE "git executable was not found") |
| 7 | +ELSEIF(NOT EXISTS "${CMAKE_SOURCE_DIR}/.git") |
| 8 | + SET(SUBMODULE_UPDATE_CONFIG_MESSAGE "Not inside a git repository") |
| 9 | +ELSE() |
9 | 10 | EXECUTE_PROCESS(COMMAND "${GIT_EXECUTABLE}" config --get cmake.update-submodules |
10 | 11 | WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}" |
11 | | - OUTPUT_VARIABLE cmake_update_submodules |
| 12 | + OUTPUT_VARIABLE CMAKE_UPDATE_SUBMODULES |
12 | 13 | RESULT_VARIABLE git_config_get_result) |
13 | | - IF(cmake_update_submodules MATCHES no) |
| 14 | + IF(CMAKE_UPDATE_SUBMODULES MATCHES no) |
14 | 15 | SET(update_result 0) |
15 | | - SET(SUBMODULE_UPDATE_CONFIG_MESSAGE |
16 | | -"\n\nTo update submodules automatically, set cmake.update-submodules to 'yes', or 'force' to update automatically: |
17 | | - ${GIT_EXECUTABLE} config cmake.update-submodules yes") |
| 16 | + SET(SUBMODULE_UPDATE_CONFIG_MESSAGE "Disabled by git config. To enable set cmake.update-submodules to 'yes', or 'force': ${GIT_EXECUTABLE} config cmake.update-submodules yes") |
18 | 17 | ELSEIF(git_config_get_result EQUAL 128) |
19 | | - SET(update_result 0) |
| 18 | + SET(SUBMODULE_UPDATE_CONFIG_MESSAGE "Git executable ${GIT_EXECUTABLE} failed to run") |
| 19 | + ENDIF() |
| 20 | +ENDIF() |
| 21 | + |
| 22 | +FUNCTION(ADD_SUBMODULE dir) |
| 23 | + IF (ARGV1) |
| 24 | + SET(file "${ARGV1}") |
20 | 25 | ELSE() |
21 | | - SET(UPDATE_SUBMODULES_COMMAND |
22 | | - "${GIT_EXECUTABLE}" submodule update --init --recursive) |
23 | | - # Old Git may not work with "--depth 1". |
24 | | - # See also: https://github.com/git/git/commit/fb43e31f2b43076e7a30c9cd00d0241cb8cf97eb |
25 | | - IF(NOT GIT_VERSION_STRING VERSION_LESS "2.8.0") |
26 | | - SET(UPDATE_SUBMODULES_COMMAND ${UPDATE_SUBMODULES_COMMAND} --depth 1) |
| 26 | + SET(file CMakeLists.txt) |
| 27 | + ENDIF() |
| 28 | + IF(SUBMODULE_UPDATE_CONFIG_MESSAGE) |
| 29 | + IF(NOT EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${dir}/${file}) |
| 30 | + MESSAGE(FATAL_ERROR "Cannot download ${CMAKE_CURRENT_SOURCE_DIR}/${dir} submodule: ${SUBMODULE_UPDATE_CONFIG_MESSAGE}") |
27 | 31 | ENDIF() |
28 | | - IF(cmake_update_submodules MATCHES force) |
29 | | - MESSAGE(STATUS "Updating submodules (forced)") |
30 | | - EXECUTE_PROCESS(COMMAND ${UPDATE_SUBMODULES_COMMAND} --force |
31 | | - WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}" |
32 | | - RESULT_VARIABLE update_result) |
33 | | - ELSEIF(cmake_update_submodules MATCHES yes) |
34 | | - EXECUTE_PROCESS(COMMAND ${UPDATE_SUBMODULES_COMMAND} |
35 | | - WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}" |
| 32 | + ELSE() |
| 33 | + MESSAGE(STATUS "Downloading ${CMAKE_CURRENT_SOURCE_DIR}/${dir} submodule...") |
| 34 | + SET(UPDATE_SUBMODULES_COMMAND |
| 35 | + "${GIT_EXECUTABLE}" submodule update --init --recursive --depth 1) |
| 36 | + IF(CMAKE_UPDATE_SUBMODULES MATCHES force) |
| 37 | + EXECUTE_PROCESS(COMMAND ${UPDATE_SUBMODULES_COMMAND} --force ${dir} |
| 38 | + WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" |
36 | 39 | RESULT_VARIABLE update_result) |
37 | 40 | ELSE() |
38 | | - MESSAGE(STATUS "Updating submodules") |
39 | | - EXECUTE_PROCESS(COMMAND ${UPDATE_SUBMODULES_COMMAND} |
40 | | - WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}" |
| 41 | + EXECUTE_PROCESS(COMMAND ${UPDATE_SUBMODULES_COMMAND} ${dir} |
| 42 | + WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" |
41 | 43 | RESULT_VARIABLE update_result) |
42 | 44 | ENDIF() |
| 45 | + IF(update_result OR NOT EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${dir}/${file}) |
| 46 | + MESSAGE(FATAL_ERROR "Failed to download ${CMAKE_CURRENT_SOURCE_DIR}/${dir} submodule") |
| 47 | + ENDIF() |
43 | 48 | ENDIF() |
44 | | -ENDIF() |
| 49 | +ENDFUNCTION() |
45 | 50 |
|
46 | | -IF(update_result OR NOT EXISTS ${CMAKE_SOURCE_DIR}/libmariadb/CMakeLists.txt) |
47 | | - MESSAGE(FATAL_ERROR "No MariaDB Connector/C! Run |
48 | | - ${GIT_EXECUTABLE} submodule update --init --recursive |
49 | | -Then restart the build.${SUBMODULE_UPDATE_CONFIG_MESSAGE}") |
50 | | -ENDIF() |
| 51 | +MACRO(ADD_SUBMODULE_SUBDIRECTORY dir) |
| 52 | + ADD_SUBMODULE(${dir}) |
| 53 | + ADD_SUBDIRECTORY(${dir}) |
| 54 | +ENDMACRO() |
0 commit comments