# Distributed under the OSI-approved BSD 3-Clause License. See accompanying | |
# file Copyright.txt or https://cmake.org/licensing for details. | |
#.rst: | |
# FindXalanC | |
# ----------- | |
# | |
# Find the Apache Xalan-C++ XSL transform processor headers and libraries. | |
# | |
# Imported targets | |
# ^^^^^^^^^^^^^^^^ | |
# | |
# This module defines the following :prop_tgt:`IMPORTED` targets: | |
# | |
# ``XalanC::XalanC`` | |
# The Xalan-C++ ``xalan-c`` library, if found. | |
# | |
# Result variables | |
# ^^^^^^^^^^^^^^^^ | |
# | |
# This module will set the following variables in your project: | |
# | |
# ``XalanC_FOUND`` | |
# true if the Xalan headers and libraries were found | |
# ``XalanC_VERSION`` | |
# Xalan release version | |
# ``XalanC_INCLUDE_DIRS`` | |
# the directory containing the Xalan headers; note | |
# ``XercesC_INCLUDE_DIRS`` is also required | |
# ``XalanC_LIBRARIES`` | |
# Xalan libraries to be linked; note ``XercesC_LIBRARIES`` is also | |
# required | |
# | |
# Cache variables | |
# ^^^^^^^^^^^^^^^ | |
# | |
# The following cache variables may also be set: | |
# | |
# ``XalanC_INCLUDE_DIR`` | |
# the directory containing the Xalan headers | |
# ``XalanC_LIBRARY`` | |
# the Xalan library | |
# Written by Roger Leigh <rleigh@codelibre.net> | |
function(_XalanC_GET_VERSION version_hdr) | |
file(STRINGS ${version_hdr} _contents REGEX "^[ \t]*#define XALAN_VERSION_.*") | |
if(_contents) | |
string(REGEX REPLACE "[^*]*#define XALAN_VERSION_MAJOR[ \t]+([0-9]+).*" "\\1" XalanC_MAJOR "${_contents}") | |
string(REGEX REPLACE "[^*]*#define XALAN_VERSION_MINOR[ \t]+([0-9]+).*" "\\1" XalanC_MINOR "${_contents}") | |
string(REGEX REPLACE "[^*]*#define XALAN_VERSION_REVISION[ \t]+([0-9]+).*" "\\1" XalanC_PATCH "${_contents}") | |
if(NOT XalanC_MAJOR MATCHES "^[0-9]+$") | |
message(FATAL_ERROR "Version parsing failed for XALAN_VERSION_MAJOR!") | |
endif() | |
if(NOT XalanC_MINOR MATCHES "^[0-9]+$") | |
message(FATAL_ERROR "Version parsing failed for XALAN_VERSION_MINOR!") | |
endif() | |
if(NOT XalanC_PATCH MATCHES "^[0-9]+$") | |
message(FATAL_ERROR "Version parsing failed for XALAN_VERSION_REVISION!") | |
endif() | |
set(XalanC_VERSION "${XalanC_MAJOR}.${XalanC_MINOR}.${XalanC_PATCH}" PARENT_SCOPE) | |
set(XalanC_VERSION_MAJOR "${XalanC_MAJOR}" PARENT_SCOPE) | |
set(XalanC_VERSION_MINOR "${XalanC_MINOR}" PARENT_SCOPE) | |
set(XalanC_VERSION_PATCH "${XalanC_PATCH}" PARENT_SCOPE) | |
else() | |
message(FATAL_ERROR "Include file ${version_hdr} does not exist or does not contain expected version information") | |
endif() | |
endfunction() | |
# Find include directory | |
find_path(XalanC_INCLUDE_DIR | |
NAMES "xalanc/XalanTransformer/XalanTransformer.hpp" | |
DOC "Xalan-C++ include directory") | |
mark_as_advanced(XalanC_INCLUDE_DIR) | |
if(XalanC_INCLUDE_DIR) | |
_XalanC_GET_VERSION("${XalanC_INCLUDE_DIR}/xalanc/Include/XalanVersion.hpp") | |
endif() | |
if(NOT XalanC_LIBRARY) | |
# Find all XalanC libraries | |
find_library(XalanC_LIBRARY_RELEASE | |
NAMES "Xalan-C" "xalan-c" | |
"Xalan-C_${XalanC_VERSION_MAJOR}" | |
"Xalan-C_${XalanC_VERSION_MAJOR}_${XalanC_VERSION_MINOR}" | |
DOC "Xalan-C++ libraries (release)") | |
find_library(XalanC_LIBRARY_DEBUG | |
NAMES "Xalan-CD" "xalan-cd" | |
"Xalan-C_${XalanC_VERSION_MAJOR}D" | |
"Xalan-C_${XalanC_VERSION_MAJOR}_${XalanC_VERSION_MINOR}D" | |
DOC "Xalan-C++ libraries (debug)") | |
include(${CMAKE_CURRENT_LIST_DIR}/SelectLibraryConfigurations.cmake) | |
select_library_configurations(XalanC) | |
mark_as_advanced(XalanC_LIBRARY_RELEASE XalanC_LIBRARY_DEBUG) | |
endif() | |
unset(XalanC_VERSION_MAJOR) | |
unset(XalanC_VERSION_MINOR) | |
unset(XalanC_VERSION_PATCH) | |
unset(XalanC_XERCESC_REQUIRED) | |
if(XalanC_FIND_REQUIRED) | |
set(XalanC_XERCESC_REQUIRED REQUIRED) | |
endif() | |
find_package(XercesC ${XalanC_XERCESC_REQUIRED}) | |
unset(XalanC_XERCESC_REQUIRED) | |
include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) | |
FIND_PACKAGE_HANDLE_STANDARD_ARGS(XalanC | |
FOUND_VAR XalanC_FOUND | |
REQUIRED_VARS XalanC_LIBRARY | |
XalanC_INCLUDE_DIR | |
XalanC_VERSION | |
XercesC_FOUND | |
VERSION_VAR XalanC_VERSION | |
FAIL_MESSAGE "Failed to find XalanC") | |
if(XalanC_FOUND) | |
set(XalanC_INCLUDE_DIRS "${XalanC_INCLUDE_DIR}" ${XercesC_INCLUDE_DIRS}) | |
set(XalanC_LIBRARIES "${XalanC_LIBRARY}" ${XercesC_LIBRARIES}) | |
# For header-only libraries | |
if(NOT TARGET XalanC::XalanC) | |
add_library(XalanC::XalanC UNKNOWN IMPORTED) | |
if(XalanC_INCLUDE_DIRS) | |
set_target_properties(XalanC::XalanC PROPERTIES | |
INTERFACE_INCLUDE_DIRECTORIES "${XalanC_INCLUDE_DIRS}") | |
endif() | |
if(EXISTS "${XalanC_LIBRARY}") | |
set_target_properties(XalanC::XalanC PROPERTIES | |
IMPORTED_LINK_INTERFACE_LANGUAGES "CXX" | |
IMPORTED_LOCATION "${XalanC_LIBRARY}") | |
endif() | |
if(EXISTS "${XalanC_LIBRARY_RELEASE}") | |
set_property(TARGET XalanC::XalanC APPEND PROPERTY | |
IMPORTED_CONFIGURATIONS RELEASE) | |
set_target_properties(XalanC::XalanC PROPERTIES | |
IMPORTED_LINK_INTERFACE_LANGUAGES_RELEASE "CXX" | |
IMPORTED_LOCATION_RELEASE "${XalanC_LIBRARY_RELEASE}") | |
endif() | |
if(EXISTS "${XalanC_LIBRARY_DEBUG}") | |
set_property(TARGET XalanC::XalanC APPEND PROPERTY | |
IMPORTED_CONFIGURATIONS DEBUG) | |
set_target_properties(XalanC::XalanC PROPERTIES | |
IMPORTED_LINK_INTERFACE_LANGUAGES_DEBUG "CXX" | |
IMPORTED_LOCATION_DEBUG "${XalanC_LIBRARY_DEBUG}") | |
endif() | |
set_target_properties(XalanC::XalanC PROPERTIES INTERFACE_LINK_LIBRARIES XercesC::XercesC) | |
endif() | |
endif() |