Skip to content

Commit 34f3548

Browse files
committed
re-work
1 parent c0efc4c commit 34f3548

File tree

2 files changed

+82
-1
lines changed

2 files changed

+82
-1
lines changed

lldb/source/Host/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,7 @@ if (CMAKE_SYSTEM_NAME MATCHES "NetBSD")
154154
list(APPEND EXTRA_LIBS kvm)
155155
endif()
156156
if (LLDB_ENABLE_LIBXML2)
157-
list(APPEND EXTRA_LIBS LibXml2::LibXml2)
157+
list(APPEND EXTRA_LIBS LibXml2::LibXml2Shared)
158158
endif()
159159
if (HAVE_LIBDL)
160160
list(APPEND EXTRA_LIBS ${CMAKE_DL_LIBS})
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
# Based on https://gitlab.kitware.com/cmake/cmake/-/blob/3986f4b79ea6bf247eefad7ddb883cd6f65ac5c1/Modules/FindLibXml2.cmake
2+
# With support for using a static libxml2 library
3+
4+
# use pkg-config to get the directories and then use these values
5+
# in the find_path() and find_library() calls
6+
find_package(PkgConfig QUIET)
7+
if(PkgConfig_FOUND)
8+
pkg_check_modules(PC_LIBXML QUIET libxml-2.0)
9+
endif()
10+
11+
find_path(LIBXML2_INCLUDE_DIR NAMES libxml/xpath.h
12+
HINTS
13+
${PC_LIBXML_INCLUDEDIR}
14+
${PC_LIBXML_INCLUDE_DIRS}
15+
PATH_SUFFIXES libxml2
16+
)
17+
18+
if(DEFINED LIBXML2_LIBRARIES AND NOT DEFINED LIBXML2_LIBRARY)
19+
set(LIBXML2_LIBRARY ${LIBXML2_LIBRARIES})
20+
endif()
21+
22+
find_library(LIBXML2_SHARED_LIBRARY NAMES xml2 libxml2 libxml2_a
23+
HINTS
24+
${PC_LIBXML_LIBDIR}
25+
${PC_LIBXML_LIBRARY_DIRS}
26+
)
27+
28+
if(LLVM_USE_STATIC_LIBXML2)
29+
set(_original_suffixes ${CMAKE_FIND_LIBRARY_SUFFIXES})
30+
if(UNIX)
31+
set(CMAKE_FIND_LIBRARY_SUFFIXES .a)
32+
elseif(WIN32)
33+
set(CMAKE_FIND_LIBRARY_SUFFIXES .lib .a)
34+
endif()
35+
36+
find_library(LIBXML2_STATIC_LIBRARY NAMES xml2 libxml2 libxml2_a
37+
HINTS
38+
${PC_LIBXML_LIBDIR}
39+
${PC_LIBXML_LIBRARY_DIRS}
40+
)
41+
42+
if(LIBXML2_STATIC_LIBRARY STREQUAL "LIBXML2_STATIC_LIBRARY-NOTFOUND")
43+
message(FATAL_ERROR "Static libxml2 requested (LLVM_USE_STATIC_LIBXML2=ON) but not found")
44+
endif()
45+
46+
set(CMAKE_FIND_LIBRARY_SUFFIXES ${_original_suffixes})
47+
set(LIBXML2_LIBRARY ${LIBXML2_STATIC_LIBRARY})
48+
else()
49+
set(LIBXML2_LIBRARY ${LIBXML2_SHARED_LIBRARY})
50+
endif()
51+
52+
set(LIBXML2_LIBRARIES ${LIBXML2_LIBRARY})
53+
set(LIBXML2_INCLUDE_DIRS ${LIBXML2_INCLUDE_DIR})
54+
55+
unset(LIBXML2_DEFINITIONS)
56+
foreach(libxml2_pc_lib_dir IN LISTS PC_LIBXML_LIBDIR PC_LIBXML_LIBRARY_DIRS)
57+
if (LIBXML2_LIBRARY MATCHES "^${libxml2_pc_lib_dir}")
58+
list(APPEND LIBXML2_INCLUDE_DIRS ${PC_LIBXML_INCLUDE_DIRS})
59+
set(LIBXML2_DEFINITIONS ${PC_LIBXML_CFLAGS_OTHER})
60+
break()
61+
endif()
62+
endforeach()
63+
64+
include(FindPackageHandleStandardArgs)
65+
find_package_handle_standard_args(LibXml2
66+
REQUIRED_VARS LIBXML2_LIBRARY LIBXML2_INCLUDE_DIR
67+
VERSION_VAR LibXml2_VERSION)
68+
69+
mark_as_advanced(LIBXML2_INCLUDE_DIR LIBXML2_LIBRARY)
70+
71+
if(LibXml2_FOUND AND NOT TARGET LibXml2::LibXml2)
72+
add_library(LibXml2::LibXml2 UNKNOWN IMPORTED)
73+
set_target_properties(LibXml2::LibXml2 PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${LIBXML2_INCLUDE_DIRS}")
74+
set_target_properties(LibXml2::LibXml2 PROPERTIES INTERFACE_COMPILE_OPTIONS "${LIBXML2_DEFINITIONS}")
75+
set_property(TARGET LibXml2::LibXml2 APPEND PROPERTY IMPORTED_LOCATION "${LIBXML2_LIBRARY}")
76+
77+
add_library(LibXml2::LibXml2Shared UNKNOWN IMPORTED)
78+
set_target_properties(LibXml2::LibXml2Shared PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${LIBXML2_INCLUDE_DIRS}")
79+
set_target_properties(LibXml2::LibXml2Shared PROPERTIES INTERFACE_COMPILE_OPTIONS "${LIBXML2_DEFINITIONS}")
80+
set_property(TARGET LibXml2::LibXml2Shared APPEND PROPERTY IMPORTED_LOCATION "${LIBXML2_SHARED_LIBRARY}")
81+
endif()

0 commit comments

Comments
 (0)