Skip to content

Commit e5f610a

Browse files
committed
Resolve issues with private submodule updates, update 3rdparty/boost/CMakeLists.txt and refactor cmake/submodules/update.cmake, never touch private key during CMake configuration if updating public repositories
1 parent ce884ca commit e5f610a

File tree

2 files changed

+149
-263
lines changed

2 files changed

+149
-263
lines changed

3rdparty/boost/CMakeLists.txt

Lines changed: 79 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -1,65 +1,38 @@
1-
set(BOOST_PREPROCESSOR_INCLUDE "${CMAKE_CURRENT_SOURCE_DIR}/superproject/libs/preprocessor/include" CACHE PATH "" FORCE)
2-
3-
get_filename_component(_BOOST_PREPROCESSOR_BR_BUNDLE_SEARCH_DIRECTORY_ "${BOOST_PREPROCESSOR_INCLUDE}" ABSOLUTE)
4-
get_filename_component(_BOOST_PREPROCESSOR_BR_OUTPUT_DIRECTORY_SOURCE_ "${CMAKE_CURRENT_BINARY_DIR}/src" ABSOLUTE)
5-
get_filename_component(_BOOST_PREPROCESSOR_BR_OUTPUT_DIRECTORY_HEADER_ "${CMAKE_CURRENT_BINARY_DIR}/include" ABSOLUTE)
6-
set(BOOST_BUILTIN_RESOURCES_DIRECTORY_PATH "${_BOOST_PREPROCESSOR_BR_BUNDLE_SEARCH_DIRECTORY_}/boost" CACHE INTERNAL "" FORCE)
7-
8-
if(NBL_EMBED_BUILTIN_RESOURCES)
9-
include("${NBL_ROOT_PATH}/src/nbl/builtin/utils.cmake")
10-
11-
file(GLOB_RECURSE BOOST_HEADERS_REC_REL RELATIVE "${BOOST_BUILTIN_RESOURCES_DIRECTORY_PATH}" "${BOOST_PREPROCESSOR_INCLUDE}/*")
12-
13-
foreach(BOOST_HEADER_REL IN LISTS BOOST_HEADERS_REC_REL)
14-
LIST_BUILTIN_RESOURCE(BOOST_RESOURCES_TO_EMBED "${BOOST_HEADER_REL}")
15-
endforeach()
16-
17-
ADD_CUSTOM_BUILTIN_RESOURCES(boostBuiltinResourceData BOOST_RESOURCES_TO_EMBED "${_BOOST_PREPROCESSOR_BR_BUNDLE_SEARCH_DIRECTORY_}" "boost" "boost::builtin" "${_BOOST_PREPROCESSOR_BR_OUTPUT_DIRECTORY_HEADER_}" "${_BOOST_PREPROCESSOR_BR_OUTPUT_DIRECTORY_HEADER_}" "STATIC" "INTERNAL")
18-
endif()
19-
201
get_filename_component(NBL_BOOST_WAVE_DEP_FILE "${CMAKE_CURRENT_SOURCE_DIR}/dep/wave.cmake" ABSOLUTE)
212

22-
if(NOT EXISTS "${NBL_BOOST_WAVE_DEP_FILE}")
23-
message(FATAL_ERROR "Internal error, generate NBL_BOOST_WAVE_DEP_FILE by enabling NBL_BOOST_GENERATE_DEP_LIST!")
24-
endif()
25-
26-
set(BOOST_STAGEDIR "${CMAKE_CURRENT_BINARY_DIR}/boost/superproject/stage")
27-
include("${NBL_BOOST_WAVE_DEP_FILE}")
28-
29-
foreach(BOOST_LIB IN LISTS NBL_BOOST_LIBS)
30-
add_subdirectory(superproject/libs/${BOOST_LIB} EXCLUDE_FROM_ALL)
31-
endforeach()
32-
33-
add_subdirectory(superproject/libs/wave EXCLUDE_FROM_ALL)
34-
35-
list(APPEND NBL_BOOST_TARGETS boost_wave) # wave
36-
foreach(BOOST_LIB IN LISTS NBL_BOOST_LIBS)
37-
if(TARGET boost_${BOOST_LIB}) # wave's deps
38-
list(APPEND NBL_BOOST_TARGETS boost_${BOOST_LIB})
39-
endif()
40-
endforeach()
41-
42-
set(NBL_BOOST_TARGETS
43-
${NBL_BOOST_TARGETS}
44-
PARENT_SCOPE)
45-
463
# Boost uses it's own tool for generating dependency list for targets, therefore we
474
# can make sure manually added dependency subdirectories for a library are valid
485
# https://www.boost.org/doc/libs/1_83_0/tools/boostdep/doc/html/index.html#boostdep.introduction.building_boostdep
496

