Skip to content

Commit 36df9cb

Browse files
committed
Merge dev into main
2 parents 2f7b00e + 5a87bc0 commit 36df9cb

1 file changed

Lines changed: 64 additions & 5 deletions

File tree

CMakeLists.txt

Lines changed: 64 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ option(VIX_STRICT "Treat warnings as errors" OFF)
6161
option(VIX_ENABLE_LTO "Enable link-time optimization (Release)" OFF)
6262
option(VIX_HEADER_ONLY "Build vix_utils as header-only INTERFACE" OFF)
6363
option(VIX_UTILS_BUILD_EXAMPLES "Build utils examples" OFF)
64+
option(VIX_UTILS_FETCH_THIRD_PARTY "Auto-fetch spdlog and fmt if not installed" ON)
6465

6566
# --------------------------------------------------------------------
6667
# Git / Build metadata
@@ -85,7 +86,8 @@ string(TIMESTAMP VIX_BUILD_DATE "%Y-%m-%d %H:%M:%S UTC" UTC)
8586
# 1) Reuse existing targets if already available
8687
# 2) Try installed packages via find_package(... CONFIG QUIET)
8788
# 3) Try pkg-config fallback
88-
# 4) Fail with a clear message if nothing is found
89+
# 4) FetchContent fallback
90+
# 5) Fail with a clear message if nothing is found
8991
# --------------------------------------------------------------------
9092
set(_VIX_SPDLOG_TARGET "")
9193
set(_VIX_FMT_TARGET "")
@@ -152,6 +154,49 @@ else()
152154
endif()
153155
endif()
154156

157+
if ((NOT _VIX_FMT_TARGET OR NOT _VIX_SPDLOG_TARGET) AND VIX_UTILS_FETCH_THIRD_PARTY)
158+
include(FetchContent)
159+
160+
if (NOT _VIX_FMT_TARGET)
161+
message(STATUS "[utils] Fetching fmt via FetchContent")
162+
set(FMT_DOC OFF CACHE BOOL "" FORCE)
163+
set(FMT_TEST OFF CACHE BOOL "" FORCE)
164+
set(FMT_INSTALL OFF CACHE BOOL "" FORCE)
165+
FetchContent_Declare(vix_fmt
166+
GIT_REPOSITORY https://github.com/fmtlib/fmt.git
167+
GIT_TAG 10.2.1
168+
)
169+
FetchContent_MakeAvailable(vix_fmt)
170+
171+
if (TARGET fmt::fmt-header-only)
172+
set(_VIX_FMT_TARGET fmt::fmt-header-only)
173+
elseif (TARGET fmt::fmt)
174+
set(_VIX_FMT_TARGET fmt::fmt)
175+
endif()
176+
endif()
177+
178+
if (NOT _VIX_SPDLOG_TARGET)
179+
message(STATUS "[utils] Fetching spdlog via FetchContent")
180+
set(SPDLOG_FMT_EXTERNAL ON CACHE BOOL "" FORCE)
181+
set(SPDLOG_BUILD_EXAMPLE OFF CACHE BOOL "" FORCE)
182+
set(SPDLOG_BUILD_EXAMPLES OFF CACHE BOOL "" FORCE)
183+
set(SPDLOG_BUILD_TESTS OFF CACHE BOOL "" FORCE)
184+
set(SPDLOG_BUILD_BENCH OFF CACHE BOOL "" FORCE)
185+
set(SPDLOG_INSTALL OFF CACHE BOOL "" FORCE)
186+
FetchContent_Declare(vix_spdlog
187+
GIT_REPOSITORY https://github.com/gabime/spdlog.git
188+
GIT_TAG v1.14.1
189+
)
190+
FetchContent_MakeAvailable(vix_spdlog)
191+
192+
if (TARGET spdlog::spdlog_header_only)
193+
set(_VIX_SPDLOG_TARGET spdlog::spdlog_header_only)
194+
elseif (TARGET spdlog::spdlog)
195+
set(_VIX_SPDLOG_TARGET spdlog::spdlog)
196+
endif()
197+
endif()
198+
endif()
199+
155200
if (NOT _VIX_SPDLOG_TARGET)
156201
message(FATAL_ERROR
157202
"[utils] spdlog not found.\n"
@@ -174,6 +219,16 @@ if (NOT _VIX_FMT_TARGET)
174219
)
175220
endif()
176221

222+
set(_VIX_SPDLOG_INSTALL_TARGET spdlog::spdlog_header_only)
223+
if (_VIX_SPDLOG_TARGET STREQUAL "spdlog::spdlog")
224+
set(_VIX_SPDLOG_INSTALL_TARGET spdlog::spdlog)
225+
endif()
226+
227+
set(_VIX_FMT_INSTALL_TARGET fmt::fmt-header-only)
228+
if (_VIX_FMT_TARGET STREQUAL "fmt::fmt")
229+
set(_VIX_FMT_INSTALL_TARGET fmt::fmt)
230+
endif()
231+
177232
# --------------------------------------------------------------------
178233
# Library target
179234
# --------------------------------------------------------------------
@@ -197,8 +252,10 @@ if (VIX_HEADER_ONLY)
197252
target_compile_features(vix_utils INTERFACE cxx_std_20)
198253

199254
target_link_libraries(vix_utils INTERFACE
200-
${_VIX_SPDLOG_TARGET}
201-
${_VIX_FMT_TARGET}
255+
$<BUILD_INTERFACE:${_VIX_SPDLOG_TARGET}>
256+
$<BUILD_INTERFACE:${_VIX_FMT_TARGET}>
257+
$<INSTALL_INTERFACE:${_VIX_SPDLOG_INSTALL_TARGET}>
258+
$<INSTALL_INTERFACE:${_VIX_FMT_INSTALL_TARGET}>
202259
)
203260

204261
if (WIN32)
@@ -237,8 +294,10 @@ else()
237294

238295
target_link_libraries(vix_utils
239296
PUBLIC
240-
${_VIX_SPDLOG_TARGET}
241-
${_VIX_FMT_TARGET}
297+
$<BUILD_INTERFACE:${_VIX_SPDLOG_TARGET}>
298+
$<BUILD_INTERFACE:${_VIX_FMT_TARGET}>
299+
$<INSTALL_INTERFACE:${_VIX_SPDLOG_INSTALL_TARGET}>
300+
$<INSTALL_INTERFACE:${_VIX_FMT_INSTALL_TARGET}>
242301
)
243302

244303
if (WIN32)

0 commit comments

Comments
 (0)