summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--common/Makefile.am.inc2
-rw-r--r--common/flatpak-oci-registry.c5
-rw-r--r--common/flatpak-zstd-decompressor.c22
-rw-r--r--configure.ac7
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 <errno.h>
-#include <zstd.h>
#include <string.h>
+#ifdef HAVE_ZSTD
+#include <zstd.h>
+#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 ""