diff --git a/cmake/zstd.cmake b/cmake/zstd.cmake index bcde156e09d..f0611a98c46 100644 --- a/cmake/zstd.cmake +++ b/cmake/zstd.cmake @@ -23,6 +23,27 @@ # cmake -DWITH_ZSTD=system|bundled # bundled is the default +# zstd 1.0.0 is required for: ZSTD_CStream, ZSTD_DStream, ZSTD_createCStream, ZSTD_createDStream, ZSTD_inBuffer, ZSTD_outBuffer +SET(LIBZSTD_VERSION_REQUIRED "1.0.0") + +MACRO (CHECK_ZSTD_VERSION) + SET(PATH_TO_ZSTD_H "${ARGV0}/zstd.h") + IF (NOT EXISTS ${PATH_TO_ZSTD_H}) + MESSAGE(FATAL_ERROR "File ${PATH_TO_ZSTD_H} not found") + ENDIF() + FILE(STRINGS "${PATH_TO_ZSTD_H}" LIBZSTD_HEADER_CONTENT REGEX "#define ZSTD_VERSION_[A-Z]+ +[0-9]+") + STRING(REGEX REPLACE ".*#define ZSTD_VERSION_MAJOR +([0-9]+).*" "\\1" LIBZSTD_VERSION_MAJOR "${LIBZSTD_HEADER_CONTENT}") + STRING(REGEX REPLACE ".*#define ZSTD_VERSION_MINOR +([0-9]+).*" "\\1" LIBZSTD_VERSION_MINOR "${LIBZSTD_HEADER_CONTENT}") + STRING(REGEX REPLACE ".*#define ZSTD_VERSION_RELEASE +([0-9]+).*" "\\1" LIBZSTD_VERSION_RELEASE "${LIBZSTD_HEADER_CONTENT}") + SET(LIBZSTD_VERSION_STRING "${LIBZSTD_VERSION_MAJOR}.${LIBZSTD_VERSION_MINOR}.${LIBZSTD_VERSION_RELEASE}") + UNSET(LIBZSTD_HEADER_CONTENT) + IF (${LIBZSTD_VERSION_STRING} VERSION_LESS ${LIBZSTD_VERSION_REQUIRED}) + MESSAGE(FATAL_ERROR "Required libzstd ${LIBZSTD_VERSION_REQUIRED} and installed version is ${LIBZSTD_VERSION_STRING}") + ELSE() + MESSAGE(STATUS "Found libzstd version ${LIBZSTD_VERSION_STRING}") + ENDIF() +ENDMACRO() + MACRO (FIND_SYSTEM_ZSTD) FIND_PATH(PATH_TO_ZSTD NAMES zstd.h @@ -31,14 +52,16 @@ MACRO (FIND_SYSTEM_ZSTD) NAMES zstd PATH_SUFFIXES lib) IF (PATH_TO_ZSTD AND ZSTD_SYSTEM_LIBRARY) + CHECK_ZSTD_VERSION(${PATH_TO_ZSTD}) SET(SYSTEM_ZSTD_FOUND 1) SET(ZSTD_LIBRARY ${ZSTD_SYSTEM_LIBRARY}) - MESSAGE(STATUS "ZSTD_LIBRARY ${ZSTD_LIBRARY}") + MESSAGE(STATUS "ZSTD_LIBRARY(system) ${ZSTD_LIBRARY}") ENDIF() ENDMACRO() MACRO (MYSQL_USE_BUNDLED_ZSTD) SET(WITH_ZSTD "bundled" CACHE STRING "By default use bundled zstd library") + CHECK_ZSTD_VERSION(${PATH_TO_ZSTD}) SET(BUILD_BUNDLED_ZSTD 1) SET(ZSTD_LIBRARY zstd CACHE INTERNAL "Bundled zlib library") MESSAGE(STATUS "ZSTD_LIBRARY(Bundled) " ${ZSTD_LIBRARY})