summaryrefslogtreecommitdiff
path: root/cmake/modules/FindZLIB.cmake
blob: ac4259b9847198b50983b7ff4acd04ae401ac30a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
# - Find zlib
#
# Find the native ZLIB includes and library.
# Once done this will define
#
#  ZLIB_INCLUDE_DIRS   - where to find zlib.h, etc.
#  ZLIB_LIBRARIES      - List of libraries when using zlib.
#  ZLIB_FOUND          - True if zlib found.
#  ZLIB_DLL_DIR        - (Windows) Path to the zlib DLL.
#  ZLIB_DLL            - (Windows) Name of the zlib DLL.
#
#  ZLIB_VERSION_STRING - The version of zlib found (x.y.z)
#  ZLIB_VERSION_MAJOR  - The major version of zlib
#  ZLIB_VERSION_MINOR  - The minor version of zlib
#  ZLIB_VERSION_PATCH  - The patch version of zlib
#  ZLIB_VERSION_TWEAK  - The tweak version of zlib
#
# The following variable are provided for backward compatibility
#
#  ZLIB_MAJOR_VERSION  - The major version of zlib
#  ZLIB_MINOR_VERSION  - The minor version of zlib
#  ZLIB_PATCH_VERSION  - The patch version of zlib

#=============================================================================
# Copyright 2001-2009 Kitware, Inc.
#
# Distributed under the OSI-approved BSD License (the "License");
# see accompanying file Copyright.txt for details.
#
# This software is distributed WITHOUT ANY WARRANTY; without even the
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the License for more information.
#=============================================================================
# (To distribute this file outside of CMake, substitute the full
#  License text for the above reference.)

# We set these manually on Windows.
#INCLUDE(FindWSWinLibs)
#FindWSWinLibs("zlib" "ZLIB_HINTS")

if (NOT ZLIB_INCLUDE_DIR OR NOT ZLIB_LIBRARY)
    find_package(PkgConfig)
    pkg_search_module(ZLIB zlib)

    FIND_PATH(ZLIB_INCLUDE_DIR
        NAMES
            zlib.h
        HINTS
            "${ZLIB_INCLUDEDIR}"
            ${ZLIB_HINTS}/include
            ${ZLIB_HINTS}
        PATHS
            "[HKEY_LOCAL_MACHINE\\SOFTWARE\\GnuWin32\\Zlib;InstallPath]/include"
    )

    SET(ZLIB_NAMES z zlib zdll zlib1 zlibd zlibd1)
    FIND_LIBRARY(ZLIB_LIBRARY
        NAMES
            ${ZLIB_NAMES}
        HINTS
            "${ZLIB_LIBDIR}"
            ${ZLIB_HINTS}/lib
            ${ZLIB_HINTS}
        PATHS
            "[HKEY_LOCAL_MACHINE\\SOFTWARE\\GnuWin32\\Zlib;InstallPath]/lib"
    )
endif()
MARK_AS_ADVANCED(ZLIB_LIBRARY ZLIB_INCLUDE_DIR)

IF(ZLIB_INCLUDE_DIR AND EXISTS "${ZLIB_INCLUDE_DIR}/zlib.h")
    FILE(STRINGS "${ZLIB_INCLUDE_DIR}/zlib.h" ZLIB_H REGEX "^#define ZLIB_VERSION \"[^\"]*\"$")

    STRING(REGEX REPLACE "^.*ZLIB_VERSION \"([0-9]+).*$" "\\1" ZLIB_VERSION_MAJOR "${ZLIB_H}")
    STRING(REGEX REPLACE "^.*ZLIB_VERSION \"[0-9]+\\.([0-9]+).*$" "\\1" ZLIB_VERSION_MINOR  "${ZLIB_H}")
    STRING(REGEX REPLACE "^.*ZLIB_VERSION \"[0-9]+\\.[0-9]+\\.([0-9]+).*$" "\\1" ZLIB_VERSION_PATCH "${ZLIB_H}")
    SET(ZLIB_VERSION_STRING "${ZLIB_VERSION_MAJOR}.${ZLIB_VERSION_MINOR}.${ZLIB_VERSION_PATCH}")

    # only append a TWEAK version if it exists:
    SET(ZLIB_VERSION_TWEAK "")
    IF( "${ZLIB_H}" MATCHES "^.*ZLIB_VERSION \"[0-9]+\\.[0-9]+\\.[0-9]+\\.([0-9]+).*$")
        SET(ZLIB_VERSION_TWEAK "${CMAKE_MATCH_1}")
        SET(ZLIB_VERSION_STRING "${ZLIB_VERSION_STRING}.${ZLIB_VERSION_TWEAK}")
    ENDIF( "${ZLIB_H}" MATCHES "^.*ZLIB_VERSION \"[0-9]+\\.[0-9]+\\.[0-9]+\\.([0-9]+).*$")

    SET(ZLIB_MAJOR_VERSION "${ZLIB_VERSION_MAJOR}")
    SET(ZLIB_MINOR_VERSION "${ZLIB_VERSION_MINOR}")
    SET(ZLIB_PATCH_VERSION "${ZLIB_VERSION_PATCH}")
ENDIF()

#
# Sigh.  On Windows, we build libz as part of the Wireshark build
# process, so we don't necessarily *have* a libz library to search
# for inflatePrime() at this point; the search fails on the buildbots,
# for example.  See bug 13850.
#
# So, on Windows, we just assume we have a new enough version of
# libz, so that it has inflatePrime().
#
IF(WIN32)
    MESSAGE(STATUS "Zlib might not be built yet; assume it contains inflatePrime")
    SET(HAVE_INFLATEPRIME ON)
ELSE()
    INCLUDE(CheckFunctionExists)
    SET(CMAKE_REQUIRED_LIBRARIES ${ZLIB_LIBRARY})
    CHECK_FUNCTION_EXISTS("inflatePrime" HAVE_INFLATEPRIME)
    # reset
    SET(CMAKE_REQUIRED_LIBRARIES "")
ENDIF()

# handle the QUIETLY and REQUIRED arguments and set ZLIB_FOUND to TRUE if
# all listed variables are TRUE
INCLUDE(FindPackageHandleStandardArgs)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(ZLIB REQUIRED_VARS ZLIB_LIBRARY ZLIB_INCLUDE_DIR
                                       VERSION_VAR ZLIB_VERSION_STRING)

IF(ZLIB_FOUND)
    SET(ZLIB_INCLUDE_DIRS ${ZLIB_INCLUDE_DIR})
    SET(ZLIB_LIBRARIES ${ZLIB_LIBRARY})
    #if (WIN32)
    #  set ( ZLIB_DLL_DIR "${ZLIB_HINTS}"
    #    CACHE PATH "Path to the Zlib DLL"
    #  )
    #  file( GLOB _zlib_dll RELATIVE "${ZLIB_DLL_DIR}"
    #    "${ZLIB_DLL_DIR}/zlib1.dll"
    #  )
    #  set ( ZLIB_DLL ${_zlib_dll}
    #    # We're storing filenames only. Should we use STRING instead?
    #    CACHE FILEPATH "Zlib DLL file name"
    #  )
    #  mark_as_advanced( ZLIB_DLL_DIR ZLIB_DLL )
    #endif()
ELSE()
    SET(ZLIB_INCLUDE_DIRS )
    SET(ZLIB_LIBRARIES )
    SET(ZLIB_DLL_DIR )
    SET(ZLIB_DLL )
ENDIF()