From 5f2f36f1eac9e4b4ced8aeeea75e1f583acb76a0 Mon Sep 17 00:00:00 2001 From: Keith Smiley Date: Thu, 4 Dec 2025 17:27:57 +0000 Subject: [PATCH] FindLibXml2: Add a LibXml2_USE_STATIC_LIBS hint Add an option to search only for the static library. --- Help/release/dev/FindLibXml2-static.rst | 5 +++++ Modules/FindLibXml2.cmake | 23 +++++++++++++++++++++++ 2 files changed, 28 insertions(+) create mode 100644 Help/release/dev/FindLibXml2-static.rst diff --git a/Help/release/dev/FindLibXml2-static.rst b/Help/release/dev/FindLibXml2-static.rst new file mode 100644 index 0000000000..9eba99ea38 --- /dev/null +++ b/Help/release/dev/FindLibXml2-static.rst @@ -0,0 +1,5 @@ +FindLibXml2-static +------------------ + +* The :module:`FindLibXml2` module gained a ``LibXml2_USE_STATIC_LIBS`` hint + to select static libraries. diff --git a/Modules/FindLibXml2.cmake b/Modules/FindLibXml2.cmake index 67d20e4244..05d198b489 100644 --- a/Modules/FindLibXml2.cmake +++ b/Modules/FindLibXml2.cmake @@ -53,6 +53,14 @@ This module defines the following variables: ``LIBXML2_DEFINITIONS`` The compiler switches required for using libxml2. +Other Variables +^^^^^^^^^^^^^^^ + +``LibXml2_USE_STATIC_LIBS`` + .. versionadded:: 4.3 + + Set to ``TRUE`` to use static libraries. Default is ``FALSE``. + Cache Variables ^^^^^^^^^^^^^^^ @@ -120,12 +128,27 @@ if(DEFINED LIBXML2_LIBRARIES AND NOT DEFINED LIBXML2_LIBRARY) set(LIBXML2_LIBRARY ${LIBXML2_LIBRARIES}) endif() +# Support preference of static libs by adjusting CMAKE_FIND_LIBRARY_SUFFIXES +if(LibXml2_USE_STATIC_LIBS) + set(_libxml2_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES}) + if(WIN32) + list(INSERT CMAKE_FIND_LIBRARY_SUFFIXES 0 .lib .a) + else() + set(CMAKE_FIND_LIBRARY_SUFFIXES .a) + endif() +endif() + find_library(LIBXML2_LIBRARY NAMES xml2 libxml2 libxml2_a HINTS ${PC_LIBXML_LIBDIR} ${PC_LIBXML_LIBRARY_DIRS} ) +# Restore the original find library ordering +if(LibXml2_USE_STATIC_LIBS) + set(CMAKE_FIND_LIBRARY_SUFFIXES ${_libxml2_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES}) +endif() + find_program(LIBXML2_XMLLINT_EXECUTABLE xmllint) # for backwards compat. with KDE 4.0.x: set(XMLLINT_EXECUTABLE "${LIBXML2_XMLLINT_EXECUTABLE}")