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:
5FindBZip2
6---------
7
8Try to find BZip2
9
10IMPORTED Targets
11^^^^^^^^^^^^^^^^
12
13.. versionadded:: 3.12
14
15This module defines :prop_tgt:`IMPORTED` target ``BZip2::BZip2``, if
16BZip2 has been found.
17
18Result Variables
19^^^^^^^^^^^^^^^^
20
21This module defines the following variables:
22
23``BZIP2_FOUND``
24  system has BZip2
25``BZIP2_INCLUDE_DIRS``
26  .. versionadded:: 3.12
27    the BZip2 include directories
28``BZIP2_LIBRARIES``
29  Link these to use BZip2
30``BZIP2_NEED_PREFIX``
31  this is set if the functions are prefixed with ``BZ2_``
32``BZIP2_VERSION_STRING``
33  the version of BZip2 found
34
35Cache variables
36^^^^^^^^^^^^^^^
37
38The following cache variables may also be set:
39
40``BZIP2_INCLUDE_DIR``
41  the BZip2 include directory
42#]=======================================================================]
43
44set(_BZIP2_PATHS PATHS
45  "[HKEY_LOCAL_MACHINE\\SOFTWARE\\GnuWin32\\Bzip2;InstallPath]"
46  )
47
48find_path(BZIP2_INCLUDE_DIR bzlib.h ${_BZIP2_PATHS} PATH_SUFFIXES include)
49
50if (NOT BZIP2_LIBRARIES)
51    find_library(BZIP2_LIBRARY_RELEASE NAMES bz2 bzip2 libbz2 libbzip2 NAMES_PER_DIR ${_BZIP2_PATHS} PATH_SUFFIXES lib)
52    find_library(BZIP2_LIBRARY_DEBUG NAMES bz2d bzip2d libbz2d libbzip2d NAMES_PER_DIR ${_BZIP2_PATHS} PATH_SUFFIXES lib)
53
54    include(${CMAKE_CURRENT_LIST_DIR}/SelectLibraryConfigurations.cmake)
55    SELECT_LIBRARY_CONFIGURATIONS(BZIP2)
56else ()
57    file(TO_CMAKE_PATH "${BZIP2_LIBRARIES}" BZIP2_LIBRARIES)
58endif ()
59
60if (BZIP2_INCLUDE_DIR AND EXISTS "${BZIP2_INCLUDE_DIR}/bzlib.h")
61    file(STRINGS "${BZIP2_INCLUDE_DIR}/bzlib.h" BZLIB_H REGEX "bzip2/libbzip2 version [0-9]+\\.[^ ]+ of [0-9]+ ")
62    string(REGEX REPLACE ".* bzip2/libbzip2 version ([0-9]+\\.[^ ]+) of [0-9]+ .*" "\\1" BZIP2_VERSION_STRING "${BZLIB_H}")
63endif ()
64
65include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
66FIND_PACKAGE_HANDLE_STANDARD_ARGS(BZip2
67                                  REQUIRED_VARS BZIP2_LIBRARIES BZIP2_INCLUDE_DIR
68                                  VERSION_VAR BZIP2_VERSION_STRING)
69
70if (BZIP2_FOUND)
71  set(BZIP2_INCLUDE_DIRS ${BZIP2_INCLUDE_DIR})
72  include(${CMAKE_CURRENT_LIST_DIR}/CheckSymbolExists.cmake)
73  include(${CMAKE_CURRENT_LIST_DIR}/CMakePushCheckState.cmake)
74  cmake_push_check_state()
75  set(CMAKE_REQUIRED_QUIET ${BZip2_FIND_QUIETLY})
76  set(CMAKE_REQUIRED_INCLUDES ${BZIP2_INCLUDE_DIR})
77  set(CMAKE_REQUIRED_LIBRARIES ${BZIP2_LIBRARIES})
78  CHECK_SYMBOL_EXISTS(BZ2_bzCompressInit "bzlib.h" BZIP2_NEED_PREFIX)
79  cmake_pop_check_state()
80
81  if(NOT TARGET BZip2::BZip2)
82    add_library(BZip2::BZip2 UNKNOWN IMPORTED)
83    set_target_properties(BZip2::BZip2 PROPERTIES
84      INTERFACE_INCLUDE_DIRECTORIES "${BZIP2_INCLUDE_DIRS}")
85
86    if(BZIP2_LIBRARY_RELEASE)
87      set_property(TARGET BZip2::BZip2 APPEND PROPERTY
88        IMPORTED_CONFIGURATIONS RELEASE)
89      set_target_properties(BZip2::BZip2 PROPERTIES
90        IMPORTED_LOCATION_RELEASE "${BZIP2_LIBRARY_RELEASE}")
91    endif()
92
93    if(BZIP2_LIBRARY_DEBUG)
94      set_property(TARGET BZip2::BZip2 APPEND PROPERTY
95        IMPORTED_CONFIGURATIONS DEBUG)
96      set_target_properties(BZip2::BZip2 PROPERTIES
97        IMPORTED_LOCATION_DEBUG "${BZIP2_LIBRARY_DEBUG}")
98    endif()
99
100    if(NOT BZIP2_LIBRARY_RELEASE AND NOT BZIP2_LIBRARY_DEBUG)
101      set_property(TARGET BZip2::BZip2 APPEND PROPERTY
102        IMPORTED_LOCATION "${BZIP2_LIBRARY}")
103    endif()
104  endif()
105endif ()
106
107mark_as_advanced(BZIP2_INCLUDE_DIR)
108