required : get_option('libarchive'))
libarchive_cflags = libarchive.partial_dependency(includes: true, compile_args: true)
conf.set10('HAVE_LIBARCHIVE', libarchive.found())
-conf.set10('HAVE_LIBARCHIVE_UID_IS_SET',
- libarchive.found() and cc.has_function('archive_entry_uid_is_set', dependencies : libarchive))
-conf.set10('HAVE_LIBARCHIVE_HARDLINK_IS_SET',
- libarchive.found() and cc.has_function('archive_entry_hardlink_is_set', dependencies : libarchive))
+
+foreach ident : [
+ 'archive_entry_gid_is_set', # since 3.7.3
+ 'archive_entry_uid_is_set', # since 3.7.3
+ 'archive_entry_hardlink_is_set', # since 3.7.5
+ ]
+
+ have = libarchive.found() and cc.has_function(ident, dependencies : libarchive)
+ conf.set10('HAVE_' + ident.to_upper(), have)
+endforeach
libxkbcommon = dependency('xkbcommon',
version : '>= 0.3.0',
#include <syslog.h>
#include "libarchive-util.h"
+#include "user-util.h"
#if HAVE_LIBARCHIVE
static void *libarchive_dl = NULL;
DLSYM_PROTOTYPE(archive_entry_filetype) = NULL;
DLSYM_PROTOTYPE(archive_entry_free) = NULL;
DLSYM_PROTOTYPE(archive_entry_gid) = NULL;
-#if HAVE_LIBARCHIVE_UID_IS_SET
+#if HAVE_ARCHIVE_ENTRY_GID_IS_SET
DLSYM_PROTOTYPE(archive_entry_gid_is_set) = NULL;
+#else
+int sym_archive_entry_gid_is_set(struct archive_entry *e) {
+ return gid_is_valid(sym_archive_entry_gid(e));
+}
#endif
DLSYM_PROTOTYPE(archive_entry_hardlink) = NULL;
-#if HAVE_LIBARCHIVE_HARDLINK_IS_SET
+#if HAVE_ARCHIVE_ENTRY_HARDLINK_IS_SET
DLSYM_PROTOTYPE(archive_entry_hardlink_is_set) = NULL;
#endif
DLSYM_PROTOTYPE(archive_entry_mode) = NULL;
DLSYM_PROTOTYPE(archive_entry_sparse_add_entry) = NULL;
DLSYM_PROTOTYPE(archive_entry_symlink) = NULL;
DLSYM_PROTOTYPE(archive_entry_uid) = NULL;
-#if HAVE_LIBARCHIVE_UID_IS_SET
+#if HAVE_ARCHIVE_ENTRY_UID_IS_SET
DLSYM_PROTOTYPE(archive_entry_uid_is_set) = NULL;
+#else
+int sym_archive_entry_uid_is_set(struct archive_entry *e) {
+ return uid_is_valid(sym_archive_entry_uid(e));
+}
#endif
DLSYM_PROTOTYPE(archive_entry_xattr_add_entry) = NULL;
DLSYM_PROTOTYPE(archive_entry_xattr_next) = NULL;
DLSYM_ARG(archive_entry_filetype),
DLSYM_ARG(archive_entry_free),
DLSYM_ARG(archive_entry_gid),
-#if HAVE_LIBARCHIVE_UID_IS_SET
+#if HAVE_ARCHIVE_ENTRY_GID_IS_SET
DLSYM_ARG(archive_entry_gid_is_set),
#endif
DLSYM_ARG(archive_entry_hardlink),
-#if HAVE_LIBARCHIVE_HARDLINK_IS_SET
+#if HAVE_ARCHIVE_ENTRY_HARDLINK_IS_SET
DLSYM_ARG(archive_entry_hardlink_is_set),
#endif
DLSYM_ARG(archive_entry_mode),
DLSYM_ARG(archive_entry_sparse_add_entry),
DLSYM_ARG(archive_entry_symlink),
DLSYM_ARG(archive_entry_uid),
-#if HAVE_LIBARCHIVE_UID_IS_SET
+#if HAVE_ARCHIVE_ENTRY_UID_IS_SET
DLSYM_ARG(archive_entry_uid_is_set),
#endif
DLSYM_ARG(archive_entry_xattr_add_entry),
extern DLSYM_PROTOTYPE(archive_entry_filetype);
extern DLSYM_PROTOTYPE(archive_entry_free);
extern DLSYM_PROTOTYPE(archive_entry_gid);
+#if HAVE_ARCHIVE_ENTRY_GID_IS_SET
+extern DLSYM_PROTOTYPE(archive_entry_gid_is_set);
+#else
+int sym_archive_entry_gid_is_set(struct archive_entry *e);
+#endif
extern DLSYM_PROTOTYPE(archive_entry_hardlink);
+#if HAVE_ARCHIVE_ENTRY_HARDLINK_IS_SET
+extern DLSYM_PROTOTYPE(archive_entry_hardlink_is_set);
+#else
+static inline int sym_archive_entry_hardlink_is_set(struct archive_entry *e) {
+ return !!sym_archive_entry_hardlink(e);
+}
+#endif
extern DLSYM_PROTOTYPE(archive_entry_mode);
extern DLSYM_PROTOTYPE(archive_entry_mtime);
extern DLSYM_PROTOTYPE(archive_entry_mtime_is_set);
extern DLSYM_PROTOTYPE(archive_entry_sparse_add_entry);
extern DLSYM_PROTOTYPE(archive_entry_symlink);
extern DLSYM_PROTOTYPE(archive_entry_uid);
+#if HAVE_ARCHIVE_ENTRY_UID_IS_SET
+extern DLSYM_PROTOTYPE(archive_entry_uid_is_set);
+#else
+int sym_archive_entry_uid_is_set(struct archive_entry *e);
+#endif
extern DLSYM_PROTOTYPE(archive_entry_xattr_add_entry);
extern DLSYM_PROTOTYPE(archive_entry_xattr_next);
extern DLSYM_PROTOTYPE(archive_entry_xattr_reset);
extern DLSYM_PROTOTYPE(archive_write_set_format_filter_by_ext);
extern DLSYM_PROTOTYPE(archive_write_set_format_pax);
-#if HAVE_LIBARCHIVE_UID_IS_SET
-extern DLSYM_PROTOTYPE(archive_entry_gid_is_set);
-extern DLSYM_PROTOTYPE(archive_entry_uid_is_set);
-#else
-#include "user-util.h"
-static inline int sym_archive_entry_gid_is_set(struct archive_entry *e) {
- return gid_is_valid(sym_archive_entry_gid(e));
-}
-static inline int sym_archive_entry_uid_is_set(struct archive_entry *e) {
- return uid_is_valid(sym_archive_entry_uid(e));
-}
-#endif
-
-#if HAVE_LIBARCHIVE_HARDLINK_IS_SET
-extern DLSYM_PROTOTYPE(archive_entry_hardlink_is_set);
-#else
-static inline int sym_archive_entry_hardlink_is_set(struct archive_entry *e) {
- return !!sym_archive_entry_hardlink(e);
-}
-#endif
-
int dlopen_libarchive(void);
DEFINE_TRIVIAL_CLEANUP_FUNC_FULL_RENAME(struct archive_entry*, sym_archive_entry_free, archive_entry_freep, NULL);