Skip to content

Commit ec5c9e3

Browse files
authored
Merge pull request #598 from Devsh-Graphics-Programming/submodulesInit
CMake submodules update & init proxy scripts
2 parents 9a58c8e + a461efa commit ec5c9e3

File tree

1 file changed

+90
-29
lines changed

1 file changed

+90
-29
lines changed

cmake/common.cmake

Lines changed: 90 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1270,52 +1270,113 @@ macro(write_source_definitions NBL_FILE NBL_WRAPPER_CODE_TO_WRITE)
12701270
endmacro()
12711271

12721272
function(NBL_UPDATE_SUBMODULES)
1273-
macro(NBL_WRAPPER_COMMAND GIT_RELATIVE_ENTRY GIT_SUBMODULE_PATH SHOULD_RECURSIVE EXCLUDE_SUBMODULE_PATH)
1273+
ProcessorCount(_GIT_SUBMODULES_JOBS_AMOUNT_)
1274+
1275+
if(NBL_CI_GIT_SUBMODULES_SHALLOW)
1276+
set(NBL_SHALLOW "--depth=1")
1277+
else()
1278+
set(NBL_SHALLOW "")
1279+
endif()
1280+
1281+
macro(NBL_WRAPPER_COMMAND_EXCLUSIVE GIT_RELATIVE_ENTRY GIT_SUBMODULE_PATH SHOULD_RECURSIVE EXCLUDE_SUBMODULE_PATH)
12741282
set(SHOULD_RECURSIVE ${SHOULD_RECURSIVE})
12751283

12761284
if("${EXCLUDE_SUBMODULE_PATH}" STREQUAL "")
12771285
set(NBL_EXCLUDE "")
12781286
else()
12791287
set(NBL_EXCLUDE "-c submodule.\"${EXCLUDE_SUBMODULE_PATH}\".update=none")
12801288
endif()
1281-
1282-
if(NBL_CI_GIT_SUBMODULES_SHALLOW)
1283-
set(NBL_SHALLOW "--depth=1")
1284-
else()
1285-
set(NBL_SHALLOW "")
1286-
endif()
12871289

12881290
if(SHOULD_RECURSIVE)
1289-
string(APPEND _NBL_UPDATE_SUBMODULES_COMMANDS_ "\"${GIT_EXECUTABLE}\" ${NBL_EXCLUDE} -C \"${NBL_ROOT_PATH}/${GIT_RELATIVE_ENTRY}\" submodule update --init --recursive ${NBL_SHALLOW} ${GIT_SUBMODULE_PATH}\n")
1291+
string(APPEND _NBL_UPDATE_SUBMODULES_COMMANDS_ "\"${GIT_EXECUTABLE}\" ${NBL_EXCLUDE} -C \"${NBL_ROOT_PATH}/${GIT_RELATIVE_ENTRY}\" submodule update --init -j ${_GIT_SUBMODULES_JOBS_AMOUNT_} --recursive ${NBL_SHALLOW} ${GIT_SUBMODULE_PATH}\n")
12901292
else()
1291-
string(APPEND _NBL_UPDATE_SUBMODULES_COMMANDS_ "\"${GIT_EXECUTABLE}\" -C \"${NBL_ROOT_PATH}/${GIT_RELATIVE_ENTRY}\" submodule update --init ${NBL_SHALLOW} ${GIT_SUBMODULE_PATH}\n")
1293+
string(APPEND _NBL_UPDATE_SUBMODULES_COMMANDS_ "\"${GIT_EXECUTABLE}\" -C \"${NBL_ROOT_PATH}/${GIT_RELATIVE_ENTRY}\" submodule update --init -j ${_GIT_SUBMODULES_JOBS_AMOUNT_} ${NBL_SHALLOW} ${GIT_SUBMODULE_PATH}\n")
12921294
endif()
12931295
endmacro()
12941296

