FindXalanC.cmake 6.1 KB

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