@@ -20,13 +20,15 @@ Basic usage:
2020```cmake
2121# CMakeLists.txt
2222include(PHP/Package/LibXml2)
23+ php_package_libxml2()
2324target_link_libraries(example PRIVATE LibXml2::LibXml2)
2425```
2526#]=============================================================================]
2627
2728include (ExternalProject)
2829include (FeatureSummary)
2930include (FetchContent)
31+ include (PHP/Package/_Internal)
3032
3133set_package_properties(
3234 LibXml2
@@ -41,44 +43,50 @@ set(PHP_LIBXML2_MIN_VERSION 2.9.0)
4143# Download version when system dependency is not found.
4244set (PHP_LIBXML2_DOWNLOAD_VERSION 2.14.5)
4345
44- macro (php_package_libxml2_find)
45- if (TARGET LibXml2::LibXml2)
46- set (LibXml2_FOUND TRUE )
47- get_property (LibXml2_DOWNLOADED GLOBAL PROPERTY _PHP_LibXml2_DOWNLOADED)
48- else ()
49- # LibXml2 depends on ZLIB.
50- include (PHP/Package/ZLIB)
46+ set (PHP_LIBXML2_URL https://github.com/GNOME/libxml2/archive/refs/tags/v${PHP_LIBXML2_DOWNLOAD_VERSION} .tar.gz)
5147
52- find_package (LibXml2 ${PHP_LIBXML2_MIN_VERSION} )
53-
54- if (NOT LibXml2_FOUND)
55- _php_package_libxml2_download()
56- endif ()
57- endif ()
58- endmacro ()
59-
60- macro (_php_package_libxml2_download)
61- message (STATUS "Downloading LibXml2 ${PHP_LIBXML2_DOWNLOAD_VERSION} " )
48+ macro (php_package_libxml2)
49+ # LibXml2 depends on ZLIB.
50+ include (PHP/Package/ZLIB)
6251
6352 FetchContent_Declare(
6453 LibXml2
65- URL https://github.com/GNOME/libxml2/archive/refs/tags/v ${PHP_LIBXML2_DOWNLOAD_VERSION} .tar.gz
54+ URL ${PHP_LIBXML2_URL}
6655 SOURCE_SUBDIR non-existing
67- OVERRIDE_FIND_PACKAGE
56+ FIND_PACKAGE_ARGS ${PHP_LIBXML2_MIN_VERSION}
6857 )
6958
70- FetchContent_MakeAvailable(LibXml2)
59+ find_package (LibXml2 ${PHP_LIBXML2_MIN_VERSION} )
60+
61+ if (PHP_USE_FETCHCONTENT)
62+ if (NOT LibXml2_FOUND)
63+ message (STATUS "Downloading ${PHP_LIBXML2_URL} " )
64+ endif ()
65+
66+ FetchContent_MakeAvailable(LibXml2)
67+
68+ if (NOT LibXml2_FOUND)
69+ _php_package_libxml2_init()
70+ endif ()
71+ endif ()
72+
73+ get_property (PHP_LIBXML2_DOWNLOADED GLOBAL PROPERTY _PHP_LIBXML2_DOWNLOADED)
74+
75+ if (PHP_LIBXML2_DOWNLOADED)
76+ set (LibXml2_VERSION ${PHP_LIBXML2_DOWNLOAD_VERSION} )
77+ endif ()
78+ endmacro ()
7179
72- set (options "-DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>" )
73- list (
74- APPEND
80+ macro (_php_package_libxml2_init)
81+ set (
7582 options
76- -DLIBXML2_WITH_PYTHON=OFF
77- -DLIBXML2_WITH_LZMA=OFF
7883 -DBUILD_SHARED_LIBS=OFF
84+ -DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>
85+ -DLIBXML2_WITH_LZMA=OFF
86+ -DLIBXML2_WITH_PYTHON=OFF
7987 )
8088
81- if (ZLIB_DOWNLOADED )
89+ if (PHP_ZLIB_DOWNLOADED )
8290 ExternalProject_Get_Property(ZLIB INSTALL_DIR)
8391 list (APPEND options "-DZLIB_ROOT=${INSTALL_DIR} " )
8492 endif ()
@@ -119,30 +127,15 @@ macro(_php_package_libxml2_download)
119127 IMPORTED_LOCATION ${INSTALL_DIR} /lib/libxml2${CMAKE_STATIC_LIBRARY_SUFFIX}
120128 )
121129
122- # Move dependency to PACKAGES_FOUND.
123- block()
124- set (package "LibXml2" )
125- get_property (packagesNotFound GLOBAL PROPERTY PACKAGES_NOT_FOUND )
126- list (REMOVE_ITEM packagesNotFound ${package} )
127- set_property (GLOBAL PROPERTY PACKAGES_NOT_FOUND ${packagesNotFound} )
128- get_property (packagesFound GLOBAL PROPERTY PACKAGES_FOUND )
129- list (FIND packagesFound ${package} found)
130- if (found EQUAL -1)
131- set_property (GLOBAL APPEND PROPERTY PACKAGES_FOUND ${package} )
132- endif ()
133- endblock()
134-
135- # Mark package as found.
136- set (LibXml2_FOUND TRUE )
130+ php_package_mark_as_found(LibXml2)
137131
138132 define_property (
139133 GLOBAL
140- PROPERTY _PHP_LibXml2_DOWNLOADED
134+ PROPERTY _PHP_LIBXML2_DOWNLOADED
141135 BRIEF_DOCS "Marker that LibXml2 library will be downloaded"
142136 )
143137
144- set_property (GLOBAL PROPERTY _PHP_LibXml2_DOWNLOADED TRUE )
145- set (Libxml2_DOWNLOADED TRUE )
138+ set_property (GLOBAL PROPERTY _PHP_LIBXML2_DOWNLOADED TRUE )
146139endmacro ()
147140
148- php_package_libxml2_find ()
141+ php_package_libxml2 ()
0 commit comments