diff --git a/pkgs/tools/archivers/gnutar/default.nix b/pkgs/tools/archivers/gnutar/default.nix
index 6b125b2127f8..e34bc2b394f1 100644
--- a/pkgs/tools/archivers/gnutar/default.nix
+++ b/pkgs/tools/archivers/gnutar/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl }:
+{ stdenv, fetchurl, autoreconfHook }:
stdenv.mkDerivation rec {
name = "gnutar-${version}";
@@ -9,6 +9,9 @@ stdenv.mkDerivation rec {
sha256 = "0qkm2k9w8z91hwj8rffpjj9v1vhpiriwz4cdj36k9vrgc3hbzr30";
};
+ patches = stdenv.lib.optional stdenv.isDarwin ./gnutar-1.28-darwin.patch;
+ buildInputs = stdenv.lib.optional stdenv.isDarwin autoreconfHook;
+
# May have some issues with root compilation because the bootstrap tool
# cannot be used as a login shell for now.
FORCE_UNSAFE_CONFIGURE = stdenv.lib.optionalString (stdenv.system == "armv7l-linux" || stdenv.isSunOS) "1";
diff --git a/pkgs/tools/archivers/gnutar/gnutar-1.28-darwin.patch b/pkgs/tools/archivers/gnutar/gnutar-1.28-darwin.patch
new file mode 100644
index 000000000000..cab0e4406d8e
--- /dev/null
+++ b/pkgs/tools/archivers/gnutar/gnutar-1.28-darwin.patch
@@ -0,0 +1,114 @@
+>From 7d1d3d38cb66b02c062de77847e3c0ecd842366c Mon Sep 17 00:00:00 2001
+From: Pavel Raiskup
+Date: Mon, 4 Aug 2014 13:19:49 +0200
+Subject: [PATCH] xattrs: fix bug in configure
+
+Be careful to define HAVE_XATTRS when not all needed xattr-related
+functions are properly defined either in libc or libattr.
+
+Reported independently by Denis Excoffier and Dominyk Tille.
+
+* acinclude.m4 (TAR_HEADERS_ATTR_XATTR_H): Check for each xattr
+function separately. Don't AC_CHECK_LIB (LIBS is filled by
+AC_SEARCH_LIBS when necessary).
+* lib/xattr-at.c: Do not build when HAVE_XATTRS is not defined.
+* src/Makefile.am: The LDADD -lattr was redundant.
+---
+ acinclude.m4 | 42 ++++++++++++++----------------------------
+ lib/xattr-at.c | 7 +++++++
+ src/Makefile.am | 4 ----
+ 3 files changed, 21 insertions(+), 32 deletions(-)
+
+diff --git a/acinclude.m4 b/acinclude.m4
+index 3b28b3b..db0bbc7 100644
+--- a/acinclude.m4
++++ b/acinclude.m4
+@@ -40,37 +40,23 @@ AC_DEFUN([TAR_HEADERS_ATTR_XATTR_H],
+ # First check for
+ AC_CHECK_HEADERS([sys/xattr.h])
+ AM_CONDITIONAL([TAR_COND_XATTR_H],[test "$ac_cv_header_sys_xattr_h" = yes])
+- AM_CONDITIONAL([TAR_LIB_ATTR],[false])
+- if test "$ac_cv_header_sys_xattr_h" = yes; then
+- AC_CHECK_FUNCS(getxattr fgetxattr lgetxattr \
+- setxattr fsetxattr lsetxattr \
+- listxattr flistxattr llistxattr,
+- # only when functions are present
+- AC_DEFINE([HAVE_SYS_XATTR_H], [1],
+- [define to 1 if we have header])
+- if test "$with_xattrs" != no; then
+- AC_DEFINE([HAVE_XATTRS],,[Define when we have working linux xattrs.])
+- fi
+- )
+- fi
+-
+- # If is not found, then check for
+ if test "$ac_cv_header_sys_xattr_h" != yes; then
+ AC_CHECK_HEADERS([attr/xattr.h])
+ AM_CONDITIONAL([TAR_COND_XATTR_H],[test "$ac_cv_header_attr_xattr_h" = yes])
+- AC_CHECK_LIB([attr],[fgetxattr])
+- AM_CONDITIONAL([TAR_LIB_ATTR],[test "$ac_cv_lib_attr_fgetxattr" = yes])
+- if test "$ac_cv_header_attr_xattr_h" = yes; then
+- AC_CHECK_FUNCS(getxattr fgetxattr lgetxattr \
+- setxattr fsetxattr lsetxattr \
+- listxattr flistxattr llistxattr,
+- # only when functions are present
+- AC_DEFINE([HAVE_ATTR_XATTR_H], [1],
+- [define to 1 if we have header])
+- if test "$with_xattrs" != no; then
+- AC_DEFINE([HAVE_XATTRS],,[Define when we have working linux xattrs.])
+- fi
+- )
++ fi
++
++ if test "$with_xattrs" != no; then
++ for i in getxattr fgetxattr lgetxattr \
++ setxattr fsetxattr lsetxattr \
++ listxattr flistxattr llistxattr
++ do
++ AC_SEARCH_LIBS($i, attr)
++ eval found=\$ac_cv_search_$i
++ test "$found" = "no" && break
++ done
++
++ if test "$found" != no; then
++ AC_DEFINE([HAVE_XATTRS],,[Define when we have working linux xattrs.])
+ fi
+ fi
+ ])
+diff --git a/lib/xattr-at.c b/lib/xattr-at.c
+index 443ccae..009bde5 100644
+--- a/lib/xattr-at.c
++++ b/lib/xattr-at.c
+@@ -18,6 +18,11 @@
+
+ #include
+
++/* Temporarily don't build. We are unable to build on (probably not only)
++ darwin due to lack of l*xattr callbacks (XATTR_NOFOLLOW is alternative) and
++ different function definitions. */
++#ifdef HAVE_XATTRS
++
+ #include "xattr-at.h"
+ #include "openat.h"
+
+@@ -108,3 +113,5 @@
+ #undef AT_FUNC_RESULT
+ #undef AT_FUNC_POST_FILE_PARAM_DECLS
+ #undef AT_FUNC_POST_FILE_ARGS
++
++#endif
+diff --git a/src/Makefile.am b/src/Makefile.am
+index 82b2d46..42daaef 100644
+--- a/src/Makefile.am
++++ b/src/Makefile.am
+@@ -52,7 +52,3 @@ AM_CFLAGS = $(WARN_CFLAGS) $(WERROR_CFLAGS)
+ LDADD = ../lib/libtar.a ../gnu/libgnu.a $(LIBINTL) $(LIBICONV)
+
+ tar_LDADD = $(LIBS) $(LDADD) $(LIB_CLOCK_GETTIME) $(LIB_EACCESS) $(LIB_SELINUX)
+-
+-if TAR_LIB_ATTR
+-tar_LDADD += -lattr
+-endif
+--
+1.9.3
+