Skip to content

Commit b59aacd

Browse files
committed
fix(cmake): align utils resolution with cli (umbrella, local, package fallback)
1 parent 38ca3b4 commit b59aacd

File tree

1 file changed

+53
-21
lines changed

1 file changed

+53
-21
lines changed

CMakeLists.txt

Lines changed: 53 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -56,46 +56,78 @@ file(GLOB_RECURSE LOG_SOURCES CONFIGURE_DEPENDS
5656
)
5757

5858
# Utils dependency
59-
if (NOT TARGET vix::utils AND NOT TARGET vix_utils AND NOT TARGET utils)
60-
if (EXISTS "${CMAKE_CURRENT_LIST_DIR}/utils/CMakeLists.txt")
61-
message(STATUS "[log] Adding utils from local sibling: ./utils")
62-
add_subdirectory("${CMAKE_CURRENT_LIST_DIR}/utils" "utils")
63-
elseif (EXISTS "${CMAKE_CURRENT_LIST_DIR}/../utils/CMakeLists.txt")
64-
message(STATUS "[log] Adding utils from parent sibling: ../utils")
65-
add_subdirectory("${CMAKE_CURRENT_LIST_DIR}/../utils" "utils")
59+
set(VIX_UTILS_TARGET "")
60+
61+
# 1) Reuse already available umbrella/local target
62+
if (TARGET vix::utils)
63+
message(STATUS "[log] Using existing target vix::utils")
64+
set(VIX_UTILS_TARGET vix::utils)
65+
66+
elseif (TARGET vix_utils)
67+
message(STATUS "[log] Using existing target vix_utils")
68+
set(VIX_UTILS_TARGET vix_utils)
69+
70+
elseif (TARGET utils)
71+
message(STATUS "[log] Using existing target utils")
72+
set(VIX_UTILS_TARGET utils)
73+
74+
else()
75+
# 2) Try local sibling layouts
76+
get_filename_component(_VIX_MODULES_DIR "${CMAKE_CURRENT_SOURCE_DIR}/.." ABSOLUTE)
77+
set(_VIX_UTILS_DIR "${_VIX_MODULES_DIR}/utils")
78+
79+
if (EXISTS "${_VIX_UTILS_DIR}/CMakeLists.txt")
80+
message(STATUS "[log] Adding local sibling utils: ${_VIX_UTILS_DIR}")
81+
add_subdirectory("${_VIX_UTILS_DIR}" "${CMAKE_BINARY_DIR}/_vix_utils")
6682
endif()
6783

68-
if (NOT TARGET vix::utils AND NOT TARGET vix_utils AND NOT TARGET utils)
84+
if (TARGET vix::utils)
85+
set(VIX_UTILS_TARGET vix::utils)
86+
elseif (TARGET vix_utils)
87+
set(VIX_UTILS_TARGET vix_utils)
88+
elseif (TARGET utils)
89+
set(VIX_UTILS_TARGET utils)
90+
else()
91+
# 3) Try installed packages
6992
find_package(vix_utils CONFIG QUIET)
7093
find_package(utils CONFIG QUIET)
94+
95+
if (TARGET vix::utils)
96+
set(VIX_UTILS_TARGET vix::utils)
97+
elseif (TARGET vix_utils)
98+
set(VIX_UTILS_TARGET vix_utils)
99+
elseif (TARGET utils)
100+
set(VIX_UTILS_TARGET utils)
101+
endif()
71102
endif()
72103

73-
if (NOT TARGET vix::utils AND NOT TARGET vix_utils AND NOT TARGET utils AND VIX_LOG_FETCH_UTILS)
104+
# 4) Optional fetch only as last resort
105+
if (NOT VIX_UTILS_TARGET AND VIX_LOG_FETCH_UTILS)
74106
include(FetchContent)
75107
message(STATUS "[log] Fetching vix::utils via FetchContent")
76108
FetchContent_Declare(vix_utils
77109
GIT_REPOSITORY https://github.com/vixcpp/utils.git
78110
GIT_TAG v0.1.0
79111
)
80112
FetchContent_MakeAvailable(vix_utils)
81-
endif()
82-
endif()
83113

84-
set(VIX_UTILS_TARGET "")
85-
if (TARGET vix::utils)
86-
set(VIX_UTILS_TARGET vix::utils)
87-
elseif (TARGET vix_utils)
88-
set(VIX_UTILS_TARGET vix_utils)
89-
elseif (TARGET utils)
90-
set(VIX_UTILS_TARGET utils)
114+
if (TARGET vix::utils)
115+
set(VIX_UTILS_TARGET vix::utils)
116+
elseif (TARGET vix_utils)
117+
set(VIX_UTILS_TARGET vix_utils)
118+
elseif (TARGET utils)
119+
set(VIX_UTILS_TARGET utils)
120+
endif()
121+
endif()
91122
endif()
92123

93124
if (NOT VIX_UTILS_TARGET)
94125
message(FATAL_ERROR
95126
"vix::utils not found.\n"
96-
"Searched in ./utils, ../utils, installed packages (vix_utils / utils), "
97-
"and optional FetchContent.\n"
98-
"Provide utils in the umbrella build, or install/export the utils package."
127+
"Expected one of:\n"
128+
" - existing target: vix::utils / vix_utils / utils\n"
129+
" - local sibling module in ../utils\n"
130+
" - installed package via find_package(vix_utils CONFIG) or find_package(utils CONFIG)\n"
99131
)
100132
endif()
101133

0 commit comments

Comments
 (0)