1
+ get_filename_component (NBL_BOOST_WAVE_DEP_FILE "${CMAKE_CURRENT_SOURCE_DIR} /dep/wave.cmake" ABSOLUTE )
2
+
3
+ # Boost uses it's own tool for generating dependency list for targets, therefore we
4
+ # can make sure manually added dependency subdirectories for a library are valid
5
+ # https://www.boost.org/doc/libs/1_83_0/tools/boostdep/doc/html/index.html#boostdep.introduction.building_boostdep
6
+
7
+ if (NBL_BOOST_GENERATE_DEP_LIST ) # internal, for Nabla devs
8
+ if (NOT WIN32 )
9
+ message (FATAL_ERROR "NBL_BOOST_GENERATE_DEP_LIST only for Windows host!" )
10
+ endif ()
11
+
12
+ macro (NBL_BOOST_EXECUTE )
13
+ execute_process (COMMAND ${ARGV} WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR} /superproject" )
14
+ endmacro ()
15
+
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} " )
36
+ if (NOT EXISTS "${NBL_BOOSTDEP_EXE_FILEPATH} " )
37
+ NBL_BOOST_EXECUTE (cmd /C bootstrap.bat )
38
+ NBL_BOOST_EXECUTE (cmd /C b2.exe tools/boostdep/build )
39
+ NBL_BOOST_EXECUTE ("${CMAKE_COMMAND} " -E copy "./dist/bin/${NBL_BOOSTDEP_EXE} " "${NBL_BOOSTDEP_EXE_FILEPATH} " )
40
+ NBL_BOOST_EXECUTE (git clean -fdx )
41
+ NBL_BOOST_EXECUTE (git reset --hard )
42
+ endif ()
43
+
44
+ # get wave dependency info
45
+ NBL_BOOST_EXECUTE ("${NBL_BOOSTDEP_EXE_FILEPATH} " --boost-root "${CMAKE_CURRENT_SOURCE_DIR} /superproject" --brief wave
46
+ OUTPUT_VARIABLE NBL_OUTPUT_VAR
47
+ )
48
+
49
+ file (WRITE "${NBL_BOOST_WAVE_DEP_FILE} " "${NBL_OUTPUT_VAR} " )
50
+
51
+ file (STRINGS "${NBL_BOOST_WAVE_DEP_FILE} " NBL_BOOST_LIBS )
52
+ set (NBL_BOOST_LIBS ${NBL_BOOST_LIBS} )
53
+ list (POP_FRONT NBL_BOOST_LIBS )
54
+ list (FILTER NBL_BOOST_LIBS EXCLUDE REGEX "#" )
55
+ list (FILTER NBL_BOOST_LIBS EXCLUDE REGEX "(unknown)" )
56
+ string (REPLACE "~" "/" NBL_BOOST_LIBS "${NBL_BOOST_LIBS} " )
57
+
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
61
+ file (WRITE "${NBL_BOOST_WAVE_DEP_FILE} " "set(NBL_BOOST_LIBS ${NBL_BOOST_LIBS} )" )
62
+
63
+ message (STATUS "Updating boost .gitmodules" )
64
+ foreach (SUBMODULE ${BOOST_SUBMODULES} )
65
+ # 1) fallback, ignore all
66
+ NBL_BOOST_EXECUTE (git config --file .gitmodules submodule.${SUBMODULE}.update none )
67
+ endforeach ()
68
+
69
+ foreach (NAME ${NBL_BOOST_LIBS} )
70
+ string (REPLACE "/" "_" SUBMODULE "${NAME} " )
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
+
1
79
set (BOOST_PREPROCESSOR_INCLUDE "${CMAKE_CURRENT_SOURCE_DIR} /superproject/libs/preprocessor/include" CACHE PATH "" FORCE )
2
80
3
81
get_filename_component (_BOOST_PREPROCESSOR_BR_BUNDLE_SEARCH_DIRECTORY_ "${BOOST_PREPROCESSOR_INCLUDE} " ABSOLUTE )
@@ -17,8 +95,6 @@ if(NBL_EMBED_BUILTIN_RESOURCES)
17
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" )
18
96
endif ()
19
97
20
- get_filename_component (NBL_BOOST_WAVE_DEP_FILE "${CMAKE_CURRENT_SOURCE_DIR} /dep/wave.cmake" ABSOLUTE )
21
-
22
98
if (NOT EXISTS "${NBL_BOOST_WAVE_DEP_FILE} " )
23
99
message (FATAL_ERROR "Internal error, generate NBL_BOOST_WAVE_DEP_FILE by enabling NBL_BOOST_GENERATE_DEP_LIST!" )
24
100
endif ()
@@ -41,47 +117,4 @@ endforeach()
41
117
42
118
set (NBL_BOOST_TARGETS
43
119
${NBL_BOOST_TARGETS}
44
- PARENT_SCOPE )
45
-
46
- # Boost uses it's own tool for generating dependency list for targets, therefore we
47
- # can make sure manually added dependnecy subdirectories for a library are valid
48
- # https://www.boost.org/doc/libs/1_83_0/tools/boostdep/doc/html/index.html#boostdep.introduction.building_boostdep
49
-
50
- 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" )
55
- endif ()
56
-
57
- set (NBL_BOOSTDEP_EXE_FILEPATH "${CMAKE_CURRENT_BINARY_DIR} /superproject/tools/boostdep/bin/${NBL_BOOSTDEP_EXE} " )
58
-
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 ()
65
-
66
- NBL_BOOST_EXECUTE (cmd /C bootstrap.bat )
67
- NBL_BOOST_EXECUTE (cmd /C b2.exe tools/boostdep/build )
68
- NBL_BOOST_EXECUTE ("${CMAKE_COMMAND} " -E copy "./dist/bin/${NBL_BOOSTDEP_EXE} " "${NBL_BOOSTDEP_EXE_FILEPATH} " )
69
- NBL_BOOST_EXECUTE (git clean -fdx )
70
- NBL_BOOST_EXECUTE (git reset --hard )
71
- endif ()
72
-
73
- execute_process (COMMAND "${NBL_BOOSTDEP_EXE_FILEPATH} " --boost-root "${CMAKE_CURRENT_SOURCE_DIR} /superproject" --brief wave
74
- OUTPUT_VARIABLE NBL_OUTPUT_VAR
75
- )
76
-
77
- file (WRITE "${NBL_BOOST_WAVE_DEP_FILE} " "${NBL_OUTPUT_VAR} " )
78
-
79
- file (STRINGS "${NBL_BOOST_WAVE_DEP_FILE} " NBL_BOOST_LIBS )
80
- set (NBL_BOOST_LIBS ${NBL_BOOST_LIBS} )
81
- list (POP_FRONT NBL_BOOST_LIBS )
82
- list (FILTER NBL_BOOST_LIBS EXCLUDE REGEX "#" )
83
- list (FILTER NBL_BOOST_LIBS EXCLUDE REGEX "(unknown)" )
84
- string (REPLACE "~" "/" NBL_BOOST_LIBS "${NBL_BOOST_LIBS} " )
85
-
86
- file (WRITE "${NBL_BOOST_WAVE_DEP_FILE} " "set(NBL_BOOST_LIBS ${NBL_BOOST_LIBS} )" )
87
- endif ()
120
+ PARENT_SCOPE )
0 commit comments