Skip to content

Commit 8dcdfb8

Browse files
committed
Merge remote-tracking branch 'origin/dev'
2 parents 4e602bb + 9b76554 commit 8dcdfb8

File tree

1 file changed

+45
-24
lines changed

1 file changed

+45
-24
lines changed

CMakeLists.txt

Lines changed: 45 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -35,33 +35,47 @@ set(CMAKE_CXX_STANDARD 20)
3535
set(CMAKE_CXX_STANDARD_REQUIRED ON)
3636
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
3737

38+
# --------------------------------------------------------------------
39+
# Umbrella build policy:
40+
# When building inside the Vix umbrella, dependencies are managed by the
41+
# umbrella (add_subdirectory order + options). Cache must not FetchContent
42+
# nor add sibling subdirectories.
43+
# --------------------------------------------------------------------
44+
if (DEFINED VIX_UMBRELLA_BUILD AND VIX_UMBRELLA_BUILD)
45+
set(VIX_CACHE_FETCH_NET OFF CACHE BOOL "Auto-fetch vix::net if missing" FORCE)
46+
endif()
47+
3848
# Sources discovery
3949
file(GLOB_RECURSE CACHE_SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp")
4050

4151
# Net dependency
4252
option(VIX_CACHE_FETCH_NET "Auto-fetch vix::net if missing" ON)
4353

44-
if (NOT TARGET vix::net)
45-
if (EXISTS "${CMAKE_CURRENT_LIST_DIR}/../net/CMakeLists.txt")
46-
message(STATUS "[cache] Adding net from umbrella: ../net")
47-
add_subdirectory("${CMAKE_CURRENT_LIST_DIR}/../net" "net")
48-
elseif (VIX_CACHE_FETCH_NET)
49-
include(FetchContent)
50-
message(STATUS "[cache] Fetching vix::net via FetchContent")
51-
FetchContent_Declare(vix_net
52-
GIT_REPOSITORY https://github.com/vixcpp/net.git
53-
GIT_TAG v0.1.0
54-
)
55-
FetchContent_MakeAvailable(vix_net)
56-
else()
57-
message(FATAL_ERROR "vix::net not found. Enable VIX_CACHE_FETCH_NET=ON or provide the target before cache.")
54+
if (DEFINED VIX_UMBRELLA_BUILD AND VIX_UMBRELLA_BUILD)
55+
# Umbrella owns dependency graph: never add_subdirectory/FetchContent here.
56+
if (NOT TARGET vix::net)
57+
message(FATAL_ERROR "[cache] Umbrella build: vix::net must be provided by umbrella before cache.")
58+
endif()
59+
else()
60+
if (NOT TARGET vix::net)
61+
if (EXISTS "${CMAKE_CURRENT_LIST_DIR}/../net/CMakeLists.txt")
62+
message(STATUS "[cache] Adding net from umbrella: ../net")
63+
add_subdirectory("${CMAKE_CURRENT_LIST_DIR}/../net" "net")
64+
elseif (VIX_CACHE_FETCH_NET)
65+
include(FetchContent)
66+
message(STATUS "[cache] Fetching vix::net via FetchContent")
67+
FetchContent_Declare(vix_net
68+
GIT_REPOSITORY https://github.com/vixcpp/net.git
69+
GIT_TAG v0.1.0
70+
)
71+
FetchContent_MakeAvailable(vix_net)
72+
else()
73+
message(FATAL_ERROR "vix::net not found. Enable VIX_CACHE_FETCH_NET=ON or provide the target before cache.")
74+
endif()
5875
endif()
5976
endif()
6077

6178
set(VIX_NET_TARGET vix::net)
62-
if (NOT TARGET ${VIX_NET_TARGET} AND TARGET vix::net)
63-
set(VIX_NET_TARGET vix::net)
64-
endif()
6579

6680
# STATIC
6781
if (CACHE_SOURCES)
@@ -85,9 +99,10 @@ if (CACHE_SOURCES)
8599

86100
if (TARGET vix_warnings)
87101
target_link_libraries(vix_cache PUBLIC vix_warnings)
88-
if (VIX_ENABLE_SANITIZERS AND TARGET vix_sanitizers)
89-
target_link_libraries(vix_cache INTERFACE vix_sanitizers)
90-
endif()
102+
endif()
103+
104+
if (VIX_ENABLE_SANITIZERS AND TARGET vix_sanitizers)
105+
target_link_libraries(vix_cache PUBLIC vix_sanitizers)
91106
endif()
92107

93108
set_target_properties(vix_cache PROPERTIES
@@ -105,8 +120,11 @@ if (CACHE_SOURCES)
105120
INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
106121
)
107122

108-
install(DIRECTORY include/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
109-
FILES_MATCHING PATTERN "*.hpp" PATTERN "*.h")
123+
if (NOT (DEFINED VIX_UMBRELLA_BUILD AND VIX_UMBRELLA_BUILD))
124+
install(DIRECTORY include/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
125+
FILES_MATCHING PATTERN "*.hpp" PATTERN "*.h")
126+
endif()
127+
110128

111129
# HEADER-ONLY
112130
else()
@@ -135,8 +153,11 @@ else()
135153
INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
136154
)
137155

138-
install(DIRECTORY include/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
139-
FILES_MATCHING PATTERN "*.hpp" PATTERN "*.h")
156+
if (NOT (DEFINED VIX_UMBRELLA_BUILD AND VIX_UMBRELLA_BUILD))
157+
install(DIRECTORY include/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
158+
FILES_MATCHING PATTERN "*.hpp" PATTERN "*.h")
159+
endif()
160+
140161
endif()
141162

142163
# Tests

0 commit comments

Comments
 (0)