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: 5FindZLIB 6-------- 7 8Find the native ZLIB includes and library. 9 10IMPORTED Targets 11^^^^^^^^^^^^^^^^ 12 13.. versionadded:: 3.1 14 15This module defines :prop_tgt:`IMPORTED` target ``ZLIB::ZLIB``, if 16ZLIB has been found. 17 18Result Variables 19^^^^^^^^^^^^^^^^ 20 21This module defines the following variables: 22 23:: 24 25 ZLIB_INCLUDE_DIRS - where to find zlib.h, etc. 26 ZLIB_LIBRARIES - List of libraries when using zlib. 27 ZLIB_FOUND - True if zlib found. 28 29:: 30 31 ZLIB_VERSION_STRING - The version of zlib found (x.y.z) 32 ZLIB_VERSION_MAJOR - The major version of zlib 33 ZLIB_VERSION_MINOR - The minor version of zlib 34 ZLIB_VERSION_PATCH - The patch version of zlib 35 ZLIB_VERSION_TWEAK - The tweak version of zlib 36 37.. versionadded:: 3.4 38 Debug and Release variants are found separately. 39 40Backward Compatibility 41^^^^^^^^^^^^^^^^^^^^^^ 42 43The following variable are provided for backward compatibility 44 45:: 46 47 ZLIB_MAJOR_VERSION - The major version of zlib 48 ZLIB_MINOR_VERSION - The minor version of zlib 49 ZLIB_PATCH_VERSION - The patch version of zlib 50 51Hints 52^^^^^ 53 54A user may set ``ZLIB_ROOT`` to a zlib installation root to tell this 55module where to look. 56#]=======================================================================] 57 58set(_ZLIB_SEARCHES) 59 60# Search ZLIB_ROOT first if it is set. 61if(ZLIB_ROOT) 62 set(_ZLIB_SEARCH_ROOT PATHS ${ZLIB_ROOT} NO_DEFAULT_PATH) 63 list(APPEND _ZLIB_SEARCHES _ZLIB_SEARCH_ROOT) 64endif() 65 66# Normal search. 67set(_ZLIB_x86 "(x86)") 68set(_ZLIB_SEARCH_NORMAL 69 PATHS "[HKEY_LOCAL_MACHINE\\SOFTWARE\\GnuWin32\\Zlib;InstallPath]" 70 "$ENV{ProgramFiles}/zlib" 71 "$ENV{ProgramFiles${_ZLIB_x86}}/zlib") 72unset(_ZLIB_x86) 73list(APPEND _ZLIB_SEARCHES _ZLIB_SEARCH_NORMAL) 74 75set(ZLIB_NAMES z zlib zdll zlib1 zlibstatic) 76set(ZLIB_NAMES_DEBUG zd zlibd zdlld zlibd1 zlib1d zlibstaticd) 77 78# Try each search configuration. 79foreach(search ${_ZLIB_SEARCHES}) 80 find_path(ZLIB_INCLUDE_DIR NAMES zlib.h ${${search}} PATH_SUFFIXES include) 81endforeach() 82 83# Allow ZLIB_LIBRARY to be set manually, as the location of the zlib library 84if(NOT ZLIB_LIBRARY) 85 foreach(search ${_ZLIB_SEARCHES}) 86 find_library(ZLIB_LIBRARY_RELEASE NAMES ${ZLIB_NAMES} NAMES_PER_DIR ${${search}} PATH_SUFFIXES lib) 87 find_library(ZLIB_LIBRARY_DEBUG NAMES ${ZLIB_NAMES_DEBUG} NAMES_PER_DIR ${${search}} PATH_SUFFIXES lib) 88 endforeach() 89 90 include(${CMAKE_CURRENT_LIST_DIR}/SelectLibraryConfigurations.cmake) 91 select_library_configurations(ZLIB) 92endif() 93 94unset(ZLIB_NAMES) 95unset(ZLIB_NAMES_DEBUG) 96 97mark_as_advanced(ZLIB_INCLUDE_DIR) 98 99if(ZLIB_INCLUDE_DIR AND EXISTS "${ZLIB_INCLUDE_DIR}/zlib.h") 100 file(STRINGS "${ZLIB_INCLUDE_DIR}/zlib.h" ZLIB_H REGEX "^#define ZLIB_VERSION \"[^\"]*\"$") 101 102 string(REGEX REPLACE "^.*ZLIB_VERSION \"([0-9]+).*$" "\\1" ZLIB_VERSION_MAJOR "${ZLIB_H}") 103 string(REGEX REPLACE "^.*ZLIB_VERSION \"[0-9]+\\.([0-9]+).*$" "\\1" ZLIB_VERSION_MINOR "${ZLIB_H}") 104 string(REGEX REPLACE "^.*ZLIB_VERSION \"[0-9]+\\.[0-9]+\\.([0-9]+).*$" "\\1" ZLIB_VERSION_PATCH "${ZLIB_H}") 105 set(ZLIB_VERSION_STRING "${ZLIB_VERSION_MAJOR}.${ZLIB_VERSION_MINOR}.${ZLIB_VERSION_PATCH}") 106 107 # only append a TWEAK version if it exists: 108 set(ZLIB_VERSION_TWEAK "") 109 if( "${ZLIB_H}" MATCHES "ZLIB_VERSION \"[0-9]+\\.[0-9]+\\.[0-9]+\\.([0-9]+)") 110 set(ZLIB_VERSION_TWEAK "${CMAKE_MATCH_1}") 111 string(APPEND ZLIB_VERSION_STRING ".${ZLIB_VERSION_TWEAK}") 112 endif() 113 114 set(ZLIB_MAJOR_VERSION "${ZLIB_VERSION_MAJOR}") 115 set(ZLIB_MINOR_VERSION "${ZLIB_VERSION_MINOR}") 116 set(ZLIB_PATCH_VERSION "${ZLIB_VERSION_PATCH}") 117endif() 118 119include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) 120FIND_PACKAGE_HANDLE_STANDARD_ARGS(ZLIB REQUIRED_VARS ZLIB_LIBRARY ZLIB_INCLUDE_DIR 121 VERSION_VAR ZLIB_VERSION_STRING) 122 123if(ZLIB_FOUND) 124 set(ZLIB_INCLUDE_DIRS ${ZLIB_INCLUDE_DIR}) 125 126 if(NOT ZLIB_LIBRARIES) 127 set(ZLIB_LIBRARIES ${ZLIB_LIBRARY}) 128 endif() 129 130 if(NOT TARGET ZLIB::ZLIB) 131 add_library(ZLIB::ZLIB UNKNOWN IMPORTED) 132 set_target_properties(ZLIB::ZLIB PROPERTIES 133 INTERFACE_INCLUDE_DIRECTORIES "${ZLIB_INCLUDE_DIRS}") 134 135 if(ZLIB_LIBRARY_RELEASE) 136 set_property(TARGET ZLIB::ZLIB APPEND PROPERTY 137 IMPORTED_CONFIGURATIONS RELEASE) 138 set_target_properties(ZLIB::ZLIB PROPERTIES 139 IMPORTED_LOCATION_RELEASE "${ZLIB_LIBRARY_RELEASE}") 140 endif() 141 142 if(ZLIB_LIBRARY_DEBUG) 143 set_property(TARGET ZLIB::ZLIB APPEND PROPERTY 144 IMPORTED_CONFIGURATIONS DEBUG) 145 set_target_properties(ZLIB::ZLIB PROPERTIES 146 IMPORTED_LOCATION_DEBUG "${ZLIB_LIBRARY_DEBUG}") 147 endif() 148 149 if(NOT ZLIB_LIBRARY_RELEASE AND NOT ZLIB_LIBRARY_DEBUG) 150 set_property(TARGET ZLIB::ZLIB APPEND PROPERTY 151 IMPORTED_LOCATION "${ZLIB_LIBRARY}") 152 endif() 153 endif() 154endif() 155