Skip to content

Commit ce0ee02

Browse files
committed
Move Nabla submodule update function to separate CMake script which can be invoked from cmd, remove .repository & .artifactory persistent volumes, bind whole Nabla directory from host and write directly to it from containers therefore make easy development - containers see local changes, make sure submodules are updated by host to prevent issues with .git shared between containers and host, correct dependency service chain
1 parent c2fb7d1 commit ce0ee02

File tree

18 files changed

+269
-498
lines changed

18 files changed

+269
-498
lines changed

CMakeLists.txt

Lines changed: 1 addition & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -337,24 +337,10 @@ set(THIRD_PARTY_BINARY_DIR "${PROJECT_BINARY_DIR}/3rdparty")
337337
set(NBL_MEDIA_DIRECTORY "${PROJECT_SOURCE_DIR}/examples_tests/media")
338338
get_filename_component(NBL_MEDIA_DIRECTORY_ABS "${NBL_MEDIA_DIRECTORY}" ABSOLUTE)
339339

340-
option(NBL_UPDATE_GIT_SUBMODULE "Turn this ON to let CMake update all public submodules for you" ON)
341-
option(NBL_EXIT_ON_UPDATE_GIT_SUBMODULE "Turn this ON to stop & exit configuration once submodules are updated" OFF)
342-
option(NBL_FORCE_ON_UPDATE_GIT_SUBMODULE "Submodules will be updated with --force flag if NBL_FORCE_UPDATE_GIT_SUBMODULE is turned ON, use with caution - if there are any uncommited files in submodules' working tree they will be removed!" OFF)
343-
option(NBL_SYNC_ON_UPDATE_GIT_SUBMODULE "Sync initialized submodule paths if NBL_FORCE_UPDATE_GIT_SUBMODULE is turned ON, this is useful when any submodule remote path got modified and you want to apply this modification to your local repository. Turning NBL_FORCE_ON_UPDATE_GIT_SUBMODULE implies this option" OFF)
344-
option(NBL_UPDATE_GIT_SUBMODULE_INCLUDE_PRIVATE "Turn this ON to attempt to update private Nabla submodules" OFF)
345-
option(NBL_UPDATE_GIT_SUBMODULE_NO_SEPARATE_SHELL "Turn this ON to prevent CMake from executing git submodules update or sync in a separate shell - be aware that the interaction with shell will be impossible in case of paraphrase prompt request of your key!" ON)
346-
option(NBL_CI_GIT_SUBMODULES_SHALLOW "" OFF)
347-
348-
find_package(Git REQUIRED)
340+
include(submodules/update)
349341
find_package (Python3 COMPONENTS Interpreter REQUIRED)
350342
include(common)
351343

352-
NBL_UPDATE_SUBMODULES()
353-
354-
if(NBL_EXIT_ON_UPDATE_GIT_SUBMODULE)
355-
return()
356-
endif()
357-
358344
add_subdirectory(${THIRD_PARTY_SOURCE_DIR})
359345

360346
add_subdirectory(src/nbl)

cmake/common.cmake

Lines changed: 1 addition & 179 deletions
Original file line numberDiff line numberDiff line change
@@ -1263,182 +1263,4 @@ endmacro()
12631263

