@@ -61,6 +61,7 @@ option(VIX_STRICT "Treat warnings as errors" OFF)
6161option (VIX_ENABLE_LTO "Enable link-time optimization (Release)" OFF )
6262option (VIX_HEADER_ONLY "Build vix_utils as header-only INTERFACE" OFF )
6363option (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# --------------------------------------------------------------------
9092set (_VIX_SPDLOG_TARGET "" )
9193set (_VIX_FMT_TARGET "" )
@@ -152,6 +154,49 @@ else()
152154 endif ()
153155endif ()
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+
155200if (NOT _VIX_SPDLOG_TARGET)
156201 message (FATAL_ERROR
157202 "[utils] spdlog not found.\n "
@@ -174,6 +219,16 @@ if (NOT _VIX_FMT_TARGET)
174219 )
175220endif ()
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