blob: 200d6bf8d694139076133600adc258e71abf3ff3 [file] [log] [blame]
Haibo Huangd00577c2020-02-28 16:35:48 -08001# 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
14This module defines :prop_tgt:`IMPORTED` target ``LibLZMA::LibLZMA``, if
15liblzma has been found.
16
17Result variables
18^^^^^^^^^^^^^^^^
19
20This 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
44find_path(LIBLZMA_INCLUDE_DIR lzma.h )
45if(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)
50else()
51 file(TO_CMAKE_PATH "${LIBLZMA_LIBRARY}" LIBLZMA_LIBRARY)
52endif()
53
54if(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)
63endif()
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
68if (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})
84endif ()
85
86include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
87find_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 )
94mark_as_advanced( LIBLZMA_INCLUDE_DIR LIBLZMA_LIBRARY )
95
96if (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()
124endif ()