summaryrefslogtreecommitdiff
path: root/libre/xarchiver-libre
diff options
context:
space:
mode:
authorAndré Fabian Silva Delgado <emulatorman@parabola.nu>2014-01-24 11:35:07 -0200
committerAndré Fabian Silva Delgado <emulatorman@parabola.nu>2014-01-24 11:35:07 -0200
commitdbe94786e7d2d38306b329e486a9e743c6ebf296 (patch)
tree2c7ecf5f6833002841db2789d2799cfd72e28396 /libre/xarchiver-libre
parent9fa0ea17b2545850885d834cc34bd0f2ed45fd9d (diff)
downloadabslibre-dbe94786e7d2d38306b329e486a9e743c6ebf296.tar.gz
abslibre-dbe94786e7d2d38306b329e486a9e743c6ebf296.tar.bz2
abslibre-dbe94786e7d2d38306b329e486a9e743c6ebf296.zip
xarchiver-libre-0.5.2-6: add some more important fixes for xarchiver
Diffstat (limited to 'libre/xarchiver-libre')
-rw-r--r--libre/xarchiver-libre/PKGBUILD115
-rw-r--r--libre/xarchiver-libre/rePKGBUILD26
-rw-r--r--libre/xarchiver-libre/xarchiver-0.5.2-add-unar-support.patch354
-rw-r--r--libre/xarchiver-libre/xarchiver-0.5.2-add_mime_types.patch9
-rw-r--r--libre/xarchiver-libre/xarchiver-0.5.2-add_unar_support.patch354
-rw-r--r--libre/xarchiver-libre/xarchiver-0.5.2-add_xz_support.patch397
-rw-r--r--libre/xarchiver-libre/xarchiver-0.5.2-drag-n-drop_escaped_path.patch13
-rw-r--r--libre/xarchiver-libre/xarchiver-0.5.2-fix-double-escaping.patch32
-rw-r--r--libre/xarchiver-libre/xarchiver-0.5.2-fix-non-existent-archive.patch26
-rw-r--r--libre/xarchiver-libre/xarchiver-0.5.2-no-donators-menu.patch50
-rw-r--r--libre/xarchiver-libre/xarchiver-0.5.2-segfault-delete-file.patch21
-rw-r--r--libre/xarchiver-libre/xarchiver-0.5.2-segfault-password-protected.patch43
12 files changed, 1377 insertions, 63 deletions
diff --git a/libre/xarchiver-libre/PKGBUILD b/libre/xarchiver-libre/PKGBUILD
index 9c0c0729c..df6bfbca6 100644
--- a/libre/xarchiver-libre/PKGBUILD
+++ b/libre/xarchiver-libre/PKGBUILD
@@ -1,64 +1,105 @@
-# $Id: PKGBUILD 154769 2012-03-30 16:45:24Z pierre $
-# Maintainer: Alexander Fehr <pizzapunk gmail com>
+# $Id: PKGBUILD 104651 2014-01-24 08:23:36Z bgyorgy $
+# Maintainer: Balló György <ballogyor+arch at gmail dot com>
+# Contributor: Alexander Fehr <pizzapunk gmail com>
# Contributor: Andrew Simmons <andrew.simmons@gmail.com>
+# Maintainer (Parabola): André Silva <emulatorman@parabola.nu>
_pkgname=xarchiver
pkgname=xarchiver-libre
pkgver=0.5.2
-pkgrel=5.1
-pkgdesc="GTK+ frontend to various command line archivers"
-arch=('i686' 'x86_64')
-url="http://xarchiver.sourceforge.net"
+pkgrel=6
+pkgdesc="GTK+ frontend to various command line archivers, with unar support"
+arch=('i686' 'x86_64' 'mips64el')
+url="http://xarchiver.sourceforge.net/"
license=('GPL')
-groups=('xfce4-goodies')
-depends=('gtk2' 'desktop-file-utils' 'hicolor-icon-theme')
-makedepends=('intltool')
provides=("$_pkgname=$pkgver")
conflicts=("$_pkgname")
-replacesk=("$_pkgname")
-optdepends=('tar: TAR support'
- 'gzip: GZIP support'
- 'bzip2: BZIP2 support'
- 'zip: ZIP support'
+replaces=("$_pkgname")
+depends=('gtk2' 'desktop-file-utils')
+makedepends=('intltool')
+optdepends=('zip: ZIP support'
'unzip: ZIP support'
'unar: RAR support'
'p7zip: 7z support'
'arj: ARJ support'
- 'lha: LHA support'
- 'xz: LZMA support'
- 'lzop: LZOP support')
-options=('!libtool')
+ 'lzop: LZOP support'
+ 'cpio: RPM support')
install=xarchiver.install
source=(http://downloads.sourceforge.net/xarchiver/xarchiver-$pkgver.tar.bz2
- # rpm2cpio.patch by Daniel Hokka Zakrisson
- # taken from https://bugzilla.redhat.com/show_bug.cgi?id=577480
- # sent upstream through
- # https://sourceforge.net/tracker/?func=detail&aid=3310768&group_id=140153&atid=745602
- xarchiver-0.5.2-rpm2cpio.patch
- # segfault-open-with.patch by Bastiaan Jacques
- # taken from https://bugzilla.redhat.com/show_bug.cgi?id=690012
- # sent upstream through
- # https://sourceforge.net/tracker/?func=detail&aid=3310778&group_id=140153&atid=745600
+ xarchiver-0.5.2-no-donators-menu.patch
+ xarchiver-0.5.2-add_xz_support.patch
xarchiver-0.5.2-segfault-open-with.patch
- # fix-7z-support.patch by taken from
- # https://sourceforge.net/tracker/?func=detail&aid=3137589&group_id=140153&atid=745602
- xarchiver-0.5.2-fix_7z_support.patch)
+ xarchiver-0.5.2-fix_7z_support.patch
+ xarchiver-0.5.2-drag-n-drop_escaped_path.patch
+ xarchiver-0.5.2-fix-double-escaping.patch
+ xarchiver-0.5.2-fix-non-existent-archive.patch
+ xarchiver-0.5.2-segfault-delete-file.patch
+ xarchiver-0.5.2-segfault-password-protected.patch
+ xarchiver-0.5.2-add_unar_support.patch
+ xarchiver-0.5.2-add_mime_types.patch)
md5sums=('2bc7f06403cc6582dd4a8029ec9d038d'
- 'd4a1accdbba2b50e5707097dd3548d7a'
+ '7ef9fe9aee9f0fbc141ed9683e91ea1c'
+ '5d5ef8dd1b8b7790af4ece5fcedcd370'
'f9036a44157b318cbc59ed012b04974b'
- '782f55c1f1021dc02c7739bf8a47336e')
+ '782f55c1f1021dc02c7739bf8a47336e'
+ 'fcd9e04222c5e0ef459977bd7cd0ae4e'
+ '6178d7ab679b761469c880a8db991907'
+ '22ed2783e72684a102243c5834bf5ca3'
+ 'e518b1e0bc4407383aae2783c0c19a04'
+ 'c46daf2ee9fce7ece608eca33174db6b'
+ '13c133a6ba867425b9a8a13900664d18'
+ '36a4c3181230aab1e0ce1596acc5ef88')
-build() {
- cd "$srcdir/xarchiver-$pkgver"
- #patches taken from: http://pkgs.fedoraproject.org/gitweb/?p=xarchiver.git
- patch -Np1 -i ../xarchiver-0.5.2-rpm2cpio.patch
+prepare() {
+ cd $_pkgname-$pkgver
+
+ # Fix donators menu item (upstream patch)
+ patch -Np2 -i ../xarchiver-0.5.2-no-donators-menu.patch
+
+ # Add XZ support
+ # http://sourceforge.net/p/xarchiver/bugs/28/
+ patch -Np1 -i ../xarchiver-0.5.2-add_xz_support.patch
+
+ # Fix segfault on open with dialog
+ # http://sourceforge.net/p/xarchiver/bugs/52/
patch -Np1 -i ../xarchiver-0.5.2-segfault-open-with.patch
+
+ # Fix 7z support
+ # http://sourceforge.net/p/xarchiver/patches/5/
patch -Np1 -i ../xarchiver-0.5.2-fix_7z_support.patch
+
+ # Fix extraction when the Drag'n'Drop target path contains spaces
+ patch -Np1 -i ../xarchiver-0.5.2-drag-n-drop_escaped_path.patch
+
+ # Fix error when trying to create archives with spaces
+ patch -Np1 -i ../xarchiver-0.5.2-fix-double-escaping.patch
+
+ # Fix segfault when non-existent archive specified
+ patch -Np1 -i ../xarchiver-0.5.2-fix-non-existent-archive.patch
+
+ # Fix segfault when deleting a file
+ patch -Np1 -i ../xarchiver-0.5.2-segfault-delete-file.patch
+
+ # Fix segfault when handling password protected files
+ patch -Np1 -i ../xarchiver-0.5.2-segfault-password-protected.patch
+
+ # Add unar support
+ patch -Np1 -i ../xarchiver-0.5.2-add_unar_support.patch
+
+ # Add more MIME types in the desktop file
+ patch -Np1 -i ../xarchiver-0.5.2-add_mime_types.patch
+
+ # Update upstream URL
+ find -type f | xargs sed -i 's|http://xarchiver.xfce.org|http://xarchiver.sf.net|'
+}
+
+build() {
+ cd $_pkgname-$pkgver
./configure --prefix=/usr --libexecdir=/usr/lib/xfce4
make
}
package() {
- cd "$srcdir/xarchiver-$pkgver"
+ cd $_pkgname-$pkgver
make DESTDIR="$pkgdir" install
}
diff --git a/libre/xarchiver-libre/rePKGBUILD b/libre/xarchiver-libre/rePKGBUILD
deleted file mode 100644
index 7f435d23f..000000000
--- a/libre/xarchiver-libre/rePKGBUILD
+++ /dev/null
@@ -1,26 +0,0 @@
-# Maintainer: Nicolás Reynolds <fauno@kiwwwi.com.ar>
-source PKGBUILD
-#CARCH=x86_64
-unset build package md5sums source
-_repo=extra # Put the repo here
-_mirror=ftp://ftp.archlinux.org # Put mirror here
-source=(PKGBUILD
- "${_mirror}/${_repo}/os/${CARCH}/${pkgname%-libre}-$pkgver-$pkgrel-$CARCH$PKGEXT"
- # files for pkg modifications below this line
- )
-options=(!strip)
-
-build() {
- cd "${srcdir}/"
- rm -vf ./.{INSTALL,PKGINFO}
- # put actions for package modifications below this line
-
-}
-
-package() {
- find ${srcdir} -maxdepth 1 -type l -delete
- cp -a ${srcdir}/* ${pkgdir}
-}
-
-
-# vim:set ts=2 sw=2 et:
diff --git a/libre/xarchiver-libre/xarchiver-0.5.2-add-unar-support.patch b/libre/xarchiver-libre/xarchiver-0.5.2-add-unar-support.patch
new file mode 100644
index 000000000..25c1d66ab
--- /dev/null
+++ b/libre/xarchiver-libre/xarchiver-0.5.2-add-unar-support.patch
@@ -0,0 +1,354 @@
+diff -Nur xarchiver-0.5.2.orig/doc/html/ch03s03.html xarchiver-0.5.2/doc/html/ch03s03.html
+--- xarchiver-0.5.2.orig/doc/html/ch03s03.html 2008-11-03 04:49:49.000000000 -0200
++++ xarchiver-0.5.2/doc/html/ch03s03.html 2014-01-24 11:26:24.869538956 -0200
+@@ -1,7 +1,7 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+ <html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>General</title><link rel="stylesheet" href="xarchiver.css" type="text/css" /><meta name="generator" content="DocBook XSL Stylesheets V1.71.0" /><link rel="start" href="index.html" title="Xarchiver 0.5" /><link rel="up" href="ch03.html" title="Chapter 3. Usage" /><link rel="prev" href="ch03s02.html" title="Command line options" /><link rel="next" href="ch03s04.html" title="Xarchiver menu" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">General</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch03s02.html">Prev</a> </td><th width="60%" align="center">Chapter 3. Usage</th><td width="20%" align="right"> <a accesskey="n" href="ch03s04.html">Next</a></td></tr></table><hr /></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="general"></a>General</h2></div></div></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="general_startup"></a>Startup</h3></div></div></div><p>
+- At startup, Xarchiver detects the available installed archivers (tar,rar,zip etc) and the script <i>xdg-open</i> for handling different file types. Since Xarchiver is a frontend (a graphic user interface to the cmd-line executables) it can't create archives whose archiver is not available. For instance if you have the free edition of rar, unrar, Xarchiver can't create rar archives since unrar allows rar archives to be opened, tested and extracted but not to be created.
++ At startup, Xarchiver detects the available installed archivers (tar,rar,zip etc) and the script <i>xdg-open</i> for handling different file types. Since Xarchiver is a frontend (a graphic user interface to the cmd-line executables) it can't create archives whose archiver is not available. For instance if you have the free as in freedom alternative of rar, unar, Xarchiver can't create rar archives since unar allows rar archives to be opened, tested and extracted but not to be created.
+ </p></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="how_it_works"></a>How it works</h3></div></div></div><p>
+ Xarchiver will run in the background the cmd-line executable of the archiver with the archiver's proper switches to perform the selected operation. If something goes wrong Xarchiver reports the full output of the archiver executable in the command line output window. From the release 0.5 the files in the archive can be opened within Xarchiver. The script <i>xdg-open</i> will detect the file type and run the proper application to handle it. If you don't have such script installed in your system (it's found in the xdg-utils package) Xarchiver will recognize HTML, txt and images files only. The Preferences dialog will notify this to you when you click the Advanced section inside it.
+ </p></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="dnd"></a>Drag and Drop</h3></div></div></div><p>
+diff -Nur xarchiver-0.5.2.orig/doc/xarchiver.docbook xarchiver-0.5.2/doc/xarchiver.docbook
+--- xarchiver-0.5.2.orig/doc/xarchiver.docbook 2007-08-22 07:49:19.000000000 -0300
++++ xarchiver-0.5.2/doc/xarchiver.docbook 2014-01-24 11:25:23.413824351 -0200
+@@ -204,7 +204,7 @@
+ <section id="general_startup">
+ <title>Startup</title>
+ <para>
+- At startup, &app; detects the available installed archivers (tar,rar,zip etc). Since Xarchiver is a frontend (a graphic user interface to the cmd-line executables) it can't create archives whose archiver is not available. For instance if you have the free edition of rar, unrar, Xarchiver can't create rar archives since unrar allows rar archives to be opened, tested and extracted but not to be created.
++ At startup, &app; detects the available installed archivers (tar,rar,zip etc). Since Xarchiver is a frontend (a graphic user interface to the cmd-line executables) it can't create archives whose archiver is not available. For instance if you have the free as in freedom alternative of rar, unar, Xarchiver can't create rar archives since unar allows rar archives to be opened and extracted but not to be created.
+ </para>
+ </section>
+ <section id="how_it_works">
+diff -Nur xarchiver-0.5.2.orig/src/extract_dialog.c xarchiver-0.5.2/src/extract_dialog.c
+--- xarchiver-0.5.2.orig/src/extract_dialog.c 2008-11-10 08:28:11.000000000 -0200
++++ xarchiver-0.5.2/src/extract_dialog.c 2014-01-24 10:55:28.209263885 -0200
+@@ -24,7 +24,7 @@
+ #include "string_utils.h"
+ #include "support.h"
+
+-extern gboolean unrar,batch_mode;
++extern gboolean unar,batch_mode;
+ extern Prefs_dialog_data *prefs_window;
+ extern Progress_bar_data *pb;
+ extern extract_func extract [XARCHIVETYPE_COUNT];
+@@ -290,11 +290,7 @@
+ GSList *names = NULL;
+ GtkTreeModel *model;
+ int response;
+-
+- if (unrar)
+- rar = "unrar";
+- else
+- rar = "rar";
++ rar = "unar";
+
+ while (! done)
+ {
+diff -Nur xarchiver-0.5.2.orig/src/interface.c xarchiver-0.5.2/src/interface.c
+--- xarchiver-0.5.2.orig/src/interface.c 2008-11-11 06:09:01.000000000 -0200
++++ xarchiver-0.5.2/src/interface.c 2014-01-24 10:56:03.893317117 -0200
+@@ -45,7 +45,7 @@
+ { "text/uri-list",0,0 },
+ };
+
+-extern gboolean unrar,batch_mode;
++extern gboolean unar,batch_mode;
+
+ static gboolean xa_progress_dialog_delete_event (GtkWidget *caller,GdkEvent *event,GPid pid);
+ static void xa_progress_dialog_stop_action (GtkWidget *widget,GPid pid);
+@@ -629,7 +629,7 @@
+ {
+ gtk_widget_show(selected_frame);
+ gtk_widget_set_sensitive(deselect_all,TRUE);
+- if (archive[id]->type == XARCHIVETYPE_RAR && unrar)
++ if (archive[id]->type == XARCHIVETYPE_RAR && unar)
+ {
+ gtk_widget_set_sensitive (delete_menu,FALSE);
+ gtk_widget_set_sensitive (rename_menu,FALSE);
+diff -Nur xarchiver-0.5.2.orig/src/main.c xarchiver-0.5.2/src/main.c
+--- xarchiver-0.5.2.orig/src/main.c 2008-11-10 09:21:43.000000000 -0200
++++ xarchiver-0.5.2/src/main.c 2014-01-24 10:59:39.108832843 -0200
+@@ -33,7 +33,7 @@
+ gchar *add_files;
+ gboolean error_output, file_to_open, ask_and_extract, ask_and_add, multi_extract;
+ gboolean batch_mode = FALSE;
+-gboolean unrar = FALSE;
++gboolean unar = FALSE;
+ gboolean sevenzr = FALSE, sevenza = FALSE, xdg_open = FALSE;
+ int response;
+ extern gchar *current_open_directory;
+@@ -410,24 +410,14 @@
+ //ArchiveSuffix = g_list_append(ArchiveSuffix, "");
+ }
+
+- absolute_path = g_find_program_in_path ("rar");
+- if ( absolute_path )
++ absolute_path = g_find_program_in_path("unar");
++ if ( absolute_path )
+ {
++ unar = TRUE;
+ ArchiveType = g_list_append(ArchiveType, "rar");
+ ArchiveSuffix = g_list_append(ArchiveSuffix, "*.rar");
+ g_free (absolute_path);
+ }
+- else
+- {
+- absolute_path = g_find_program_in_path("unrar");
+- if ( absolute_path )
+- {
+- unrar = TRUE;
+- ArchiveType = g_list_append(ArchiveType, "rar");
+- ArchiveSuffix = g_list_append(ArchiveSuffix, "*.rar");
+- g_free (absolute_path);
+- }
+- }
+
+ absolute_path = g_find_program_in_path("cpio");
+ if ( absolute_path )
+diff -Nur xarchiver-0.5.2.orig/src/new_dialog.c xarchiver-0.5.2/src/new_dialog.c
+--- xarchiver-0.5.2.orig/src/new_dialog.c 2008-11-11 06:28:46.000000000 -0200
++++ xarchiver-0.5.2/src/new_dialog.c 2014-01-24 10:56:34.274491565 -0200
+@@ -24,7 +24,7 @@
+ #include "string_utils.h"
+ #include "main.h"
+
+-extern gboolean unrar;
++extern gboolean unar;
+ extern Prefs_dialog_data *prefs_window;
+ gchar *current_new_directory = NULL;
+ gint new_combo_box = -1;
+diff -Nur xarchiver-0.5.2.orig/src/pref_dialog.c xarchiver-0.5.2/src/pref_dialog.c
+--- xarchiver-0.5.2.orig/src/pref_dialog.c 2008-11-10 06:05:07.000000000 -0200
++++ xarchiver-0.5.2/src/pref_dialog.c 2014-01-24 10:54:07.611853842 -0200
+@@ -23,7 +23,7 @@
+ #include "main.h"
+ #include "support.h"
+
+-extern gboolean unrar;
++extern gboolean unar;
+ extern gboolean xdg_open;
+ extern Extract_dialog_data *extract_window;
+ extern Add_dialog_data *add_window;
+@@ -104,7 +104,7 @@
+ {
+ if (strcmp(archive_type->data, "tgz") == 0 ||
+ strcmp(archive_type->data, "rpm") == 0 ||
+- (strcmp(archive_type->data, "rar") == 0 && unrar) )
++ (strcmp(archive_type->data, "rar") == 0 && unar) )
+ goto next;
+ else
+ gtk_combo_box_append_text (GTK_COMBO_BOX (prefs_data->combo_prefered_format),archive_type->data );
+diff -Nur xarchiver-0.5.2.orig/src/rar.c xarchiver-0.5.2/src/rar.c
+--- xarchiver-0.5.2.orig/src/rar.c 2008-11-10 06:05:07.000000000 -0200
++++ xarchiver-0.5.2/src/rar.c 2014-01-24 10:50:11.672526720 -0200
+@@ -20,7 +20,7 @@
+ #include "rar.h"
+ #include <unistd.h>
+
+-extern gboolean unrar;
++extern gboolean unar;
+ extern void xa_reload_archive_content(XArchive *archive);
+ extern void xa_create_liststore ( XArchive *archive, gchar *columns_names[]);
+
+@@ -30,19 +30,10 @@
+ gchar *command = NULL;
+ gchar *rar = NULL;
+ jump_header = read_filename = last_line = encrypted = FALSE;
++ rar = "unar";
++ archive->can_add = archive->has_sfx = FALSE;
+
+- if (unrar)
+- {
+- rar = "unrar";
+- archive->can_add = archive->has_sfx = FALSE;
+- }
+- else
+- {
+- rar = "rar";
+- archive->can_add = archive->has_sfx = TRUE;
+- }
+-
+- command = g_strconcat ( rar," v " , archive->escaped_path, NULL );
++ command = g_strconcat ( rar, archive->escaped_path, NULL );
+ archive->can_extract = archive->has_test = archive->has_properties = TRUE;
+ archive->dummy_size = 0;
+ archive->nr_of_files = 0;
+@@ -222,71 +213,6 @@
+ }
+ }
+
+-void xa_rar_delete (XArchive *archive,GSList *names)
+-{
+- gchar *command,*e_filename = NULL;
+- GSList *list = NULL,*_names;
+- GString *files = g_string_new("");
+-
+- _names = names;
+- while (_names)
+- {
+- e_filename = xa_escape_filename((gchar*)_names->data,"$'`\"\\!?* ()[]&|:;<>#");
+- g_string_prepend (files,e_filename);
+- g_string_prepend_c (files,' ');
+- _names = _names->next;
+- }
+- g_slist_foreach(names,(GFunc)g_free,NULL);
+- g_slist_free(names);
+-
+- command = g_strconcat ("rar d ",archive->escaped_path," ",files->str,NULL);
+- g_string_free(files,TRUE);
+- list = g_slist_append(list,command);
+-
+- xa_run_command (archive,list);
+- if (archive->status == XA_ARCHIVESTATUS_DELETE)
+- xa_reload_archive_content(archive);
+-}
+-
+-void xa_rar_add (XArchive *archive,GString *files,gchar *compression_string)
+-{
+- GSList *list = NULL;
+- gchar *command = NULL;
+-
+- if (archive->location_entry_path != NULL)
+- archive->working_dir = g_strdup(archive->tmp);
+-
+- if (compression_string == NULL)
+- compression_string = "3";
+- if (archive->passwd != NULL)
+- command = g_strconcat ( "rar a ",
+- archive->update ? "-u " : "",
+- archive->freshen ? "-f " : "",
+- archive->solid_archive ? "-s " : "",
+- archive->remove_files ? "-df " : "",
+- "-p" , archive->passwd,
+- " -idp ",
+- "-m",compression_string," ",
+- archive->escaped_path,
+- files->str,NULL);
+- else
+- command = g_strconcat ( "rar a ",
+- archive->update ? "-u " : "",
+- archive->freshen ? "-f " : "",
+- archive->solid_archive ? "-s " : " ",
+- archive->remove_files ? "-df " : " ",
+- "-idp ",
+- "-m",compression_string," ",
+- archive->escaped_path,
+- files->str,NULL);
+-
+- g_string_free(files,TRUE);
+- list = g_slist_append(list,command);
+-
+- xa_run_command (archive,list);
+- xa_reload_archive_content(archive);
+-}
+-
+ gboolean xa_rar_extract(XArchive *archive,GSList *files)
+ {
+ gchar *rar, *command, *e_filename = NULL;
+@@ -295,10 +221,8 @@
+ gboolean result = FALSE;
+
+ _files = files;
+- if (unrar)
+- rar = "unrar";
+- else
+- rar = "rar";
++ (unar)
++ rar = "unar";
+
+ while (_files)
+ {
+@@ -311,17 +235,13 @@
+ g_slist_free(_files);
+
+ if (archive->passwd != NULL)
+- command = g_strconcat (rar," ",archive->full_path ? "x " : "e ",
+- archive->freshen ? "-f " : "" , archive->update ? "-u " : "",
++ command = g_strconcat (rar," ",archive->full_path ? "-q ",
+ " -p",archive->passwd,
+- archive->overwrite ? " -o+" : " -o-",
+- " -idp ",
++ archive->overwrite ? " -f",
+ archive->escaped_path,names->str," ",archive->extraction_path , NULL );
+ else
+- command = g_strconcat (rar," ",archive->full_path ? "x " : "e ",
+- archive->freshen ? "-f " : "" , archive->update ? "-u " : "",
+- archive->overwrite ? "-o+" : "-o-",
+- " -idp ",
++ command = g_strconcat (rar," ",archive->full_path ? "-q ",
++ archive->overwrite ? " -f",
+ archive->escaped_path,names->str," ",archive->extraction_path , NULL );
+ g_string_free(names,TRUE);
+ list = g_slist_append(list,command);
+@@ -329,24 +249,3 @@
+ result = xa_run_command (archive,list);
+ return result;
+ }
+-
+-void xa_rar_test (XArchive *archive)
+-{
+- gchar *rar = NULL;
+- gchar *command = NULL;
+- GSList *list = NULL;
+-
+- if (unrar)
+- rar = "unrar";
+- else
+- rar = "rar";
+-
+- archive->status = XA_ARCHIVESTATUS_TEST;
+- if (archive->passwd != NULL)
+- command = g_strconcat (rar," t -idp -p" , archive->passwd ," " , archive->escaped_path, NULL);
+- else
+- command = g_strconcat (rar," t -idp " , archive->escaped_path, NULL);
+-
+- list = g_slist_append(list,command);
+- xa_run_command (archive,list);
+- }
+diff -Nur xarchiver-0.5.2.orig/src/rar.h xarchiver-0.5.2/src/rar.h
+--- xarchiver-0.5.2.orig/src/rar.h 2008-08-22 05:12:38.000000000 -0300
++++ xarchiver-0.5.2/src/rar.h 2014-01-24 10:49:13.140141939 -0200
+@@ -26,10 +26,7 @@
+ #include "support.h"
+ #include "archive.h"
+ gboolean jump_header,jump_comment,read_filename, last_line, encrypted;
+-void xa_rar_delete (XArchive *,GSList *);
+-void xa_rar_add (XArchive *,GString *,gchar *);
+ gboolean xa_rar_extract(XArchive *,GSList *);
+-void xa_rar_test (XArchive *);
+ void xa_get_rar_line_content (gchar *line, gpointer data);
+ void xa_open_rar ( XArchive *archive );
+ #endif
+diff -Nur xarchiver-0.5.2.orig/src/window.c xarchiver-0.5.2/src/window.c
+--- xarchiver-0.5.2.orig/src/window.c 2008-11-11 06:31:45.000000000 -0200
++++ xarchiver-0.5.2/src/window.c 2014-01-24 10:54:28.673636196 -0200
+@@ -26,7 +26,7 @@
+
+ extern GList *ArchiveType;
+ extern GList *ArchiveSuffix;
+-extern gboolean unrar;
++extern gboolean unar;
+ extern gboolean xdg_open;
+ extern Prefs_dialog_data *prefs_window;
+ extern Extract_dialog_data *extract_window;
+@@ -1567,7 +1567,7 @@
+ gtk_widget_show(selected_frame);
+ gtk_widget_set_sensitive(deselect_all,TRUE);
+ }
+- if ( (archive->type == XARCHIVETYPE_RAR && unrar) || archive->type == XARCHIVETYPE_BZIP2 || archive->type == XARCHIVETYPE_GZIP)
++ if ( (archive->type == XARCHIVETYPE_RAR && unar) || archive->type == XARCHIVETYPE_BZIP2 || archive->type == XARCHIVETYPE_GZIP)
+ {
+ gtk_widget_set_sensitive (delete_menu,FALSE);
+ gtk_widget_set_sensitive (rename_menu,FALSE);
+@@ -1781,7 +1781,7 @@
+ else
+ idx = xa_find_archive_index (current_page);
+
+- if (archive[idx]->type == XARCHIVETYPE_RAR && unrar)
++ if (archive[idx]->type == XARCHIVETYPE_RAR && unar)
+ {
+ response = xa_show_message_dialog (GTK_WINDOW (xa_main_window),GTK_DIALOG_MODAL,GTK_MESSAGE_ERROR,GTK_BUTTONS_OK,_("Can't perform this action:"),_("You have to install rar package!"));
+ return;
diff --git a/libre/xarchiver-libre/xarchiver-0.5.2-add_mime_types.patch b/libre/xarchiver-libre/xarchiver-0.5.2-add_mime_types.patch
new file mode 100644
index 000000000..3b510fcb8
--- /dev/null
+++ b/libre/xarchiver-libre/xarchiver-0.5.2-add_mime_types.patch
@@ -0,0 +1,9 @@
+diff -Naur xarchiver-0.5.2.orig/xarchiver.desktop.in xarchiver-0.5.2/xarchiver.desktop.in
+--- xarchiver-0.5.2.orig/xarchiver.desktop.in 2014-01-24 04:05:33.438561000 +0100
++++ xarchiver-0.5.2/xarchiver.desktop.in 2014-01-24 04:44:00.625750394 +0100
+@@ -11,4 +11,4 @@
+ X-MultipleArgs=false
+ Categories=GTK;Archiving;Utility;
+ StartupNotify=true
+-MimeType=application/x-arj;application/arj;application/x-bzip;application/x-bzip-compressed-tar;application/x-gzip;application/x-rar;application/x-rar-compressed;application/x-tar;application/x-zip;application/x-zip-compressed;application/zip;multipart/x-zip;application/x-7z-compressed;application/x-compressed-tar;application/x-bzip2;application/x-bzip2-compressed-tar;
++MimeType=application/x-arj;application/arj;application/x-bzip;application/x-bzip-compressed-tar;application/x-gzip;application/x-tar;application/x-zip;application/x-zip-compressed;application/zip;application/x-7z-compressed;application/x-compressed-tar;application/x-bzip2;application/x-bzip2-compressed-tar;application/x-lzma;application/x-lzma-compressed-tar;application/x-lzop;application/x-lzop-compressed-tar;application/x-xz;application/x-xz-compressed-tar;application/x-debian-package;application/x-rpm;
diff --git a/libre/xarchiver-libre/xarchiver-0.5.2-add_unar_support.patch b/libre/xarchiver-libre/xarchiver-0.5.2-add_unar_support.patch
new file mode 100644
index 000000000..457fe80e5
--- /dev/null
+++ b/libre/xarchiver-libre/xarchiver-0.5.2-add_unar_support.patch
@@ -0,0 +1,354 @@
+diff -Nur xarchiver-0.5.2.orig/doc/html/ch03s03.html xarchiver-0.5.2/doc/html/ch03s03.html
+--- xarchiver-0.5.2.orig/doc/html/ch03s03.html 2008-11-03 04:49:49.000000000 -0200
++++ xarchiver-0.5.2/doc/html/ch03s03.html 2014-01-24 11:02:20.640986656 -0200
+@@ -1,7 +1,7 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+ <html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>General</title><link rel="stylesheet" href="xarchiver.css" type="text/css" /><meta name="generator" content="DocBook XSL Stylesheets V1.71.0" /><link rel="start" href="index.html" title="Xarchiver 0.5" /><link rel="up" href="ch03.html" title="Chapter 3. Usage" /><link rel="prev" href="ch03s02.html" title="Command line options" /><link rel="next" href="ch03s04.html" title="Xarchiver menu" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">General</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch03s02.html">Prev</a> </td><th width="60%" align="center">Chapter 3. Usage</th><td width="20%" align="right"> <a accesskey="n" href="ch03s04.html">Next</a></td></tr></table><hr /></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="general"></a>General</h2></div></div></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="general_startup"></a>Startup</h3></div></div></div><p>
+- At startup, Xarchiver detects the available installed archivers (tar,rar,zip etc) and the script <i>xdg-open</i> for handling different file types. Since Xarchiver is a frontend (a graphic user interface to the cmd-line executables) it can't create archives whose archiver is not available. For instance if you have the free edition of rar, unrar, Xarchiver can't create rar archives since unrar allows rar archives to be opened, tested and extracted but not to be created.
++ At startup, Xarchiver detects the available installed archivers (tar,rar,zip etc) and the script <i>xdg-open</i> for handling different file types. Since Xarchiver is a frontend (a graphic user interface to the cmd-line executables) it can't create archives whose archiver is not available. For instance if you have the free as in freedom alternative of rar, unar, Xarchiver can't create rar archives since unar allows rar archives to be opened, tested and extracted but not to be created.
+ </p></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="how_it_works"></a>How it works</h3></div></div></div><p>
+ Xarchiver will run in the background the cmd-line executable of the archiver with the archiver's proper switches to perform the selected operation. If something goes wrong Xarchiver reports the full output of the archiver executable in the command line output window. From the release 0.5 the files in the archive can be opened within Xarchiver. The script <i>xdg-open</i> will detect the file type and run the proper application to handle it. If you don't have such script installed in your system (it's found in the xdg-utils package) Xarchiver will recognize HTML, txt and images files only. The Preferences dialog will notify this to you when you click the Advanced section inside it.
+ </p></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="dnd"></a>Drag and Drop</h3></div></div></div><p>
+diff -Nur xarchiver-0.5.2.orig/doc/xarchiver.docbook xarchiver-0.5.2/doc/xarchiver.docbook
+--- xarchiver-0.5.2.orig/doc/xarchiver.docbook 2007-08-22 07:49:19.000000000 -0300
++++ xarchiver-0.5.2/doc/xarchiver.docbook 2014-01-24 11:01:17.088748863 -0200
+@@ -204,7 +204,7 @@
+ <section id="general_startup">
+ <title>Startup</title>
+ <para>
+- At startup, &app; detects the available installed archivers (tar,rar,zip etc). Since Xarchiver is a frontend (a graphic user interface to the cmd-line executables) it can't create archives whose archiver is not available. For instance if you have the free edition of rar, unrar, Xarchiver can't create rar archives since unrar allows rar archives to be opened, tested and extracted but not to be created.
++ At startup, &app; detects the available installed archivers (tar,rar,zip etc). Since Xarchiver is a frontend (a graphic user interface to the cmd-line executables) it can't create archives whose archiver is not available. For instance if you have the free as in freedom alternative of rar, unar, Xarchiver can't create rar archives since unar allows rar archives to be opened and extracted but not to be created.
+ </para>
+ </section>
+ <section id="how_it_works">
+diff -Nur xarchiver-0.5.2.orig/src/extract_dialog.c xarchiver-0.5.2/src/extract_dialog.c
+--- xarchiver-0.5.2.orig/src/extract_dialog.c 2008-11-10 08:28:11.000000000 -0200
++++ xarchiver-0.5.2/src/extract_dialog.c 2014-01-24 10:55:28.209263885 -0200
+@@ -24,7 +24,7 @@
+ #include "string_utils.h"
+ #include "support.h"
+
+-extern gboolean unrar,batch_mode;
++extern gboolean unar,batch_mode;
+ extern Prefs_dialog_data *prefs_window;
+ extern Progress_bar_data *pb;
+ extern extract_func extract [XARCHIVETYPE_COUNT];
+@@ -290,11 +290,7 @@
+ GSList *names = NULL;
+ GtkTreeModel *model;
+ int response;
+-
+- if (unrar)
+- rar = "unrar";
+- else
+- rar = "rar";
++ rar = "unar";
+
+ while (! done)
+ {
+diff -Nur xarchiver-0.5.2.orig/src/interface.c xarchiver-0.5.2/src/interface.c
+--- xarchiver-0.5.2.orig/src/interface.c 2008-11-11 06:09:01.000000000 -0200
++++ xarchiver-0.5.2/src/interface.c 2014-01-24 10:56:03.893317117 -0200
+@@ -45,7 +45,7 @@
+ { "text/uri-list",0,0 },
+ };
+
+-extern gboolean unrar,batch_mode;
++extern gboolean unar,batch_mode;
+
+ static gboolean xa_progress_dialog_delete_event (GtkWidget *caller,GdkEvent *event,GPid pid);
+ static void xa_progress_dialog_stop_action (GtkWidget *widget,GPid pid);
+@@ -629,7 +629,7 @@
+ {
+ gtk_widget_show(selected_frame);
+ gtk_widget_set_sensitive(deselect_all,TRUE);
+- if (archive[id]->type == XARCHIVETYPE_RAR && unrar)
++ if (archive[id]->type == XARCHIVETYPE_RAR && unar)
+ {
+ gtk_widget_set_sensitive (delete_menu,FALSE);
+ gtk_widget_set_sensitive (rename_menu,FALSE);
+diff -Nur xarchiver-0.5.2.orig/src/main.c xarchiver-0.5.2/src/main.c
+--- xarchiver-0.5.2.orig/src/main.c 2008-11-10 09:21:43.000000000 -0200
++++ xarchiver-0.5.2/src/main.c 2014-01-24 10:59:39.108832843 -0200
+@@ -33,7 +33,7 @@
+ gchar *add_files;
+ gboolean error_output, file_to_open, ask_and_extract, ask_and_add, multi_extract;
+ gboolean batch_mode = FALSE;
+-gboolean unrar = FALSE;
++gboolean unar = FALSE;
+ gboolean sevenzr = FALSE, sevenza = FALSE, xdg_open = FALSE;
+ int response;
+ extern gchar *current_open_directory;
+@@ -410,24 +410,14 @@
+ //ArchiveSuffix = g_list_append(ArchiveSuffix, "");
+ }
+
+- absolute_path = g_find_program_in_path ("rar");
+- if ( absolute_path )
++ absolute_path = g_find_program_in_path("unar");
++ if ( absolute_path )
+ {
++ unar = TRUE;
+ ArchiveType = g_list_append(ArchiveType, "rar");
+ ArchiveSuffix = g_list_append(ArchiveSuffix, "*.rar");
+ g_free (absolute_path);
+ }
+- else
+- {
+- absolute_path = g_find_program_in_path("unrar");
+- if ( absolute_path )
+- {
+- unrar = TRUE;
+- ArchiveType = g_list_append(ArchiveType, "rar");
+- ArchiveSuffix = g_list_append(ArchiveSuffix, "*.rar");
+- g_free (absolute_path);
+- }
+- }
+
+ absolute_path = g_find_program_in_path("cpio");
+ if ( absolute_path )
+diff -Nur xarchiver-0.5.2.orig/src/new_dialog.c xarchiver-0.5.2/src/new_dialog.c
+--- xarchiver-0.5.2.orig/src/new_dialog.c 2008-11-11 06:28:46.000000000 -0200
++++ xarchiver-0.5.2/src/new_dialog.c 2014-01-24 10:56:34.274491565 -0200
+@@ -24,7 +24,7 @@
+ #include "string_utils.h"
+ #include "main.h"
+
+-extern gboolean unrar;
++extern gboolean unar;
+ extern Prefs_dialog_data *prefs_window;
+ gchar *current_new_directory = NULL;
+ gint new_combo_box = -1;
+diff -Nur xarchiver-0.5.2.orig/src/pref_dialog.c xarchiver-0.5.2/src/pref_dialog.c
+--- xarchiver-0.5.2.orig/src/pref_dialog.c 2008-11-10 06:05:07.000000000 -0200
++++ xarchiver-0.5.2/src/pref_dialog.c 2014-01-24 10:54:07.611853842 -0200
+@@ -23,7 +23,7 @@
+ #include "main.h"
+ #include "support.h"
+
+-extern gboolean unrar;
++extern gboolean unar;
+ extern gboolean xdg_open;
+ extern Extract_dialog_data *extract_window;
+ extern Add_dialog_data *add_window;
+@@ -104,7 +104,7 @@
+ {
+ if (strcmp(archive_type->data, "tgz") == 0 ||
+ strcmp(archive_type->data, "rpm") == 0 ||
+- (strcmp(archive_type->data, "rar") == 0 && unrar) )
++ (strcmp(archive_type->data, "rar") == 0 && unar) )
+ goto next;
+ else
+ gtk_combo_box_append_text (GTK_COMBO_BOX (prefs_data->combo_prefered_format),archive_type->data );
+diff -Nur xarchiver-0.5.2.orig/src/rar.c xarchiver-0.5.2/src/rar.c
+--- xarchiver-0.5.2.orig/src/rar.c 2008-11-10 06:05:07.000000000 -0200
++++ xarchiver-0.5.2/src/rar.c 2014-01-24 10:50:11.672526720 -0200
+@@ -20,7 +20,7 @@
+ #include "rar.h"
+ #include <unistd.h>
+
+-extern gboolean unrar;
++extern gboolean unar;
+ extern void xa_reload_archive_content(XArchive *archive);
+ extern void xa_create_liststore ( XArchive *archive, gchar *columns_names[]);
+
+@@ -30,19 +30,10 @@
+ gchar *command = NULL;
+ gchar *rar = NULL;
+ jump_header = read_filename = last_line = encrypted = FALSE;
++ rar = "unar";
++ archive->can_add = archive->has_sfx = FALSE;
+
+- if (unrar)
+- {
+- rar = "unrar";
+- archive->can_add = archive->has_sfx = FALSE;
+- }
+- else
+- {
+- rar = "rar";
+- archive->can_add = archive->has_sfx = TRUE;
+- }
+-
+- command = g_strconcat ( rar," v " , archive->escaped_path, NULL );
++ command = g_strconcat ( rar, archive->escaped_path, NULL );
+ archive->can_extract = archive->has_test = archive->has_properties = TRUE;
+ archive->dummy_size = 0;
+ archive->nr_of_files = 0;
+@@ -222,71 +213,6 @@
+ }
+ }
+
+-void xa_rar_delete (XArchive *archive,GSList *names)
+-{
+- gchar *command,*e_filename = NULL;
+- GSList *list = NULL,*_names;
+- GString *files = g_string_new("");
+-
+- _names = names;
+- while (_names)
+- {
+- e_filename = xa_escape_filename((gchar*)_names->data,"$'`\"\\!?* ()[]&|:;<>#");
+- g_string_prepend (files,e_filename);
+- g_string_prepend_c (files,' ');
+- _names = _names->next;
+- }
+- g_slist_foreach(names,(GFunc)g_free,NULL);
+- g_slist_free(names);
+-
+- command = g_strconcat ("rar d ",archive->escaped_path," ",files->str,NULL);
+- g_string_free(files,TRUE);
+- list = g_slist_append(list,command);
+-
+- xa_run_command (archive,list);
+- if (archive->status == XA_ARCHIVESTATUS_DELETE)
+- xa_reload_archive_content(archive);
+-}
+-
+-void xa_rar_add (XArchive *archive,GString *files,gchar *compression_string)
+-{
+- GSList *list = NULL;
+- gchar *command = NULL;
+-
+- if (archive->location_entry_path != NULL)
+- archive->working_dir = g_strdup(archive->tmp);
+-
+- if (compression_string == NULL)
+- compression_string = "3";
+- if (archive->passwd != NULL)
+- command = g_strconcat ( "rar a ",
+- archive->update ? "-u " : "",
+- archive->freshen ? "-f " : "",
+- archive->solid_archive ? "-s " : "",
+- archive->remove_files ? "-df " : "",
+- "-p" , archive->passwd,
+- " -idp ",
+- "-m",compression_string," ",
+- archive->escaped_path,
+- files->str,NULL);
+- else
+- command = g_strconcat ( "rar a ",
+- archive->update ? "-u " : "",
+- archive->freshen ? "-f " : "",
+- archive->solid_archive ? "-s " : " ",
+- archive->remove_files ? "-df " : " ",
+- "-idp ",
+- "-m",compression_string," ",
+- archive->escaped_path,
+- files->str,NULL);
+-
+- g_string_free(files,TRUE);
+- list = g_slist_append(list,command);
+-
+- xa_run_command (archive,list);
+- xa_reload_archive_content(archive);
+-}
+-
+ gboolean xa_rar_extract(XArchive *archive,GSList *files)
+ {
+ gchar *rar, *command, *e_filename = NULL;
+@@ -295,10 +221,8 @@
+ gboolean result = FALSE;
+
+ _files = files;
+- if (unrar)
+- rar = "unrar";
+- else
+- rar = "rar";
++ (unar)
++ rar = "unar";
+
+ while (_files)
+ {
+@@ -311,17 +235,13 @@
+ g_slist_free(_files);
+
+ if (archive->passwd != NULL)
+- command = g_strconcat (rar," ",archive->full_path ? "x " : "e ",
+- archive->freshen ? "-f " : "" , archive->update ? "-u " : "",
++ command = g_strconcat (rar," ",archive->full_path ? "-q ",
+ " -p",archive->passwd,
+- archive->overwrite ? " -o+" : " -o-",
+- " -idp ",
++ archive->overwrite ? " -f",
+ archive->escaped_path,names->str," ",archive->extraction_path , NULL );
+ else
+- command = g_strconcat (rar," ",archive->full_path ? "x " : "e ",
+- archive->freshen ? "-f " : "" , archive->update ? "-u " : "",
+- archive->overwrite ? "-o+" : "-o-",
+- " -idp ",
++ command = g_strconcat (rar," ",archive->full_path ? "-q ",
++ archive->overwrite ? " -f",
+ archive->escaped_path,names->str," ",archive->extraction_path , NULL );
+ g_string_free(names,TRUE);
+ list = g_slist_append(list,command);
+@@ -329,24 +249,3 @@
+ result = xa_run_command (archive,list);
+ return result;
+ }
+-
+-void xa_rar_test (XArchive *archive)
+-{
+- gchar *rar = NULL;
+- gchar *command = NULL;
+- GSList *list = NULL;
+-
+- if (unrar)
+- rar = "unrar";
+- else
+- rar = "rar";
+-
+- archive->status = XA_ARCHIVESTATUS_TEST;
+- if (archive->passwd != NULL)
+- command = g_strconcat (rar," t -idp -p" , archive->passwd ," " , archive->escaped_path, NULL);
+- else
+- command = g_strconcat (rar," t -idp " , archive->escaped_path, NULL);
+-
+- list = g_slist_append(list,command);
+- xa_run_command (archive,list);
+- }
+diff -Nur xarchiver-0.5.2.orig/src/rar.h xarchiver-0.5.2/src/rar.h
+--- xarchiver-0.5.2.orig/src/rar.h 2008-08-22 05:12:38.000000000 -0300
++++ xarchiver-0.5.2/src/rar.h 2014-01-24 10:49:13.140141939 -0200
+@@ -26,10 +26,7 @@
+ #include "support.h"
+ #include "archive.h"
+ gboolean jump_header,jump_comment,read_filename, last_line, encrypted;
+-void xa_rar_delete (XArchive *,GSList *);
+-void xa_rar_add (XArchive *,GString *,gchar *);
+ gboolean xa_rar_extract(XArchive *,GSList *);
+-void xa_rar_test (XArchive *);
+ void xa_get_rar_line_content (gchar *line, gpointer data);
+ void xa_open_rar ( XArchive *archive );
+ #endif
+diff -Nur xarchiver-0.5.2.orig/src/window.c xarchiver-0.5.2/src/window.c
+--- xarchiver-0.5.2.orig/src/window.c 2008-11-11 06:31:45.000000000 -0200
++++ xarchiver-0.5.2/src/window.c 2014-01-24 10:54:28.673636196 -0200
+@@ -26,7 +26,7 @@
+
+ extern GList *ArchiveType;
+ extern GList *ArchiveSuffix;
+-extern gboolean unrar;
++extern gboolean unar;
+ extern gboolean xdg_open;
+ extern Prefs_dialog_data *prefs_window;
+ extern Extract_dialog_data *extract_window;
+@@ -1567,7 +1567,7 @@
+ gtk_widget_show(selected_frame);
+ gtk_widget_set_sensitive(deselect_all,TRUE);
+ }
+- if ( (archive->type == XARCHIVETYPE_RAR && unrar) || archive->type == XARCHIVETYPE_BZIP2 || archive->type == XARCHIVETYPE_GZIP)
++ if ( (archive->type == XARCHIVETYPE_RAR && unar) || archive->type == XARCHIVETYPE_BZIP2 || archive->type == XARCHIVETYPE_GZIP)
+ {
+ gtk_widget_set_sensitive (delete_menu,FALSE);
+ gtk_widget_set_sensitive (rename_menu,FALSE);
+@@ -1781,7 +1781,7 @@
+ else
+ idx = xa_find_archive_index (current_page);
+
+- if (archive[idx]->type == XARCHIVETYPE_RAR && unrar)
++ if (archive[idx]->type == XARCHIVETYPE_RAR && unar)
+ {
+ response = xa_show_message_dialog (GTK_WINDOW (xa_main_window),GTK_DIALOG_MODAL,GTK_MESSAGE_ERROR,GTK_BUTTONS_OK,_("Can't perform this action:"),_("You have to install rar package!"));
+ return;
diff --git a/libre/xarchiver-libre/xarchiver-0.5.2-add_xz_support.patch b/libre/xarchiver-libre/xarchiver-0.5.2-add_xz_support.patch
new file mode 100644
index 000000000..d246a8e19
--- /dev/null
+++ b/libre/xarchiver-libre/xarchiver-0.5.2-add_xz_support.patch
@@ -0,0 +1,397 @@
+diff -uNr xarchiver-0.5.2.orig/src/add_dialog.c xarchiver-0.5.2/src/add_dialog.c
+--- xarchiver-0.5.2.orig/src/add_dialog.c 2008-11-10 19:41:31.000000000 +0900
++++ xarchiver-0.5.2/src/add_dialog.c 2013-05-11 10:01:47.887094708 +0900
+@@ -209,7 +209,7 @@
+ else
+ gtk_widget_set_size_request (add_dialog->dialog1,530,420);
+
+- if (archive->type == XARCHIVETYPE_BZIP2 || archive->type == XARCHIVETYPE_GZIP || archive->type == XARCHIVETYPE_LZMA || archive->type == XARCHIVETYPE_LZOP)
++ if (archive->type == XARCHIVETYPE_BZIP2 || archive->type == XARCHIVETYPE_GZIP || archive->type == XARCHIVETYPE_LZMA || archive->type == XARCHIVETYPE_XZ || archive->type == XARCHIVETYPE_LZOP)
+ gtk_file_chooser_set_select_multiple(GTK_FILE_CHOOSER(add_dialog->filechooserwidget1),FALSE);
+ else
+ gtk_file_chooser_set_select_multiple(GTK_FILE_CHOOSER(add_dialog->filechooserwidget1),TRUE);
+@@ -222,7 +222,7 @@
+ else
+ gtk_widget_set_sensitive(add_dialog->store_path,TRUE);
+ /* 7z doesn't appear to let the user chooses if storing full paths */
+- if (archive->type == XARCHIVETYPE_7ZIP || archive->type == XARCHIVETYPE_LZOP || archive->type == XARCHIVETYPE_BZIP2 || archive->type == XARCHIVETYPE_GZIP || archive->type == XARCHIVETYPE_LZMA)
++ if (archive->type == XARCHIVETYPE_7ZIP || archive->type == XARCHIVETYPE_LZOP || archive->type == XARCHIVETYPE_BZIP2 || archive->type == XARCHIVETYPE_GZIP || archive->type == XARCHIVETYPE_LZMA || archive->type == XARCHIVETYPE_XZ )
+ {
+ flag = FALSE;
+ }
+@@ -244,7 +244,7 @@
+ flag = TRUE;
+ gtk_widget_set_sensitive(add_dialog->solid_archive,flag);
+
+- if (archive->type != XARCHIVETYPE_TAR && archive->type != XARCHIVETYPE_TAR_GZ && archive->type != XARCHIVETYPE_TAR_LZMA && archive->type != XARCHIVETYPE_TAR_BZ2 && archive->type != XARCHIVETYPE_TAR_LZOP)
++ if (archive->type != XARCHIVETYPE_TAR && archive->type != XARCHIVETYPE_TAR_GZ && archive->type != XARCHIVETYPE_TAR_LZMA && archive->type != XARCHIVETYPE_TAR_XZ && archive->type != XARCHIVETYPE_TAR_BZ2 && archive->type != XARCHIVETYPE_TAR_LZOP)
+ {
+ flag = TRUE;
+ if (archive->type == XARCHIVETYPE_7ZIP)
+@@ -306,7 +306,7 @@
+ g_signal_connect (G_OBJECT (add_dialog->compression_value),"value-changed",G_CALLBACK (fix_adjustment_value), NULL);
+ gtk_tooltips_set_tip (add_dialog->option_tooltip,add_dialog->compression_scale, compression_msg, NULL );
+
+- if (archive->type == XARCHIVETYPE_TAR || archive->type == XARCHIVETYPE_TAR_GZ || archive->type == XARCHIVETYPE_TAR_LZMA || archive->type == XARCHIVETYPE_TAR_BZ2 || archive->type == XARCHIVETYPE_TAR_LZOP)
++ if (archive->type == XARCHIVETYPE_TAR || archive->type == XARCHIVETYPE_TAR_GZ || archive->type == XARCHIVETYPE_TAR_LZMA || archive->type == XARCHIVETYPE_TAR_XZ || archive->type == XARCHIVETYPE_TAR_BZ2 || archive->type == XARCHIVETYPE_TAR_LZOP)
+ flag = FALSE;
+ else
+ flag = TRUE;
+diff -uNr xarchiver-0.5.2.orig/src/archive.h xarchiver-0.5.2/src/archive.h
+--- xarchiver-0.5.2.orig/src/archive.h 2008-11-07 17:49:41.000000000 +0900
++++ xarchiver-0.5.2/src/archive.h 2013-05-11 10:01:47.888094708 +0900
+@@ -30,6 +30,7 @@
+ XARCHIVETYPE_BZIP2,
+ XARCHIVETYPE_GZIP,
+ XARCHIVETYPE_LZMA,
++ XARCHIVETYPE_XZ,
+ XARCHIVETYPE_LZOP,
+ XARCHIVETYPE_RAR,
+ XARCHIVETYPE_RPM,
+@@ -37,6 +38,7 @@
+ XARCHIVETYPE_TAR_BZ2,
+ XARCHIVETYPE_TAR_GZ,
+ XARCHIVETYPE_TAR_LZMA,
++ XARCHIVETYPE_TAR_XZ,
+ XARCHIVETYPE_TAR_LZOP,
+ XARCHIVETYPE_ZIP,
+ XARCHIVETYPE_LHA,
+diff -uNr xarchiver-0.5.2.orig/src/bzip2.c xarchiver-0.5.2/src/bzip2.c
+--- xarchiver-0.5.2.orig/src/bzip2.c 2008-11-10 20:17:48.000000000 +0900
++++ xarchiver-0.5.2/src/bzip2.c 2013-05-11 10:01:47.888094708 +0900
+@@ -54,6 +54,15 @@
+ archive->extract = extract[archive->type];
+ xa_open_tar_compressed_file(archive);
+ }
++ else if (g_str_has_suffix(archive->escaped_path,".tar.xz") || g_str_has_suffix (archive->escaped_path,".txz"))
++ {
++ archive->type = XARCHIVETYPE_TAR_XZ;
++ archive->format = "TAR.XZ";
++ archive->delete = delete[archive->type];
++ archive->add = add[archive->type];
++ archive->extract = extract[archive->type];
++ xa_open_tar_compressed_file(archive);
++ }
+ else if (g_str_has_suffix(archive->escaped_path,".tar.lzop") ||
+ g_str_has_suffix (archive->escaped_path,".tzo") ||
+ g_str_has_suffix(archive->escaped_path,".tar.lzo"))
+@@ -85,6 +94,12 @@
+ executable = "lzma ";
+ len = 5;
+ }
++ else if (archive->type == XARCHIVETYPE_XZ)
++ {
++ archive->format = "XZ";
++ executable = "xz ";
++ len = 5;
++ }
+ else if (archive->type == XARCHIVETYPE_LZOP)
+ {
+ archive->format = "LZOP";
+@@ -163,6 +178,8 @@
+ command = g_strconcat(tar," tfjv ",archive->escaped_path,NULL);
+ else if (archive->type == XARCHIVETYPE_TAR_LZMA)
+ command = g_strconcat(tar," tv --use-compress-program=lzma -f ",archive->escaped_path,NULL);
++ else if (archive->type == XARCHIVETYPE_TAR_XZ)
++ command = g_strconcat(tar," tv --use-compress-program=xz -f ",archive->escaped_path,NULL);
+ else if (archive->type == XARCHIVETYPE_TAR_LZOP)
+ command = g_strconcat(tar," tv --use-compress-program=lzop -f ",archive->escaped_path,NULL);
+ /* else fail? */
+@@ -205,6 +222,11 @@
+ executable = "lzma ";
+ len = 5;
+ }
++ else if (archive->type == XARCHIVETYPE_XZ)
++ {
++ executable = "xz ";
++ len = 5;
++ }
+ else if (archive->type == XARCHIVETYPE_LZOP)
+ {
+ executable = "lzop ";
+diff -uNr xarchiver-0.5.2.orig/src/extract_dialog.c xarchiver-0.5.2/src/extract_dialog.c
+--- xarchiver-0.5.2.orig/src/extract_dialog.c 2008-11-10 19:28:11.000000000 +0900
++++ xarchiver-0.5.2/src/extract_dialog.c 2013-05-11 10:01:47.889094708 +0900
+@@ -815,6 +815,11 @@
+ archive->type = XARCHIVETYPE_TAR_LZMA;
+ archive->extract = extract[XARCHIVETYPE_TAR_LZMA];
+ }
++ else if (g_str_has_suffix(archive->escaped_path,".tar.xz")|| g_str_has_suffix (archive->escaped_path,".txz"))
++ {
++ archive->type = XARCHIVETYPE_TAR_XZ;
++ archive->extract = extract[XARCHIVETYPE_TAR_XZ];
++ }
+ else if (g_str_has_suffix(archive->escaped_path,".tar.lzop") ||
+ g_str_has_suffix (archive->escaped_path,".tzo") ||
+ g_str_has_suffix(archive->escaped_path,".tar.lzo"))
+diff -uNr xarchiver-0.5.2.orig/src/main.c xarchiver-0.5.2/src/main.c
+--- xarchiver-0.5.2.orig/src/main.c 2008-11-10 20:21:43.000000000 +0900
++++ xarchiver-0.5.2/src/main.c 2013-05-11 10:17:01.696094044 +0900
+@@ -296,9 +296,10 @@
+ open_archive[XARCHIVETYPE_BZIP2] = &xa_open_bzip2_lzma;
+ open_archive[XARCHIVETYPE_GZIP] = &xa_open_gzip;
+ open_archive[XARCHIVETYPE_LZMA] = &xa_open_bzip2_lzma;
++ open_archive[XARCHIVETYPE_XZ] = &xa_open_bzip2_lzma;
+ open_archive[XARCHIVETYPE_RAR] = &xa_open_rar;
+ open_archive[XARCHIVETYPE_RPM] = &xa_open_rpm;
+- open_archive[XARCHIVETYPE_TAR] = open_archive[XARCHIVETYPE_TAR_BZ2] = open_archive[XARCHIVETYPE_TAR_GZ] = open_archive[XARCHIVETYPE_TAR_LZMA] = open_archive[XARCHIVETYPE_TAR_LZOP] = &xa_open_tar;
++ open_archive[XARCHIVETYPE_TAR] = open_archive[XARCHIVETYPE_TAR_BZ2] = open_archive[XARCHIVETYPE_TAR_GZ] = open_archive[XARCHIVETYPE_TAR_LZMA] = open_archive[XARCHIVETYPE_TAR_XZ] = open_archive[XARCHIVETYPE_TAR_LZOP] = &xa_open_tar;
+ open_archive[XARCHIVETYPE_ZIP] = &xa_open_zip;
+ open_archive[XARCHIVETYPE_LHA] = &xa_open_lha;
+ open_archive[XARCHIVETYPE_LZOP] = &xa_open_bzip2_lzma;
+@@ -310,9 +311,10 @@
+ delete[XARCHIVETYPE_BZIP2] = 0;
+ delete[XARCHIVETYPE_GZIP] = 0;
+ delete[XARCHIVETYPE_LZMA] = 0;
++ delete[XARCHIVETYPE_XZ] = 0;
+ delete[XARCHIVETYPE_RAR] = &xa_rar_delete;
+ delete[XARCHIVETYPE_RPM] = 0;
+- delete[XARCHIVETYPE_TAR] = delete[XARCHIVETYPE_TAR_BZ2] = delete[XARCHIVETYPE_TAR_GZ] = delete[XARCHIVETYPE_TAR_LZMA] = delete[XARCHIVETYPE_TAR_LZOP] = &xa_tar_delete;
++ delete[XARCHIVETYPE_TAR] = delete[XARCHIVETYPE_TAR_BZ2] = delete[XARCHIVETYPE_TAR_GZ] = delete[XARCHIVETYPE_TAR_LZMA] = delete[XARCHIVETYPE_TAR_XZ] = delete[XARCHIVETYPE_TAR_LZOP] = &xa_tar_delete;
+ delete[XARCHIVETYPE_ZIP] = &xa_zip_delete;
+ delete[XARCHIVETYPE_LHA] = &xa_lha_delete;
+ delete[XARCHIVETYPE_LZOP] = 0;
+@@ -322,10 +324,10 @@
+ add[XARCHIVETYPE_7ZIP] = &xa_7zip_add;
+ add[XARCHIVETYPE_ARJ] = &xa_arj_add;
+ add[XARCHIVETYPE_DEB] = 0;
+- add[XARCHIVETYPE_BZIP2] = add[XARCHIVETYPE_GZIP] = add[XARCHIVETYPE_LZMA] = &xa_tar_add;
++ add[XARCHIVETYPE_BZIP2] = add[XARCHIVETYPE_GZIP] = add[XARCHIVETYPE_LZMA] = add[XARCHIVETYPE_XZ] = &xa_tar_add;
+ add[XARCHIVETYPE_RAR] = &xa_rar_add;
+ add[XARCHIVETYPE_RPM] = 0;
+- add[XARCHIVETYPE_TAR] = add[XARCHIVETYPE_TAR_BZ2] = add[XARCHIVETYPE_TAR_GZ] = add[XARCHIVETYPE_TAR_LZMA] = add[XARCHIVETYPE_TAR_LZOP] = &xa_tar_add;
++ add[XARCHIVETYPE_TAR] = add[XARCHIVETYPE_TAR_BZ2] = add[XARCHIVETYPE_TAR_GZ] = add[XARCHIVETYPE_TAR_LZMA] = add[XARCHIVETYPE_TAR_XZ] = add[XARCHIVETYPE_TAR_LZOP] = &xa_tar_add;
+ add[XARCHIVETYPE_ZIP] = &xa_zip_add;
+ add[XARCHIVETYPE_LHA] = &xa_lha_add;
+ add[XARCHIVETYPE_LZOP] = &xa_tar_add;
+@@ -334,10 +336,10 @@
+ extract[XARCHIVETYPE_7ZIP] = &xa_7zip_extract;
+ extract[XARCHIVETYPE_ARJ] = &xa_arj_extract;
+ extract[XARCHIVETYPE_DEB] = &xa_deb_extract;;
+- extract[XARCHIVETYPE_BZIP2] = extract[XARCHIVETYPE_GZIP] = extract[XARCHIVETYPE_LZMA] = &xa_tar_extract;
++ extract[XARCHIVETYPE_BZIP2] = extract[XARCHIVETYPE_GZIP] = extract[XARCHIVETYPE_LZMA] = extract[XARCHIVETYPE_XZ] = &xa_tar_extract;
+ extract[XARCHIVETYPE_RAR] = &xa_rar_extract;
+ extract[XARCHIVETYPE_RPM] = &xa_rpm_extract;
+- extract[XARCHIVETYPE_TAR] = extract[XARCHIVETYPE_TAR_BZ2] = extract[XARCHIVETYPE_TAR_GZ] = extract[XARCHIVETYPE_TAR_LZMA] = extract[XARCHIVETYPE_TAR_LZOP] = &xa_tar_extract;
++ extract[XARCHIVETYPE_TAR] = extract[XARCHIVETYPE_TAR_BZ2] = extract[XARCHIVETYPE_TAR_GZ] = extract[XARCHIVETYPE_TAR_LZMA] = extract[XARCHIVETYPE_TAR_XZ] = extract[XARCHIVETYPE_TAR_LZOP] = &xa_tar_extract;
+ extract[XARCHIVETYPE_ZIP] = &xa_zip_extract;
+ extract[XARCHIVETYPE_LHA] = &xa_lha_extract;
+ extract[XARCHIVETYPE_LZOP] = &xa_tar_extract;
+@@ -345,10 +347,10 @@
+ test[0] = 0;
+ test[XARCHIVETYPE_7ZIP] = &xa_7zip_test;
+ test[XARCHIVETYPE_ARJ] = &xa_arj_test;
+- test[XARCHIVETYPE_DEB] = test[XARCHIVETYPE_BZIP2] = test[XARCHIVETYPE_GZIP] = test[XARCHIVETYPE_LZMA] = 0;
++ test[XARCHIVETYPE_DEB] = test[XARCHIVETYPE_BZIP2] = test[XARCHIVETYPE_GZIP] = test[XARCHIVETYPE_LZMA] = test[XARCHIVETYPE_XZ] = 0;
+ test[XARCHIVETYPE_RAR] = &xa_rar_test;
+ test[XARCHIVETYPE_RPM] = 0;
+- test[XARCHIVETYPE_TAR] = test[XARCHIVETYPE_TAR_BZ2] = test[XARCHIVETYPE_TAR_GZ] = test[XARCHIVETYPE_TAR_LZMA] = test[XARCHIVETYPE_TAR_LZOP] = 0;
++ test[XARCHIVETYPE_TAR] = test[XARCHIVETYPE_TAR_BZ2] = test[XARCHIVETYPE_TAR_GZ] = test[XARCHIVETYPE_TAR_LZMA] = test[XARCHIVETYPE_TAR_XZ] = test[XARCHIVETYPE_TAR_LZOP] = 0;
+ test[XARCHIVETYPE_ZIP] = &xa_zip_test;
+ test[XARCHIVETYPE_LHA] = &xa_lha_test;
+ test[XARCHIVETYPE_LZOP] = 0;
+@@ -392,6 +394,14 @@
+ g_free (absolute_path);
+ }
+
++ absolute_path = g_find_program_in_path("xz");
++ if ( absolute_path )
++ {
++ ArchiveType = g_list_append(ArchiveType, "xz");
++ ArchiveSuffix = g_list_append(ArchiveSuffix, "*.xz");
++ g_free (absolute_path);
++ }
++
+ absolute_path = g_find_program_in_path("lzop");
+ if ( absolute_path )
+ {
+@@ -460,6 +470,11 @@
+ ArchiveType = g_list_append(ArchiveType, "tar.lzma");
+ ArchiveSuffix = g_list_append(ArchiveSuffix, "*.tlz");
+ }
++ if ( g_list_find ( ArchiveType , "xz") )
++ {
++ ArchiveType = g_list_append(ArchiveType, "tar.xz");
++ ArchiveSuffix = g_list_append(ArchiveSuffix, "*.txz");
++ }
+ if ( g_list_find ( ArchiveType , "lzo") )
+ {
+ ArchiveType = g_list_append(ArchiveType, "tar.lzo");
+@@ -528,6 +543,8 @@
+ archive->type = XARCHIVETYPE_TAR_GZ;
+ else if ( g_str_has_suffix ( archive->escaped_path , ".tar.lzma") || g_str_has_suffix ( archive->escaped_path , ".tlz") )
+ archive->type = XARCHIVETYPE_TAR_LZMA;
++ else if ( g_str_has_suffix ( archive->escaped_path , ".tar.xz") || g_str_has_suffix ( archive->escaped_path , ".txz") )
++ archive->type = XARCHIVETYPE_TAR_XZ;
+ else if ( g_str_has_suffix ( archive->escaped_path , ".tar.lzo") ||
+ g_str_has_suffix ( archive->escaped_path , ".tzo") ||
+ g_str_has_suffix ( archive->escaped_path , ".tar.lzop"))
+diff -uNr xarchiver-0.5.2.orig/src/new_dialog.c xarchiver-0.5.2/src/new_dialog.c
+--- xarchiver-0.5.2.orig/src/new_dialog.c 2008-11-11 17:28:46.000000000 +0900
++++ xarchiver-0.5.2/src/new_dialog.c 2013-05-11 10:01:47.890094708 +0900
+@@ -202,6 +202,8 @@
+ type = XARCHIVETYPE_GZIP;
+ else if (strcmp ( ComboArchiveType,"lzma") == 0)
+ type = XARCHIVETYPE_LZMA;
++ else if (strcmp ( ComboArchiveType,"xz") == 0)
++ type = XARCHIVETYPE_XZ;
+ else if (strcmp ( ComboArchiveType,"lzo") == 0)
+ type = XARCHIVETYPE_LZOP;
+ else if (strcmp ( ComboArchiveType,"rar") == 0)
+@@ -214,6 +216,8 @@
+ type = XARCHIVETYPE_TAR_GZ;
+ else if (strcmp ( ComboArchiveType,"tar.lzma") == 0)
+ type = XARCHIVETYPE_TAR_LZMA;
++ else if (strcmp ( ComboArchiveType,"tar.xz") == 0)
++ type = XARCHIVETYPE_TAR_XZ;
+ else if (strcmp ( ComboArchiveType,"tar.lzo") == 0)
+ type = XARCHIVETYPE_TAR_LZOP;
+ else if (strcmp ( ComboArchiveType,"jar") == 0 || strcmp ( ComboArchiveType,"zip") == 0 )
+diff -Naur xarchiver-0.5.2.orig/src/rpm.c xarchiver-0.5.2/src/rpm.c
+--- xarchiver-0.5.2.orig/src/rpm.c 2014-01-24 03:07:47.729711000 +0100
++++ xarchiver-0.5.2/src/rpm.c 2014-01-24 03:12:43.717122918 +0100
+@@ -111,8 +111,10 @@
+ }
+ if (xa_detect_archive_type (gzip_tmp) == XARCHIVETYPE_GZIP)
+ executable = "gzip -dc ";
+- else
++ else if (xa_detect_archive_type (gzip_tmp) == XARCHIVETYPE_BZIP2)
+ executable = "bzip2 -dc ";
++ else
++ executable = "xz -dc ";
+
+ command = g_strconcat("sh -c \"",executable,gzip_tmp," > ",archive->tmp,"/file.cpio\"",NULL);
+ g_free(gzip_tmp);diff -uNr xarchiver-0.5.2.orig/src/tar.c xarchiver-0.5.2/src/tar.c
+--- xarchiver-0.5.2.orig/src/tar.c 2008-11-10 19:28:34.000000000 +0900
++++ xarchiver-0.5.2/src/tar.c 2013-05-11 10:12:01.027094262 +0900
+@@ -242,6 +242,17 @@
+ files->str , NULL );
+ break;
+
++ case XARCHIVETYPE_TAR_XZ:
++ if ( g_file_test ( archive->escaped_path , G_FILE_TEST_EXISTS ) )
++ xa_add_delete_bzip2_gzip_lzma_compressed_tar (files,archive,1);
++ else
++ command = g_strconcat (tar, " ",
++ archive->add_recurse ? "" : "--no-recursion ",
++ archive->remove_files ? "--remove-files " : "",
++ "--use-compress-program=xz -cvvf ",archive->escaped_path,
++ files->str , NULL );
++ break;
++
+ case XARCHIVETYPE_TAR_LZOP:
+ if ( g_file_test ( archive->escaped_path , G_FILE_TEST_EXISTS ) )
+ xa_add_delete_bzip2_gzip_lzma_compressed_tar (files,archive,1);
+@@ -265,6 +276,10 @@
+ command = g_strconcat("sh -c \"lzma -c ",files->str,"> ",archive->escaped_path,"\"",NULL);
+ break;
+
++ case XARCHIVETYPE_XZ:
++ command = g_strconcat("sh -c \"xz -c ",files->str,"> ",archive->escaped_path,"\"",NULL);
++ break;
++
+ case XARCHIVETYPE_LZOP:
+ command = g_strconcat("sh -c \"lzop -c ",files->str,"> ",archive->escaped_path,"\"",NULL);
+ break;
+@@ -378,6 +393,25 @@
+ }
+ break;
+
++ case XARCHIVETYPE_TAR_XZ:
++ if (archive->full_path == 1)
++ {
++ command = g_strconcat (tar, " --use-compress-program=xz -xvf " , archive->escaped_path,
++ #ifdef __FreeBSD__
++ archive->overwrite ? " " : " -k",
++ #else
++ archive->overwrite ? " --overwrite" : " --keep-old-files",
++ #endif
++ archive->tar_touch ? " --touch" : "",
++ " -C ",archive->extraction_path," ",names->str,NULL);
++ }
++ else
++ {
++ result = xa_extract_tar_without_directories ( "tar --use-compress-program=xz -xvf ",archive,names->str);
++ command = NULL;
++ }
++ break;
++
+ case XARCHIVETYPE_TAR_LZOP:
+ if (archive->full_path == 1)
+ {
+@@ -402,6 +436,11 @@
+ command = NULL;
+ break;
+
++ case XARCHIVETYPE_XZ:
++ result = lzma_bzip2_extract(archive,NULL);
++ command = NULL;
++ break;
++
+ case XARCHIVETYPE_LZOP:
+ result = lzma_bzip2_extract(archive,NULL);
+ command = NULL;
+@@ -449,6 +488,10 @@
+ executable = "lzma -f ";
+ filename = "dummy.lzma";
+ break;
++ case XARCHIVETYPE_TAR_XZ:
++ executable = "xz -f ";
++ filename = "dummy.xz";
++ break;
+ case XARCHIVETYPE_TAR_LZOP:
+ executable = "lzop -f ";
+ filename = "dummy.lzo";
+@@ -493,7 +536,7 @@
+
+ gboolean is_tar_compressed (gint type)
+ {
+- return (type == XARCHIVETYPE_TAR_BZ2 || type == XARCHIVETYPE_TAR_GZ || type == XARCHIVETYPE_TAR_LZMA || type == XARCHIVETYPE_TAR_LZOP);
++ return (type == XARCHIVETYPE_TAR_BZ2 || type == XARCHIVETYPE_TAR_GZ || type == XARCHIVETYPE_TAR_LZMA || type == XARCHIVETYPE_TAR_XZ || type == XARCHIVETYPE_TAR_LZOP);
+ }
+
+ gboolean xa_extract_tar_without_directories (gchar *string,XArchive *archive,gchar *files_to_extract)
+diff -uNr xarchiver-0.5.2.orig/src/window.c xarchiver-0.5.2/src/window.c
+--- xarchiver-0.5.2.orig/src/window.c 2008-11-11 17:31:45.000000000 +0900
++++ xarchiver-0.5.2/src/window.c 2013-05-11 10:01:47.892094708 +0900
+@@ -1125,6 +1125,8 @@
+ xx = XARCHIVETYPE_GZIP;
+ else if (memcmp ( magic,"\x5d\x00\x00\x80",4) == 0)
+ xx = XARCHIVETYPE_LZMA;
++ else if ((memcmp ( magic,"\xFD" "7zXZ\x00\x00",7) == 0) || (memcmp ( magic,"\xFD" "7zXZ\x00\x10",7) == 0))
++ xx = XARCHIVETYPE_XZ;
+ else if (memcmp ( magic,"\211LZO",4) == 0)
+ xx = XARCHIVETYPE_LZOP;
+ else if (memcmp ( magic,"\xed\xab\xee\xdb",4) == 0)
+@@ -1462,6 +1464,7 @@
+ case XARCHIVETYPE_GZIP:
+ case XARCHIVETYPE_BZIP2:
+ case XARCHIVETYPE_LZMA:
++ case XARCHIVETYPE_XZ:
+ case XARCHIVETYPE_LZOP:
+ case XARCHIVETYPE_RPM:
+ pos = 3;
+@@ -1481,6 +1484,7 @@
+ case XARCHIVETYPE_TAR_GZ:
+ case XARCHIVETYPE_TAR_BZ2:
+ case XARCHIVETYPE_TAR_LZMA:
++ case XARCHIVETYPE_TAR_XZ:
+ case XARCHIVETYPE_TAR_LZOP:
+ case XARCHIVETYPE_TAR:
+ case XARCHIVETYPE_ZIP:
+@@ -1525,6 +1529,7 @@
+ case XARCHIVETYPE_GZIP:
+ case XARCHIVETYPE_BZIP2:
+ case XARCHIVETYPE_LZMA:
++ case XARCHIVETYPE_XZ:
+ case XARCHIVETYPE_LZOP:
+ case XARCHIVETYPE_RPM:
+ pos = 3;
+@@ -1544,6 +1549,7 @@
+ case XARCHIVETYPE_TAR_GZ:
+ case XARCHIVETYPE_TAR_BZ2:
+ case XARCHIVETYPE_TAR_LZMA:
++ case XARCHIVETYPE_TAR_XZ:
+ case XARCHIVETYPE_TAR_LZOP:
+ case XARCHIVETYPE_TAR:
+ case XARCHIVETYPE_ZIP:
diff --git a/libre/xarchiver-libre/xarchiver-0.5.2-drag-n-drop_escaped_path.patch b/libre/xarchiver-libre/xarchiver-0.5.2-drag-n-drop_escaped_path.patch
new file mode 100644
index 000000000..10def7d21
--- /dev/null
+++ b/libre/xarchiver-libre/xarchiver-0.5.2-drag-n-drop_escaped_path.patch
@@ -0,0 +1,13 @@
+diff -Naur xarchiver-0.5.2.orig/src/window.c xarchiver-0.5.2/src/window.c
+--- xarchiver-0.5.2.orig/src/window.c 2012-01-12 13:28:54.000000000 +0100
++++ xarchiver-0.5.2/src/window.c 2012-01-23 20:43:49.622745851 +0100
+@@ -1724,6 +1724,9 @@
+ gtk_tree_selection_selected_foreach (selection,(GtkTreeSelectionForeachFunc) xa_concat_selected_filenames,&names);
+ archive->full_path = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON (extract_window->extract_full));
+ archive->overwrite = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON (extract_window->overwrite_check));
++ gchar *unescaped_extraction_path = archive->extraction_path;
++ archive->extraction_path = xa_escape_filename(unescaped_extraction_path, "$'`\"\\!?* ()[]&|:;<>#");
++ g_free(unescaped_extraction_path);
+ (*archive->extract) (archive,names);
+
+ g_list_foreach (row_list,(GFunc) gtk_tree_path_free,NULL);
diff --git a/libre/xarchiver-libre/xarchiver-0.5.2-fix-double-escaping.patch b/libre/xarchiver-libre/xarchiver-0.5.2-fix-double-escaping.patch
new file mode 100644
index 000000000..8b44d91a0
--- /dev/null
+++ b/libre/xarchiver-libre/xarchiver-0.5.2-fix-double-escaping.patch
@@ -0,0 +1,32 @@
+From: =?UTF-8?q?Guido=20Berh=C3=B6rster?= <gber@opensuse.org>
+Date: Sat, 19 Jan 2013 09:27:36 +0100
+Subject: fix-double-escaping
+
+Do not escape file names twice. Fixes an error when trying to create archives
+with spaces.
+
+Bug: http://bugs.debian.org/697493.
+---
+ src/main.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/src/main.c b/src/main.c
+index a13d737..a6a7f93 100644
+--- a/src/main.c
++++ b/src/main.c
+@@ -208,13 +208,13 @@ int main (int argc, char **argv)
+ g_free(_current_dir);
+ GSList *files = NULL;
+ _current_dir = g_path_get_basename(add_files);
+- files = g_slist_append(files,xa_escape_filename(_current_dir,"$'`\"\\!?* ()[]&|:;<>#"));
++ files = g_slist_append(files,g_strdup(_current_dir));
+ g_free(_current_dir);
+ g_free(add_files);
+ for (x = 1; x< argc; x++)
+ {
+ _current_dir = g_path_get_basename(argv[x]);
+- files = g_slist_append(files,xa_escape_filename(_current_dir,"$'`\"\\!?* ()[]&|:;<>#"));
++ files = g_slist_append(files,g_strdup(_current_dir));
+ g_free (_current_dir);
+ }
+ xa_execute_add_commands(archive,files,NULL);
diff --git a/libre/xarchiver-libre/xarchiver-0.5.2-fix-non-existent-archive.patch b/libre/xarchiver-libre/xarchiver-0.5.2-fix-non-existent-archive.patch
new file mode 100644
index 000000000..e63687579
--- /dev/null
+++ b/libre/xarchiver-libre/xarchiver-0.5.2-fix-non-existent-archive.patch
@@ -0,0 +1,26 @@
+From: Markus Koschany <apo@gambaru.de>
+Date: Thu, 28 Feb 2013 17:45:50 +0100
+Subject: fix segfault non-existent archive cmdl switch x
+
+If using the command line switch -x, the user needs to specify a valid/existent
+archive. If the name of the archive is mistyped, xarchiver will segfault. This
+patch fixes the issue.
+
+Bug: http://bugs.debian.org/701909
+---
+ src/main.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/main.c b/src/main.c
+index a6a7f93..a6e05e3 100644
+--- a/src/main.c
++++ b/src/main.c
+@@ -141,7 +141,7 @@ int main (int argc, char **argv)
+ /* Switch -x */
+ if (extract_path != NULL)
+ {
+- if (argv[1] == NULL)
++ if (argv[1] == NULL || archive == NULL)
+ {
+ response = xa_show_message_dialog (NULL,GTK_DIALOG_MODAL,GTK_MESSAGE_ERROR,GTK_BUTTONS_OK,_("Can't extract files from the archive:"),_("You missed the archive name!\n"));
+ return -1;
diff --git a/libre/xarchiver-libre/xarchiver-0.5.2-no-donators-menu.patch b/libre/xarchiver-libre/xarchiver-0.5.2-no-donators-menu.patch
new file mode 100644
index 000000000..aa2283a7e
--- /dev/null
+++ b/libre/xarchiver-libre/xarchiver-0.5.2-no-donators-menu.patch
@@ -0,0 +1,50 @@
+--- xarchiver/trunk/src/interface.c 2009/03/19 18:03:52 29676
++++ xarchiver/trunk/src/interface.c 2009/03/19 20:48:19 29677
+@@ -310,22 +310,14 @@
+ gtk_widget_show (tmp_image);
+ gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (help1),tmp_image);
+
++ donate = gtk_image_menu_item_new_with_mnemonic (_("_Donate"));
++ gtk_widget_show (donate);
++ gtk_container_add (GTK_CONTAINER (menuitem4_menu),donate);
++
+ about1 = gtk_image_menu_item_new_from_stock ("gtk-about",accel_group);
+ gtk_widget_show (about1);
+ gtk_container_add (GTK_CONTAINER (menuitem4_menu),about1);
+
+- thanks_to = gtk_image_menu_item_new_with_mnemonic (_("_Thanks to"));
+- gtk_widget_show (thanks_to);
+- gtk_container_add (GTK_CONTAINER (menuitem4_menu),thanks_to);
+-
+- thanks_to_submenu = gtk_menu_new();
+- gtk_widget_show (thanks_to_submenu);
+- gtk_menu_item_set_submenu (GTK_MENU_ITEM (thanks_to),thanks_to_submenu);
+-
+- donators = gtk_image_menu_item_new_with_mnemonic ("Your name and website here");
+- gtk_widget_show (donators);
+- gtk_container_add (GTK_CONTAINER (thanks_to_submenu),donators);
+-
+ /* Create the toolbar */
+ toolbar1 = gtk_toolbar_new ();
+ gtk_widget_show (toolbar1);
+@@ -543,7 +535,7 @@
+ g_signal_connect ((gpointer) multi_extract_menu,"activate",G_CALLBACK (xa_show_multi_extract_dialog),NULL);
+ g_signal_connect ((gpointer) help1,"activate",G_CALLBACK (xa_show_help),NULL);
+ g_signal_connect ((gpointer) about1,"activate",G_CALLBACK (xa_about),NULL);
+- g_signal_connect ((gpointer) donators,"activate",G_CALLBACK (xa_show_donate_page_on_the_web),NULL);
++ g_signal_connect ((gpointer) donate,"activate",G_CALLBACK (xa_show_donate_page_on_the_web),NULL);
+
+ g_signal_connect ((gpointer) New_button, "clicked",G_CALLBACK (xa_new_archive),NULL);
+ g_signal_connect ((gpointer) Open_button, "clicked",G_CALLBACK (xa_open_archive),NULL);
+--- xarchiver/trunk/src/interface.h 2008/11/04 10:06:17 28603
++++ xarchiver/trunk/src/interface.h 2009/03/19 20:48:19 29677
+@@ -48,8 +48,8 @@
+ *name_label, *type_label, *compression_data, *encrypted_data, *encrypted_label,*number_of_files_data, *content_data, *comment_data, *size_data, *modified_data, *path_data, *type_data,
+ *name_data, *separatormenuitem1, *separatormenuitem2, *separatormenuitem3, *separatormenuitem4, *separatormenuitem5, *separatormenuitem6, *quit1,
+ *close1, *check_menu, *properties, *menuitem2, *menuitem2_menu, *addfile, *extract_menu, *delete_menu, *comment_menu, *multi_extract_menu,*view_shell_output1,
+-*prefs_menu,*password_entry_menu, *image1, *image2, *menuitem4, *thanks_to,*thanks_to_submenu,*select_all,*deselect_all,*select_pattern, *exe_menu, *menuitem4_menu,
+-*about1, *help1, *donators,*toolbar1, *toolbar2, *hbox1, *tmp_image, *pad_image, *New_button, *Open_button, *back_button, *home_button, *forward_button,
++*prefs_menu,*password_entry_menu, *image1, *image2, *menuitem4, *donate,*select_all,*deselect_all,*select_pattern, *exe_menu, *menuitem4_menu,
++*about1, *help1,*toolbar1, *toolbar2, *hbox1, *tmp_image, *pad_image, *New_button, *Open_button, *back_button, *home_button, *forward_button,
+ *up_button,*separatortoolitem1,*separatortoolitem2,*separatortoolitem3,*AddFile_button,*Extract_button,*Stop_button,*toolitem1,*location_label,
+ *location_entry,*hpaned1,*archive_dir_treeview,*scrolledwindow2,*ddelete,*rename_menu,*rrename,*cut,*copy,*paste,*view,*open_popupmenu;
diff --git a/libre/xarchiver-libre/xarchiver-0.5.2-segfault-delete-file.patch b/libre/xarchiver-libre/xarchiver-0.5.2-segfault-delete-file.patch
new file mode 100644
index 000000000..b8052544b
--- /dev/null
+++ b/libre/xarchiver-libre/xarchiver-0.5.2-segfault-delete-file.patch
@@ -0,0 +1,21 @@
+diff -Naur xarchiver-0.5.2.orig/src/window.c xarchiver-0.5.2/src/window.c
+--- xarchiver-0.5.2.orig/src/window.c 2014-01-24 01:22:27.931903000 +0100
++++ xarchiver-0.5.2/src/window.c 2014-01-24 01:24:49.952825715 +0100
+@@ -1573,7 +1573,7 @@
+ gtk_widget_show(selected_frame);
+ gtk_widget_set_sensitive(deselect_all,TRUE);
+ }
+- if ( (archive->type == XARCHIVETYPE_RAR && unrar) || archive->type == XARCHIVETYPE_BZIP2 || archive->type == XARCHIVETYPE_GZIP)
++ if ( (archive->type == XARCHIVETYPE_RAR && unrar) || archive->type == XARCHIVETYPE_BZIP2 || archive->type == XARCHIVETYPE_GZIP || archive->type == XARCHIVETYPE_LZMA || archive->type == XARCHIVETYPE_XZ || archive->type == XARCHIVETYPE_LZOP)
+ {
+ gtk_widget_set_sensitive (delete_menu,FALSE);
+ gtk_widget_set_sensitive (rename_menu,FALSE);
+@@ -2287,7 +2287,7 @@
+ else
+ value = TRUE;
+ }
+- if (archive->type == XARCHIVETYPE_BZIP2 || archive->type == XARCHIVETYPE_GZIP || archive->type == XARCHIVETYPE_DEB || archive->type == XARCHIVETYPE_RPM)
++ if (archive->type == XARCHIVETYPE_BZIP2 || archive->type == XARCHIVETYPE_GZIP || archive->type == XARCHIVETYPE_LZMA || archive->type == XARCHIVETYPE_XZ || archive->type == XARCHIVETYPE_LZOP || archive->type == XARCHIVETYPE_DEB || archive->type == XARCHIVETYPE_RPM)
+ {
+ gtk_widget_set_sensitive(ddelete,FALSE);
+ gtk_widget_set_sensitive(rrename,FALSE);
diff --git a/libre/xarchiver-libre/xarchiver-0.5.2-segfault-password-protected.patch b/libre/xarchiver-libre/xarchiver-0.5.2-segfault-password-protected.patch
new file mode 100644
index 000000000..a1fa1f2ca
--- /dev/null
+++ b/libre/xarchiver-libre/xarchiver-0.5.2-segfault-password-protected.patch
@@ -0,0 +1,43 @@
+diff -Naur xarchiver-0.5.2.orig/src/window.c xarchiver-0.5.2/src/window.c
+--- xarchiver-0.5.2.orig/src/window.c 2014-01-24 08:10:09.305990000 +0100
++++ xarchiver-0.5.2/src/window.c 2014-01-24 08:42:45.110729290 +0100
+@@ -1694,7 +1694,7 @@
+ {
+ if (archive->passwd == NULL)
+ {
+- archive->passwd = xa_create_password_dialog(NULL);
++ archive->passwd = xa_create_password_dialog(archive);
+ if ( archive->passwd == NULL)
+ {
+ gtk_drag_finish (dc,FALSE,FALSE,t);
+@@ -2702,9 +2702,12 @@
+
+ if (entry->is_encrypted)
+ {
+- archive[idx]->passwd = xa_create_password_dialog(archive[idx]);
+ if (archive[idx]->passwd == NULL)
+- return;
++ {
++ archive[idx]->passwd = xa_create_password_dialog(archive[idx]);
++ if (archive[idx]->passwd == NULL)
++ return;
++ }
+ }
+ filename = g_strconcat(archive[idx]->tmp,"/",entry->filename,NULL);
+ if (g_file_test(filename,G_FILE_TEST_EXISTS))
+@@ -2766,6 +2769,15 @@
+ /* The selected entry it's not a dir so extract it to the tmp dir and send it to xa_determine_program_to_run() */
+ else
+ {
++ if (entry->is_encrypted)
++ {
++ if (archive->passwd == NULL)
++ {
++ archive->passwd = xa_create_password_dialog(archive);
++ if (archive->passwd == NULL)
++ return;
++ }
++ }
+ if (archive->extraction_path)
+ {
+ dummy = g_strdup(archive->extraction_path);