mirror of
https://github.com/Kitware/CMake.git
synced 2025-12-31 02:39:48 -06:00
FindEXPAT: Fix for debug and other modified builds
Now considers debug builds, and various other build types which result in a modified library name by the upstream build system. Fixes: #24422
This commit is contained in:
@@ -39,27 +39,62 @@ 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})
|
||||
|
||||
# Look for the library.
|
||||
find_library(EXPAT_LIBRARY NAMES expat libexpat NAMES_PER_DIR HINTS ${PC_EXPAT_LIBRARY_DIRS})
|
||||
set(EXPAT_NAMES expat expatw)
|
||||
set(EXPAT_NAMES_DEBUG expatd expatwd)
|
||||
|
||||
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]+$")
|
||||
if(WIN32)
|
||||
list(APPEND EXPAT_NAMES expatMT expatMD expatwMT expatwMD)
|
||||
list(APPEND EXPAT_NAMES_DEBUG expatdMT expatdMD expatwdMT expatwdMD)
|
||||
endif()
|
||||
|
||||
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()
|
||||
# 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()
|
||||
endif ()
|
||||
endforeach()
|
||||
endif()
|
||||
|
||||
include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
|
||||
FIND_PACKAGE_HANDLE_STANDARD_ARGS(EXPAT
|
||||
@@ -68,15 +103,36 @@ FIND_PACKAGE_HANDLE_STANDARD_ARGS(EXPAT
|
||||
|
||||
# Copy the results to the output variables and target.
|
||||
if(EXPAT_FOUND)
|
||||
set(EXPAT_LIBRARIES ${EXPAT_LIBRARY})
|
||||
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"
|
||||
IMPORTED_LOCATION "${EXPAT_LIBRARY}"
|
||||
INTERFACE_INCLUDE_DIRECTORIES "${EXPAT_INCLUDE_DIRS}")
|
||||
|
||||
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()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user