2010-07-22 12:18:36 +00:00
# - Find zlib
2011-06-08 17:07:06 +00:00
#
2011-06-08 16:24:36 +00:00
# Find the native ZLIB includes and library.
# Once done this will define
2010-07-22 12:18:36 +00:00
#
2011-06-08 16:24:36 +00:00
# ZLIB_INCLUDE_DIRS - where to find zlib.h, etc.
# ZLIB_LIBRARIES - List of libraries when using zlib.
# ZLIB_FOUND - True if zlib found.
2015-01-12 22:44:42 +00:00
# ZLIB_DLL_DIR - (Windows) Path to the zlib DLL.
# ZLIB_DLL - (Windows) Name of the zlib DLL.
2019-01-04 23:37:46 +00:00
# ZLIB_PDB - (Windows) Name of the zlib PDB.
2010-07-22 12:18:36 +00:00
#
2011-06-08 16:24:36 +00:00
# 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
2010-07-22 12:18:36 +00:00
#=============================================================================
# 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.
#=============================================================================
2011-06-08 16:24:36 +00:00
# (To distribute this file outside of CMake, substitute the full
2010-07-22 12:18:36 +00:00
# License text for the above reference.)
2019-01-04 23:37:46 +00:00
include ( FindWSWinLibs )
# Zlib is included with GLib2
FindWSWinLibs ( "vcpkg-export-*" "ZLIB_HINTS" )
2013-10-04 15:42:23 +00:00
2022-11-27 23:04:13 +00:00
if ( MSVC )
# else we'll find Strawberry Perl's version
set ( _zlib_sys_env_option NO_SYSTEM_ENVIRONMENT_PATH )
endif ( )
2015-10-06 20:29:14 +00:00
if ( NOT ZLIB_INCLUDE_DIR OR NOT ZLIB_LIBRARY )
2023-04-10 13:24:34 +00:00
if ( NOT USE_REPOSITORY ) # else we'll find Strawberry Perl's pkgconfig
2021-06-09 22:35:03 +00:00
find_package ( PkgConfig )
pkg_search_module ( ZLIB zlib )
endif ( )
2014-09-25 10:09:23 +00:00
2015-10-06 20:29:14 +00:00
FIND_PATH ( ZLIB_INCLUDE_DIR
N A M E S
z l i b . h
H I N T S
" $ { Z L I B _ I N C L U D E D I R } "
$ { Z L I B _ H I N T S } / i n c l u d e
$ { Z L I B _ H I N T S }
P A T H S
" [ H K E Y _ L O C A L _ M A C H I N E \ \ S O F T W A R E \ \ G n u W i n 3 2 \ \ Z l i b ; I n s t a l l P a t h ] / i n c l u d e "
2022-11-27 23:04:13 +00:00
$ { _ z l i b _ s y s _ e n v _ o p t i o n }
2015-10-06 20:29:14 +00:00
)
2010-07-22 12:18:36 +00:00
2015-10-06 20:29:14 +00:00
SET ( ZLIB_NAMES z zlib zdll zlib1 zlibd zlibd1 )
FIND_LIBRARY ( ZLIB_LIBRARY
N A M E S
$ { Z L I B _ N A M E S }
H I N T S
" $ { Z L I B _ L I B D I R } "
$ { Z L I B _ H I N T S } / l i b
$ { Z L I B _ H I N T S }
P A T H S
" [ H K E Y _ L O C A L _ M A C H I N E \ \ S O F T W A R E \ \ G n u W i n 3 2 \ \ Z l i b ; I n s t a l l P a t h ] / l i b "
2022-11-27 23:04:13 +00:00
$ { _ z l i b _ s y s _ e n v _ o p t i o n }
2015-10-06 20:29:14 +00:00
)
endif ( )
2022-11-27 23:04:13 +00:00
unset ( _zlib_sys_env_option )
2011-06-08 16:24:36 +00:00
MARK_AS_ADVANCED ( ZLIB_LIBRARY ZLIB_INCLUDE_DIR )
2010-07-22 12:18:36 +00:00
2019-04-25 02:19:12 +00:00
# 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
V E R S I O N _ V A R Z L I B _ V E R S I O N _ S T R I N G )
2019-04-25 01:33:26 +00:00
if ( ZLIB_FOUND )
IF ( ZLIB_INCLUDE_DIR AND EXISTS "${ZLIB_INCLUDE_DIR}/zlib.h" )
FILE ( STRINGS "${ZLIB_INCLUDE_DIR}/zlib.h" ZLIB_H REGEX "^#define ZLIB_VERSION \" [^\ "]*\" $ " )
2010-07-22 12:18:36 +00:00
2019-04-25 01:33:26 +00:00
STRING ( REGEX REPLACE "^.*ZLIB_VERSION \" ( [0-9]+ ) .* $ " " \\1" ZLIB_VERSION_MAJOR "${ZLIB_H}" )
STRING ( REGEX REPLACE "^.*ZLIB_VERSION \" [0-9]+\\.([0-9]+ ) . * $ " " \ \ 1 " Z L I B _ V E R S I O N _ M I N O R " $ { Z L I B _ H } " )
STRING ( REGEX REPLACE "^.*ZLIB_VERSION \" [0-9]+\\.[0-9]+\\.([0-9]+ ) . * $ " " \ \ 1 " Z L I B _ V E R S I O N _ P A T C H " $ { Z L I B _ H } " )
SET ( ZLIB_VERSION_STRING "${ZLIB_VERSION_MAJOR}.${ZLIB_VERSION_MINOR}.${ZLIB_VERSION_PATCH}" )
2010-07-22 12:18:36 +00:00
2019-04-25 01:33:26 +00:00
# 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]+ ) . * $ " )
2010-09-23 07:43:04 +00:00
2019-04-25 01:33:26 +00:00
SET ( ZLIB_MAJOR_VERSION "${ZLIB_VERSION_MAJOR}" )
SET ( ZLIB_MINOR_VERSION "${ZLIB_VERSION_MINOR}" )
SET ( ZLIB_PATCH_VERSION "${ZLIB_VERSION_PATCH}" )
ENDIF ( )
2011-06-08 16:24:36 +00:00
On UN*X, make sure we can find inflate() in libz.
For example, on at least some versions of Fedora, if you have a 64-bit
machine, have both the 32-bit and 64-bit versions of the run-time zlib
package installed, and have only the *32-bit* version of the zlib
development package installed, it'll find the header, and think it can
use zlib, and will use it in subsequent tests, but it'll try and link
64-bit test programs with the 32-bit library, causing those tests to
falsely fail. Hilarity ensues.
Change-Id: Ic2536e8a652ef96e2a3923c1faa61f6c8c06bf58
Reviewed-on: https://code.wireshark.org/review/22417
Petri-Dish: Guy Harris <guy@alum.mit.edu>
Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org>
Reviewed-by: Guy Harris <guy@alum.mit.edu>
2017-06-27 04:03:01 +00:00
#
2019-04-25 01:33:26 +00:00
# inflatePrime was added in zlib 1.2.2.4 in 2005. We're guaranteed
# to have it on Windows.
On UN*X, make sure we can find inflate() in libz.
For example, on at least some versions of Fedora, if you have a 64-bit
machine, have both the 32-bit and 64-bit versions of the run-time zlib
package installed, and have only the *32-bit* version of the zlib
development package installed, it'll find the header, and think it can
use zlib, and will use it in subsequent tests, but it'll try and link
64-bit test programs with the 32-bit library, causing those tests to
falsely fail. Hilarity ensues.
Change-Id: Ic2536e8a652ef96e2a3923c1faa61f6c8c06bf58
Reviewed-on: https://code.wireshark.org/review/22417
Petri-Dish: Guy Harris <guy@alum.mit.edu>
Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org>
Reviewed-by: Guy Harris <guy@alum.mit.edu>
2017-06-27 04:03:01 +00:00
#
2019-04-25 01:33:26 +00:00
IF ( WIN32 )
SET ( HAVE_INFLATEPRIME ON )
ELSE ( )
INCLUDE ( CMakePushCheckState )
INCLUDE ( CheckFunctionExists )
CMAKE_PUSH_CHECK_STATE ( )
set ( CMAKE_REQUIRED_INCLUDES ${ ZLIB_INCLUDE_DIR } )
set ( CMAKE_REQUIRED_LIBRARIES ${ ZLIB_LIBRARY } )
#
# Check for inflate() in zlib, to make sure the zlib library is
# usable.
#
# For example, on at least some versions of Fedora, if you have a
# 64-bit machine, have both the 32-bit and 64-bit versions of the
# run-time zlib package installed, and have only the *32-bit*
# version of the zlib development package installed, it'll find the
# header, and think it can use zlib, and will use it in subsequent
# tests, but it'll try and link 64-bit test programs with the 32-bit
# library, causing those tests to falsely fail. Hilarity ensues.
#
CHECK_FUNCTION_EXISTS ( "inflate" HAVE_INFLATE )
IF ( NOT HAVE_INFLATE )
MESSAGE ( FATAL_ERROR "zlib.h found but linking with -lz failed to find inflate(); do you have the right developer package installed (32-bit vs. 64-bit)?" )
ENDIF ( )
CHECK_FUNCTION_EXISTS ( "inflatePrime" HAVE_INFLATEPRIME )
# reset
CMAKE_POP_CHECK_STATE ( )
On UN*X, make sure we can find inflate() in libz.
For example, on at least some versions of Fedora, if you have a 64-bit
machine, have both the 32-bit and 64-bit versions of the run-time zlib
package installed, and have only the *32-bit* version of the zlib
development package installed, it'll find the header, and think it can
use zlib, and will use it in subsequent tests, but it'll try and link
64-bit test programs with the 32-bit library, causing those tests to
falsely fail. Hilarity ensues.
Change-Id: Ic2536e8a652ef96e2a3923c1faa61f6c8c06bf58
Reviewed-on: https://code.wireshark.org/review/22417
Petri-Dish: Guy Harris <guy@alum.mit.edu>
Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org>
Reviewed-by: Guy Harris <guy@alum.mit.edu>
2017-06-27 04:03:01 +00:00
ENDIF ( )
2011-06-08 16:24:36 +00:00
2019-01-04 23:37:46 +00:00
AddWSWinDLL ( ZLIB ZLIB_HINTS "zlib*" )
2011-06-08 16:24:36 +00:00
SET ( ZLIB_INCLUDE_DIRS ${ ZLIB_INCLUDE_DIR } )
SET ( ZLIB_LIBRARIES ${ ZLIB_LIBRARY } )
2015-01-12 22:44:42 +00:00
ELSE ( )
SET ( ZLIB_INCLUDE_DIRS )
SET ( ZLIB_LIBRARIES )
SET ( ZLIB_DLL_DIR )
SET ( ZLIB_DLL )
2019-01-04 23:37:46 +00:00
SET ( ZLIB_PDB )
2011-06-08 16:24:36 +00:00
ENDIF ( )