summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libarchive/Makefile8
-rw-r--r--libarchive/libarchive.c60
2 files changed, 46 insertions, 22 deletions
diff --git a/libarchive/Makefile b/libarchive/Makefile
index 85cad7e..595cd5f 100644
--- a/libarchive/Makefile
+++ b/libarchive/Makefile
@@ -29,13 +29,15 @@ VFS_OBJECTS=libarchive.o
all: static
+LIBARCHIVE_LIBS_EXT = `grep "$(DIR_LIBARCHIVE)/Makefile" -e '^LIBS = -l' | sed 's/.*=\(.*\)/\1/'`
+shared: CFLAGS += -DMODULE_SHARED
shared: $(VFS_COMMON_OBJECTS) $(VFS_OBJECTS)
- $(CC) -shared -o libarchive_plugin.so $(VFS_COMMON_OBJECTS) $(VFS_OBJECTS) $(CFLAGS) `pkg-config glib-2.0 --libs` -larchive -lz -lbz2
+ $(CC) -shared -o libarchive_plugin.so $(VFS_COMMON_OBJECTS) $(VFS_OBJECTS) $(CFLAGS) `pkg-config glib-2.0 --libs` -larchive
-static: CFLAGS += -I$(DIR_LIBARCHIVE)/libarchive
+static: CFLAGS += -I$(DIR_LIBARCHIVE) -I$(DIR_LIBARCHIVE)/libarchive
static: lib_libarchive_compile $(VFS_COMMON_OBJECTS) $(VFS_OBJECTS)
- $(CC) -shared -o libarchive_plugin.so $(VFS_COMMON_OBJECTS) $(VFS_OBJECTS) $(DIR_LIBARCHIVE)/.libs/libarchive.a $(CFLAGS) `pkg-config glib-2.0 --libs` -lz -lbz2
+ $(CC) -shared -o libarchive_plugin.so $(VFS_COMMON_OBJECTS) $(VFS_OBJECTS) $(DIR_LIBARCHIVE)/.libs/libarchive.a $(CFLAGS) `pkg-config glib-2.0 --libs` $(LIBARCHIVE_LIBS_EXT)
lib_libarchive_compile:
@which uudecode > /dev/null || exit 1;
diff --git a/libarchive/libarchive.c b/libarchive/libarchive.c
index eadda05..86823cb 100644
--- a/libarchive/libarchive.c
+++ b/libarchive/libarchive.c
@@ -1,5 +1,5 @@
/* libarchive plugin for Tux Commander
- * version 0.1.5, designed for libarchive 2.5.5
+ * version 0.1.6, designed for libarchive 2.7.1
* Copyright (C) 2008 Tomas Bzatek <tbzatek@users.sourceforge.net>
* Check for updates on tuxcmd.sourceforge.net
*
@@ -45,10 +45,14 @@
#include <archive.h>
#include <archive_entry.h>
+#ifndef MODULE_SHARED
+# include <config.h>
+#endif
-#define VERSION "0.1.5"
-#define BUILD_DATE "2009-10-25"
+
+#define MODULE_VERSION "0.1.6"
+#define MODULE_BUILD_DATE "2009-11-15"
#define DEFAULT_BLOCK_SIZE 65536
@@ -138,10 +142,16 @@ struct TVFSInfo *
VFSGetInfo()
{
struct TVFSInfo *module_info = g_malloc0 (sizeof (struct TVFSInfo));
+#ifdef MODULE_SHARED
+ const char *shared_module = ", dynamically linked";
+#else
+ const char *shared_module = ", statically linked";
+#endif
module_info->ID = g_strdup ("libarchive_plugin");
module_info->Name = g_strdup ("libarchive plugin");
- module_info->About = g_strdup_printf ("version %s, build date: %s\nusing %s\n", VERSION, BUILD_DATE, ARCHIVE_LIBRARY_VERSION);
+ module_info->About = g_strdup_printf ("version %s, build date: %s\nusing %s%s\n",
+ MODULE_VERSION, MODULE_BUILD_DATE, ARCHIVE_LIBRARY_VERSION, shared_module);
module_info->Copyright = g_strdup ("Plugin Copyright (C) 2008-2009 Tomáš Bžatek\nlibarchive sources Copyright (c) 2003-2007 Tim Kientzle");
return module_info;
@@ -150,7 +160,33 @@ VFSGetInfo()
char *
VFSGetArchiveExts ()
{
- return g_strdup ("tar;tar.gz;tar.bz2;tgz;tbz2;cpio;iso;a;deb");
+#ifndef MODULE_SHARED
+ #ifdef HAVE_BZLIB_H
+ #define FORMAT_BZLIB "tar.bz2;tbz2;"
+ #else
+ #define FORMAT_BZLIB
+ #endif
+
+ #ifdef HAVE_ZLIB_H
+ #define FORMAT_ZLIB "tar.gz;tgz;deb;"
+ #else
+ #define FORMAT_ZLIB
+ #endif
+
+ #if HAVE_LZMA_H && HAVE_LIBLZMA
+ #define FORMAT_LZMA "tar.lzma;tar.xz;"
+ #elif HAVE_LZMADEC_H && HAVE_LIBLZMADEC
+ #define FORMAT_LZMA "tar.lzma;"
+ #else
+ #define FORMAT_LZMA
+ #endif
+
+ return g_strdup ("tar;cpio;iso;a;" FORMAT_ZLIB FORMAT_BZLIB FORMAT_LZMA);
+#else
+ /* Dynamic linking; we're unable to determine supported formats,
+ let's suppose distribution vendors always compile full set */
+ return g_strdup ("tar;tar.gz;tar.bz2;tgz;tbz2;cpio;iso;a;deb;tar.lzma;tar.xz");
+#endif
}
@@ -168,20 +204,6 @@ static TVFSResult libarchive_open(struct archive **a, const char *filename, size
archive_read_support_compression_all(*a);
archive_read_support_format_all(*a);
-/*
- archive_read_support_compression_bzip2(*a);
- archive_read_support_compression_gzip(*a);
- archive_read_support_compression_compress(*a);
- archive_read_support_compression_none(*a);
- archive_read_support_format_tar(*a);
- archive_read_support_format_cpio(*a);
- archive_read_support_format_ar(*a);
- archive_read_support_format_empty(*a);
- archive_read_support_format_gnutar(*a);
- archive_read_support_format_iso9660(*a);
- archive_read_support_format_cpio(*a);
-*/
-
r = archive_read_open_file(*a, filename, block_size);
if (r) {
fprintf(stderr, "(EE) libarchive_open: error occured when opening archive: %s\n", archive_error_string(*a));