Haibo Huang | d00577c | 2020-02-28 16:35:48 -0800 | [diff] [blame] | 1 | # Distributed under the OSI-approved BSD 3-Clause License. See accompanying |
| 2 | # file Copyright.txt or https://cmake.org/licensing for details. |
| 3 | |
| 4 | #[=======================================================================[.rst: |
| 5 | FindLibLZMA |
| 6 | ----------- |
| 7 | |
| 8 | Find LZMA compression algorithm headers and library. |
| 9 | |
| 10 | |
| 11 | Imported Targets |
| 12 | ^^^^^^^^^^^^^^^^ |
| 13 | |
| 14 | This module defines :prop_tgt:`IMPORTED` target ``LibLZMA::LibLZMA``, if |
| 15 | liblzma has been found. |
| 16 | |
| 17 | Result variables |
| 18 | ^^^^^^^^^^^^^^^^ |
| 19 | |
| 20 | This module will set the following variables in your project: |
| 21 | |
| 22 | ``LIBLZMA_FOUND`` |
| 23 | True if liblzma headers and library were found. |
| 24 | ``LIBLZMA_INCLUDE_DIRS`` |
| 25 | Directory where liblzma headers are located. |
| 26 | ``LIBLZMA_LIBRARIES`` |
| 27 | Lzma libraries to link against. |
| 28 | ``LIBLZMA_HAS_AUTO_DECODER`` |
| 29 | True if lzma_auto_decoder() is found (required). |
| 30 | ``LIBLZMA_HAS_EASY_ENCODER`` |
| 31 | True if lzma_easy_encoder() is found (required). |
| 32 | ``LIBLZMA_HAS_LZMA_PRESET`` |
| 33 | True if lzma_lzma_preset() is found (required). |
| 34 | ``LIBLZMA_VERSION_MAJOR`` |
| 35 | The major version of lzma |
| 36 | ``LIBLZMA_VERSION_MINOR`` |
| 37 | The minor version of lzma |
| 38 | ``LIBLZMA_VERSION_PATCH`` |
| 39 | The patch version of lzma |
| 40 | ``LIBLZMA_VERSION_STRING`` |
| 41 | version number as a string (ex: "5.0.3") |
| 42 | #]=======================================================================] |
| 43 | |
| 44 | find_path(LIBLZMA_INCLUDE_DIR lzma.h ) |
| 45 | if(NOT LIBLZMA_LIBRARY) |
| 46 | find_library(LIBLZMA_LIBRARY_RELEASE NAMES lzma liblzma PATH_SUFFIXES lib) |
| 47 | find_library(LIBLZMA_LIBRARY_DEBUG NAMES lzmad liblzmad PATH_SUFFIXES lib) |
| 48 | include(${CMAKE_CURRENT_LIST_DIR}/SelectLibraryConfigurations.cmake) |
| 49 | select_library_configurations(LIBLZMA) |
| 50 | else() |
| 51 | file(TO_CMAKE_PATH "${LIBLZMA_LIBRARY}" LIBLZMA_LIBRARY) |
| 52 | endif() |
| 53 | |
| 54 | if(LIBLZMA_INCLUDE_DIR AND EXISTS "${LIBLZMA_INCLUDE_DIR}/lzma/version.h") |
| 55 | file(STRINGS "${LIBLZMA_INCLUDE_DIR}/lzma/version.h" LIBLZMA_HEADER_CONTENTS REGEX "#define LZMA_VERSION_[A-Z]+ [0-9]+") |
| 56 | |
| 57 | string(REGEX REPLACE ".*#define LZMA_VERSION_MAJOR ([0-9]+).*" "\\1" LIBLZMA_VERSION_MAJOR "${LIBLZMA_HEADER_CONTENTS}") |
| 58 | string(REGEX REPLACE ".*#define LZMA_VERSION_MINOR ([0-9]+).*" "\\1" LIBLZMA_VERSION_MINOR "${LIBLZMA_HEADER_CONTENTS}") |
| 59 | string(REGEX REPLACE ".*#define LZMA_VERSION_PATCH ([0-9]+).*" "\\1" LIBLZMA_VERSION_PATCH "${LIBLZMA_HEADER_CONTENTS}") |
| 60 | |
| 61 | set(LIBLZMA_VERSION_STRING "${LIBLZMA_VERSION_MAJOR}.${LIBLZMA_VERSION_MINOR}.${LIBLZMA_VERSION_PATCH}") |
| 62 | unset(LIBLZMA_HEADER_CONTENTS) |
| 63 | endif() |
| 64 | |
| 65 | # We're using new code known now as XZ, even library still been called LZMA |
| 66 | # it can be found in http://tukaani.org/xz/ |
| 67 | # Avoid using old codebase |
| 68 | if (LIBLZMA_LIBRARY) |
| 69 | include(${CMAKE_CURRENT_LIST_DIR}/CheckLibraryExists.cmake) |
| 70 | set(CMAKE_REQUIRED_QUIET_SAVE ${CMAKE_REQUIRED_QUIET}) |
| 71 | set(CMAKE_REQUIRED_QUIET ${LibLZMA_FIND_QUIETLY}) |
| 72 | if(NOT LIBLZMA_LIBRARY_RELEASE AND NOT LIBLZMA_LIBRARY_DEBUG) |
| 73 | set(LIBLZMA_LIBRARY_check ${LIBLZMA_LIBRARY}) |
| 74 | elseif(LIBLZMA_LIBRARY_RELEASE) |
| 75 | set(LIBLZMA_LIBRARY_check ${LIBLZMA_LIBRARY_RELEASE}) |
| 76 | elseif(LIBLZMA_LIBRARY_DEBUG) |
| 77 | set(LIBLZMA_LIBRARY_check ${LIBLZMA_LIBRARY_DEBUG}) |
| 78 | endif() |
| 79 | CHECK_LIBRARY_EXISTS(${LIBLZMA_LIBRARY_check} lzma_auto_decoder "" LIBLZMA_HAS_AUTO_DECODER) |
| 80 | CHECK_LIBRARY_EXISTS(${LIBLZMA_LIBRARY_check} lzma_easy_encoder "" LIBLZMA_HAS_EASY_ENCODER) |
| 81 | CHECK_LIBRARY_EXISTS(${LIBLZMA_LIBRARY_check} lzma_lzma_preset "" LIBLZMA_HAS_LZMA_PRESET) |
| 82 | unset(LIBLZMA_LIBRARY_check) |
| 83 | set(CMAKE_REQUIRED_QUIET ${CMAKE_REQUIRED_QUIET_SAVE}) |
| 84 | endif () |
| 85 | |
| 86 | include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) |
| 87 | find_package_handle_standard_args(LibLZMA REQUIRED_VARS LIBLZMA_LIBRARY |
| 88 | LIBLZMA_INCLUDE_DIR |
| 89 | LIBLZMA_HAS_AUTO_DECODER |
| 90 | LIBLZMA_HAS_EASY_ENCODER |
| 91 | LIBLZMA_HAS_LZMA_PRESET |
| 92 | VERSION_VAR LIBLZMA_VERSION_STRING |
| 93 | ) |
| 94 | mark_as_advanced( LIBLZMA_INCLUDE_DIR LIBLZMA_LIBRARY ) |
| 95 | |
| 96 | if (LIBLZMA_FOUND) |
| 97 | set(LIBLZMA_LIBRARIES ${LIBLZMA_LIBRARY}) |
| 98 | set(LIBLZMA_INCLUDE_DIRS ${LIBLZMA_INCLUDE_DIR}) |
| 99 | if(NOT TARGET LibLZMA::LibLZMA) |
| 100 | add_library(LibLZMA::LibLZMA UNKNOWN IMPORTED) |
| 101 | set_target_properties(LibLZMA::LibLZMA PROPERTIES |
| 102 | INTERFACE_INCLUDE_DIRECTORIES ${LIBLZMA_INCLUDE_DIR} |
| 103 | IMPORTED_LINK_INTERFACE_LANGUAGES C) |
| 104 | |
| 105 | if(LIBLZMA_LIBRARY_RELEASE) |
| 106 | set_property(TARGET LibLZMA::LibLZMA APPEND PROPERTY |
| 107 | IMPORTED_CONFIGURATIONS RELEASE) |
| 108 | set_target_properties(LibLZMA::LibLZMA PROPERTIES |
| 109 | IMPORTED_LOCATION_RELEASE "${LIBLZMA_LIBRARY_RELEASE}") |
| 110 | endif() |
| 111 | |
| 112 | if(LIBLZMA_LIBRARY_DEBUG) |
| 113 | set_property(TARGET LibLZMA::LibLZMA APPEND PROPERTY |
| 114 | IMPORTED_CONFIGURATIONS DEBUG) |
| 115 | set_target_properties(LibLZMA::LibLZMA PROPERTIES |
| 116 | IMPORTED_LOCATION_DEBUG "${LIBLZMA_LIBRARY_DEBUG}") |
| 117 | endif() |
| 118 | |
| 119 | if(NOT LIBLZMA_LIBRARY_RELEASE AND NOT LIBLZMA_LIBRARY_DEBUG) |
| 120 | set_target_properties(LibLZMA::LibLZMA PROPERTIES |
| 121 | IMPORTED_LOCATION "${LIBLZMA_LIBRARY}") |
| 122 | endif() |
| 123 | endif() |
| 124 | endif () |