Merge topic 'FindJasper-imported-target'

6e8754c625 FindJasper: Add IMPORTED target
bdbce845cd FindJasper: Add JASPER_INCLUDE_DIRS result variable
7f8413c309 FindJasper: Modernize documentation layout
524205a7a5 FindJasper: Modernize code layout

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !4633
This commit is contained in:
Brad King
2021-10-07 13:21:55 +00:00
committed by Kitware Robot
6 changed files with 118 additions and 27 deletions

View File

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

View File

@@ -5,43 +5,86 @@
FindJasper
----------
Try to find the Jasper JPEG2000 library
Find the Jasper JPEG2000 library.
Once done this will define
IMPORTED Targets
^^^^^^^^^^^^^^^^
::
``Jasper::Jasper``
The jasper library, if found.
JASPER_FOUND - system has Jasper
JASPER_INCLUDE_DIR - the Jasper include directory
JASPER_LIBRARIES - the libraries needed to use Jasper
JASPER_VERSION_STRING - the version of Jasper found (since CMake 2.8.8)
Result Variables
^^^^^^^^^^^^^^^^
This module defines the following variables:
``JASPER_FOUND``
system has Jasper
``JASPER_INCLUDE_DIRS``
.. versionadded:: 3.22
the Jasper include directory
``JASPER_LIBRARIES``
the libraries needed to use Jasper
``JASPER_VERSION_STRING``
the version of Jasper found
Cache variables
^^^^^^^^^^^^^^^
The following cache variables may also be set:
``JASPER_INCLUDE_DIR``
where to find jasper/jasper.h, etc.
``JASPER_LIBRARY_RELEASE``
where to find the Jasper library (optimized).
``JASPER_LIBARRY_DEBUG``
where to find the Jasper library (debug).
#]=======================================================================]
find_path(JASPER_INCLUDE_DIR jasper/jasper.h)
mark_as_advanced(JASPER_INCLUDE_DIR)
if (NOT JASPER_LIBRARIES)
find_package(JPEG)
if(NOT JASPER_LIBRARIES)
find_package(JPEG)
find_library(JASPER_LIBRARY_RELEASE NAMES jasper libjasper)
find_library(JASPER_LIBRARY_DEBUG NAMES jasperd)
include(${CMAKE_CURRENT_LIST_DIR}/SelectLibraryConfigurations.cmake)
select_library_configurations(JASPER)
endif()
find_library(JASPER_LIBRARY_RELEASE NAMES jasper libjasper)
find_library(JASPER_LIBRARY_DEBUG NAMES jasperd)
include(${CMAKE_CURRENT_LIST_DIR}/SelectLibraryConfigurations.cmake)
SELECT_LIBRARY_CONFIGURATIONS(JASPER)
endif ()
if (JASPER_INCLUDE_DIR AND EXISTS "${JASPER_INCLUDE_DIR}/jasper/jas_config.h")
file(STRINGS "${JASPER_INCLUDE_DIR}/jasper/jas_config.h" jasper_version_str REGEX "^#define[\t ]+JAS_VERSION[\t ]+\".*\".*")
string(REGEX REPLACE "^#define[\t ]+JAS_VERSION[\t ]+\"([^\"]+)\".*" "\\1" JASPER_VERSION_STRING "${jasper_version_str}")
endif ()
if(JASPER_INCLUDE_DIR AND EXISTS "${JASPER_INCLUDE_DIR}/jasper/jas_config.h")
file(STRINGS "${JASPER_INCLUDE_DIR}/jasper/jas_config.h" jasper_version_str REGEX "^#define[\t ]+JAS_VERSION[\t ]+\".*\".*")
string(REGEX REPLACE "^#define[\t ]+JAS_VERSION[\t ]+\"([^\"]+)\".*" "\\1" JASPER_VERSION_STRING "${jasper_version_str}")
endif()
include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(Jasper
find_package_handle_standard_args(Jasper
REQUIRED_VARS JASPER_LIBRARIES JASPER_INCLUDE_DIR JPEG_LIBRARIES
VERSION_VAR JASPER_VERSION_STRING)
if (JASPER_FOUND)
set(JASPER_LIBRARIES ${JASPER_LIBRARIES} ${JPEG_LIBRARIES} )
endif ()
mark_as_advanced(JASPER_INCLUDE_DIR)
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()

View File

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

View File

@@ -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>
)

View File

@@ -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)

View File

@@ -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);
}