33
44include (FetchContent)
55
6+ if (DEFINED CACHE {libxml2_SOURCE_DIR} AND NOT DEFINED CACHE {WSDDN_DEPENDENCIES_VERSION})
7+ message (FATAL_ERROR
8+ "Your existing CMake cache cannot be used due to incompatible changes."
9+ "Please delete ${CMAKE_BINARY_DIR} /CMakeCache.txt and rebuild. (sorry!)" )
10+ endif ()
11+ set (WSDDN_DEPENDENCIES_VERSION 1 CACHE INTERNAL "version of dependencies config" )
12+
613file (READ dependencies.json DEPENDECIES_JSON)
714set_property (DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS dependencies.json)
815
@@ -19,10 +26,16 @@ function(fetch_dependency name #extras for FetchContent_Declare
1926 foreach (i RANGE 1 ${ARGC} )
2027 list (APPEND extras ${ARGV${i} })
2128 endforeach ()
29+ if (WSDDN_PREFER_SYSTEM)
30+ set (prefer_system FIND_PACKAGE_ARGS)
31+ else ()
32+ set (prefer_system "" )
33+ endif ()
2234 FetchContent_Declare(${name}
2335 URL ${url}
2436 URL_HASH MD5=${md5}
2537 ${extras}
38+ ${prefer_system}
2639 )
2740 set (deplist ${DECLARED_DEPENDENCIES} )
2841 list (APPEND deplist ${name} )
@@ -37,30 +50,20 @@ fetch_dependency(isptr)
3750fetch_dependency(ptl)
3851fetch_dependency(modern-uuid)
3952
40- if (WSDDN_PREFER_SYSTEM)
41- find_package (LibXml2)
42- endif ()
43-
44- if (NOT LibXml2_FOUND)
45-
46- message (STATUS "libxm2 will be built from sources and statically linked" )
47-
48- set (LIBXML2_WITH_ICONV OFF )
49- set (LIBXML2_WITH_LZMA OFF )
50- set (LIBXML2_WITH_HTML OFF )
51- set (LIBXML2_WITH_HTTP OFF )
52- set (LIBXML2_WITH_FTP OFF )
53- set (LIBXML2_WITH_TESTS OFF )
54- set (LIBXML2_WITH_ZLIB OFF )
55- set (LIBXML2_WITH_PYTHON OFF )
56- set (LIBXML2_WITH_LEGACY OFF )
57- set (LIBXML2_WITH_MODULES OFF )
58- set (LIBXML2_WITH_PROGRAMS OFF )
5953
60- fetch_dependency(libxml2)
61-
62- endif ()
54+ set (LIBXML2_WITH_ICONV OFF )
55+ set (LIBXML2_WITH_LZMA OFF )
56+ set (LIBXML2_WITH_HTML OFF )
57+ set (LIBXML2_WITH_HTTP OFF )
58+ set (LIBXML2_WITH_FTP OFF )
59+ set (LIBXML2_WITH_TESTS OFF )
60+ set (LIBXML2_WITH_ZLIB OFF )
61+ set (LIBXML2_WITH_PYTHON OFF )
62+ set (LIBXML2_WITH_LEGACY OFF )
63+ set (LIBXML2_WITH_MODULES OFF )
64+ set (LIBXML2_WITH_PROGRAMS OFF )
6365
66+ fetch_dependency(LibXml2)
6467
6568set (FMT_INSTALL OFF )
6669fetch_dependency(fmt)
@@ -80,19 +83,37 @@ fetch_dependency(asio)
8083
8184FetchContent_MakeAvailable(${DECLARED_DEPENDENCIES} )
8285
86+ foreach (dep ${DECLARED_DEPENDENCIES} )
87+ string (TOUPPER ${dep} udep)
88+ string (TOLOWER ${dep} ldep)
89+ if (DEFINED ${ldep} _SOURCE_DIR)
90+ message (STATUS "${dep} will be built from sources and statically linked" )
91+ else ()
92+ if (DEFINED ${ldep} _VERSION)
93+ message (STATUS "${dep} will be used from system (current version: ${${ldep} _VERSION})" )
94+ else ()
95+ if (DEFINED ${udep} _VERSION_STRING)
96+ message (STATUS "${dep} will be used from system (current version: ${${udep} _VERSION_STRING})" )
97+ else ()
98+ message (STATUS "${dep} will be used from system" )
99+ endif ()
100+ endif ()
101+ endif ()
102+ endforeach ()
103+
83104get_directory_property (KNOWN_SUBDIRECTORIES SUBDIRECTORIES)
84105foreach (dir ${KNOWN_SUBDIRECTORIES} )
85106 if (IS_DIRECTORY ${dir} )
86107 foreach (dep ${DECLARED_DEPENDENCIES} )
87- #check if the subdirectory is "under" the dependency source dir
88- string (FIND ${dir} ${${dep} _SOURCE_DIR} match_pos)
89- if (match_pos EQUAL 0)
90- #and, if so, exclude it from all to prevent installation
91- set_property (DIRECTORY ${dir} PROPERTY EXCLUDE_FROM_ALL YES )
92- break ()
108+ if (DEFINED ${dep} _SOURCE_DIR)
109+ #check if the subdirectory is "under" the dependency source dir
110+ string (FIND ${dir} ${${dep} _SOURCE_DIR} match_pos)
111+ if (match_pos EQUAL 0)
112+ #and, if so, exclude it from all to prevent installation
113+ set_property (DIRECTORY ${dir} PROPERTY EXCLUDE_FROM_ALL YES )
114+ break ()
115+ endif ()
93116 endif ()
94117 endforeach ()
95118 endif ()
96119endforeach ()
97-
98-
0 commit comments