lz4: Move towards a newer LZ4 API
PATCH 1/1 lz4: Move towards a newer LZ4 API
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.
To ensure we still build without issues against older LZ4 libraries without this new API, a simple wrapper function have been added and will only be enabled if we don't have the proper LZ4 versions, which means versions older than v1.7.0.
This compat API wrapper is currently located in comp-lz4.c, simply because adding it to compat-lz4.h would mean adding logic to lz4-rebaser.sh to preserve this wrapper; lz4-rebaser.sh will overwrite compat-lz4.[ch]. I didn't see any other files where it would make reasonable sense to add it. And it seemed overkill to add a completely new file to support a single file which would basically carry 8 lines of code for a function only used comp-lz4.c. In addition, adding new files means Makefile.am files needs to be updated accordingly and the new header file would be required to be included in comp-lz4.c. So, placing it in comp-lz4.c seemed to be the best fit, and it is closely tied to where it is used so it won't be that easy to just ignore it later on.
This patch is a result of the discussions in this mail thread:
https://www.mail-archive.com/[email protected]/msg14135.html
--- src/openvpn/comp-lz4.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-)
src/openvpn/comp-lz4.c +12 -1
@@ -43,6 +43,17 @@#include "memdbg.h" + +#if defined(LZ4_VERSION_NUMBER ) &&LZ4_VERSION_NUMBER <10700 +/* Wrapper to re-enable the old API if LZ4 is older than v1.7.0 */ +static int +LZ4_compress_default (const char * source,char * dest,int inputSize,int maxOutputSize) +{ +return LZ4_compress_limitedOutput (source, dest, inputSize, maxOutputSize); +} +#endif + +static void lz4_compress_init (struct compress_context *compctx) {
@@ -86,7 +97,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 ) {
Signature · 1 line
2.13.5
HI,
Quoted 4 lines · David Sommerseth
We are using a deprecated function,
LZ4_compress_limitedOutput(), which will be removed with time. The correct function to use isLZ4_compress_default(). Both function takes the same number of arguments and data types, so the change is minimal.
I wonder why we should bother to have a wrapper function here.
We can ship a lz4 library that has the new function, and if a system only provides an older version, declare it unsuitable (configure check) and use the bundled one.
Less #ifdef
gert
Signature · 4 lines
USENET is *not* the non-clickable part of WWW!
//www.muc.de/~gert/
Gert Doering - Munich, Germany [email protected]...
fax: +49-89-35655025 [email protected]...On 07/09/17 08:13, Gert Doering wrote:> HI,
Quoted 7 lines · David Sommerseth
Quoted 4 lines
We are using a deprecated function,
LZ4_compress_limitedOutput(), which will be removed with time. The correct function to use isLZ4_compress_default(). Both function takes the same number of arguments and data types, so the change is minimal.
Quoted 5 lines
I wonder why we should bother to have a wrapper function here.
We can ship a lz4 library that has the new function, and if a system only provides an older version, declare it unsuitable (configure check) and use the bundled one.
Yeah, I was thinking along those lines too when working on this patch. I just remembered vaguely our IRC chat long time a go and looked back at the initial mail discussion, and there was a preference for the wrapping back then.
But I like much more that we have a defined LZ4 version which we support, and ditch the #ifdef'ed wrapper. I'll send a v2 soon.
Signature · 4 lines
kind regards, David Sommerseth OpenVPN Technologies, Inc
PATCH v2 1/1 lz4: Move towards a newer LZ4 API
In reply to David SommersethWe 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/[email protected]/msg14135.html
---
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(-)
configure.ac +51 -21
@@ -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
src/openvpn/comp-lz4.c +2 -1
@@ -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 ) {
Signature · 1 line
2.13.5
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
Quoted 157 lines
We are using a deprecated function,
LZ4_compress_limitedOutput(), which will be removed with time. The correct function to use isLZ4_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/[email protected]/msg14135.htmlSigned-off-by David Sommerseth <[email protected]...>---
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(-)configure.ac +51
-21@@ -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
src/openvpn/comp-lz4.c +2
-1@@ -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
Quoted 8 lines
------------------------------------------------------------------------------
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 [email protected]
https://lists.sourceforge.net/lists/listinfo/openvpn-devel
src/openvpn/comp-lz4.h +4 -0
@@ -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;
src/openvpn/options.c +7 -1
@@ -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
Quoted 6 lines · Simon Matter
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.
Thanks a lot! I think this makes sense. But I think we can do this stuff as a separate patch, not part of this round of patches. Lets target this after we have sorted out the current LZ4 patches have been applied. Then it is much easier to test and validate this approach.
Signature · 4 lines
kind regards, David Sommerseth OpenVPN Technologies, Inc
Hi,
Quoted 4 lines · Simon Matter
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.
[..]
src/openvpn/comp-lz4.h line 35
Quoted 12 lines
diff -Naur
openvpn-2.4.0.orig/src/openvpn/comp-lz4.hopenvpn-2.4.0/src/openvpn/comp-lz4.hsrc/openvpn/comp-lz4.h +4
-0@@ -28,6 +28,10 @@#if defined(ENABLE_LZ4 ) +#if defined(HAVE_LZ4_H ) +#include "lz4.h" +#endif +#include "buffer.h"
Feature-ACK (I think this is a useful idea, for the same reasons we have LZO and OpenSSL versions :-) ), but that will not work if we use compat-lz4.h, so "code NAK".
comp-lz4.c currently has
#if defined(NEED_COMPAT_LZ4)
#include "compat-lz4.h"
#else
#include "lz4.h"
#endif
which might just be moved to comp-lz4.h, and then things should work.
Quoted 11 lines
src/openvpn/comp-lz4.h +0
-0extern const struct compress_alg lz4_alg;diff -Naur
openvpn-2.4.0.orig/src/openvpn/options.copenvpn-2.4.0/src/openvpn/options.csrc/openvpn/options.c +3
-0@@ -4121,11 +4121,17 @@#else #define LZO_LIB_VER_STR "", ""#endif +#ifdef ENABLE_LZ4 +#define LZ4_LIB_VER_STR ", LZ4 ", LZ4_versionString() +#else
src/openvpn/options.c line 4135
Quoted 10 lines
src/openvpn/options.c +4
-1+#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 }
That part looks good.
gert
Signature · 4 lines
USENET is *not* the non-clickable part of WWW!
//www.muc.de/~gert/
Gert Doering - Munich, Germany [email protected]...
fax: +49-89-35655025 [email protected]...Quoted 19 lines
Hi,
Quoted 4 lines · Simon Matter
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.
[..]
Quoted 10 lines
diff -Naur
openvpn-2.4.0.orig/src/openvpn/comp-lz4.hopenvpn-2.4.0/src/openvpn/comp-lz4.h
---openvpn-2.4.0.orig/src/openvpn/comp-lz4.h2016-12-26
12:51:00.000000000 +0100
+++openvpn-2.4.0/src/openvpn/comp-lz4.h2017-01-17 09:11:12.000000000
+0100src/openvpn/comp-lz4.h +0
-0@@ -28,6 +28,10 @@#if defined(ENABLE_LZ4 )
Quoted 9 lines
src/openvpn/comp-lz4.h line 35
Quoted 5 lines
src/openvpn/comp-lz4.h +4
-0+#if defined(HAVE_LZ4_H ) +#include "lz4.h" +#endif +#include "buffer.h" Feature-ACK (I think this is a useful idea, for the same reasons we have LZO and OpenSSL versions :-) ), but that will not work if we use
compat-lz4.h, so "code NAK".
IIRC at the time of writing this, the embedded lz4 was too old and didn't have the LZ4_versionString() function. So the code won't work with the patch. If the embedded code has LZ4_versionString() now, it should be ok.
Regards,
Simon
Quoted 52 lines
comp-lz4.ccurrently has#if
defined(NEED_COMPAT_LZ4)
#include "compat-lz4.h"
#else
#include "lz4.h"
#endifwhich might just be moved to
comp-lz4.h, and then things should work.Quoted 16 lines
src/openvpn/comp-lz4.h +0
-0extern const struct compress_alg lz4_alg;diff -Naur
openvpn-2.4.0.orig/src/openvpn/options.copenvpn-2.4.0/src/openvpn/options.c
---openvpn-2.4.0.orig/src/openvpn/options.c2016-12-26
12:51:00.000000000 +0100
+++openvpn-2.4.0/src/openvpn/options.c2017-01-17 09:11:12.000000000
+0100src/openvpn/options.c +5
-0@@ -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 src/openvpn/options.c line 4137
Quoted 10 lines
src/openvpn/options.c +2
-1-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 }That part looks good.
gert
--
USENET is *not* the non-clickable part of WWW!//www.muc.de/~gert/Gert Doering - Munich, Germany
[email protected]...
fax: +49-89-35655025
[email protected]...
Hi,
Quoted 7 lines · Simon Matter
Quoted 3 lines
Feature-ACK (I think this is a useful idea, for the same reasons we have LZO and OpenSSL versions :-) ), but that will not work if we use
compat-lz4.h, so "code NAK".IIRC at the time of writing this, the embedded lz4 was too old and didn't have the
LZ4_versionString()function. So the code won't work with the patch. If the embedded code hasLZ4_versionString()now, it should be ok.
Well, it will still lead to compile blowup if you try to include a non-existing "lz4.h" - no matter if the embedded version has LZ4_versionString() or not...
But indeed, we should upgrade bundled LZ4. We have a script for that, we just never used it. For whatever reason.
gert
Signature · 4 lines
USENET is *not* the non-clickable part of WWW!
//www.muc.de/~gert/
Gert Doering - Munich, Germany [email protected]...
fax: +49-89-35655025 [email protected]...Re: [Openvpn-devel] LZ4 library version printing
In reply to Simon MatterHi,
returning to this patchset about printing the LZ4 library version...
Quoted 3 lines · Simon Matter
Quoted 3 lines · Simon Matter
Quoted 2 lines
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 still like this :-)
[..]
Quoted 7 lines
Quoted 3 lines
Feature-ACK (I think this is a useful idea, for the same reasons we have LZO and OpenSSL versions :-) ), but that will not work if we use
compat-lz4.h, so "code NAK".IIRC at the time of writing this, the embedded lz4 was too old and didn't have the
LZ4_versionString()function. So the code won't work with the patch. If the embedded code hasLZ4_versionString()now, it should be ok.
It now has... (1.7.5).
I'm not sure where LZ4_versionString() got introduced, though - their git repo does not have tags for 1.7.1 or 1.7.2, it is in the 1.7.3 tag, but not in the "last of the old numbering scheme" version.
Our configure.ac requires 1.7.1 - so if LZ4_versionString() is not in there yet, we might want to bump to 1.7.3 then.
Can you revisit this?
gert
Signature · 4 lines
USENET is *not* the non-clickable part of WWW!
//www.muc.de/~gert/
Gert Doering - Munich, Germany [email protected]...
fax: +49-89-35655025 [email protected]...Re: [Openvpn-devel] LZ4 library version printing
Quoted 23 lines
Hi,
returning to this patchset about printing the LZ4 library version...
Quoted 3 lines · Simon Matter
Quoted 3 lines · Simon Matter
Quoted 2 lines
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 still like this :-)
[..]
Quoted 10 lines
Quoted 1 line
Feature-ACK (I think this is a useful idea, for the same reasons we
have
Quoted 2 lines
LZO and OpenSSL versions :-) ), but that will not work if we use
compat-lz4.h, so "code NAK".IIRC at the time of writing this, the embedded lz4 was too old and didn't
have theLZ4_versionString()function. So the code won't work with the patch. If the embedded code hasLZ4_versionString()now, it should be ok.
Quoted 8 lines
It now has... (1.7.5).
I'm not sure where
LZ4_versionString()got introduced, though - their git repo does not have tags for 1.7.1 or 1.7.2, it is in the 1.7.3 tag, but not in the "last of the old numbering scheme" version.Our configure.ac requires 1.7.1 - so if
LZ4_versionString()is not in there yet, we might want to bump to 1.7.3 then.
Hi Gert,
according to the NEWS file in lz4 there is no such thing as release 1.7.1 or 1.7.2, it goes from r131 -> v1.7.3. I therefore suggest to set the minimum version to 1.7.3 as I'm also unable to locate any official 1.7.1 or 1.7.2 release.
BTW, for 2.4.4 I've changed to patch to the one attached.
Regards,
Simon
src/openvpn/options.c renamed from src/openvpn/options.c.orig +11 -1
@@ -61,6 +61,10 @@#include "memdbg.h" +#if defined(ENABLE_LZ4 ) +#include "lz4.h" +#endif +const char title_string[] = PACKAGE_STRING#ifdef CONFIGURE_GIT_REVISION
@@ -4155,11 +4159,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
Re: [Openvpn-devel] LZ4 library version printing
Hi,
Quoted 6 lines · Simon Matter
Quoted 6 lines
It now has... (1.7.5).
I'm not sure where
LZ4_versionString()got introduced, though - their git repo does not have tags for 1.7.1 or 1.7.2, it is in the 1.7.3 tag, but not in the "last of the old numbering scheme" version.
Quoted 7 lines
Quoted 2 lines
Our configure.ac requires 1.7.1 - so if
LZ4_versionString()is not in there yet, we might want to bump to 1.7.3 then.according to the NEWS file in lz4 there is no such thing as release 1.7.1 or 1.7.2, it goes from r131 -> v1.7.3. I therefore suggest to set the minimum version to 1.7.3 as I'm also unable to locate any official 1.7.1 or 1.7.2 release.
Sounds like a reasonable plan.
Quoted 8 lines
BTW, for 2.4.4 I've changed to patch to the one attached.
Regards,
Simon
src/openvpn/options.c line 67
Quoted 7 lines
src/openvpn/options.c renamed from src/openvpn/options.c.orig +4
-0@@ -61,6 +61,10 @@#include "memdbg.h" +#if defined(ENABLE_LZ4 ) +#include "lz4.h" +#endif +
This will fail if we use the bundled LZ4, which has "compat-lz4.h" - so maybe we really should go back to including "comp-lz4.h" here, and move the lz4.h/compat-lz4.h including to that one.
("bundled LZ4" is what we can have right now, so we need to take that into account. If we want to drop it, that's an independent discussion)
gert
Signature · 4 lines
USENET is *not* the non-clickable part of WWW!
//www.muc.de/~gert/
Gert Doering - Munich, Germany [email protected]...
fax: +49-89-35655025 [email protected]...Hi,
On 08/09/17 01:20, David Sommerseth wrote:
[CUT]
Quoted 13 lines
src/openvpn/comp-lz4.c +1
-0@@ -43,6 +43,7 @@#include "memdbg.h" +static void lz4_compress_init (struct compress_context *compctx) {
src/openvpn/comp-lz4.c do_lz4_compress(struct buffer *buf, · line 90
Quoted 5 lines
src/openvpn/comp-lz4.c +1
-1@@ -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 );
while at it, could you remove the annoying space between the last argument and the closing parenthesis? (you or the committer)
Cheers,
Quoted 4 lines
src/openvpn/comp-lz4.c +0
-0if (zlen <=0 ) {
Signature · 1 line
Antonio Quartulli
Hi,
Quoted 13 lines · David Sommerseth
We are using a deprecated function,
LZ4_compress_limitedOutput(), which will be removed with time. The correct function to use isLZ4_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.
Quoted 8 lines
This patch is a result of the discussions in this mail thread:
https://www.mail-archive.com/[email protected]/msg14135.htmlSigned-off-by David Sommerseth <[email protected]...>---
v2 - Don't use LZ4 version based #ifdef wrapper function
Do the LZ4 version check in ./configure
This looks good to me.
I have tested on
- FreeBSD with lz4 installed, lz4.pc -> uses system lib
- FreeBSD with lz4 installed, no lz4.pc, lz4 stuff in LZ4_CFLAGS/LIBS
-> uses system lib
- FreeBSD with lz4 installed, but not in include path
-> uses compat-lz4.*
- Gentoo Linux with lz4 installed, lz4.pc
-> uses system lib
- Gentoo Linux with lz4 installed, no lz4.pc, but lz4 in /usr/{include,lib}/
-> uses system lib- Gentoo Linux with no lz4 installed -> uses compat-lz4.*
In all cases, the system builds and produces a working openvpn binary.
The messages in case "2" and "5" are slightly weird, though...
(2)
checking lz4.h usability... yes
checking lz4.h presence... no
configure: WARNING: lz4.h: accepted by the compiler, rejected by the preprocessor!
configure: WARNING: lz4.h: proceeding with the compiler's result checking for lz4.h... yes
checking additionally if system LZ4 version >= 1.7.1... ok
(5)
checking for LZ4... no
checking lz4.h usability... yes
checking lz4.h presence... yes
checking for lz4.h... yes
checking additionally if system LZ4 version >= 1.7.1... ok checking for LZ4_compress in -llz4... yes
(but this is configure...)
There's an extra added blank line in comp-lz4.c and the bracket whitespace Antonio complained about - but those can be fixed on commit.
So, ACK. Thanks for wading through this.
gert
Signature · 4 lines
USENET is *not* the non-clickable part of WWW!
//www.muc.de/~gert/
Gert Doering - Munich, Germany [email protected]...
fax: +49-89-35655025 [email protected]...-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA512
Your patch has been applied to the following branches
commit 5f6225c32e41a922069964d9d59c2fcd6589f74c (master) commit 38da61f3cc2f06ff7d3d174576dc5c6e87d6d174 (release/2.4)
Author: David Sommerseth Date: Thu Sep 7 19:20:04 2017 +0200
lz4: Move towards a newer LZ4 API
Acked-by: Gert Doering
Message-Id: <[email protected]...>
URL: https://www.mail-archive.com/[email protected]/msg15396.html
Signed-off-by: David Sommerseth
- --
kind regards,
David Sommerseth
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.22 (GNU/Linux)
iQIcBAEBCgAGBQJZxYZaAAoJEIbPlEyWcf3ycWIQAJoQwzFc5Ic84aweeZxvUo6S Npaotm9raci/sLyhbEOIC4Evj0KdSD+B/8fiGeaX1vnNXz3lfZwAx4TKtfibwpOA /6EID82wqcwf4Bq0a979AgukZJQPcgQPMUA1JQZXJJn7tm3igP98GAJCRpQ1+eEK +rox3/7jOP0uixyLQ9dSzdv4yA6SeptDnvIKjhtoV0cJyGgcvpsowxoXHnBvpgLR 0Ix7o7WWe/YPnH4elUVV+LP4sCnpFHmbWKmnvF8Mzsp6F1ocDIR8NYrqEUpuZsoz PZknfRtde2G+0oeEGs38qotbVQFb4HigJwi8uL96qGRbkPerN7cr4mgNj9s/2vey DN21Rvrofa1WfqKUbVf3M0VGOtIO0oq+GSWex6Wf6aAZJ0WRYB6LkTFINZ9g7ENp xzkwaMLuEFpvyRgr+/rxaxpamZ6FEJWChn69gj3LhgbWWPMqMssZkisP+h7Y/MUe ZgvD8qZozPgjKo/zqazbAhOjvu5C/ouuGXis4j89dHWrO+3slFrtjXJCnkWktvi2 p7CPmENZvpLRno1FgsKlYcXuPeTJO2R18+uPr6fon2WYOsrGgZs1hzhfDoZIZbfk mRVWbQ698t/SEvmjD7VWQUzecaVVknBuBpu9F5mImnV0HcGdAxZS2x9bD+9YMNOH GMNlxvXx+rD+B1/PksYz
=ZBhF
-----END PGP SIGNATURE-----