@@ -1270,52 +1270,113 @@ macro(write_source_definitions NBL_FILE NBL_WRAPPER_CODE_TO_WRITE)
12701270endmacro ()
12711271
12721272function (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} \" )\n set(_GIT_SUBMODULES_JOBS_AMOUNT_ ${_GIT_SUBMODULES_JOBS_AMOUNT_} )\n set(GIT_EXECUTABLE \" ${GIT_EXECUTABLE} \" )\n set(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
13311392sleep 1
13321393clear
13331394tput 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