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