OpenTTD-patches/cmake/FindZSTD.cmake
dP b284d34277 Add: Support Zstandard(zstd) savegame compression
(cherry picked from commit 6f0aeaf2c5436550c93205e704624957e9abc969)
2021-03-01 18:08:28 +00:00

90 lines
2.4 KiB
CMake

#[=======================================================================[.rst:
FindZSTD
-------
Finds the ZSTD library.
Result Variables
^^^^^^^^^^^^^^^^
This will define the following variables:
``ZSTD_FOUND``
True if the system has the ZSTD library.
``ZSTD_INCLUDE_DIRS``
Include directories needed to use ZSTD.
``ZSTD_LIBRARIES``
Libraries needed to link to ZSTD.
``ZSTD_VERSION``
The version of the ZSTD library which was found.
Cache Variables
^^^^^^^^^^^^^^^
The following cache variables may also be set:
``ZSTD_INCLUDE_DIR``
The directory containing ``zstd.h``.
``ZSTD_LIBRARY``
The path to the ZSTD library.
#]=======================================================================]
find_package(PkgConfig QUIET)
pkg_check_modules(PC_ZSTD QUIET libzstd)
find_path(ZSTD_INCLUDE_DIR
NAMES zstd.h
PATHS ${PC_ZSTD_INCLUDE_DIRS}
)
find_library(ZSTD_LIBRARY
NAMES zstd
PATHS ${PC_ZSTD_LIBRARY_DIRS}
)
# With vcpkg, the library path should contain both 'debug' and 'optimized'
# entries (see target_link_libraries() documentation for more information)
#
# NOTE: we only patch up when using vcpkg; the same issue might happen
# when not using vcpkg, but this is non-trivial to fix, as we have no idea
# what the paths are. With vcpkg we do. And we only official support vcpkg
# with Windows.
#
# NOTE: this is based on the assumption that the debug file has the same
# name as the optimized file. This is not always the case, but so far
# experiences has shown that in those case vcpkg CMake files do the right
# thing.
if(VCPKG_TOOLCHAIN AND ZSTD_LIBRARY)
if(ZSTD_LIBRARY MATCHES "/debug/")
set(ZSTD_LIBRARY_DEBUG ${ZSTD_LIBRARY})
string(REPLACE "/debug/lib/" "/lib/" ZSTD_LIBRARY_RELEASE ${ZSTD_LIBRARY})
else()
set(ZSTD_LIBRARY_RELEASE ${ZSTD_LIBRARY})
string(REPLACE "/lib/" "/debug/lib/" ZSTD_LIBRARY_DEBUG ${ZSTD_LIBRARY})
endif()
include(SelectLibraryConfigurations)
select_library_configurations(ZSTD)
endif()
set(ZSTD_VERSION ${PC_ZSTD_VERSION})
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(ZSTD
FOUND_VAR ZSTD_FOUND
REQUIRED_VARS
ZSTD_LIBRARY
ZSTD_INCLUDE_DIR
VERSION_VAR ZSTD_VERSION
)
if(ZSTD_FOUND)
set(ZSTD_LIBRARIES ${ZSTD_LIBRARY})
set(ZSTD_INCLUDE_DIRS ${ZSTD_INCLUDE_DIR})
endif()
mark_as_advanced(
ZSTD_INCLUDE_DIR
ZSTD_LIBRARY
)