| # Distributed under the OSI-approved BSD 3-Clause License. See accompanying | |
| # file Copyright.txt or https://cmake.org/licensing for details. | |
| #[=======================================================================[.rst: | |
| FindEXPAT | |
| --------- | |
| Find the native Expat headers and library. | |
| Expat is a stream-oriented XML parser library written in C. | |
| Imported Targets | |
| ^^^^^^^^^^^^^^^^ | |
| .. versionadded:: 3.10 | |
| This module defines the following :prop_tgt:`IMPORTED` targets: | |
| ``EXPAT::EXPAT`` | |
| The Expat ``expat`` library, if found. | |
| Result Variables | |
| ^^^^^^^^^^^^^^^^ | |
| This module will set the following variables in your project: | |
| ``EXPAT_INCLUDE_DIRS`` | |
| where to find expat.h, etc. | |
| ``EXPAT_LIBRARIES`` | |
| the libraries to link against to use Expat. | |
| ``EXPAT_FOUND`` | |
| true if the Expat headers and libraries were found. | |
| Hints | |
| ^^^^^ | |
| ``EXPAT_USE_STATIC_LIBS`` | |
| .. versionadded:: 3.28 | |
| Set to ``TRUE`` to use static libraries. | |
| #]=======================================================================] | |
| find_package(PkgConfig QUIET) | |
| pkg_check_modules(PC_EXPAT QUIET expat) | |
| # Look for the header file. | |
| find_path(EXPAT_INCLUDE_DIR NAMES expat.h HINTS ${PC_EXPAT_INCLUDE_DIRS}) | |
| set(EXPAT_NAMES expat expatw) | |
| set(EXPAT_NAMES_DEBUG expatd expatwd) | |
| if(WIN32) | |
| if(EXPAT_USE_STATIC_LIBS) | |
| list(APPEND EXPAT_NAMES expatMT expatwMT) | |
| list(APPEND EXPAT_NAMES_DEBUG expatdMT expatwdMT) | |
| else() | |
| list(APPEND EXPAT_NAMES expatMT expatMD expatwMT expatwMD) | |
| list(APPEND EXPAT_NAMES_DEBUG expatdMT expatdMD expatwdMT expatwdMD) | |
| endif() | |
| endif() | |
| # Allow EXPAT_LIBRARY to be set manually, as the location of the expat library | |
| if(NOT EXPAT_LIBRARY) | |
| if(DEFINED CMAKE_FIND_LIBRARY_PREFIXES) | |
| set(_expat_ORIG_CMAKE_FIND_LIBRARY_PREFIXES "${CMAKE_FIND_LIBRARY_PREFIXES}") | |
| else() | |
| set(_expat_ORIG_CMAKE_FIND_LIBRARY_PREFIXES) | |
| endif() | |
| if(WIN32) | |
| list(APPEND CMAKE_FIND_LIBRARY_PREFIXES "" "lib") | |
| endif() | |
| # Look for the library. | |
| find_library(EXPAT_LIBRARY_RELEASE NAMES ${EXPAT_NAMES} NAMES_PER_DIR HINTS ${PC_EXPAT_LIBRARY_DIRS} PATH_SUFFIXES lib) | |
| find_library(EXPAT_LIBRARY_DEBUG NAMES ${EXPAT_NAMES_DEBUG} NAMES_PER_DIR HINTS ${PC_EXPAT_LIBRARY_DIRS} PATH_SUFFIXES lib) | |
| # Restore the original find library ordering | |
| if(DEFINED _expat_ORIG_CMAKE_FIND_LIBRARY_PREFIXES) | |
| set(CMAKE_FIND_LIBRARY_PREFIXES "${_expat_ORIG_CMAKE_FIND_LIBRARY_PREFIXES}") | |
| else() | |
| set(CMAKE_FIND_LIBRARY_PREFIXES) | |
| endif() | |
| include(${CMAKE_CURRENT_LIST_DIR}/SelectLibraryConfigurations.cmake) | |
| select_library_configurations(EXPAT) | |
| endif() | |
| unset(EXPAT_NAMES) | |
| unset(EXPAT_NAMES_DEBUG) | |
| if(EXPAT_INCLUDE_DIR AND EXISTS "${EXPAT_INCLUDE_DIR}/expat.h") | |
| file(STRINGS "${EXPAT_INCLUDE_DIR}/expat.h" expat_version_str | |
| REGEX "^#[\t ]*define[\t ]+XML_(MAJOR|MINOR|MICRO)_VERSION[\t ]+[0-9]+$") | |
| unset(EXPAT_VERSION_STRING) | |
| foreach(VPART MAJOR MINOR MICRO) | |
| foreach(VLINE ${expat_version_str}) | |
| if(VLINE MATCHES "^#[\t ]*define[\t ]+XML_${VPART}_VERSION[\t ]+([0-9]+)$") | |
| set(EXPAT_VERSION_PART "${CMAKE_MATCH_1}") | |
| if(EXPAT_VERSION_STRING) | |
| string(APPEND EXPAT_VERSION_STRING ".${EXPAT_VERSION_PART}") | |
| else() | |
| set(EXPAT_VERSION_STRING "${EXPAT_VERSION_PART}") | |
| endif() | |
| endif() | |
| endforeach() | |
| endforeach() | |
| endif() | |
| include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) | |
| FIND_PACKAGE_HANDLE_STANDARD_ARGS(EXPAT | |
| REQUIRED_VARS EXPAT_LIBRARY EXPAT_INCLUDE_DIR | |
| VERSION_VAR EXPAT_VERSION_STRING) | |
| # Copy the results to the output variables and target. | |
| if(EXPAT_FOUND) | |
| set(EXPAT_INCLUDE_DIRS ${EXPAT_INCLUDE_DIR}) | |
| if(NOT EXPAT_LIBRARIES) | |
| set(EXPAT_LIBRARIES ${EXPAT_LIBRARY}) | |
| endif() | |
| if(NOT TARGET EXPAT::EXPAT) | |
| add_library(EXPAT::EXPAT UNKNOWN IMPORTED) | |
| set_target_properties(EXPAT::EXPAT PROPERTIES | |
| IMPORTED_LINK_INTERFACE_LANGUAGES "C" | |
| INTERFACE_INCLUDE_DIRECTORIES "${EXPAT_INCLUDE_DIRS}") | |
| if(EXPAT_USE_STATIC_LIBS) | |
| set_property(TARGET EXPAT::EXPAT APPEND PROPERTY | |
| INTERFACE_COMPILE_DEFINITIONS "XML_STATIC") | |
| endif() | |
| if(EXPAT_LIBRARY_RELEASE) | |
| set_property(TARGET EXPAT::EXPAT APPEND PROPERTY | |
| IMPORTED_CONFIGURATIONS RELEASE) | |
| set_target_properties(EXPAT::EXPAT PROPERTIES | |
| IMPORTED_LOCATION_RELEASE "${EXPAT_LIBRARY_RELEASE}") | |
| endif() | |
| if(EXPAT_LIBRARY_DEBUG) | |
| set_property(TARGET EXPAT::EXPAT APPEND PROPERTY | |
| IMPORTED_CONFIGURATIONS DEBUG) | |
| set_target_properties(EXPAT::EXPAT PROPERTIES | |
| IMPORTED_LOCATION_DEBUG "${EXPAT_LIBRARY_DEBUG}") | |
| endif() | |
| if(NOT EXPAT_LIBRARY_RELEASE AND NOT EXPAT_LIBRARY_DEBUG) | |
| set_property(TARGET EXPAT::EXPAT APPEND PROPERTY | |
| IMPORTED_LOCATION "${EXPAT_LIBRARY}") | |
| endif() | |
| endif() | |
| endif() | |
| mark_as_advanced(EXPAT_INCLUDE_DIR EXPAT_LIBRARY) |