From 4539d186a5cdbc8e0347619afcb8e03b563c79c5 Mon Sep 17 00:00:00 2001 From: Alexander Larsson Date: Thu, 7 May 2020 16:57:10 +0200 Subject: oci: Make libzstd optional (and disable OCI deltas if not there) --- common/Makefile.am.inc | 2 ++ common/flatpak-oci-registry.c | 5 +++++ common/flatpak-zstd-decompressor.c | 22 +++++++++++++++++++--- configure.ac | 7 ++++++- 4 files changed, 32 insertions(+), 4 deletions(-) diff --git a/common/Makefile.am.inc b/common/Makefile.am.inc index 9997098f..82d85ad7 100644 --- a/common/Makefile.am.inc +++ b/common/Makefile.am.inc @@ -178,6 +178,7 @@ libflatpak_common_la_CFLAGS = \ -I$(srcdir)/dbus-proxy \ $(AM_CFLAGS) \ $(ARCHIVE_CFLAGS) \ + $(ZSTD_CFLAGS) \ $(BASE_CFLAGS) \ $(DCONF_CFLAGS) \ $(HIDDEN_VISIBILITY_CFLAGS) \ @@ -195,6 +196,7 @@ libflatpak_common_la_CFLAGS = \ libflatpak_common_la_LIBADD = \ $(AM_LIBADD) \ $(ARCHIVE_LIBS) \ + $(ZSTD_LIBS) \ $(BASE_LIBS) \ $(DCONF_LIBS) \ $(INTERNAL_GPGME_LIBS) \ diff --git a/common/flatpak-oci-registry.c b/common/flatpak-oci-registry.c index cfd8bc26..81508a70 100644 --- a/common/flatpak-oci-registry.c +++ b/common/flatpak-oci-registry.c @@ -1891,6 +1891,11 @@ flatpak_oci_registry_find_delta_manifest (FlatpakOciRegistry *registry, g_autoptr(FlatpakOciVersioned) deltaindexv = NULL; FlatpakOciDescriptor *delta_desc; +#ifndef HAVE_ZSTD + if (TRUE) + return NULL; /* Don't find deltas if we can't apply them */ +#endif + deltaindexv = flatpak_oci_registry_load_versioned (registry, oci_repository, "_deltaindex", NULL, cancellable, NULL); if (deltaindexv == NULL) diff --git a/common/flatpak-zstd-decompressor.c b/common/flatpak-zstd-decompressor.c index 98d98b47..9c0f3f7b 100644 --- a/common/flatpak-zstd-decompressor.c +++ b/common/flatpak-zstd-decompressor.c @@ -3,8 +3,10 @@ #include "flatpak-zstd-decompressor-private.h" #include -#include #include +#ifdef HAVE_ZSTD +#include +#endif static void flatpak_zstd_decompressor_iface_init (GConverterIface *iface); @@ -12,7 +14,9 @@ struct _FlatpakZstdDecompressor { GObject parent_instance; +#ifdef HAVE_ZSTD ZSTD_DStream *dstream; +#endif }; G_DEFINE_TYPE_WITH_CODE (FlatpakZstdDecompressor, flatpak_zstd_decompressor, G_TYPE_OBJECT, @@ -22,11 +26,13 @@ G_DEFINE_TYPE_WITH_CODE (FlatpakZstdDecompressor, flatpak_zstd_decompressor, G_T static void flatpak_zstd_decompressor_finalize (GObject *object) { +#ifdef HAVE_ZSTD FlatpakZstdDecompressor *decompressor; decompressor = FLATPAK_ZSTD_DECOMPRESSOR (object); ZSTD_freeDStream (decompressor->dstream); +#endif G_OBJECT_CLASS (flatpak_zstd_decompressor_parent_class)->finalize (object); } @@ -34,7 +40,9 @@ flatpak_zstd_decompressor_finalize (GObject *object) static void flatpak_zstd_decompressor_init (FlatpakZstdDecompressor *decompressor) { +#ifdef HAVE_ZSTD decompressor->dstream = ZSTD_createDStream (); +#endif } static void @@ -58,9 +66,11 @@ flatpak_zstd_decompressor_new (void) static void flatpak_zstd_decompressor_reset (GConverter *converter) { +#ifdef HAVE_ZSTD FlatpakZstdDecompressor *decompressor = FLATPAK_ZSTD_DECOMPRESSOR (converter); ZSTD_initDStream (decompressor->dstream); +#endif } static GConverterResult @@ -74,6 +84,7 @@ flatpak_zstd_decompressor_convert (GConverter *converter, gsize *bytes_written, GError **error) { +#ifdef HAVE_ZSTD FlatpakZstdDecompressor *decompressor; ZSTD_inBuffer input = { inbuf, inbuf_size, 0 }; ZSTD_outBuffer output = {outbuf, outbuf_size, 0 }; @@ -84,11 +95,10 @@ flatpak_zstd_decompressor_convert (GConverter *converter, if (decompressor->dstream == NULL) { g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_FAILED, - "Failed to initialize libzst"); + "Failed to initialize libzstd"); return G_CONVERTER_ERROR; } - res = ZSTD_decompressStream(decompressor->dstream, &output , &input); if (ZSTD_isError (res)) { @@ -115,6 +125,12 @@ flatpak_zstd_decompressor_convert (GConverter *converter, } return G_CONVERTER_CONVERTED; + +#else + g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_FAILED, + "libzstd not available"); + return G_CONVERTER_ERROR; +#endif } static void diff --git a/configure.ac b/configure.ac index 651e49cc..9dd9ae2b 100644 --- a/configure.ac +++ b/configure.ac @@ -210,10 +210,14 @@ AC_SUBST([GDBUS_CODEGEN], [`$PKG_CONFIG --variable gdbus_codegen gio-2.0`]) POLKIT_GOBJECT_REQUIRED=0.98 -PKG_CHECK_MODULES(ARCHIVE, [libarchive >= 2.8.0 libzstd]) +PKG_CHECK_MODULES(ARCHIVE, [libarchive >= 2.8.0]) PKG_CHECK_MODULES(BASE, [glib-2.0 >= $GLIB_REQS gio-2.0 gio-unix-2.0]) PKG_CHECK_MODULES(SOUP, [libsoup-2.4]) PKG_CHECK_MODULES(XML, [libxml-2.0 >= 2.4]) +PKG_CHECK_MODULES(ZSTD, [libzstd >= 0.8.1], [have_zstd=yes], [have_zstd=no]) +if test $have_zstd = yes; then + AC_DEFINE(HAVE_ZSTD, 1, [Define if libzstd is available]) +fi PKG_CHECK_MODULES(DCONF, [dconf >= 0.26], [have_dconf=yes], [have_dconf=no]) if test $have_dconf = yes; then AC_DEFINE(HAVE_DCONF, 1, [Define if dconf is available]) @@ -555,4 +559,5 @@ echo " Privilege mode: $with_priv_mode" echo " Use dconf: $have_dconf" echo " Use libsystemd: $have_libsystemd" echo " Use libmalcontent: $have_libmalcontent" +echo " Use libzstd: $have_zstd" echo "" -- cgit v1.2.1