[Openvpn-devel] Add LZ4 prerequisite building.

Message ID 20210322084331.94770-1-gert@greenie.muc.de
State Accepted
Headers show
Series [Openvpn-devel] Add LZ4 prerequisite building. | expand

Commit Message

Gert Doering March 21, 2021, 9:43 p.m. UTC
commit 24596b258aa3a removed the bundled compat-lz4 from OpenVPN, thus
breaking windows/nsis builds with default config ("--enable-lz4").

Add download URLs and build invocation.  Since LZ4 has no "configure"
script, we pass the appropriate CC=/LD=/WINDRES= statement to "make".

Only static library is installed, since static linking is easier here
than to extend NSIS to bundle lz4.dll (+ whatever else is needed).

Tested with and without depcache.

32 and 64 bit binaries have been built, though only 64 bit binary was
tested (on Win10).

Signed-off-by: Gert Doering <gert@greenie.muc.de>
---
 generic/build      | 33 ++++++++++++++++++++++++++++++++-
 generic/build.vars |  2 ++
 2 files changed, 34 insertions(+), 1 deletion(-)

Comments

Gert Doering March 31, 2021, 8:38 p.m. UTC | #1
Hi,

On Mon, Mar 22, 2021 at 09:43:31AM +0100, Gert Doering wrote:
> commit 24596b258aa3a removed the bundled compat-lz4 from OpenVPN, thus
> breaking windows/nsis builds with default config ("--enable-lz4").
> 
> Add download URLs and build invocation.  Since LZ4 has no "configure"
> script, we pass the appropriate CC=/LD=/WINDRES= statement to "make".
> 
> Only static library is installed, since static linking is easier here
> than to extend NSIS to bundle lz4.dll (+ whatever else is needed).

Just for the record.  Samuli has turned this into a PR for openvpn-build,
  https://github.com/OpenVPN/openvpn-build/pull/210 
which got tested & ACKed by Lev and just merged by me.

So closing this on patchwork as "Accepted".

gert

Patch

