diff --git a/meta-filesystems/recipes-filesystems/fuse-archive/fuse-archive/0001-reader-Support-libarchive-builds-where-RPM-is-a-form.patch b/meta-filesystems/recipes-filesystems/fuse-archive/fuse-archive/0001-reader-Support-libarchive-builds-where-RPM-is-a-form.patch new file mode 100644 index 0000000000..ae6d681509 --- /dev/null +++ b/meta-filesystems/recipes-filesystems/fuse-archive/fuse-archive/0001-reader-Support-libarchive-builds-where-RPM-is-a-form.patch @@ -0,0 +1,49 @@ +From 2d7f7e39af9d68360997434c7680a644d7127987 Mon Sep 17 00:00:00 2001 +From: Khem Raj +Date: Tue, 28 Jul 2026 18:00:36 -0700 +Subject: [PATCH] reader: Support libarchive builds where RPM is a format + +libarchive is moving the RPM reader from a filter to a proper format +(libarchive PR #2846), which drops archive_read_support_filter_rpm() +from the public API in favour of archive_read_support_format_rpm(). +Distributions carrying that change (e.g. OpenEmbedded, which needs it +for RPM 6 support) fail to build fuse-archive with: + + lib/reader.cc:509:9: error: use of undeclared identifier + 'archive_read_support_filter_rpm' + +Pick the available API at compile time. ARCHIVE_FORMAT_RPM is defined by +archive.h only in versions that provide the new format entry point, so it +is a reliable feature test. + +The new format appends the payload decompression filter itself based on +the RPM PAYLOADCOMPRESSOR tag, so the remaining registrations are kept +unchanged and stay harmless. + +Reported upstream - https://github.com/google/fuse-archive/issues/63 + +Upstream-Status: Pending + +Signed-off-by: Khem Raj +--- + lib/reader.cc | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/lib/reader.cc b/lib/reader.cc +index f336fa0..5bc3708 100644 +--- a/lib/reader.cc ++++ b/lib/reader.cc +@@ -506,7 +506,13 @@ void Reader::SetRarFormat() { + + void Reader::SetRpmFormat() { + Archive* const a = archive.get(); ++#ifdef ARCHIVE_FORMAT_RPM ++ // Newer libarchive handles RPM as a format rather than as a filter, and ++ // appends the payload decompression filter itself. ++ Check(archive_read_support_format_rpm(a)); ++#else + Check(archive_read_support_filter_rpm(a)); ++#endif + Check(archive_read_support_filter_gzip(a)); + Check(archive_read_support_filter_lzip(a)); + Check(archive_read_support_filter_lzma(a)); diff --git a/meta-filesystems/recipes-filesystems/fuse-archive/fuse-archive_1.22.bb b/meta-filesystems/recipes-filesystems/fuse-archive/fuse-archive_1.22.bb index a4daa47c50..729062adef 100644 --- a/meta-filesystems/recipes-filesystems/fuse-archive/fuse-archive_1.22.bb +++ b/meta-filesystems/recipes-filesystems/fuse-archive/fuse-archive_1.22.bb @@ -6,7 +6,9 @@ SECTION = "base" LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = "file://LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57" -SRC_URI = "git://github.com/google/fuse-archive.git;branch=main;protocol=https;tag=v${PV}" +SRC_URI = "git://github.com/google/fuse-archive.git;branch=main;protocol=https;tag=v${PV} \ + file://0001-reader-Support-libarchive-builds-where-RPM-is-a-form.patch \ + " SRCREV = "e218685189aabebb95d33e2542e2a122ea81392d" DEPENDS = "boost fuse3 libarchive"