Skip to content

Commit 2d870c0

Browse files
committed
Use ExternalProject for LibXml2
1 parent 5181ddd commit 2d870c0

File tree

15 files changed

+157
-110
lines changed

15 files changed

+157
-110
lines changed
Lines changed: 112 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,112 @@
1+
#[=============================================================================[
2+
# PHP/Package/LibXml2
3+
4+
Finds and downloads the `libxml2` library:
5+
6+
```cmake
7+
include(PHP/Package/LibXml2)
8+
```
9+
10+
This module first tries to find the `libxml2` library on the system. If not
11+
successful it tries to download it from the upstream source with
12+
`ExternalProject` module and build it together with the PHP build.
13+
14+
See: https://cmake.org/cmake/help/latest/module/FindLibXml2.html
15+
16+
## Examples
17+
18+
Basic usage:
19+
20+
```cmake
21+
# CMakeLists.txt
22+
include(PHP/Package/LibXml2)
23+
target_link_libraries(example PRIVATE LibXml2::LibXml2)
24+
```
25+
#]=============================================================================]
26+
27+
include(FeatureSummary)
28+
include(ExternalProject)
29+
30+
set_package_properties(
31+
LibXml2
32+
PROPERTIES
33+
URL "https://gitlab.gnome.org/GNOME/libxml2"
34+
DESCRIPTION "XML parser and toolkit"
35+
)
36+
37+
# Minimum required version for the libxml2 dependency.
38+
set(PHP_LIBXML2_MIN_VERSION 2.9.0)
39+
40+
# Download version when system dependency is not found.
41+
set(PHP_LIBXML2_DOWNLOAD_VERSION 2.14.4)
42+
43+
if(TARGET LibXml2::LibXml2)
44+
set(LibXml2_FOUND TRUE)
45+
get_property(LibXml2_DOWNLOADED GLOBAL PROPERTY _PHP_LibXml2_DOWNLOADED)
46+
return()
47+
endif()
48+
49+
find_package(LibXml2 ${PHP_LIBXML2_MIN_VERSION})
50+
51+
if(NOT LibXml2_FOUND)
52+
message(
53+
STATUS
54+
"LibXml2 ${PHP_LIBXML2_DOWNLOAD_VERSION} will be downloaded at build phase"
55+
)
56+
57+
include(PHP/Package/ZLIB)
58+
59+
set(options "-DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>")
60+
list(APPEND options -DLIBXML2_WITH_PYTHON=OFF -DLIBXML2_WITH_LZMA=OFF)
61+
62+
ExternalProject_Add(
63+
LibXml2
64+
STEP_TARGETS build install
65+
URL
66+
https://github.com/GNOME/libxml2/archive/refs/tags/v${PHP_LIBXML2_DOWNLOAD_VERSION}.tar.gz
67+
CMAKE_ARGS ${options}
68+
INSTALL_DIR ${CMAKE_CURRENT_BINARY_DIR}/libxml2-installation
69+
INSTALL_BYPRODUCTS <INSTALL_DIR>/lib/libxml2${CMAKE_STATIC_LIBRARY_SUFFIX}
70+
)
71+
72+
add_dependencies(LibXml2 ZLIB::ZLIB)
73+
74+
# Move dependency to PACKAGES_FOUND.
75+
block()
76+
set(package "LibXml2")
77+
get_property(packagesNotFound GLOBAL PROPERTY PACKAGES_NOT_FOUND)
78+
list(REMOVE_ITEM packagesNotFound ${package})
79+
set_property(GLOBAL PROPERTY PACKAGES_NOT_FOUND ${packagesNotFound})
80+
get_property(packagesFound GLOBAL PROPERTY PACKAGES_FOUND)
81+
list(FIND packagesFound ${package} found)
82+
if(found EQUAL -1)
83+
set_property(GLOBAL APPEND PROPERTY PACKAGES_FOUND ${package})
84+
endif()
85+
endblock()
86+
87+
ExternalProject_Get_Property(LibXml2 INSTALL_DIR)
88+
89+
# Bypass issue with non-existing include directory for the imported target.
90+
file(MAKE_DIRECTORY ${INSTALL_DIR}/include)
91+
92+
add_library(LibXml2::LibXml2 STATIC IMPORTED GLOBAL)
93+
set_target_properties(
94+
LibXml2::LibXml2
95+
PROPERTIES
96+
IMPORTED_LOCATION "${INSTALL_DIR}/lib/libxml2${CMAKE_STATIC_LIBRARY_SUFFIX}"
97+
INTERFACE_INCLUDE_DIRECTORIES "${INSTALL_DIR}/include"
98+
)
99+
add_dependencies(LibXml2::LibXml2 LibXml2-install)
100+
101+
# Mark package as found.
102+
set(LibXml2_FOUND TRUE)
103+
104+
define_property(
105+
GLOBAL
106+
PROPERTY _PHP_LibXml2_DOWNLOADED
107+
BRIEF_DOCS "Marker that LibXml2 library will be downloaded"
108+
)
109+
110+
set_property(GLOBAL PROPERTY _PHP_LibXml2_DOWNLOADED TRUE)
111+
set(LibXml2_DOWNLOADED TRUE)
112+
endif()

