Hi,
While we are at it, I found it useful to see the used LZ4 version at
runtime as it is done with LZO and other libraries.
I've patched my rpms with the patch attached.
Regards,
Simon
> We are using a deprecated function, LZ4_compress_limitedOutput(), which
> will be removed with time. The correct function to use is
> LZ4_compress_default().
> Both function takes the same number of arguments and data types, so the
> change
> is minimal.
>
> This patch will also enforce the system LZ4 library to be at least v1.7.1.
> If
> the system library is not found or it is older, it will be build using the
> bundled
> LZ4 library. The version number requirement is based on the LZ4 version
> we ship.
>
> The changes in configure.ac for the version check is modelled around the
> same
> approach we use for OpenSSL. Plus it does a few minor reformats and
> improvements
> to comply with more recommend autoconf coding style.
>
> This patch is a result of the discussions in this mail thread:
> https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg14135.html
>
> Signed-off-by: David Sommerseth <dav...@openvpn.net>
>
> ---
> v2 - Don't use LZ4 version based #ifdef wrapper function
> Do the LZ4 version check in ./configure
> ---
> configure.ac | 72
> +++++++++++++++++++++++++++++++++++---------------
> src/openvpn/comp-lz4.c | 3 ++-
> 2 files changed, 53 insertions(+), 22 deletions(-)
>
> diff --git a/configure.ac b/configure.ac
> index 6f1044e8..74443353 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -1088,37 +1088,67 @@ dnl
> AC_ARG_VAR([LZ4_CFLAGS], [C compiler flags for lz4])
> AC_ARG_VAR([LZ4_LIBS], [linker flags for lz4])
> if test "$enable_lz4" = "yes" && test "$enable_comp_stub" = "no"; then
> - AC_CHECKING([for LZ4 Library and Header files])
> - havelz4lib=1
> -
> - # if LZ4_LIBS is set, we assume it will work, otherwise test
> - if test -z "${LZ4_LIBS}"; then
> - AC_CHECK_LIB(lz4, LZ4_compress,
> - [ LZ4_LIBS="-llz4" ],
> - [
> - AC_MSG_RESULT([LZ4 library not found.])
> - havelz4lib=0
> - ])
> + if test -z "${LZ4_CFLAGS}" -a -z "${LZ4_LIBS}"; then
> + # if the user did not explicitly specify flags, try to autodetect
> + PKG_CHECK_MODULES([LZ4],
> + [liblz4 >= 1.7.1],
> + [have_lz4="yes"],
> + [] # If this fails, we will do another test next
> + )
> fi
>
> saved_CFLAGS="${CFLAGS}"
> + saved_LIBS="${LIBS}"
> CFLAGS="${CFLAGS} ${LZ4_CFLAGS}"
> - AC_CHECK_HEADERS(lz4.h,
> - ,
> - [
> - AC_MSG_RESULT([LZ4 headers not found.])
> - havelz4lib=0
> - ])
> -
> - if test $havelz4lib = 0 ; then
> - AC_MSG_RESULT([LZ4 library or header not found, using version in
> src/compat/compat-lz4.*])
> + LIBS="${LIBS} ${LZ4_LIBS}"
> +
> + # If pkgconfig check failed or LZ4_CFLAGS/LZ4_LIBS env vars
> + # are used, check the version directly in the LZ4 include file
> + if test "${have_lz4}" != "yes"; then
> + AC_CHECK_HEADERS([lz4.h],
> + [have_lz4h="yes"],
> + [])
> +
> + if test "${have_lz4h}" = "yes" ; then
> + AC_MSG_CHECKING([additionally if system LZ4 version >= 1.7.1])
> + AC_COMPILE_IFELSE(
> + [AC_LANG_PROGRAM([[
> +#include <lz4.h>
> + ]],
> + [[
> +/* Version encoding: MMNNPP (Major miNor Patch) - see lz4.h for details
> */
> +#if LZ4_VERSION_NUMBER < 10701L
> +#error LZ4 is too old
> +#endif
> + ]]
> + )],
> + [
> + AC_MSG_RESULT([ok])
> + have_lz4="yes"
> + ],
> + [AC_MSG_RESULT([system LZ4 library is too old])]
> + )
> + fi
> + fi
> +
> + # if LZ4_LIBS is set, we assume it will work, otherwise test
> + if test -z "${LZ4_LIBS}"; then
> + AC_CHECK_LIB([lz4],
> + [LZ4_compress],
> + [LZ4_LIBS="-llz4"],
> + [have_lz4="no"])
> + fi
> +
> + if test "${have_lz4}" != "yes" ; then
> + AC_MSG_RESULT([ usuable LZ4 library or header not found, using
> version
> in src/compat/compat-lz4.*])
> AC_DEFINE([NEED_COMPAT_LZ4], [1], [use copy of LZ4 source in compat/])
> LZ4_LIBS=""
> fi
> OPTIONAL_LZ4_CFLAGS="${LZ4_CFLAGS}"
> OPTIONAL_LZ4_LIBS="${LZ4_LIBS}"
> - AC_DEFINE(ENABLE_LZ4, 1, [Enable LZ4 compression library])
> + AC_DEFINE(ENABLE_LZ4, [1], [Enable LZ4 compression library])
> CFLAGS="${saved_CFLAGS}"
> + LIBS="${saved_LIBS}"
> fi
>
>
> diff --git a/src/openvpn/comp-lz4.c b/src/openvpn/comp-lz4.c
> index e056caa8..bdb3247d 100644
> --- a/src/openvpn/comp-lz4.c
> +++ b/src/openvpn/comp-lz4.c
> @@ -43,6 +43,7 @@
>
> #include "memdbg.h"
>
> +
> static void
> lz4_compress_init(struct compress_context *compctx)
> {
> @@ -86,7 +87,7 @@ do_lz4_compress(struct buffer *buf,
> return false;
> }
>
> - zlen = LZ4_compress_limitedOutput((const char *)BPTR(buf), (char
> *)BPTR(work), BLEN(buf), zlen_max );
> + zlen = LZ4_compress_default((const char *)BPTR(buf), (char
> *)BPTR(work), BLEN(buf), zlen_max );
>
> if (zlen <= 0)
> {
> --
> 2.13.5
>
>
> ------------------------------------------------------------------------------
> Check out the vibrant tech community on one of the world's most
> engaging tech sites, Slashdot.org! http://sdm.link/slashdot
> _______________________________________________
> Openvpn-devel mailing list
> Openvpn-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/openvpn-devel
>
diff -Naur openvpn-2.4.0.orig/src/openvpn/comp-lz4.h openvpn-2.4.0/src/openvpn/comp-lz4.h
--- openvpn-2.4.0.orig/src/openvpn/comp-lz4.h 2016-12-26 12:51:00.000000000 +0100
+++ openvpn-2.4.0/src/openvpn/comp-lz4.h 2017-01-17 09:11:12.000000000 +0100
@@ -28,6 +28,10 @@
#if defined(ENABLE_LZ4)
+#if defined(HAVE_LZ4_H)
+#include "lz4.h"
+#endif
+
#include "buffer.h"
extern const struct compress_alg lz4_alg;
diff -Naur openvpn-2.4.0.orig/src/openvpn/options.c openvpn-2.4.0/src/openvpn/options.c
--- openvpn-2.4.0.orig/src/openvpn/options.c 2016-12-26 12:51:00.000000000 +0100
+++ openvpn-2.4.0/src/openvpn/options.c 2017-01-17 09:11:12.000000000 +0100
@@ -4121,11 +4121,17 @@
#else
#define LZO_LIB_VER_STR "", ""
#endif
+#ifdef ENABLE_LZ4
+#define LZ4_LIB_VER_STR ", LZ4 ", LZ4_versionString()
+#else
+#define LZ4_LIB_VER_STR "", ""
+#endif
- msg(flags, "library versions: %s%s%s", SSL_LIB_VER_STR, LZO_LIB_VER_STR);
+ msg(flags, "library versions: %s%s%s%s%s", SSL_LIB_VER_STR, LZO_LIB_VER_STR, LZ4_LIB_VER_STR);
#undef SSL_LIB_VER_STR
#undef LZO_LIB_VER_STR
+#undef LZ4_LIB_VER_STR
}
static void
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Openvpn-devel mailing list
Openvpn-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/openvpn-devel