Browse Source

FindJasper: Add IMPORTED target

Fixes: #20601
Signed-off-by: Hiroshi Miura <[email protected]>
Hiroshi Miura 4 years ago
parent
commit
6e8754c625

+ 4 - 0
Help/release/dev/FindJasper-imported-target.rst

@@ -0,0 +1,4 @@
+FindJasper-imported-target
+--------------------------
+
+* The :module:`FindJasper` module now provides an imported target.

+ 27 - 0
Modules/FindJasper.cmake

@@ -7,6 +7,12 @@ FindJasper
 
 Find the Jasper JPEG2000 library.
 
+IMPORTED Targets
+^^^^^^^^^^^^^^^^
+
+``Jasper::Jasper``
+  The jasper library, if found.
+
 Result Variables
 ^^^^^^^^^^^^^^^^
 
@@ -60,4 +66,25 @@ find_package_handle_standard_args(Jasper
 if(JASPER_FOUND)
   set(JASPER_LIBRARIES ${JASPER_LIBRARIES} ${JPEG_LIBRARIES})
   set(JASPER_INCLUDE_DIRS ${JASPER_INCLUDE_DIR})
+  if(NOT TARGET Jasper::Jasper)
+    add_library(Jasper::Jasper UNKNOWN IMPORTED)
+    if(JASPER_INCLUDE_DIRS)
+      set_target_properties(Jasper::Jasper PROPERTIES
+        INTERFACE_INCLUDE_DIRECTORIES "${JASPER_INCLUDE_DIRS}")
+    endif()
+    if(EXISTS "${JASPER_LIBRARY_RELEASE}")
+      set_property(TARGET Jasper::Jasper APPEND PROPERTY
+        IMPORTED CONFIGURATION RELEASE)
+      set_target_properties(Jasper::Jasper PROPERTIES
+        IMPORTED_LINK_INTERFACE_LANGUAGES_RELEASE "C"
+        IMPORTED_LOCATION "${JASPER_LIBRARY_RELEASE}")
+    endif()
+    if(EXISTS "${JASPER_LIBRARY_DEBUG}")
+      set_property(TARGET Jasper::Jasper APPEND PROPERTY
+        IMPORTED CONFIGURATION DEBUG)
+      set_target_properties(Jasper::Jasper PROPERTIES
+        IMPORTED_LINK_INTERFACE_LANGUAGES_DEBUG "C"
+        IMPORTED_LOCATION "${JASPER_LIBRARY_DEBUG}")
+    endif()
+  endif()
 endif()

+ 1 - 0
Tests/CMakeLists.txt

@@ -1466,6 +1466,7 @@ if(BUILD_TESTING)
             Iconv
             ICU
             Intl
+            Jasper
             JPEG
             JsonCpp
             LAPACK

+ 10 - 0
Tests/FindJasper/CMakeLists.txt

@@ -0,0 +1,10 @@
+add_test(NAME FindJasper.Test COMMAND
+  ${CMAKE_CTEST_COMMAND} -C $<CONFIGURATION>
+  --build-and-test
+  "${CMake_SOURCE_DIR}/Tests/FindJasper/Test"
+  "${CMake_BINARY_DIR}/Tests/FindJasper/Test"
+  ${build_generator_args}
+  --build-project TestFindJasper
+  --build-options ${build_options}
+  --test-command ${CMAKE_CTEST_COMMAND} -V -C $<CONFIGURATION>
+  )

+ 16 - 0
Tests/FindJasper/Test/CMakeLists.txt

@@ -0,0 +1,16 @@
+cmake_minimum_required(VERSION 3.21)
+project(TestFindJasper C)
+include(CTest)
+
+find_package(Jasper)
+
+add_definitions(-DCMAKE_EXPECTED_JASPER_VERSION=${JASPER_VERSION_STRING})
+
+add_executable(test_jasper_tgt main.c)
+target_link_libraries(test_jasper_tgt Jasper::Jasper)
+add_test(NAME test_jasper_tgt COMMAND test_jasper_tgt)
+
+add_executable(test_jasper_var main.c)
+target_include_directories(test_jasper_var PRIVATE ${JASPER_INCLUDE_DIRS})
+target_link_libraries(test_jasper_var PRIVATE ${JASPER_LIBRARIES})
+add_test(NAME test_jasper_var COMMAND test_jasper_var)

+ 17 - 0
Tests/FindJasper/Test/main.c

@@ -0,0 +1,17 @@
+#include <assert.h>
+// clang-format off
+#include <stdio.h>
+#include <jasper/jasper.h>
+// clang-format on
+
+int main()
+{
+  /* Without any JPEG file to open, test that the call fails as
+     expected.  This tests that linking worked. */
+  jas_init();
+  jas_image_t* img = jas_image_create0();
+  jas_image_destroy(img);
+  jas_cleanup();
+
+  return (JAS_VERSION != CMAKE_EXPECTED_JASPER_VERSION);
+}