Skip to content

Commit 8a2ebe3

Browse files
committed
correct strategy for boost's .gitmodules mini tool which will *not* lead to issues with non-existing references, update 3rdparty/boost/superproject submodule
1 parent 44f241a commit 8a2ebe3

File tree

2 files changed

+22
-31
lines changed

2 files changed

+22
-31
lines changed

3rdparty/boost/CMakeLists.txt

Lines changed: 21 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -56,21 +56,19 @@ if(NBL_BOOST_GENERATE_DEP_LIST) # internal, for Nabla devs
5656

5757
set(NBL_BOOSTDEP_EXE_FILEPATH "${CMAKE_CURRENT_BINARY_DIR}/superproject/tools/boostdep/bin/${NBL_BOOSTDEP_EXE}")
5858

59-
if(NOT EXISTS "${NBL_BOOSTDEP_EXE_FILEPATH}")
60-
macro(NBL_BOOST_EXECUTE)
61-
execute_process(COMMAND ${ARGV}
62-
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/superproject"
63-
)
64-
endmacro()
59+
macro(NBL_BOOST_EXECUTE)
60+
execute_process(COMMAND ${ARGV} WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/superproject")
61+
endmacro()
6562

63+
if(NOT EXISTS "${NBL_BOOSTDEP_EXE_FILEPATH}")
6664
NBL_BOOST_EXECUTE(cmd /C bootstrap.bat)
6765
NBL_BOOST_EXECUTE(cmd /C b2.exe tools/boostdep/build)
6866
NBL_BOOST_EXECUTE("${CMAKE_COMMAND}" -E copy "./dist/bin/${NBL_BOOSTDEP_EXE}" "${NBL_BOOSTDEP_EXE_FILEPATH}")
6967
NBL_BOOST_EXECUTE(git clean -fdx)
7068
NBL_BOOST_EXECUTE(git reset --hard)
7169
endif()
7270

73-
execute_process(COMMAND "${NBL_BOOSTDEP_EXE_FILEPATH}" --boost-root "${CMAKE_CURRENT_SOURCE_DIR}/superproject" --brief wave
71+
NBL_BOOST_EXECUTE("${NBL_BOOSTDEP_EXE_FILEPATH}" --boost-root "${CMAKE_CURRENT_SOURCE_DIR}/superproject" --brief wave
7472
OUTPUT_VARIABLE NBL_OUTPUT_VAR
7573
)
7674

@@ -83,29 +81,22 @@ if(NBL_BOOST_GENERATE_DEP_LIST) # internal, for Nabla devs
8381
list(FILTER NBL_BOOST_LIBS EXCLUDE REGEX "(unknown)")
8482
string(REPLACE "~" "/" NBL_BOOST_LIBS "${NBL_BOOST_LIBS}")
8583

86-
# we override boost's .gitmodules to pick only those modules we really use (reported by boost's dep executable)
87-
# boost hosts now like 200 repositories, some of them are really big however atm we reference around 60
88-
set(BOOST_SUBMODULE_TEMPLATE
89-
[=[
90-
91-
[submodule "@NAME@"]
92-
path = libs/@NAME@
93-
url = ../@FLATTEN_NAME@.git
94-
fetchRecurseSubmodules = on-demand
95-
branch = .
96-
]=]
97-
)
84+
# NOTE: you commit this file to version control AND boost's .gitmodules *if got changed*, use when updating boost to more recent version
85+
file(WRITE "${NBL_BOOST_WAVE_DEP_FILE}" "set(NBL_BOOST_LIBS ${NBL_BOOST_LIBS})")
9886

99-
unset(BOOST_GITMODULES)
100-
foreach(NAME ${NBL_BOOST_LIBS})
101-
string(REPLACE "/" "_" FLATTEN_NAME "${NAME}")
102-
string(CONFIGURE "${BOOST_SUBMODULE_TEMPLATE}" TEMPLATE)
103-
string(APPEND BOOST_GITMODULES "${TEMPLATE}")
104-
endforeach()
87+
NBL_BOOST_EXECUTE(git config --file .gitmodules --get-regexp path OUTPUT_VARIABLE NBL_OUTPUT_VARIABLE)
10588

106-
# NOTE: this you commit to version control
107-
file(WRITE "${NBL_BOOST_WAVE_DEP_FILE}" "set(NBL_BOOST_LIBS ${NBL_BOOST_LIBS})")
89+
string(REGEX REPLACE "\n" ";" NBL_SUBMODULE_CONFIG_LIST "${NBL_OUTPUT_VARIABLE}")
10890

109-
# and this one too + you update boost submodule pointer with the update!
110-
file(WRITE "${CMAKE_CURRENT_SOURCE_DIR}/superproject/.gitmodules" "${BOOST_GITMODULES}")
111-
endif()
91+
message(STATUS "Updating boost .gitmodules")
92+
foreach(NBL_SUBMODULE_NAME ${NBL_SUBMODULE_CONFIG_LIST})
93+
string(REGEX MATCH "submodule\\.(.*)\\.path" NBL_SUBMODULE_NAME "${NBL_SUBMODULE_NAME}")
94+
NBL_BOOST_EXECUTE(git config --file .gitmodules submodule.${CMAKE_MATCH_1}.update none) # fallback, ignore all
95+
endforeach()
96+
97+
foreach(NAME ${NBL_BOOST_LIBS})
98+
string(REPLACE "/" "_" SUBMODULE "${NAME}")
99+
message(STATUS "BOOST SUBMODULE = ${SUBMODULE}")
100+
NBL_BOOST_EXECUTE(git config --file .gitmodules submodule.${SUBMODULE}.update checkout) # pick only those reported by the module we use
101+
endforeach()
102+
endif()

3rdparty/boost/superproject

0 commit comments

Comments
 (0)