From 73545c1fe6304f08ab306b76d2bcacaf22a5e99a Mon Sep 17 00:00:00 2001 From: Ross Burton Date: Tue, 24 May 2022 13:44:29 +0100 Subject: [PATCH] btrfs-progs: build: add option to disable LZO support for restore LZO as a compression format is pretty archaic these days, there are better algorithms in all metrics for compression and decompression, and lzo hasn't had a new release since 2017. Add an option to disable LZO (defaulting to enabled), and respect it in cmds/restore.c. NOTE: disabling support for LZO will make make it impossible to restore data from filesystems where the compression has ever been used. It's not recommended to build without the support in general. Signed-off-by: Ross Burton Signed-off-by: David Sterba --- Makefile | 2 +- Makefile.inc.in | 1 + cmds/restore.c | 7 +++++++ configure.ac | 30 ++++++++++++++++++++---------- 4 files changed, 29 insertions(+), 11 deletions(-) diff --git a/Makefile b/Makefile index 9b7c8d32..e162ebe0 100644 --- a/Makefile +++ b/Makefile @@ -335,7 +335,7 @@ endif btrfs_convert_cflags = -DBTRFSCONVERT_EXT2=$(BTRFSCONVERT_EXT2) btrfs_convert_cflags += -DBTRFSCONVERT_REISERFS=$(BTRFSCONVERT_REISERFS) btrfs_fragments_libs = -lgd -lpng -ljpeg -lfreetype -cmds_restore_cflags = -DBTRFSRESTORE_ZSTD=$(BTRFSRESTORE_ZSTD) +cmds_restore_cflags = -DBTRFSRESTORE_LZO=$(BTRFSRESTORE_LZO) -DBTRFSRESTORE_ZSTD=$(BTRFSRESTORE_ZSTD) ifeq ($(CRYPTOPROVIDER_BUILTIN),1) CRYPTO_OBJECTS = crypto/sha224-256.o crypto/blake2b-ref.o diff --git a/Makefile.inc.in b/Makefile.inc.in index c995aef9..385b7ae1 100644 --- a/Makefile.inc.in +++ b/Makefile.inc.in @@ -16,6 +16,7 @@ BUILD_PROGRAMS = @BUILD_PROGRAMS@ BUILD_SHARED_LIBRARIES = @BUILD_SHARED_LIBRARIES@ BUILD_STATIC_LIBRARIES = @BUILD_STATIC_LIBRARIES@ BTRFSCONVERT_EXT2 = @BTRFSCONVERT_EXT2@ +BTRFSRESTORE_LZO = @BTRFSRESTORE_LZO@ BTRFSCONVERT_REISERFS = @BTRFSCONVERT_REISERFS@ BTRFSRESTORE_ZSTD = @BTRFSRESTORE_ZSTD@ PYTHON_BINDINGS = @PYTHON_BINDINGS@ diff --git a/cmds/restore.c b/cmds/restore.c index 5923d571..f1bc8a46 100644 --- a/cmds/restore.c +++ b/cmds/restore.c @@ -25,8 +25,10 @@ #include #include #include +#if BTRFSRESTORE_LZO #include #include +#endif #include #if BTRFSRESTORE_ZSTD #include @@ -98,6 +100,10 @@ static inline size_t read_compress_length(unsigned char *buf) static int decompress_lzo(struct btrfs_root *root, unsigned char *inbuf, char *outbuf, u64 compress_len, u64 *decompress_len) { +#if !BTRFSRESTORE_LZO + error("btrfs-restore not compiled with lzo support"); + return -1; +#else size_t new_len; size_t in_len; size_t out_len = 0; @@ -156,6 +162,7 @@ static int decompress_lzo(struct btrfs_root *root, unsigned char *inbuf, *decompress_len = out_len; return 0; +#endif } static int decompress_zstd(const char *inbuf, char *outbuf, u64 compress_len, diff --git a/configure.ac b/configure.ac index d907636b..fa19015b 100644 --- a/configure.ac +++ b/configure.ac @@ -372,16 +372,26 @@ if ${PKG_CONFIG} udev --atleast-version 190; then fi AC_SUBST(UDEVDIR) -dnl lzo library does not provide pkg-config, let use classic way -AC_CHECK_LIB([lzo2], [lzo_version], [ - LZO2_LIBS="-llzo2" - LZO2_CFLAGS="" - LZO2_LIBS_STATIC="-llzo2"],[ - AC_MSG_ERROR([cannot find lzo2 library]) -]) -AC_SUBST([LZO2_LIBS]) -AC_SUBST([LZO2_LIBS_STATIC]) -AC_SUBST([LZO2_CFLAGS]) +AC_ARG_ENABLE([lzo], + AS_HELP_STRING([--disable-lzo], [build without lzo support (default: enabled)]), + [], [enable_lzo=yes] +) + +if test "x$enable_lzo" = xyes; then + dnl lzo library does not provide pkg-config, use classic way + AC_CHECK_LIB([lzo2], [lzo_version], [ + LZO2_LIBS="-llzo2" + LZO2_CFLAGS="" + LZO2_LIBS_STATIC="-llzo2"],[ + AC_MSG_ERROR([cannot find lzo2 library]) + ]) + AC_SUBST([LZO2_LIBS]) + AC_SUBST([LZO2_LIBS_STATIC]) + AC_SUBST([LZO2_CFLAGS]) +fi + +AS_IF([test "x$enable_lzo" = xyes], [BTRFSRESTORE_LZO=1], [BTRFSRESTORE_LZO=0]) +AC_SUBST(BTRFSRESTORE_LZO) dnl call PKG_INSTALLDIR from pkg.m4 to set pkgconfigdir m4_ifdef([PKG_INSTALLDIR], [PKG_INSTALLDIR], [AC_MSG_ERROR([please install pkgconf])])