# Try to find the libxml2 library # # If successful, the following variables will be defined: # LIBXML2_INCLUDE_DIR # LIBXML2_LIBRARY # LIBXML2_STATIC_LIBRARY # LibXml2_FOUND # # Additionally, the following import targets will be defined: # LibXml2::LibXml2 # LibXml2::LibXml2Static (if the static library is found) find_package(PkgConfig QUIET) if(PkgConfig_FOUND) pkg_check_modules(PC_LIBXML QUIET libxml-2.0) endif() find_path(LIBXML2_INCLUDE_DIR NAMES libxml/xpath.h HINTS ${PC_LIBXML_INCLUDEDIR} ${PC_LIBXML_INCLUDE_DIRS} PATH_SUFFIXES libxml2 ) if(DEFINED LIBXML2_LIBRARIES AND NOT DEFINED LIBXML2_LIBRARY) set(LIBXML2_LIBRARY "${LIBXML2_LIBRARIES}" CACHE FILEPATH "Path to libxml2 library") endif() find_library(LIBXML2_LIBRARY NAMES xml2 libxml2 libxml2s libxml2_a HINTS ${PC_LIBXML_LIBDIR} ${PC_LIBXML_LIBRARY_DIRS} ) find_library(LIBXML2_STATIC_LIBRARY NAMES "${CMAKE_STATIC_LIBRARY_PREFIX}libxml2s${CMAKE_STATIC_LIBRARY_SUFFIX}" "${CMAKE_STATIC_LIBRARY_PREFIX}xml2${CMAKE_STATIC_LIBRARY_SUFFIX}" "${CMAKE_STATIC_LIBRARY_PREFIX}libxml2${CMAKE_STATIC_LIBRARY_SUFFIX}" HINTS ${PC_LIBXML_LIBDIR} ${PC_LIBXML_LIBRARY_DIRS} ) include(FindPackageHandleStandardArgs) find_package_handle_standard_args(LibXml2 REQUIRED_VARS LIBXML2_LIBRARY LIBXML2_INCLUDE_DIR VERSION_VAR PC_LIBXML_VERSION ) if(LibXml2_FOUND) if(NOT TARGET LibXml2::LibXml2) add_library(LibXml2::LibXml2 UNKNOWN IMPORTED) set_target_properties(LibXml2::LibXml2 PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${LIBXML2_INCLUDE_DIR}" INTERFACE_COMPILE_OPTIONS "${PC_LIBXML_CFLAGS_OTHER}" IMPORTED_LOCATION "${LIBXML2_LIBRARY}") endif() if(LIBXML2_STATIC_LIBRARY AND NOT TARGET LibXml2::LibXml2Static) add_library(LibXml2::LibXml2Static STATIC IMPORTED) set_target_properties(LibXml2::LibXml2Static PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${LIBXML2_INCLUDE_DIR}" INTERFACE_COMPILE_OPTIONS "${PC_LIBXML_CFLAGS_OTHER}" IMPORTED_LOCATION "${LIBXML2_STATIC_LIBRARY}") # Static libraries need their transitive dependencies for linking. set(LIBXML2_STATIC_DEPS) foreach(lib IN LISTS PC_LIBXML_STATIC_LIBRARIES) if(NOT lib STREQUAL "xml2") list(APPEND LIBXML2_STATIC_DEPS ${lib}) endif() endforeach() if(LIBXML2_STATIC_DEPS) set_target_properties(LibXml2::LibXml2Static PROPERTIES INTERFACE_LINK_LIBRARIES "${LIBXML2_STATIC_DEPS}") endif() endif() endif() set(LIBXML2_INCLUDE_DIRS ${LIBXML2_INCLUDE_DIR}) set(LIBXML2_LIBRARIES ${LIBXML2_LIBRARY}) set(LIBXML2_DEFINITIONS ${PC_LIBXML_CFLAGS_OTHER}) mark_as_advanced(LIBXML2_INCLUDE_DIR LIBXML2_LIBRARY LIBXML2_STATIC_LIBRARY)