12641264
macro(write_source_definitions NBL_FILE NBL_WRAPPER_CODE_TO_WRITE)
12651265
file(WRITE "${NBL_FILE}" "${NBL_WRAPPER_CODE_TO_WRITE}")
1266-
endmacro()
1267-
1268-
function(NBL_UPDATE_SUBMODULES)
1269-
ProcessorCount(_GIT_SUBMODULES_JOBS_AMOUNT_)
1270-
1271-
if(NBL_CI_GIT_SUBMODULES_SHALLOW)
1272-
set(NBL_SHALLOW "--depth=1")
1273-
else()
1274-
set(NBL_SHALLOW "")
1275-
endif()
1276-
1277-
if(NBL_FORCE_ON_UPDATE_GIT_SUBMODULE)
1278-
set(NBL_FORCE "--force")
1279-
else()
1280-
set(NBL_FORCE "")
1281-
endif()
1282-
1283-
macro(NBL_WRAPPER_COMMAND_EXCLUSIVE GIT_RELATIVE_ENTRY GIT_SUBMODULE_PATH SHOULD_RECURSIVE EXCLUDE_SUBMODULE_PATHS)
1284-
set(EXCLUDE_SUBMODULE_PATHS ${EXCLUDE_SUBMODULE_PATHS})
1285-
set(SHOULD_RECURSIVE ${SHOULD_RECURSIVE})
1286-
1287-
if("${EXCLUDE_SUBMODULE_PATHS}" STREQUAL "")
1288-
set(NBL_EXCLUDE "")
1289-
else()
1290-
foreach(EXCLUDE_SUBMODULE_PATH ${EXCLUDE_SUBMODULE_PATHS})
1291-
string(APPEND NBL_EXCLUDE "-c submodule.\"${EXCLUDE_SUBMODULE_PATH}\".update=none ")
1292-
endforeach()
1293-
1294-
string(STRIP "${NBL_EXCLUDE}" NBL_EXCLUDE)
1295-
endif()
1296-
1297-
if(SHOULD_RECURSIVE)
1298-
set(_NBL_EXECUTE_COMMAND_ "\"${GIT_EXECUTABLE}\" -C \"${NBL_ROOT_PATH}/${GIT_RELATIVE_ENTRY}\" ${NBL_EXCLUDE} submodule update --init -j ${_GIT_SUBMODULES_JOBS_AMOUNT_} ${NBL_FORCE} --recursive ${NBL_SHALLOW} ${GIT_SUBMODULE_PATH}")
1299-
else()
1300-
set(_NBL_EXECUTE_COMMAND_ "\"${GIT_EXECUTABLE}\" -C \"${NBL_ROOT_PATH}/${GIT_RELATIVE_ENTRY}\" ${NBL_EXCLUDE} submodule update --init -j ${_GIT_SUBMODULES_JOBS_AMOUNT_} ${NBL_FORCE} ${NBL_SHALLOW} ${GIT_SUBMODULE_PATH}")
1301-
endif()
1302-
1303-
string(APPEND _NBL_UPDATE_SUBMODULES_COMMANDS_ "${_NBL_EXECUTE_COMMAND_}\n")
1304-
1305-
unset(NBL_EXCLUDE)
1306-
endmacro()
1307-
1308-
set(_NBL_UPDATE_SUBMODULES_CMD_NAME_ "nbl-update-submodules")
1309-
set(_NBL_UPDATE_SUBMODULES_CMD_FILE_ "${NBL_ROOT_PATH_BINARY}/${_NBL_UPDATE_SUBMODULES_CMD_NAME_}.cmd")
1310-
get_filename_component(_NBL_UPDATE_IMPL_CMAKE_FILE_ "${NBL_ROOT_PATH_BINARY}/${_NBL_UPDATE_SUBMODULES_CMD_NAME_}.cmake" ABSOLUTE)
1311-
1312-
# Proxy script for inclusive submodule updating
1313-
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}\")\nset(NBL_FORCE \"${NBL_FORCE}\")\n\n")
1314-
string(APPEND NBL_IMPL_SCRIPT
1315-
[=[
1316-
if(NOT DEFINED GIT_RELATIVE_ENTRY)
1317-
message(FATAL_ERROR "GIT_RELATIVE_ENTRY must be defined to use this script!")
1318-
endif()
1319-
1320-
if(NOT DEFINED INCLUDE_SUBMODULE_PATHS)
1321-
message(FATAL_ERROR "INCLUDE_SUBMODULE_PATHS must be defined to use this script!")
1322-
endif()
1323-
1324-
# update an inclusive submodule first
1325-
execute_process(COMMAND "${GIT_EXECUTABLE}" -C "${NBL_ROOT_PATH}" submodule update --init "${GIT_RELATIVE_ENTRY}")
1326-
1327-
if("${INCLUDE_SUBMODULE_PATHS}" STREQUAL "")
1328-
set(NBL_SUBMODULE_UPDATE_CONFIG_ENTRY "")
1329-
else()
1330-
execute_process(COMMAND "${GIT_EXECUTABLE}" -C "${NBL_ROOT_PATH}/${GIT_RELATIVE_ENTRY}" config --file .gitmodules --get-regexp path
1331-
OUTPUT_VARIABLE NBL_OUTPUT_VARIABLE
1332-
)
1333-
1334-
string(REGEX REPLACE "\n" ";" NBL_SUBMODULE_CONFIG_LIST "${NBL_OUTPUT_VARIABLE}")
1335-
1336-
foreach(NBL_SUBMODULE_NAME ${NBL_SUBMODULE_CONFIG_LIST})
1337-
string(REGEX MATCH "submodule\\.(.*)\\.path" NBL_SUBMODULE_NAME "${NBL_SUBMODULE_NAME}")
1338-
list(APPEND NBL_ALL_SUBMODULES "${CMAKE_MATCH_1}")
1339-
endforeach()
1340-
1341-
foreach(NBL_SUBMODULE_NAME ${NBL_ALL_SUBMODULES})
1342-
list(FIND INCLUDE_SUBMODULE_PATHS "${NBL_SUBMODULE_NAME}" NBL_FOUND)
1343-
1344-
if("${NBL_FOUND}" STREQUAL "-1")
1345-
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
1346-
endif()
1347-
endforeach()
1348-
endif()
1349-
1350-
execute_process(COMMAND "${GIT_EXECUTABLE}" ${NBL_CONFIG_SETUP_CMD} submodule update --init -j ${_GIT_SUBMODULES_JOBS_AMOUNT_} --recursive ${NBL_SHALLOW} ${NBL_FORCE}
1351-
WORKING_DIRECTORY "${NBL_ROOT_PATH}/${GIT_RELATIVE_ENTRY}"
1352-
)
1353-
]=]
1354-
)
1355-
file(WRITE "${_NBL_UPDATE_IMPL_CMAKE_FILE_}" "${NBL_IMPL_SCRIPT}")
1356-
1357-
macro(NBL_WRAPPER_COMMAND_INCLUSIVE GIT_RELATIVE_ENTRY INCLUDE_SUBMODULE_PATHS)
1358-
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")
1359-
endmacro()
1360-
1361-
if(NBL_UPDATE_GIT_SUBMODULE)
1362-
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!")
1363-
1364-
include("${THIRD_PARTY_SOURCE_DIR}/boost/dep/wave.cmake")
1365-
1366-
macro(NBL_IMPL_INIT_COMMON_SUBMODULES)
1367-
# 3rdparty except boost & gltf
1368-
set(NBL_3RDPARTY_MODULES_TO_SKIP
1369-
3rdparty/boost/superproject # a lot of submodules we don't use
1370-
3rdparty/glTFSampleModels # more then 2GB waste of space (disk + .gitmodules data)
1371-
)
1372-
NBL_WRAPPER_COMMAND_EXCLUSIVE("" ./3rdparty TRUE "${NBL_3RDPARTY_MODULES_TO_SKIP}")
1373-
1374-
# boost's 3rdparties, special case
1375-
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)
1376-
foreach(NBL_TARGET ${NBL_BOOST_LIBS_TO_INIT})
1377-
list(APPEND NBL_BOOST_SUBMODULES_TO_INIT ${NBL_TARGET})
1378-
endforeach()
1379-
NBL_WRAPPER_COMMAND_INCLUSIVE(3rdparty/boost/superproject "${NBL_BOOST_SUBMODULES_TO_INIT}")
1380-
1381-
# tests
1382-
NBL_WRAPPER_COMMAND_EXCLUSIVE("" ./tests FALSE "")
1383-
endmacro()
1384-
1385-
NBL_IMPL_INIT_COMMON_SUBMODULES()
1386-
1387-
if(NBL_UPDATE_GIT_SUBMODULE_INCLUDE_PRIVATE)
1388-
NBL_WRAPPER_COMMAND_EXCLUSIVE("" ./examples_tests TRUE "")
1389-
else()
1390-
# NBL_WRAPPER_COMMAND_EXCLUSIVE("" ./ci TRUE "") TODO: enable it once we merge Ditt, etc
1391-
1392-
# examples and their media
1393-
if(NBL_BUILD_EXAMPLES)
1394-
NBL_WRAPPER_COMMAND_EXCLUSIVE("" ./examples_tests FALSE "")
1395-
NBL_WRAPPER_COMMAND_EXCLUSIVE(examples_tests ./media FALSE "")
1396-
endif()
1397-
endif()
1398-
1399-
file(WRITE "${_NBL_UPDATE_SUBMODULES_CMD_FILE_}" "${_NBL_UPDATE_SUBMODULES_COMMANDS_}")
1400-
1401-
if(WIN32)
1402-
if(NBL_UPDATE_GIT_SUBMODULE_NO_SEPARATE_SHELL)
1403-
set(UPDATE_COMMAND
1404-
nbl-update-submodules.cmd
1405-
)
1406-
1407-
execute_process(COMMAND ${UPDATE_COMMAND}
1408-
WORKING_DIRECTORY "${NBL_ROOT_PATH_BINARY}"
1409-
RESULT_VARIABLE _NBL_TMP_RET_CODE_
1410-
)
1411-
else()
1412-
find_package(GitBash REQUIRED)
1413-
1414-
execute_process(COMMAND "${GIT_BASH_EXECUTABLE}" "-c"
1415-
[=[
1416-
>&2 echo ""
1417-
clear
1418-
./nbl-update-submodules.cmd 2>&1 | tee nbl-update-submodules.log
1419-
sleep 1
1420-
clear
1421-
tput setaf 2; echo -e "Submodules have been updated!
1422-
Created nbl-update-submodules.log in your build directory."
1423-
]=]
1424-
WORKING_DIRECTORY ${NBL_ROOT_PATH_BINARY}
1425-
OUTPUT_VARIABLE _NBL_TMP_OUTPUT_
1426-
RESULT_VARIABLE _NBL_TMP_RET_CODE_
1427-
OUTPUT_STRIP_TRAILING_WHITESPACE
1428-
ERROR_STRIP_TRAILING_WHITESPACE
1429-
)
1430-
1431-
unset(_NBL_TMP_OUTPUT_)
1432-
unset(_NBL_TMP_RET_CODE_)
1433-
1434-
message(STATUS "Generated \"${NBL_ROOT_PATH_BINARY}/nbl-update-submodules.log\"")
1435-
endif()
1436-
1437-
message(STATUS "Submodules have been updated!")
1438-
else()
1439-
execute_process(COMMAND "${_NBL_UPDATE_SUBMODULES_CMD_FILE_}")
1440-
endif()
1441-
else()
1442-
execute_process(COMMAND ${CMAKE_COMMAND} -E echo "NBL_UPDATE_GIT_SUBMODULE is turned OFF therefore submodules won't get updated.")
1443-
endif()
1444-
endfunction()
1266+
endmacro()

0 commit comments

Comments
 (0)