1297+
set(_NBL_UPDATE_SUBMODULES_CMD_NAME_ "nbl-update-submodules")
1298+
set(_NBL_UPDATE_SUBMODULES_CMD_FILE_ "${NBL_ROOT_PATH_BINARY}/${_NBL_UPDATE_SUBMODULES_CMD_NAME_}.cmd")
1299+
get_filename_component(_NBL_UPDATE_IMPL_CMAKE_FILE_ "${NBL_ROOT_PATH_BINARY}/${_NBL_UPDATE_SUBMODULES_CMD_NAME_}.cmake" ABSOLUTE)
1300+
1301+
# Proxy script for inclusive submodule updating
1302+
string(APPEND NBL_IMPL_SCRIPT "set(NBL_ROOT_PATH \"${NBL_ROOT_PATH}\")\nset(_GIT_SUBMODULES_JOBS_AMOUNT_ ${_GIT_SUBMODULES_JOBS_AMOUNT_})\nset(GIT_EXECUTABLE \"${GIT_EXECUTABLE}\")\nset(NBL_SHALLOW \"${NBL_SHALLOW}\")\n\n")
1303+
string(APPEND NBL_IMPL_SCRIPT
1304+
[=[
1305+
if(NOT DEFINED GIT_RELATIVE_ENTRY)
1306+
message(FATAL_ERROR "GIT_RELATIVE_ENTRY must be defined to use this script!")
1307+
endif()
1308+
1309+
if(NOT DEFINED INCLUDE_SUBMODULE_PATHS)
1310+
message(FATAL_ERROR "INCLUDE_SUBMODULE_PATHS must be defined to use this script!")
1311+
endif()
1312+
1313+
# update an inclusive submodule first
1314+
execute_process(COMMAND "${GIT_EXECUTABLE}" -C "${NBL_ROOT_PATH}" submodule update --init "${GIT_RELATIVE_ENTRY}")
1315+
1316+
if("${INCLUDE_SUBMODULE_PATHS}" STREQUAL "")
1317+
set(NBL_SUBMODULE_UPDATE_CONFIG_ENTRY "")
1318+
else()
1319+
execute_process(COMMAND "${GIT_EXECUTABLE}" -C "${NBL_ROOT_PATH}/${GIT_RELATIVE_ENTRY}" config --file .gitmodules --get-regexp path
1320+
OUTPUT_VARIABLE NBL_OUTPUT_VARIABLE
1321+
)
1322+
1323+
string(REGEX REPLACE "\n" ";" NBL_SUBMODULE_CONFIG_LIST "${NBL_OUTPUT_VARIABLE}")
1324+
1325+
foreach(NBL_SUBMODULE_NAME ${NBL_SUBMODULE_CONFIG_LIST})
1326+
string(REGEX MATCH "submodule\\.(.*)\\.path" NBL_SUBMODULE_NAME "${NBL_SUBMODULE_NAME}")
1327+
list(APPEND NBL_ALL_SUBMODULES "${CMAKE_MATCH_1}")
1328+
endforeach()
1329+
1330+
foreach(NBL_SUBMODULE_NAME ${NBL_ALL_SUBMODULES})
1331+
list(FIND INCLUDE_SUBMODULE_PATHS "${NBL_SUBMODULE_NAME}" NBL_FOUND)
1332+
1333+
if("${NBL_FOUND}" STREQUAL "-1")
1334+
list(APPEND NBL_CONFIG_SETUP_CMD "-c;submodule.${NBL_SUBMODULE_NAME}.update=none") # filter submodules - only those on the INCLUDE_SUBMODULE_PATHS list will be updated when recursive update is requested, all left will be skipped
1335+
endif()
1336+
endforeach()
1337+
endif()
1338+
1339+
execute_process(COMMAND "${GIT_EXECUTABLE}" ${NBL_CONFIG_SETUP_CMD} submodule update --init -j ${_GIT_SUBMODULES_JOBS_AMOUNT_} --recursive ${NBL_SHALLOW}
1340+
WORKING_DIRECTORY "${NBL_ROOT_PATH}/${GIT_RELATIVE_ENTRY}"
1341+
)
1342+
]=]
1343+
)
1344+
file(WRITE "${_NBL_UPDATE_IMPL_CMAKE_FILE_}" "${NBL_IMPL_SCRIPT}")
1345+
1346+
macro(NBL_WRAPPER_COMMAND_INCLUSIVE GIT_RELATIVE_ENTRY INCLUDE_SUBMODULE_PATHS)
1347+
string(APPEND _NBL_UPDATE_SUBMODULES_COMMANDS_ "\"${CMAKE_COMMAND}\" \"-DGIT_RELATIVE_ENTRY=${GIT_RELATIVE_ENTRY}\" \"-DINCLUDE_SUBMODULE_PATHS=${INCLUDE_SUBMODULE_PATHS}\" -P \"${_NBL_UPDATE_IMPL_CMAKE_FILE_}\"\n")
1348+
endmacro()
1349+
12951350
if(NBL_UPDATE_GIT_SUBMODULE)
12961351
execute_process(COMMAND ${CMAKE_COMMAND} -E echo "All submodules are about to get updated and initialized in repository because NBL_UPDATE_GIT_SUBMODULE is turned ON!")
1297-
set(_NBL_UPDATE_SUBMODULES_CMD_NAME_ "nbl-update-submodules")
1298-
set(_NBL_UPDATE_SUBMODULES_CMD_FILE_ "${NBL_ROOT_PATH_BINARY}/${_NBL_UPDATE_SUBMODULES_CMD_NAME_}.cmd")
1299-
1352+
13001353
include("${THIRD_PARTY_SOURCE_DIR}/boost/dep/wave.cmake")
13011354