507
if(NBL_BOOST_GENERATE_DEP_LIST) # internal, for Nabla devs
51-
if(WIN32)
52-
set(NBL_BOOSTDEP_EXE "boostdep.exe")
53-
else()
54-
set(NBL_BOOSTDEP_EXE "boostdep")
8+
if(NOT WIN32)
9+
message(FATAL_ERROR "NBL_BOOST_GENERATE_DEP_LIST only for Windows host!")
5510
endif()
56-
57-
set(NBL_BOOSTDEP_EXE_FILEPATH "${CMAKE_CURRENT_BINARY_DIR}/superproject/tools/boostdep/bin/${NBL_BOOSTDEP_EXE}")
58-
11+
5912
macro(NBL_BOOST_EXECUTE)
6013
execute_process(COMMAND ${ARGV} WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/superproject")
6114
endmacro()
6215

16+
NBL_BOOST_EXECUTE(git config --file .gitmodules --get-regexp path OUTPUT_VARIABLE NBL_OUTPUT_VARIABLE)
17+
string(REGEX REPLACE "\n" ";" NBL_SUBMODULE_CONFIG_LIST "${NBL_OUTPUT_VARIABLE}")
18+
19+
foreach(NBL_SUBMODULE_NAME ${NBL_SUBMODULE_CONFIG_LIST})
20+
string(REGEX MATCH "submodule\\.(.*)\\.path" NBL_SUBMODULE_NAME "${NBL_SUBMODULE_NAME}")
21+
list(APPEND BOOST_SUBMODULES "${CMAKE_MATCH_1}")
22+
endforeach()
23+
24+
# sync & force update of all boost modules first for the tool purpose (sry guys who use the tool, you need to clone all, I want to keep it simple)
25+
NBL_BOOST_EXECUTE(git submodule sync)
26+
list(APPEND BOOST_FORCE_ALL_CONFIG -c url.https://github.com/.insteadOf=git@github.com:)
27+
foreach(SUBMODULE ${BOOST_SUBMODULES})
28+
list(APPEND BOOST_FORCE_ALL_CONFIG -c submodule.${SUBMODULE}.update=checkout)
29+
endforeach()
30+
31+
NBL_BOOST_EXECUTE(git ${BOOST_FORCE_ALL_CONFIG} submodule update --init --recursive -f)
32+
33+
# build boost dep executable
34+
set(NBL_BOOSTDEP_EXE "boostdep.exe")
35+
set(NBL_BOOSTDEP_EXE_FILEPATH "${CMAKE_CURRENT_BINARY_DIR}/superproject/tools/boostdep/bin/${NBL_BOOSTDEP_EXE}")
6336
if(NOT EXISTS "${NBL_BOOSTDEP_EXE_FILEPATH}")
6437
NBL_BOOST_EXECUTE(cmd /C bootstrap.bat)
6538
NBL_BOOST_EXECUTE(cmd /C b2.exe tools/boostdep/build)
@@ -68,6 +41,7 @@ if(NBL_BOOST_GENERATE_DEP_LIST) # internal, for Nabla devs
6841
NBL_BOOST_EXECUTE(git reset --hard)
6942
endif()
7043

44+
# get wave dependency info
7145
NBL_BOOST_EXECUTE("${NBL_BOOSTDEP_EXE_FILEPATH}" --boost-root "${CMAKE_CURRENT_SOURCE_DIR}/superproject" --brief wave
7246
OUTPUT_VARIABLE NBL_OUTPUT_VAR
7347
)
@@ -81,22 +55,66 @@ if(NBL_BOOST_GENERATE_DEP_LIST) # internal, for Nabla devs
8155
list(FILTER NBL_BOOST_LIBS EXCLUDE REGEX "(unknown)")
8256
string(REPLACE "~" "/" NBL_BOOST_LIBS "${NBL_BOOST_LIBS}")
8357

84-
# NOTE: you commit this file to version control AND boost's .gitmodules *if got changed*, use when updating boost to more recent version
58+
# update boost .gitmodules configuration, discard all but modules reported by wave
59+
# NOTE: you commit this file to version control AND boost's .gitmodules *if got changed*,
60+
# use when updating boost to more recent version
8561
file(WRITE "${NBL_BOOST_WAVE_DEP_FILE}" "set(NBL_BOOST_LIBS ${NBL_BOOST_LIBS})")
8662

87-
NBL_BOOST_EXECUTE(git config --file .gitmodules --get-regexp path OUTPUT_VARIABLE NBL_OUTPUT_VARIABLE)
88-
89-
string(REGEX REPLACE "\n" ";" NBL_SUBMODULE_CONFIG_LIST "${NBL_OUTPUT_VARIABLE}")
90-
9163
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
64+
foreach(SUBMODULE ${BOOST_SUBMODULES})
65+
# 1) fallback, ignore all
66+
NBL_BOOST_EXECUTE(git config --file .gitmodules submodule.${SUBMODULE}.update none)
9567
endforeach()
9668

9769
foreach(NAME ${NBL_BOOST_LIBS})
9870
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
71+
message(STATUS "WAVE BOOST DEP SUBMODULE = ${SUBMODULE}")
72+
# 2) pick only submodules reported by wave
73+
NBL_BOOST_EXECUTE(git config --file .gitmodules submodule.${SUBMODULE}.update checkout)
74+
endforeach()
75+
# 3) and the top module itself
76+
NBL_BOOST_EXECUTE(git config --file .gitmodules submodule.wave.update checkout)
77+
endif()
78+
79+
set(BOOST_PREPROCESSOR_INCLUDE "${CMAKE_CURRENT_SOURCE_DIR}/superproject/libs/preprocessor/include" CACHE PATH "" FORCE)
80+
81+
get_filename_component(_BOOST_PREPROCESSOR_BR_BUNDLE_SEARCH_DIRECTORY_ "${BOOST_PREPROCESSOR_INCLUDE}" ABSOLUTE)
82+
get_filename_component(_BOOST_PREPROCESSOR_BR_OUTPUT_DIRECTORY_SOURCE_ "${CMAKE_CURRENT_BINARY_DIR}/src" ABSOLUTE)
83+
get_filename_component(_BOOST_PREPROCESSOR_BR_OUTPUT_DIRECTORY_HEADER_ "${CMAKE_CURRENT_BINARY_DIR}/include" ABSOLUTE)
84+
set(BOOST_BUILTIN_RESOURCES_DIRECTORY_PATH "${_BOOST_PREPROCESSOR_BR_BUNDLE_SEARCH_DIRECTORY_}/boost" CACHE INTERNAL "" FORCE)
85+
86+
if(NBL_EMBED_BUILTIN_RESOURCES)
87+
include("${NBL_ROOT_PATH}/src/nbl/builtin/utils.cmake")
88+
89+
file(GLOB_RECURSE BOOST_HEADERS_REC_REL RELATIVE "${BOOST_BUILTIN_RESOURCES_DIRECTORY_PATH}" "${BOOST_PREPROCESSOR_INCLUDE}/*")
90+
91+
foreach(BOOST_HEADER_REL IN LISTS BOOST_HEADERS_REC_REL)
92+
LIST_BUILTIN_RESOURCE(BOOST_RESOURCES_TO_EMBED "${BOOST_HEADER_REL}")
10193
endforeach()
102-
endif()
94+
95+
ADD_CUSTOM_BUILTIN_RESOURCES(boostBuiltinResourceData BOOST_RESOURCES_TO_EMBED "${_BOOST_PREPROCESSOR_BR_BUNDLE_SEARCH_DIRECTORY_}" "boost" "boost::builtin" "${_BOOST_PREPROCESSOR_BR_OUTPUT_DIRECTORY_HEADER_}" "${_BOOST_PREPROCESSOR_BR_OUTPUT_DIRECTORY_HEADER_}" "STATIC" "INTERNAL")
96+
endif()
97+
98+
if(NOT EXISTS "${NBL_BOOST_WAVE_DEP_FILE}")
99+
message(FATAL_ERROR "Internal error, generate NBL_BOOST_WAVE_DEP_FILE by enabling NBL_BOOST_GENERATE_DEP_LIST!")
100+
endif()
101+
102+
set(BOOST_STAGEDIR "${CMAKE_CURRENT_BINARY_DIR}/boost/superproject/stage")
103+
include("${NBL_BOOST_WAVE_DEP_FILE}")
104+
105+
foreach(BOOST_LIB IN LISTS NBL_BOOST_LIBS)
106+
add_subdirectory(superproject/libs/${BOOST_LIB} EXCLUDE_FROM_ALL)
107+
endforeach()
108+
109+
add_subdirectory(superproject/libs/wave EXCLUDE_FROM_ALL)
110+
111+
list(APPEND NBL_BOOST_TARGETS boost_wave) # wave
112+
foreach(BOOST_LIB IN LISTS NBL_BOOST_LIBS)
113+
if(TARGET boost_${BOOST_LIB}) # wave's deps
114+
list(APPEND NBL_BOOST_TARGETS boost_${BOOST_LIB})
115+
endif()
116+
endforeach()
117+
118+
set(NBL_BOOST_TARGETS
119+
${NBL_BOOST_TARGETS}
120+
PARENT_SCOPE)

0 commit comments

Comments
 (0)