OpenCVFindJPEGXL.cmake 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. # The script is taken from https://webkit.googlesource.com/WebKit/+/master/Source/cmake/FindJPEGXL.cmake
  2. # Copyright (C) 2021 Sony Interactive Entertainment Inc.
  3. #
  4. # Redistribution and use in source and binary forms, with or without
  5. # modification, are permitted provided that the following conditions
  6. # are met:
  7. # 1. Redistributions of source code must retain the above copyright
  8. # notice, this list of conditions and the following disclaimer.
  9. # 2. Redistributions in binary form must reproduce the above copyright
  10. # notice, this list of conditions and the following disclaimer in the
  11. # documentation and/or other materials provided with the distribution.
  12. #
  13. # THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
  14. # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
  15. # THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
  16. # PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
  17. # BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
  18. # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
  19. # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
  20. # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
  21. # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
  22. # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
  23. # THE POSSIBILITY OF SUCH DAMAGE.
  24. #[=======================================================================[.rst:
  25. FindJPEGXL
  26. ---------
  27. Find JPEGXL headers and libraries.
  28. Imported Targets
  29. ^^^^^^^^^^^^^^^^
  30. ``JPEGXL::jxl``
  31. The JPEGXL library, if found.
  32. Result Variables
  33. ^^^^^^^^^^^^^^^^
  34. This will define the following variables in your project:
  35. ``JPEGXL_FOUND``
  36. true if (the requested version of) JPEGXL is available.
  37. ``JPEGXL_VERSION``
  38. the version of JPEGXL.
  39. ``JPEGXL_LIBRARIES``
  40. the libraries to link against to use JPEGXL.
  41. ``JPEGXL_INCLUDE_DIRS``
  42. where to find the JPEGXL headers.
  43. ``JPEGXL_COMPILE_OPTIONS``
  44. this should be passed to target_compile_options(), if the
  45. target is not used for linking
  46. #]=======================================================================]
  47. if(NOT OPENCV_SKIP_JPEGXL_FIND_PACKAGE)
  48. find_package(PkgConfig QUIET)
  49. if (PkgConfig_FOUND)
  50. pkg_check_modules(PC_JPEGXL QUIET jxl)
  51. set(JPEGXL_COMPILE_OPTIONS ${PC_JPEGXL_CFLAGS_OTHER})
  52. set(JPEGXL_VERSION ${PC_JPEGXL_VERSION})
  53. endif ()
  54. find_path(JPEGXL_INCLUDE_DIR
  55. NAMES jxl/decode.h
  56. HINTS ${PC_JPEGXL_INCLUDEDIR} ${PC_JPEGXL_INCLUDE_DIRS} ${JPEGXL_INCLUDE_DIR}
  57. )
  58. find_library(JPEGXL_LIBRARY
  59. NAMES ${JPEGXL_NAMES} jxl
  60. HINTS ${PC_JPEGXL_LIBDIR} ${PC_JPEGXL_LIBRARY_DIRS}
  61. )
  62. find_library(JPEGXL_CMS_LIBRARY
  63. NAMES ${JPEGXL_NAMES} jxl_cms
  64. HINTS ${PC_JPEGXL_LIBDIR} ${PC_JPEGXL_LIBRARY_DIRS}
  65. )
  66. if (JPEGXL_LIBRARY AND JPEGXL_CMS_LIBRARY)
  67. set(JPEGXL_LIBRARY ${JPEGXL_LIBRARY} ${JPEGXL_CMS_LIBRARY})
  68. endif ()
  69. find_library(JPEGXL_CMS2_LIBRARY
  70. NAMES ${JPEGXL_NAMES} lcms2
  71. HINTS ${PC_JPEGXL_LIBDIR} ${PC_JPEGXL_LIBRARY_DIRS}
  72. )
  73. if (JPEGXL_LIBRARY AND JPEGXL_CMS2_LIBRARY)
  74. set(JPEGXL_LIBRARY ${JPEGXL_LIBRARY} ${JPEGXL_CMS2_LIBRARY})
  75. endif ()
  76. find_library(JPEGXL_THREADS_LIBRARY
  77. NAMES ${JPEGXL_NAMES} jxl_threads
  78. HINTS ${PC_JPEGXL_LIBDIR} ${PC_JPEGXL_LIBRARY_DIRS}
  79. )
  80. if (JPEGXL_LIBRARY AND JPEGXL_THREADS_LIBRARY)
  81. set(JPEGXL_LIBRARY ${JPEGXL_LIBRARY} ${JPEGXL_THREADS_LIBRARY})
  82. endif ()
  83. find_library(JPEGXL_BROTLICOMMON_LIBRARY
  84. NAMES ${JPEGXL_NAMES} brotlicommon
  85. HINTS ${PC_JPEGXL_LIBDIR} ${PC_JPEGXL_LIBRARY_DIRS}
  86. )
  87. find_library(JPEGXL_BROTLIDEC_LIBRARY
  88. NAMES ${JPEGXL_NAMES} brotlidec
  89. HINTS ${PC_JPEGXL_LIBDIR} ${PC_JPEGXL_LIBRARY_DIRS}
  90. )
  91. if (JPEGXL_LIBRARY AND JPEGXL_BROTLIDEC_LIBRARY)
  92. set(JPEGXL_LIBRARY ${JPEGXL_LIBRARY} ${JPEGXL_BROTLIDEC_LIBRARY})
  93. endif ()
  94. find_library(JPEGXL_BROTLIENC_LIBRARY
  95. NAMES ${JPEGXL_NAMES} brotlienc
  96. HINTS ${PC_JPEGXL_LIBDIR} ${PC_JPEGXL_LIBRARY_DIRS}
  97. )
  98. if (JPEGXL_LIBRARY AND JPEGXL_BROTLIENC_LIBRARY)
  99. set(JPEGXL_LIBRARY ${JPEGXL_LIBRARY} ${JPEGXL_BROTLIENC_LIBRARY})
  100. endif ()
  101. if (JPEGXL_LIBRARY AND JPEGXL_BROTLICOMMON_LIBRARY)
  102. set(JPEGXL_LIBRARY ${JPEGXL_LIBRARY} ${JPEGXL_BROTLICOMMON_LIBRARY})
  103. endif ()
  104. find_library(JPEGXL_HWY_LIBRARY
  105. NAMES ${JPEGXL_NAMES} hwy
  106. HINTS ${PC_JPEGXL_LIBDIR} ${PC_JPEGXL_LIBRARY_DIRS}
  107. )
  108. if (JPEGXL_LIBRARY AND JPEGXL_HWY_LIBRARY)
  109. set(JPEGXL_LIBRARY ${JPEGXL_LIBRARY} ${JPEGXL_HWY_LIBRARY})
  110. endif ()
  111. include(FindPackageHandleStandardArgs)
  112. find_package_handle_standard_args(JPEGXL
  113. FOUND_VAR JPEGXL_FOUND
  114. REQUIRED_VARS JPEGXL_LIBRARY JPEGXL_INCLUDE_DIR
  115. VERSION_VAR JPEGXL_VERSION
  116. )
  117. if (NOT EXISTS "${JPEGXL_INCLUDE_DIR}/jxl/version.h")
  118. # the library version older 0.6 is not supported (no version.h file there)
  119. set(JPEGXL_FOUND FALSE CACHE BOOL "libjxl found" FORCE)
  120. message(STATUS "Ignored incompatible version of libjxl")
  121. endif ()
  122. if (JPEGXL_LIBRARY AND NOT TARGET JPEGXL::jxl)
  123. add_library(JPEGXL::jxl UNKNOWN IMPORTED GLOBAL)
  124. set_target_properties(JPEGXL::jxl PROPERTIES
  125. IMPORTED_LOCATION "${JPEGXL_LIBRARY}"
  126. INTERFACE_COMPILE_OPTIONS "${JPEGXL_COMPILE_OPTIONS}"
  127. INTERFACE_INCLUDE_DIRECTORIES "${JPEGXL_INCLUDE_DIR}"
  128. )
  129. endif ()
  130. mark_as_advanced(JPEGXL_INCLUDE_DIR JPEGXL_LIBRARY)
  131. if (JPEGXL_FOUND)
  132. set(JPEGXL_LIBRARIES ${JPEGXL_LIBRARY})
  133. set(JPEGXL_INCLUDE_DIRS ${JPEGXL_INCLUDE_DIR})
  134. if (NOT JPEGXL_VERSION)
  135. file(READ "${JPEGXL_INCLUDE_DIR}/jxl/version.h" VERSION_HEADER_CONTENTS)
  136. string(REGEX MATCH "#define JPEGXL_MAJOR_VERSION ([0-9]+)" _ ${VERSION_HEADER_CONTENTS})
  137. set(JXL_VERSION_MAJOR ${CMAKE_MATCH_1})
  138. string(REGEX MATCH "#define JPEGXL_MINOR_VERSION ([0-9]+)" _ ${VERSION_HEADER_CONTENTS})
  139. set(JXL_VERSION_MINOR ${CMAKE_MATCH_1})
  140. string(REGEX MATCH "#define JPEGXL_PATCH_VERSION ([0-9]+)" _ ${VERSION_HEADER_CONTENTS})
  141. set(JXL_VERSION_PATCH ${CMAKE_MATCH_1})
  142. set(JPEGXL_VERSION "${JXL_VERSION_MAJOR}.${JXL_VERSION_MINOR}.${JXL_VERSION_PATCH}")
  143. endif()
  144. endif ()
  145. endif()