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