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