1302-
if(NBL_UPDATE_GIT_SUBMODULE_INCLUDE_PRIVATE)
1303-
NBL_WRAPPER_COMMAND("" "" TRUE "")
1304-
else()
1355+
macro(NBL_IMPL_INIT_COMMON_SUBMODULES)
13051356
# 3rdparty except boost
1306-
NBL_WRAPPER_COMMAND("" ./3rdparty TRUE "3rdparty/boost/superproject")
1357+
NBL_WRAPPER_COMMAND_EXCLUSIVE("" ./3rdparty TRUE 3rdparty/boost/superproject)
13071358

1308-
# boost 3rdaprty
1309-
NBL_WRAPPER_COMMAND(3rdparty/boost "./superproject" FALSE "")
1310-
NBL_WRAPPER_COMMAND(3rdparty/boost/superproject "./libs/wave" TRUE "") # boost's wave
1311-
foreach(BOOST_LIB IN LISTS NBL_BOOST_LIBS) # deps of the wave
1312-
NBL_WRAPPER_COMMAND(3rdparty/boost/superproject "./libs/${BOOST_LIB}" TRUE "")
1359+
# boost's 3rdaprties, special case
1360+
set(NBL_BOOST_LIBS_TO_INIT ${NBL_BOOST_LIBS} wave numeric_conversion) # wave and all of its deps, numeric_conversion is nested in conversion submodule (for some reason boostdep tool doesn't output it properly)
1361+
foreach(NBL_TARGET ${NBL_BOOST_LIBS_TO_INIT})
1362+
list(APPEND NBL_BOOST_SUBMODULES_TO_INIT ${NBL_TARGET})
13131363
endforeach()
1314-
1315-
#NBL_WRAPPER_COMMAND("" ./ci TRUE "") TODO: enable it once we merge Ditt, etc
1316-
NBL_WRAPPER_COMMAND("" ./examples_tests FALSE "")
1317-
NBL_WRAPPER_COMMAND(examples_tests ./media FALSE "")
1318-
NBL_WRAPPER_COMMAND("" ./tests FALSE "")
1364+
NBL_WRAPPER_COMMAND_INCLUSIVE(3rdparty/boost/superproject "${NBL_BOOST_SUBMODULES_TO_INIT}")
1365+
1366+
# tests
1367+
NBL_WRAPPER_COMMAND_EXCLUSIVE("" ./tests FALSE "")
1368+
endmacro()
1369+
1370+
NBL_IMPL_INIT_COMMON_SUBMODULES()
1371+
1372+
if(NBL_UPDATE_GIT_SUBMODULE_INCLUDE_PRIVATE)
1373+
NBL_WRAPPER_COMMAND_EXCLUSIVE("" ./examples_tests TRUE "")
1374+
else()
1375+
# NBL_WRAPPER_COMMAND_EXCLUSIVE("" ./ci TRUE "") TODO: enable it once we merge Ditt, etc
1376+
1377+
# examples and their media
1378+
NBL_WRAPPER_COMMAND_EXCLUSIVE("" ./examples_tests FALSE "")
1379+
NBL_WRAPPER_COMMAND_EXCLUSIVE(examples_tests ./media FALSE "")
13191380
endif()
13201381

13211382
file(WRITE "${_NBL_UPDATE_SUBMODULES_CMD_FILE_}" "${_NBL_UPDATE_SUBMODULES_COMMANDS_}")
@@ -1331,9 +1392,7 @@ clear
13311392
sleep 1
13321393
clear
13331394
tput setaf 2; echo -e "Submodules have been updated!
1334-
Created nbl-update-submodules.log in your build directory.
1335-
This window will be closed in 5 seconds..."
1336-
sleep 5
1395+
Created nbl-update-submodules.log in your build directory."
13371396
]=]
13381397
WORKING_DIRECTORY ${NBL_ROOT_PATH_BINARY}
13391398
OUTPUT_VARIABLE _NBL_TMP_OUTPUT_
@@ -1347,6 +1406,8 @@ sleep 5
13471406
else()
13481407
execute_process(COMMAND "${_NBL_UPDATE_SUBMODULES_CMD_FILE_}")
13491408
endif()
1409+
1410+
message(STATUS "Submodules have been updated! Check \"${NBL_ROOT_PATH_BINARY}/nbl-update-submodules.log\" for more details.")
13501411
else()
13511412
execute_process(COMMAND ${CMAKE_COMMAND} -E echo "NBL_UPDATE_GIT_SUBMODULE is turned OFF therefore submodules won't get updated.")
13521413
endif()

0 commit comments

Comments
 (0)