• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Try to find the zstd library
2#
3# If successful, the following variables will be defined:
4# zstd_INCLUDE_DIR
5# zstd_LIBRARY
6# zstd_STATIC_LIBRARY
7# 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)
14  set(zstd_STATIC_LIBRARY_SUFFIX "_static\\${CMAKE_STATIC_LIBRARY_SUFFIX}$")
15else()
16  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)
21find_library(zstd_STATIC_LIBRARY NAMES
22  zstd_static
23  "${CMAKE_STATIC_LIBRARY_PREFIX}zstd${CMAKE_STATIC_LIBRARY_SUFFIX}")
24
25include(FindPackageHandleStandardArgs)
26find_package_handle_standard_args(
27    zstd DEFAULT_MSG
28    zstd_LIBRARY zstd_INCLUDE_DIR
29)
30
31if(zstd_FOUND)
32  if(zstd_LIBRARY MATCHES "${zstd_STATIC_LIBRARY_SUFFIX}$")
33    set(zstd_STATIC_LIBRARY "${zstd_LIBRARY}")
34  elseif (NOT TARGET zstd::libzstd_shared)
35    add_library(zstd::libzstd_shared SHARED IMPORTED)
36    if(MSVC)
37      include(GNUInstallDirs) # For CMAKE_INSTALL_LIBDIR and friends.
38      # IMPORTED_LOCATION is the path to the DLL and IMPORTED_IMPLIB is the "library".
39      get_filename_component(zstd_DIRNAME "${zstd_LIBRARY}" DIRECTORY)
40      if(NOT "${CMAKE_INSTALL_LIBDIR}" STREQUAL "" AND NOT "${CMAKE_INSTALL_BINDIR}" STREQUAL "")
41        string(REGEX REPLACE "${CMAKE_INSTALL_LIBDIR}$" "${CMAKE_INSTALL_BINDIR}" zstd_DIRNAME "${zstd_DIRNAME}")
42      endif()
43      get_filename_component(zstd_BASENAME "${zstd_LIBRARY}" NAME)
44      string(REGEX REPLACE "\\${CMAKE_LINK_LIBRARY_SUFFIX}$" "${CMAKE_SHARED_LIBRARY_SUFFIX}" zstd_BASENAME "${zstd_BASENAME}")
45      set_target_properties(zstd::libzstd_shared PROPERTIES
46          INTERFACE_INCLUDE_DIRECTORIES "${zstd_INCLUDE_DIR}"
47          IMPORTED_LOCATION "${zstd_DIRNAME}/${zstd_BASENAME}"
48          IMPORTED_IMPLIB "${zstd_LIBRARY}")
49      unset(zstd_DIRNAME)
50      unset(zstd_BASENAME)
51    else()
52      set_target_properties(zstd::libzstd_shared PROPERTIES
53          INTERFACE_INCLUDE_DIRECTORIES "${zstd_INCLUDE_DIR}"
54          IMPORTED_LOCATION "${zstd_LIBRARY}")
55    endif()
56  endif()
57  if(zstd_STATIC_LIBRARY MATCHES "${zstd_STATIC_LIBRARY_SUFFIX}$" AND
58     NOT TARGET zstd::libzstd_static)
59    add_library(zstd::libzstd_static STATIC IMPORTED)
60    set_target_properties(zstd::libzstd_static PROPERTIES
61        INTERFACE_INCLUDE_DIRECTORIES "${zstd_INCLUDE_DIR}"
62        IMPORTED_LOCATION "${zstd_STATIC_LIBRARY}")
63  endif()
64endif()
65
66unset(zstd_STATIC_LIBRARY_SUFFIX)
67
68mark_as_advanced(zstd_INCLUDE_DIR zstd_LIBRARY zstd_STATIC_LIBRARY)
69