FindXalanC.cmake 5.7 KB

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