From: Alfred Neumayer Date: Thu, 27 Nov 2025 04:10:33 +0000 (+0100) Subject: libarchive & contrib: Build as static binary for the Android recovery X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=752df6abb7b7d8805119560565d2376a0673461d;p=thirdparty%2Flibarchive.git libarchive & contrib: Build as static binary for the Android recovery Adds a 'bsdtar-recovery' Android build target for use in Android recoveries as a static binary, and fixes some build failures on the get-go. Tested on halium-7.1, halium-9.0 & halium-13.0. Change-Id: I9b656e7016d4bf21517e2edb18f2a7733edc6982 --- diff --git a/contrib/android/Android.mk b/contrib/android/Android.mk index 2e9d9a399..20e46a699 100644 --- a/contrib/android/Android.mk +++ b/contrib/android/Android.mk @@ -26,6 +26,8 @@ LOCAL_PATH := $(subst /contrib/android,,$(call my-dir)) libarchive_target_config := contrib/android/config/android.h libarchive_src_files := libarchive/archive_acl.c \ + libarchive/archive_blake2s_ref.c \ + libarchive/archive_blake2sp_ref.c \ libarchive/archive_check_magic.c \ libarchive/archive_cmdline.c \ libarchive/archive_cryptor.c \ @@ -44,6 +46,7 @@ libarchive_src_files := libarchive/archive_acl.c \ libarchive/archive_parse_date.c \ libarchive/archive_pathmatch.c \ libarchive/archive_ppmd7.c \ + libarchive/archive_ppmd8.c \ libarchive/archive_random.c \ libarchive/archive_rb.c \ libarchive/archive_read.c \ @@ -86,6 +89,7 @@ libarchive_src_files := libarchive/archive_acl.c \ libarchive/archive_read_support_format_lha.c \ libarchive/archive_read_support_format_mtree.c \ libarchive/archive_read_support_format_rar.c \ + libarchive/archive_read_support_format_rar5.c \ libarchive/archive_read_support_format_raw.c \ libarchive/archive_read_support_format_tar.c \ libarchive/archive_read_support_format_warc.c \ @@ -93,6 +97,7 @@ libarchive_src_files := libarchive/archive_acl.c \ libarchive/archive_read_support_format_zip.c \ libarchive/archive_string.c \ libarchive/archive_string_sprintf.c \ + libarchive/archive_time.c \ libarchive/archive_util.c \ libarchive/archive_version_details.c \ libarchive/archive_virtual.c \ @@ -123,7 +128,9 @@ libarchive_src_files := libarchive/archive_acl.c \ libarchive/archive_write_set_format_ar.c \ libarchive/archive_write_set_format_by_name.c \ libarchive/archive_write_set_format_cpio.c \ + libarchive/archive_write_set_format_cpio_binary.c \ libarchive/archive_write_set_format_cpio_newc.c \ + libarchive/archive_write_set_format_cpio_odc.c \ libarchive/archive_write_set_format_iso9660.c \ libarchive/archive_write_set_format_mtree.c \ libarchive/archive_write_set_format_pax.c \ @@ -305,4 +312,17 @@ LOCAL_SRC_FILES := $(bsdcat_src_files) LOCAL_C_INCLUDES := $(LOCAL_PATH)/libarchive $(LOCAL_PATH)/libarchive_fe $(LOCAL_PATH)/contrib/android/include include $(BUILD_EXECUTABLE) +include $(CLEAR_VARS) +LOCAL_MODULE := bsdtar-recovery +LOCAL_MODULE_TAGS := optional +LOCAL_MODULE_STEM := bsdtar +LOCAL_CFLAGS := -DBSDTAR_VERSION_STRING=ARCHIVE_VERSION_ONLY_STRING -DPLATFORM_CONFIG_H=\"$(libarchive_target_config)\" +LOCAL_STATIC_LIBRARIES := libarchive libarchive_fe libz +LOCAL_SRC_FILES := $(bsdtar_src_files) +LOCAL_C_INCLUDES := $(LOCAL_PATH)/libarchive $(LOCAL_PATH)/libarchive_fe $(LOCAL_PATH)/contrib/android/include +LOCAL_MODULE_CLASS := RECOVERY_EXECUTABLES +LOCAL_MODULE_PATH := $(TARGET_RECOVERY_ROOT_OUT)/sbin +LOCAL_FORCE_STATIC_EXECUTABLE := true +include $(BUILD_EXECUTABLE) + endif diff --git a/contrib/android/config/android.h b/contrib/android/config/android.h index 0a273be23..3fd6806d5 100644 --- a/contrib/android/config/android.h +++ b/contrib/android/config/android.h @@ -26,6 +26,8 @@ #ifndef ARCHIVE_PLATFORM_H_ANDROID_INCLUDED #define ARCHIVE_PLATFORM_H_ANDROID_INCLUDED +#define __LIBARCHIVE_CONFIG_H_INCLUDED 1 + #include #ifdef __ANDROID_API__ #if __ANDROID_API__ > 20 @@ -40,8 +42,8 @@ #define HAVE_CHOWN 1 #define HAVE_CHROOT 1 -#define HAVE_CLOSEFROM 1 -#define HAVE_CLOSE_RANGE 1 +#define HAVE_CLOSEFROM 0 +#define HAVE_CLOSE_RANGE 0 #define HAVE_CTIME_R 1 #define HAVE_CTYPE_H 1 #define HAVE_DECL_EXTATTR_NAMESPACE_USER 0 @@ -55,6 +57,8 @@ #define HAVE_DECL_UINTMAX_MAX 1 #define HAVE_DECL_UINT32_MAX 1 #define HAVE_DECL_UINT64_MAX 1 +#define HAVE_DECL_INT32_MAX 1 +#define HAVE_DECL_INT32_MIN 1 #define HAVE_DIRENT_H 1 #define HAVE_DIRFD 1 #define HAVE_DLFCN_H 1 @@ -137,7 +141,7 @@ #define HAVE_STRING_H 1 #define HAVE_STRRCHR 1 #define HAVE_STRUCT_STAT_ST_BLKSIZE 1 -#define HAVE_STRUCT_STAT_ST_MTIME_NSEC 1 +#define HAVE_STRUCT_STAT_ST_MTIME_NSEC 0 #define HAVE_STRUCT_TM_TM_GMTOFF 1 #define HAVE_SYMLINK 1 #define HAVE_SYS_CDEFS_H 1 diff --git a/libarchive/archive_read_support_format_cab.c b/libarchive/archive_read_support_format_cab.c index a96f7d313..63755ef9e 100644 --- a/libarchive/archive_read_support_format_cab.c +++ b/libarchive/archive_read_support_format_cab.c @@ -2813,7 +2813,7 @@ lzx_decode_blocks(struct lzx_stream *strm, int last) lzx_br_bits(&bre, mt_max_bits)); lzx_br_consume(&bre, mt_bitlen[c]); } - if (c > UCHAR_MAX) + if ((unsigned int)c > UCHAR_MAX) break; /* * 'c' is exactly literal code. diff --git a/libarchive/archive_read_support_format_lha.c b/libarchive/archive_read_support_format_lha.c index abf8b8799..cf6a147ab 100644 --- a/libarchive/archive_read_support_format_lha.c +++ b/libarchive/archive_read_support_format_lha.c @@ -2374,7 +2374,7 @@ lzh_decode_blocks(struct lzh_stream *strm, int last) lzh_br_consume(&bre, lt_bitlen[c]); } blocks_avail--; - if (c > UCHAR_MAX) + if ((unsigned int)c > UCHAR_MAX) /* Current block is a match data. */ break; /*