cmake/cmake/modules/PHP/Package/Oniguruma.cmake

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -69,11 +69,15 @@ if(NOT Oniguruma_FOUND)
6969

7070
# Move dependency to PACKAGES_FOUND.
7171
block()
72-
get_cmake_property(packagesNotFound PACKAGES_NOT_FOUND)
73-
list(REMOVE_ITEM packagesNotFound Oniguruma)
74-
set_property(GLOBAL PROPERTY PACKAGES_NOT_FOUND packagesNotFound)
75-
get_cmake_property(packagesFound PACKAGES_FOUND)
76-
set_property(GLOBAL APPEND PROPERTY PACKAGES_FOUND Oniguruma)
72+
set(package "Oniguruma")
73+
get_property(packagesNotFound GLOBAL PROPERTY PACKAGES_NOT_FOUND)
74+
list(REMOVE_ITEM packagesNotFound ${package})
75+
set_property(GLOBAL PROPERTY PACKAGES_NOT_FOUND ${packagesNotFound})
76+
get_property(packagesFound GLOBAL PROPERTY PACKAGES_FOUND)
77+
list(FIND packagesFound ${package} found)
78+
if(found EQUAL -1)
79+
set_property(GLOBAL APPEND PROPERTY PACKAGES_FOUND ${package})
80+
endif()
7781
endblock()
7882

7983
ExternalProject_Get_Property(Oniguruma INSTALL_DIR)

cmake/cmake/modules/PHP/Package/PNG.cmake

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -74,11 +74,15 @@ if(NOT PNG_FOUND)
7474

7575
# Move dependency to PACKAGES_FOUND.
7676
block()
77-
get_cmake_property(packagesNotFound PACKAGES_NOT_FOUND)
78-
list(REMOVE_ITEM packagesNotFound PNG)
79-
set_property(GLOBAL PROPERTY PACKAGES_NOT_FOUND packagesNotFound)
80-
get_cmake_property(packagesFound PACKAGES_FOUND)
81-
set_property(GLOBAL APPEND PROPERTY PACKAGES_FOUND PNG)
77+
set(package "PNG")
78+
get_property(packagesNotFound GLOBAL PROPERTY PACKAGES_NOT_FOUND)
79+
list(REMOVE_ITEM packagesNotFound ${package})
80+
set_property(GLOBAL PROPERTY PACKAGES_NOT_FOUND ${packagesNotFound})
81+
get_property(packagesFound GLOBAL PROPERTY PACKAGES_FOUND)
82+
list(FIND packagesFound ${package} found)
83+
if(found EQUAL -1)
84+
set_property(GLOBAL APPEND PROPERTY PACKAGES_FOUND ${package})
85+
endif()
8286
endblock()
8387

8488
ExternalProject_Get_Property(PNG INSTALL_DIR)

cmake/cmake/modules/PHP/Package/ZLIB.cmake

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -76,11 +76,15 @@ if(NOT ZLIB_FOUND)
7676

