diff options
| -rw-r--r-- | libarchive/Makefile | 8 | ||||
| -rw-r--r-- | libarchive/libarchive.c | 60 |
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)); |