diff --git a/generic/build b/generic/build
index cf2c7c6..fb12d62 100755
--- a/generic/build
+++ b/generic/build
@@ -61,6 +61,10 @@  download1() {
 	local url="$1"
 	local prefix="$(basename "${url}" | sed 's/-[0-9].*//g')"
 
+	# LZ4 download is just "v1.9.3.tar.gz", so check for exact file exist
+	if [ -f "${SOURCESROOT}/${prefix}" ] ; then
+		return
+	fi
 	if ! [ -n "$(ls "${SOURCESROOT}/${prefix}-"[0-9]* 2> /dev/null)" ]; then
 		geturl ${url} || die "Cannot download ${url}"
 	fi
@@ -69,6 +73,7 @@  download1() {
 download() {
 	for url in \
 		${LZO_URL} \
+		${LZ4_URL} \
 		${OPENSSL_URL} \
 		${PKCS11_HELPER_URL} \
 		${TAP_WINDOWS_URL} \
@@ -78,7 +83,7 @@  download() {
 		download1 "${url}"
 	done
 
-	if [ "$(ls "${SOURCESROOT}" | wc -l | sed 's/[ \t]//g')" != 6 ]; then
+	if [ "$(ls "${SOURCESROOT}" | wc -l | sed 's/[ \t]//g')" != 7 ]; then
 		die "sources is unclean."
 	fi
 }
@@ -226,6 +231,30 @@  build_dep() {
 		[ -n "${SAVE_DEP_CACHE}" ] && depcache_save lzo
 	fi
 
+	if [ -n "${USE_DEP_CACHE}" ]; then
+		depcache_extract lz4
+	else
+		echo "Build lz4"
+		cd "${BUILDROOT}/lz4"* || die "cd lz4"
+		echo ./configure ${CONFIGOPTS} ${EXTRA_LZ4_CONFIG} \
+			$(empty_ifelse "${DO_STATIC}" --enable-shared --disable-shared) \
+			|| die "Configure lz4"
+		# lz4 does not have a configure, so pass CC/LD instead
+		# ... and we only want the static library
+		${MAKE} ${MAKEOPTS} CC=${CHOST}-gcc LD=${CHOST}-gcc \
+			WINDRES=${CHOST}-windres TARGET_OS=MINGW32 \
+			BUILD_STATIC=yes BUILD_SHARED=no \
+			PREFIX=/ DESTDIR="${INSTALL_ROOT}" V=1 \
+			|| die "make lz4"
+		${MAKE} ${MAKEOPTS} CC=${CHOST}-gcc LD=${CHOST}-gcc \
+			WINDRES=${CHOST}-windres TARGET_OS=MINGW32 \
+			BUILD_STATIC=yes BUILD_SHARED=no \
+			PREFIX=/ DESTDIR="${INSTALL_ROOT}" V=1 install \
+			|| die "make lz4"
+
+		[ -n "${SAVE_DEP_CACHE}" ] && depcache_save lz4
+	fi
+
 	if [ -z "${DO_STATIC}" ]; then
 	  if [ -n "${USE_DEP_CACHE}" ]; then
 		depcache_extract pkcs11-helper
@@ -387,6 +416,8 @@  export OPENSSL_CFLAGS="-I${OPENVPN_ROOT}/include"
 export OPENSSL_LIBS="-L${OPENVPN_ROOT}/lib -lssl -lcrypto"
 export LZO_CFLAGS="-I${OPENVPN_ROOT}/include"
 export LZO_LIBS="-L${OPENVPN_ROOT}/lib -llzo2"
+export LZ4_CFLAGS="-I${OPENVPN_ROOT}/include"
+export LZ4_LIBS="-L${OPENVPN_ROOT}/lib -llz4"
 export PKCS11_HELPER_CFLAGS="-I${OPENVPN_ROOT}/include"
 export PKCS11_HELPER_LIBS="-L${OPENVPN_ROOT}/lib -lpkcs11-helper"
 export TAP_CFLAGS="-I${OPENVPN_ROOT}/include"
diff --git a/generic/build.vars b/generic/build.vars
index 28f2075..e10b3b4 100644
--- a/generic/build.vars
+++ b/generic/build.vars
@@ -4,6 +4,7 @@  BUILD_VERSION="001"
 OPENSSL_VERSION="${OPENSSL_VERSION:-1.1.1f}"
 PKCS11_HELPER_VERSION="${PKCS11_HELPER_VERSION:-1.22}"
 LZO_VERSION="${LZO_VERSION:-2.10}"
+LZ4_VERSION="${LZ4_VERSION:-1.9.3}"
 TAP_WINDOWS_VERSION="${TAP_WINDOWS_VERSION:-9.24.2}"
 OPENVPN_VERSION="${OPENVPN_VERSION:-2.4.9}"
 OPENVPN_GUI_VERSION="${OPENVPN_GUI_VERSION:-11}"
@@ -12,6 +13,7 @@  OPENSSL_URL="${OPENSSL_URL:-https://www.openssl.org/source/openssl-${OPENSSL_VER
 PKCS11_HELPER_URL="${PKCS11_HELPER_URL:-https://github.com/OpenSC/pkcs11-helper/releases/download/pkcs11-helper-${PKCS11_HELPER_VERSION}/pkcs11-helper-${PKCS11_HELPER_VERSION}.tar.bz2}"
 TAP_WINDOWS_URL="${TAP_WINDOWS_URL:-http://build.openvpn.net/downloads/releases/tap-windows-${TAP_WINDOWS_VERSION}.zip}"
 LZO_URL="${LZO_URL:-http://www.oberhumer.com/opensource/lzo/download/lzo-${LZO_VERSION}.tar.gz}"
+LZ4_URL="${LZ4_URL:-https://github.com/lz4/lz4/archive/refs/tags/v${LZ4_VERSION}.tar.gz}"
 OPENVPN_URL="${OPENVPN_URL:-http://build.openvpn.net/downloads/snapshots/openvpn-${OPENVPN_VERSION}.tar.gz}"
 OPENVPN_GUI_URL="${OPENVPN_GUI_URL:-http://build.openvpn.net/downloads/releases/openvpn-gui-${OPENVPN_GUI_VERSION}.tar.gz}"