mirror of
https://github.com/Kitware/CMake.git
synced 2026-01-07 22:30:13 -06:00
FindZLIB: fix CMAKE_FIND_LIBRARY_PREFIXES being unset when it was empty
CMAKE_FIND_LIBRARY_PREFIXES and CMAKE_FIND_LIBRARY_SUFFIXES have
different behavior when undefined and when defined but empty:
Empty means to use an empty prefix/suffix while undefined means to
use a hardcoded default for the platform we are running on.
Unfortunately, set(a ${b}) will undefine a when b is empty,
meaning that when targeting a platform where either of these variables
is empty (e.g. Windows where CMAKE_FIND_LIBRARY_PREFIXES is empty)
the unpatched FindZLIB code ends up unsetting that variable, causing
all subsequent find_library calls to use the hardcoded default
for the runtime platform (e.g. "lib" for CMAKE_FIND_LIBRARY_PREFIXES
on Linux).
On the other hand, set(a "${b}") will always define a to be empty but
defined so we have to do this dance to fully preserve the state of these
variables.
This commit is contained in:
committed by
Brad King
parent
6dd6f91117
commit
67b6f1a09b
@@ -92,8 +92,16 @@ endforeach()
|
||||
|
||||
# Allow ZLIB_LIBRARY to be set manually, as the location of the zlib library
|
||||
if(NOT ZLIB_LIBRARY)
|
||||
set(_zlib_ORIG_CMAKE_FIND_LIBRARY_PREFIXES ${CMAKE_FIND_LIBRARY_PREFIXES})
|
||||
set(_zlib_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES})
|
||||
if(DEFINED CMAKE_FIND_LIBRARY_PREFIXES)
|
||||
set(_zlib_ORIG_CMAKE_FIND_LIBRARY_PREFIXES "${CMAKE_FIND_LIBRARY_PREFIXES}")
|
||||
else()
|
||||
set(_zlib_ORIG_CMAKE_FIND_LIBRARY_PREFIXES)
|
||||
endif()
|
||||
if(DEFINED CMAKE_FIND_LIBRARY_SUFFIXES)
|
||||
set(_zlib_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES "${CMAKE_FIND_LIBRARY_SUFFIXES}")
|
||||
else()
|
||||
set(_zlib_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES)
|
||||
endif()
|
||||
# Prefix/suffix of the win32/Makefile.gcc build
|
||||
if(WIN32)
|
||||
list(APPEND CMAKE_FIND_LIBRARY_PREFIXES "" "lib")
|
||||
@@ -114,8 +122,16 @@ if(NOT ZLIB_LIBRARY)
|
||||
endforeach()
|
||||
|
||||
# Restore the original find library ordering
|
||||
set(CMAKE_FIND_LIBRARY_SUFFIXES ${_zlib_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES})
|
||||
set(CMAKE_FIND_LIBRARY_PREFIXES ${_zlib_ORIG_CMAKE_FIND_LIBRARY_PREFIXES})
|
||||
if(DEFINED _zlib_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES)
|
||||
set(CMAKE_FIND_LIBRARY_SUFFIXES "${_zlib_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES}")
|
||||
else()
|
||||
set(CMAKE_FIND_LIBRARY_SUFFIXES)
|
||||
endif()
|
||||
if(DEFINED _zlib_ORIG_CMAKE_FIND_LIBRARY_PREFIXES)
|
||||
set(CMAKE_FIND_LIBRARY_PREFIXES "${_zlib_ORIG_CMAKE_FIND_LIBRARY_PREFIXES}")
|
||||
else()
|
||||
set(CMAKE_FIND_LIBRARY_PREFIXES)
|
||||
endif()
|
||||
|
||||
include(${CMAKE_CURRENT_LIST_DIR}/SelectLibraryConfigurations.cmake)
|
||||
select_library_configurations(ZLIB)
|
||||
|
||||
Reference in New Issue
Block a user