blob: 178d99565f044e6b8efd5ceeff75ddd2f41ca6c8 [file] [log] [blame]
Petr Hosek5b6a1f52022-09-30 20:33:13 +00001# Try to find the zstd library
2#
3# If successful, the following variables will be defined:
4# zstd_INCLUDE_DIR
5# zstd_LIBRARY
Michał Górny4040b3d2022-10-07 18:42:27 +02006# zstd_STATIC_LIBRARY
Petr Hosek5b6a1f52022-09-30 20:33:13 +00007# zstd_FOUND
8#
9# Additionally, one of the following import targets will be defined:
10# zstd::libzstd_shared
11# zstd::libzstd_static
12
13if(MSVC)
Petr Hosek5b6a1f52022-09-30 20:33:13 +000014 set(zstd_STATIC_LIBRARY_SUFFIX "_static\\${CMAKE_STATIC_LIBRARY_SUFFIX}$")
15else()
Petr Hosek5b6a1f52022-09-30 20:33:13 +000016 set(zstd_STATIC_LIBRARY_SUFFIX "\\${CMAKE_STATIC_LIBRARY_SUFFIX}$")
17endif()
18
19find_path(zstd_INCLUDE_DIR NAMES zstd.h)
20find_library(zstd_LIBRARY NAMES zstd zstd_static)
Michał Górny4040b3d2022-10-07 18:42:27 +020021find_library(zstd_STATIC_LIBRARY NAMES
22 zstd_static
23 "${CMAKE_STATIC_LIBRARY_PREFIX}zstd${CMAKE_STATIC_LIBRARY_SUFFIX}")
Petr Hosek5b6a1f52022-09-30 20:33:13 +000024
25include(FindPackageHandleStandardArgs)
26find_package_handle_standard_args(
27 zstd DEFAULT_MSG
28 zstd_LIBRARY zstd_INCLUDE_DIR
29)
30
31if(zstd_FOUND)
Michał Górny316dfe82022-11-19 20:54:54 +010032 if(zstd_LIBRARY MATCHES "${zstd_STATIC_LIBRARY_SUFFIX}$")
33 set(zstd_STATIC_LIBRARY "${zstd_LIBRARY}")
34 elseif (NOT TARGET zstd::libzstd_shared)
Petr Hosek5b6a1f52022-09-30 20:33:13 +000035 add_library(zstd::libzstd_shared SHARED IMPORTED)
Andrew Ngfdaa5ba2022-10-14 16:06:34 +010036 if(MSVC)
37 # IMPORTED_LOCATION is the path to the DLL and IMPORTED_IMPLIB is the "library".
38 get_filename_component(zstd_DIRNAME "${zstd_LIBRARY}" DIRECTORY)
39 string(REGEX REPLACE "${CMAKE_INSTALL_LIBDIR}$" "${CMAKE_INSTALL_BINDIR}" zstd_DIRNAME "${zstd_DIRNAME}")
40 get_filename_component(zstd_BASENAME "${zstd_LIBRARY}" NAME)
41 string(REGEX REPLACE "\\${CMAKE_LINK_LIBRARY_SUFFIX}$" "${CMAKE_SHARED_LIBRARY_SUFFIX}" zstd_BASENAME "${zstd_BASENAME}")
42 set_target_properties(zstd::libzstd_shared PROPERTIES
43 INTERFACE_INCLUDE_DIRECTORIES "${zstd_INCLUDE_DIR}"
44 IMPORTED_LOCATION "${zstd_DIRNAME}/${zstd_BASENAME}"
45 IMPORTED_IMPLIB "${zstd_LIBRARY}")
46 unset(zstd_DIRNAME)
47 unset(zstd_BASENAME)
48 else()
49 set_target_properties(zstd::libzstd_shared PROPERTIES
Petr Hosek5b6a1f52022-09-30 20:33:13 +000050 INTERFACE_INCLUDE_DIRECTORIES "${zstd_INCLUDE_DIR}"
51 IMPORTED_LOCATION "${zstd_LIBRARY}")
Andrew Ngfdaa5ba2022-10-14 16:06:34 +010052 endif()
Petr Hosek5b6a1f52022-09-30 20:33:13 +000053 endif()
Michał Górny4040b3d2022-10-07 18:42:27 +020054 if(zstd_STATIC_LIBRARY MATCHES "${zstd_STATIC_LIBRARY_SUFFIX}$" AND
Petr Hosek5b6a1f52022-09-30 20:33:13 +000055 NOT TARGET zstd::libzstd_static)
56 add_library(zstd::libzstd_static STATIC IMPORTED)
57 set_target_properties(zstd::libzstd_static PROPERTIES
58 INTERFACE_INCLUDE_DIRECTORIES "${zstd_INCLUDE_DIR}"
Michał Górny4040b3d2022-10-07 18:42:27 +020059 IMPORTED_LOCATION "${zstd_STATIC_LIBRARY}")
Petr Hosek5b6a1f52022-09-30 20:33:13 +000060 endif()
61endif()
62
Petr Hosek5b6a1f52022-09-30 20:33:13 +000063unset(zstd_STATIC_LIBRARY_SUFFIX)
64
Michał Górny4040b3d2022-10-07 18:42:27 +020065mark_as_advanced(zstd_INCLUDE_DIR zstd_LIBRARY zstd_STATIC_LIBRARY)