oci: Make libzstd optional (and disable OCI deltas if not there)

This commit is contained in:
Alexander Larsson
2020-05-07 16:57:10 +02:00
committed by Alexander Larsson
parent 31612d7568
commit 4539d186a5
4 changed files with 32 additions and 4 deletions

View File

@@ -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) \

View File

@@ -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)

View File

@@ -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

View File

@@ -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 ""