7777
# Move dependency to PACKAGES_FOUND.
7878
block()
79-
get_cmake_property(packagesNotFound PACKAGES_NOT_FOUND)
80-
list(REMOVE_ITEM packagesNotFound ZLIB)
81-
set_property(GLOBAL PROPERTY PACKAGES_NOT_FOUND packagesNotFound)
82-
get_cmake_property(packagesFound PACKAGES_FOUND)
83-
set_property(GLOBAL APPEND PROPERTY PACKAGES_FOUND ZLIB)
79+
set(package "ZLIB")
80+
get_property(packagesNotFound GLOBAL PROPERTY PACKAGES_NOT_FOUND)
81+
list(REMOVE_ITEM packagesNotFound ${package})
82+
set_property(GLOBAL PROPERTY PACKAGES_NOT_FOUND ${packagesNotFound})
83+
get_property(packagesFound GLOBAL PROPERTY PACKAGES_FOUND)
84+
list(FIND packagesFound ${package} found)
85+
if(found EQUAL -1)
86+
set_property(GLOBAL APPEND PROPERTY PACKAGES_FOUND ${package})
87+
endif()
8488
endblock()
8589

8690
ExternalProject_Get_Property(ZLIB INSTALL_DIR)

cmake/cmake/modules/PHP/Package/libzip.cmake

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -63,11 +63,15 @@ if(NOT libzip_FOUND)
6363

6464
# Move dependency to PACKAGES_FOUND.
6565
block()
66-
get_cmake_property(packagesNotFound PACKAGES_NOT_FOUND)
67-
list(REMOVE_ITEM packagesNotFound libzip)
68-
set_property(GLOBAL PROPERTY PACKAGES_NOT_FOUND packagesNotFound)
69-
get_cmake_property(packagesFound PACKAGES_FOUND)
70-
set_property(GLOBAL APPEND PROPERTY PACKAGES_FOUND libzip)
66+
set(package "libzip")
67+
get_property(packagesNotFound GLOBAL PROPERTY PACKAGES_NOT_FOUND)
68+
list(REMOVE_ITEM packagesNotFound ${package})
69+
set_property(GLOBAL PROPERTY PACKAGES_NOT_FOUND ${packagesNotFound})
70+
get_property(packagesFound GLOBAL PROPERTY PACKAGES_FOUND)
71+
list(FIND packagesFound ${package} found)
72+
if(found EQUAL -1)
73+
set_property(GLOBAL APPEND PROPERTY PACKAGES_FOUND ${package})
74+
endif()
7175
endblock()
7276

7377
ExternalProject_Get_Property(libzip INSTALL_DIR)

cmake/cmake/modules/Packages/LibXml2.cmake

Lines changed: 0 additions & 81 deletions
This file was deleted.

cmake/ext/dom/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ target_compile_definitions(
9595
$<$<AND:$<PLATFORM_ID:Windows>,$<NOT:$<IN_LIST:$<TARGET_PROPERTY:TYPE>,MODULE_LIBRARY;SHARED_LIBRARY>>>:LIBXML_STATIC>
9696
)
9797

98-
include(Packages/LibXml2)
98+
include(PHP/Package/LibXml2)
9999

100100
set_package_properties(
101101
LibXml2

cmake/ext/libxml/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ target_compile_definitions(
6464
$<$<PLATFORM_ID:Windows>:LIBXML_STATIC;LIBXML_STATIC_FOR_DLL>
6565
)
6666

67-
include(Packages/LibXml2)
67+
include(PHP/Package/LibXml2)
6868

6969
set_package_properties(
7070
LibXml2

cmake/ext/simplexml/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ target_compile_definitions(
7878

7979
add_dependencies(php_ext_simplexml php_ext_libxml php_ext_spl)
8080

81-
include(Packages/LibXml2)
81+
include(PHP/Package/LibXml2)
8282

8383
set_package_properties(
8484
LibXml2

cmake/ext/soap/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ target_compile_definitions(
7676
$<$<AND:$<PLATFORM_ID:Windows>,$<NOT:$<IN_LIST:$<TARGET_PROPERTY:TYPE>,MODULE_LIBRARY;SHARED_LIBRARY>>>:LIBXML_STATIC>
7777
)
7878

79-
include(Packages/LibXml2)
79+
include(PHP/Package/LibXml2)
8080

8181
set_package_properties(
8282
LibXml2

0 commit comments

Comments
 (0)