1# Distributed under the OSI-approved BSD 3-Clause License. See accompanying 2# file Copyright.txt or https://cmake.org/licensing for details. 3 4#[=======================================================================[.rst: 5FindXalanC 6----------- 7 8.. versionadded:: 3.5 9 10Find the Apache Xalan-C++ XSL transform processor headers and libraries. 11 12Imported targets 13^^^^^^^^^^^^^^^^ 14 15This module defines the following :prop_tgt:`IMPORTED` targets: 16 17``XalanC::XalanC`` 18 The Xalan-C++ ``xalan-c`` library, if found. 19 20Result variables 21^^^^^^^^^^^^^^^^ 22 23This module will set the following variables in your project: 24 25``XalanC_FOUND`` 26 true if the Xalan headers and libraries were found 27``XalanC_VERSION`` 28 Xalan release version 29``XalanC_INCLUDE_DIRS`` 30 the directory containing the Xalan headers; note 31 ``XercesC_INCLUDE_DIRS`` is also required 32``XalanC_LIBRARIES`` 33 Xalan libraries to be linked; note ``XercesC_LIBRARIES`` is also 34 required 35 36Cache variables 37^^^^^^^^^^^^^^^ 38 39The following cache variables may also be set: 40 41``XalanC_INCLUDE_DIR`` 42 the directory containing the Xalan headers 43``XalanC_LIBRARY`` 44 the Xalan library 45#]=======================================================================] 46 47# Written by Roger Leigh <[email protected]> 48 49function(_XalanC_GET_VERSION version_hdr) 50 file(STRINGS ${version_hdr} _contents REGEX "^[ \t]*#define XALAN_VERSION_.*") 51 if(_contents) 52 string(REGEX REPLACE "[^*]*#define XALAN_VERSION_MAJOR[ \t(]+([0-9]+).*" "\\1" XalanC_MAJOR "${_contents}") 53 string(REGEX REPLACE "[^*]*#define XALAN_VERSION_MINOR[ \t(]+([0-9]+).*" "\\1" XalanC_MINOR "${_contents}") 54 string(REGEX REPLACE "[^*]*#define XALAN_VERSION_REVISION[ \t(]+([0-9]+).*" "\\1" XalanC_PATCH "${_contents}") 55 56 if(NOT XalanC_MAJOR MATCHES "^[0-9]+$") 57 message(FATAL_ERROR "Version parsing failed for XALAN_VERSION_MAJOR!") 58 endif() 59 if(NOT XalanC_MINOR MATCHES "^[0-9]+$") 60 message(FATAL_ERROR "Version parsing failed for XALAN_VERSION_MINOR!") 61 endif() 62 if(NOT XalanC_PATCH MATCHES "^[0-9]+$") 63 message(FATAL_ERROR "Version parsing failed for XALAN_VERSION_REVISION!") 64 endif() 65 66 set(XalanC_VERSION "${XalanC_MAJOR}.${XalanC_MINOR}.${XalanC_PATCH}" PARENT_SCOPE) 67 set(XalanC_VERSION_MAJOR "${XalanC_MAJOR}" PARENT_SCOPE) 68 set(XalanC_VERSION_MINOR "${XalanC_MINOR}" PARENT_SCOPE) 69 set(XalanC_VERSION_PATCH "${XalanC_PATCH}" PARENT_SCOPE) 70 else() 71 message(FATAL_ERROR "Include file ${version_hdr} does not exist or does not contain expected version information") 72 endif() 73endfunction() 74 75# Find include directory 76find_path(XalanC_INCLUDE_DIR 77 NAMES "xalanc/XalanTransformer/XalanTransformer.hpp" 78 DOC "Xalan-C++ include directory") 79mark_as_advanced(XalanC_INCLUDE_DIR) 80 81if(XalanC_INCLUDE_DIR AND EXISTS "${XalanC_INCLUDE_DIR}/xalanc/Include/XalanVersion.hpp") 82 _XalanC_GET_VERSION("${XalanC_INCLUDE_DIR}/xalanc/Include/XalanVersion.hpp") 83endif() 84 85if(NOT XalanC_LIBRARY) 86 # Find all XalanC libraries 87 find_library(XalanC_LIBRARY_RELEASE 88 NAMES "Xalan-C" "xalan-c" 89 "Xalan-C_${XalanC_VERSION_MAJOR}" 90 "Xalan-C_${XalanC_VERSION_MAJOR}_${XalanC_VERSION_MINOR}" 91 DOC "Xalan-C++ libraries (release)") 92 find_library(XalanC_LIBRARY_DEBUG 93 NAMES "Xalan-CD" "xalan-cd" 94 "Xalan-C_${XalanC_VERSION_MAJOR}D" 95 "Xalan-C_${XalanC_VERSION_MAJOR}_${XalanC_VERSION_MINOR}D" 96 DOC "Xalan-C++ libraries (debug)") 97 include(${CMAKE_CURRENT_LIST_DIR}/SelectLibraryConfigurations.cmake) 98 select_library_configurations(XalanC) 99 mark_as_advanced(XalanC_LIBRARY_RELEASE XalanC_LIBRARY_DEBUG) 100endif() 101 102unset(XalanC_VERSION_MAJOR) 103unset(XalanC_VERSION_MINOR) 104unset(XalanC_VERSION_PATCH) 105 106unset(XalanC_XERCESC_REQUIRED) 107if(XalanC_FIND_REQUIRED) 108 set(XalanC_XERCESC_REQUIRED REQUIRED) 109endif() 110find_package(XercesC ${XalanC_XERCESC_REQUIRED}) 111unset(XalanC_XERCESC_REQUIRED) 112 113include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) 114FIND_PACKAGE_HANDLE_STANDARD_ARGS(XalanC 115 FOUND_VAR XalanC_FOUND 116 REQUIRED_VARS XalanC_LIBRARY 117 XalanC_INCLUDE_DIR 118 XalanC_VERSION 119 XercesC_FOUND 120 VERSION_VAR XalanC_VERSION 121 FAIL_MESSAGE "Failed to find XalanC") 122 123if(XalanC_FOUND) 124 set(XalanC_INCLUDE_DIRS "${XalanC_INCLUDE_DIR}" ${XercesC_INCLUDE_DIRS}) 125 set(XalanC_LIBRARIES "${XalanC_LIBRARY}" ${XercesC_LIBRARIES}) 126 127 # For header-only libraries 128 if(NOT TARGET XalanC::XalanC) 129 add_library(XalanC::XalanC UNKNOWN IMPORTED) 130 if(XalanC_INCLUDE_DIRS) 131 set_target_properties(XalanC::XalanC PROPERTIES 132 INTERFACE_INCLUDE_DIRECTORIES "${XalanC_INCLUDE_DIRS}") 133 endif() 134 if(EXISTS "${XalanC_LIBRARY}") 135 set_target_properties(XalanC::XalanC PROPERTIES 136 IMPORTED_LINK_INTERFACE_LANGUAGES "CXX" 137 IMPORTED_LOCATION "${XalanC_LIBRARY}") 138 endif() 139 if(EXISTS "${XalanC_LIBRARY_RELEASE}") 140 set_property(TARGET XalanC::XalanC APPEND PROPERTY 141 IMPORTED_CONFIGURATIONS RELEASE) 142 set_target_properties(XalanC::XalanC PROPERTIES 143 IMPORTED_LINK_INTERFACE_LANGUAGES_RELEASE "CXX" 144 IMPORTED_LOCATION_RELEASE "${XalanC_LIBRARY_RELEASE}") 145 endif() 146 if(EXISTS "${XalanC_LIBRARY_DEBUG}") 147 set_property(TARGET XalanC::XalanC APPEND PROPERTY 148 IMPORTED_CONFIGURATIONS DEBUG) 149 set_target_properties(XalanC::XalanC PROPERTIES 150 IMPORTED_LINK_INTERFACE_LANGUAGES_DEBUG "CXX" 151 IMPORTED_LOCATION_DEBUG "${XalanC_LIBRARY_DEBUG}") 152 endif() 153 set_target_properties(XalanC::XalanC PROPERTIES INTERFACE_LINK_LIBRARIES XercesC::XercesC) 154 endif() 155endif() 156