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