Sfoglia il codice sorgente

FindLibLZMA: add imported target

- Add imported target LibLZMA::LibLZMA
- Show found message with library path
- Add test for FindLibLZMA

Fixes: #18680, #18679

Signed-off-by: Hiroshi Miura <[email protected]>
Hiroshi Miura 7 anni fa
parent
commit
9644c835b3

+ 4 - 0
Help/release/dev/FindLibLZMA-target.rst

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

+ 22 - 4
Modules/FindLibLZMA.cmake

@@ -9,6 +9,18 @@ Find LibLZMA
 
 Find LibLZMA headers and library
 
+
+IMPORTED Targets
+^^^^^^^^^^^^^^^^
+
+This module defines :prop_tgt:`IMPORTED` target ``LibLZMA::LibLZMA``, if
+LibLZMA has been found.
+
+Result variables
+^^^^^^^^^^^^^^^^
+
+This module will set the following variables in your project:
+
 ::
 
   LIBLZMA_FOUND             - True if liblzma is found.
@@ -51,17 +63,23 @@ if (LIBLZMA_LIBRARY)
 endif ()
 
 include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
-FIND_PACKAGE_HANDLE_STANDARD_ARGS(LibLZMA  REQUIRED_VARS  LIBLZMA_INCLUDE_DIR
-                                                          LIBLZMA_LIBRARY
+find_package_handle_standard_args(LibLZMA  REQUIRED_VARS  LIBLZMA_LIBRARY
+                                                          LIBLZMA_INCLUDE_DIR
                                                           LIBLZMA_HAS_AUTO_DECODER
                                                           LIBLZMA_HAS_EASY_ENCODER
                                                           LIBLZMA_HAS_LZMA_PRESET
                                            VERSION_VAR    LIBLZMA_VERSION_STRING
                                  )
+mark_as_advanced( LIBLZMA_INCLUDE_DIR LIBLZMA_LIBRARY )
 
 if (LIBLZMA_FOUND)
     set(LIBLZMA_LIBRARIES ${LIBLZMA_LIBRARY})
     set(LIBLZMA_INCLUDE_DIRS ${LIBLZMA_INCLUDE_DIR})
+    if(NOT TARGET LibLZMA::LibLZMA)
+        add_library(LibLZMA::LibLZMA UNKNOWN IMPORTED)
+        set_target_properties(LibLZMA::LibLZMA PROPERTIES
+                              INTERFACE_INCLUDE_DIRECTORIES ${LIBLZMA_INCLUDE_DIR}
+                              IMPORTED_LINK_INTERFACE_LANGUAGES C
+                              IMPORTED_LOCATION ${LIBLZMA_LIBRARY})
+    endif()
 endif ()
-
-mark_as_advanced( LIBLZMA_INCLUDE_DIR LIBLZMA_LIBRARY )

+ 4 - 0
Tests/CMakeLists.txt

@@ -1417,6 +1417,10 @@ ${CMake_BINARY_DIR}/bin/cmake -DDIR=dev -P ${CMake_SOURCE_DIR}/Utilities/Release
     add_subdirectory(FindJsonCpp)
   endif()
 
+  if(CMake_TEST_FindLibLZMA)
+    add_subdirectory(FindLibLZMA)
+  endif()
+
   if(CMake_TEST_FindLibRHash)
     add_subdirectory(FindLibRHash)
   endif()

+ 10 - 0
Tests/FindLibLZMA/CMakeLists.txt

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

+ 14 - 0
Tests/FindLibLZMA/Test/CMakeLists.txt

@@ -0,0 +1,14 @@
+cmake_minimum_required(VERSION 3.4)
+project(TestFindLZMA C)
+include(CTest)
+
+find_package(LibLZMA REQUIRED)
+
+add_executable(test_tgt main.c)
+target_link_libraries(test_tgt LibLZMA::LibLZMA)
+add_test(NAME test_tgt COMMAND test_tgt)
+
+add_executable(test_var main.c)
+target_include_directories(test_var PRIVATE ${LIBLZMA_INCLUDE_DIRS})
+target_link_libraries(test_var PRIVATE ${LIBLZMA_LIBRARIES})
+add_test(NAME test_var COMMAND test_var)

+ 15 - 0
Tests/FindLibLZMA/Test/main.c

@@ -0,0 +1,15 @@
+#include <assert.h>
+#include <lzma.h>
+#include <string.h>
+
+static const uint8_t test_string[9] = "123456789";
+
+int main()
+{
+  static const uint32_t test_vector = 0xCBF43926;
+
+  uint32_t crc = lzma_crc32(test_string, sizeof(test_string), 0);
+  assert(crc == test_vector);
+
+  return 0;
+}