commit:     e97a616356b7dccec15d1c5be2c2c861afa160fa
Author:     Pacho Ramos <pacho <AT> gentoo <DOT> org>
AuthorDate: Sat Mar 23 12:58:31 2019 +0000
Commit:     Pacho Ramos <pacho <AT> gentoo <DOT> org>
CommitDate: Sat Mar 23 12:58:49 2019 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=e97a6163

sys-fs/ntfs3g: Support Windows 10, fix automagic dep...

- Apply Fedora fixes, this also adds support for windows 10 (#660374)
- Prevent it from wrongly linking to hwinfo (#602360)
- udev rule is not needed and causes issues (#635080)

Closes: https://bugs.gentoo.org/660374
Closes: https://bugs.gentoo.org/635080
Bug: https://bugs.gentoo.org/602360
Package-Manager: Portage-2.3.62, Repoman-2.3.12
Signed-off-by: Pacho Ramos <pacho <AT> gentoo.org>

 .../files/ntfs3g-2017.3.23-big-sectors.patch       | 379 +++++++++++++++++++++
 .../files/ntfs3g-2017.3.23-check-mftmirr.patch     |  12 +
 .../files/ntfs3g-2017.3.23-full-clusters.patch     |  81 +++++
 sys-fs/ntfs3g/ntfs3g-2017.3.23-r2.ebuild           | 103 ++++++
 4 files changed, 575 insertions(+)

diff --git a/sys-fs/ntfs3g/files/ntfs3g-2017.3.23-big-sectors.patch 
b/sys-fs/ntfs3g/files/ntfs3g-2017.3.23-big-sectors.patch
new file mode 100644
index 00000000000..1cb8bb6c46c
--- /dev/null
+++ b/sys-fs/ntfs3g/files/ntfs3g-2017.3.23-big-sectors.patch
@@ -0,0 +1,379 @@
+--- a/libntfs-3g/bootsect.c.ref        2017-03-23 10:42:44.000000000 +0100
++++ b/libntfs-3g/bootsect.c    2018-05-07 09:11:13.004710800 +0200
+@@ -38,6 +38,7 @@ 
+ #include <errno.h>
+ #endif
+ 
++#include "param.h"
+ #include "compat.h"
+ #include "bootsect.h"
+ #include "debug.h"
+@@ -61,6 +62,7 @@ 
+ {
+       u32 i;
+       BOOL ret = FALSE;
++      u16 sectors_per_cluster;
+ 
+       ntfs_log_debug("Beginning bootsector check.\n");
+ 
+@@ -83,15 +85,27 @@ 
+       case 1: case 2: case 4: case 8: case 16: case 32: case 64: case 128:
+               break;
+       default:
+-              ntfs_log_error("Unexpected sectors per cluster value (%d).\n",
+-                             b->bpb.sectors_per_cluster);
+-              goto not_ntfs;
++              if ((b->bpb.sectors_per_cluster < 240)
++                  || (b->bpb.sectors_per_cluster > 249)) {
++                      if (b->bpb.sectors_per_cluster > 128)
++                              ntfs_log_error("Unexpected sectors"
++                                      " per cluster value (code 0x%x)\n",
++                                      b->bpb.sectors_per_cluster);
++                      else
++                              ntfs_log_error("Unexpected sectors"
++                                      " per cluster value (%d).\n",
++                                      b->bpb.sectors_per_cluster);
++                      goto not_ntfs;
++              }
+       }
+ 
+       ntfs_log_debug("Checking cluster size.\n");
+-      i = (u32)le16_to_cpu(b->bpb.bytes_per_sector) * 
+-              b->bpb.sectors_per_cluster;
+-      if (i > 65536) {
++      if (b->bpb.sectors_per_cluster > 128)
++              sectors_per_cluster = 1 << (256 - b->bpb.sectors_per_cluster);
++      else
++              sectors_per_cluster = b->bpb.sectors_per_cluster;
++      i = (u32)le16_to_cpu(b->bpb.bytes_per_sector) * sectors_per_cluster;
++      if (i > NTFS_MAX_CLUSTER_SIZE) {
+               ntfs_log_error("Unexpected cluster size (%d).\n", i);
+               goto not_ntfs;
+       }
+@@ -171,7 +185,7 @@ 
+ int ntfs_boot_sector_parse(ntfs_volume *vol, const NTFS_BOOT_SECTOR *bs)
+ {
+       s64 sectors;
+-      u8  sectors_per_cluster;
++      u16  sectors_per_cluster;
+       s8  c;
+ 
+       /* We return -1 with errno = EINVAL on error. */
+@@ -186,7 +200,10 @@ 
+        * below or equal the number_of_clusters) really belong in the
+        * ntfs_boot_sector_is_ntfs but in this way we can just do this once.
+        */
+-      sectors_per_cluster = bs->bpb.sectors_per_cluster;
++      if (bs->bpb.sectors_per_cluster > 128)
++              sectors_per_cluster = 1 << (256 - bs->bpb.sectors_per_cluster);
++      else
++              sectors_per_cluster = bs->bpb.sectors_per_cluster;
+       ntfs_log_debug("SectorsPerCluster = 0x%x\n", sectors_per_cluster);
+       if (sectors_per_cluster & (sectors_per_cluster - 1)) {
+               ntfs_log_error("sectors_per_cluster (%d) is not a power of 2."
+--- a/ntfsprogs/mkntfs.8.in.ref        2017-03-23 10:42:44.000000000 +0100
++++ b/ntfsprogs/mkntfs.8.in    2018-05-07 09:11:13.014132400 +0200
+@@ -132,7 +132,7 @@ 
+ .TP
+ \fB\-c\fR, \fB\-\-cluster\-size\fR BYTES
+ Specify the size of clusters in bytes. Valid cluster size values are powers of
+-two, with at least 256, and at most 65536 bytes per cluster. If omitted,
++two, with at least 256, and at most 2097152 bytes (2MB) per cluster. If 
omitted,
+ .B mkntfs
+ uses 4096 bytes as the default cluster size.
+ .sp
+--- a/ntfsprogs/mkntfs.c.ref   2017-03-23 10:42:44.000000000 +0100
++++ b/ntfsprogs/mkntfs.c       2018-05-07 09:11:13.035522300 +0200
+@@ -6,7 +6,7 @@ 
+  * Copyright (c) 2002-2006 Szabolcs Szakacsits
+  * Copyright (c) 2005      Erik Sornes
+  * Copyright (c) 2007      Yura Pakhuchiy
+- * Copyright (c) 2010-2014 Jean-Pierre Andre
++ * Copyright (c) 2010-2018 Jean-Pierre Andre
+  *
+  * This utility will create an NTFS 1.2 or 3.1 volume on a user
+  * specified (block) device.
+@@ -119,6 +119,7 @@ 
+ #     endif
+ #endif
+ 
++#include "param.h"
+ #include "security.h"
+ #include "types.h"
+ #include "attrib.h"
+@@ -287,7 +288,7 @@ 
+       ntfs_log_info("Copyright (c) 2002-2006 Szabolcs Szakacsits\n");
+       ntfs_log_info("Copyright (c) 2005      Erik Sornes\n");
+       ntfs_log_info("Copyright (c) 2007      Yura Pakhuchiy\n");
+-      ntfs_log_info("Copyright (c) 2010-2014 Jean-Pierre Andre\n");
++      ntfs_log_info("Copyright (c) 2010-2018 Jean-Pierre Andre\n");
+       ntfs_log_info("\n%s\n%s%s\n", ntfs_gpl, ntfs_bugs, ntfs_home);
+ }
+ 
+@@ -3719,11 +3720,11 @@ 
+               /*
+                * For huge volumes, grow the cluster size until the number of
+                * clusters fits into 32 bits or the cluster size exceeds the
+-               * maximum limit of 64kiB.
++               * maximum limit of NTFS_MAX_CLUSTER_SIZE.
+                */
+               while (volume_size >> (ffs(vol->cluster_size) - 1 + 32)) {
+                       vol->cluster_size <<= 1;
+-                      if (vol->cluster_size > 65535) {
++                      if (vol->cluster_size >= NTFS_MAX_CLUSTER_SIZE) {
+                               ntfs_log_error("Device is too large to hold an "
+                                               "NTFS volume (maximum size is "
+                                               "256TiB).\n");
+@@ -3744,15 +3745,18 @@ 
+                               "to, or larger than, the sector size.\n");
+               return FALSE;
+       }
+-      if (vol->cluster_size > 128 * (u32)opts.sector_size) {
++              /* Before Windows 10 Creators, the limit was 128 */
++      if (vol->cluster_size > 4096 * (u32)opts.sector_size) {
+               ntfs_log_error("The cluster size is invalid.  It cannot be "
+-                              "more that 128 times the size of the sector "
++                              "more that 4096 times the size of the sector "
+                               "size.\n");
+               return FALSE;
+       }
+-      if (vol->cluster_size > 65536) {
++      if (vol->cluster_size > NTFS_MAX_CLUSTER_SIZE) {
+               ntfs_log_error("The cluster size is invalid.  The maximum "
+-                      "cluster size is 65536 bytes (64kiB).\n");
++                      "cluster size is %lu bytes (%lukiB).\n",
++                      (unsigned long)NTFS_MAX_CLUSTER_SIZE,
++                      (unsigned long)(NTFS_MAX_CLUSTER_SIZE >> 10));
+               return FALSE;
+       }
+       vol->cluster_size_bits = ffs(vol->cluster_size) - 1;
+@@ -4387,6 +4391,7 @@ 
+       u8 *sd;
+       FILE_ATTR_FLAGS extend_flags;
+       VOLUME_FLAGS volume_flags = const_cpu_to_le16(0);
++      int sectors_per_cluster;
+       int nr_sysfiles;
+       int buf_sds_first_size;
+       char *buf_sds;
+@@ -4639,8 +4644,11 @@ 
+        * already inserted, so no need to worry about these things.
+        */
+       bs->bpb.bytes_per_sector = cpu_to_le16(opts.sector_size);
+-      bs->bpb.sectors_per_cluster = (u8)(g_vol->cluster_size /
+-                      opts.sector_size);
++      sectors_per_cluster = g_vol->cluster_size / opts.sector_size;
++      if (sectors_per_cluster > 128)
++              bs->bpb.sectors_per_cluster = 257 - ffs(sectors_per_cluster);
++      else
++              bs->bpb.sectors_per_cluster = sectors_per_cluster;
+       bs->bpb.media_type = 0xf8; /* hard disk */
+       bs->bpb.sectors_per_track = cpu_to_le16(opts.sectors_per_track);
+       ntfs_log_debug("sectors per track = %ld (0x%lx)\n",
+--- a/ntfsprogs/ntfsclone.c.ref        2017-03-23 10:42:44.000000000 +0100
++++ b/ntfsprogs/ntfsclone.c    2018-05-07 09:11:38.245007100 +0200
+@@ -3,7 +3,7 @@ 
+  *
+  * Copyright (c) 2003-2006 Szabolcs Szakacsits
+  * Copyright (c) 2004-2006 Anton Altaparmakov
+- * Copyright (c) 2010-2016 Jean-Pierre Andre
++ * Copyright (c) 2010-2018 Jean-Pierre Andre
+  * Special image format support copyright (c) 2004 Per Olofsson
+  *
+  * Clone NTFS data and/or metadata to a sparse file, image, device or stdout.
+@@ -71,6 +71,7 @@ 
+  */
+ #define NTFS_DO_NOT_CHECK_ENDIANS
+ 
++#include "param.h"
+ #include "debug.h"
+ #include "types.h"
+ #include "support.h"
+@@ -270,7 +271,6 @@ 
+ 
+ #define LAST_METADATA_INODE   11
+ 
+-#define NTFS_MAX_CLUSTER_SIZE 65536
+ #define NTFS_SECTOR_SIZE        512
+ 
+ #define rounded_up_division(a, b) (((a) + (b - 1)) / (b))
+@@ -393,7 +393,7 @@ 
+                  "Efficiently clone, image, restore or rescue an NTFS 
Volume.\n\n"
+                  "Copyright (c) 2003-2006 Szabolcs Szakacsits\n"
+                  "Copyright (c) 2004-2006 Anton Altaparmakov\n"
+-                 "Copyright (c) 2010-2016 Jean-Pierre Andre\n\n");
++                 "Copyright (c) 2010-2018 Jean-Pierre Andre\n\n");
+       fprintf(stderr, "%s\n%s%s", ntfs_gpl, ntfs_bugs, ntfs_home);
+       exit(0);
+ }
+@@ -756,7 +756,7 @@ 
+ 
+ static void copy_cluster(int rescue, u64 rescue_lcn, u64 lcn)
+ {
+-      char buff[NTFS_MAX_CLUSTER_SIZE]; /* overflow checked at mount time */
++      char *buff;
+       /* vol is NULL if opt.restore_image is set */
+       s32 csize = le32_to_cpu(image_hdr.cluster_size);
+       BOOL backup_bootsector;
+@@ -783,6 +783,10 @@ 
+               }
+       }
+ 
++      buff = (char*)ntfs_malloc(csize);
++      if (!buff)
++              err_exit("Not enough memory");
++
+ // need reading when not about to write ?
+       if (read_all(fd, buff, csize) == -1) {
+ 
+@@ -858,6 +862,7 @@ 
+               perr_printf("Write failed");
+ #endif
+       }
++      free(buff);
+ }
+ 
+ static s64 lseek_out(int fd, s64 pos, int mode)
+@@ -995,7 +1000,11 @@ 
+                                struct progress_bar *progress, u64 *p_counter)
+ {
+       s64 i;
+-      char buff[NTFS_MAX_CLUSTER_SIZE];
++      char *buff;
++
++      buff = (char*)ntfs_malloc(csize);
++      if (!buff)
++              err_exit("Not enough memory");
+ 
+       memset(buff, 0, csize);
+ 
+@@ -1004,6 +1013,7 @@ 
+                       perr_exit("write_all");
+               progress_update(progress, ++(*p_counter));
+       }
++      free(buff);
+ }
+ 
+ static void restore_image(void)
+@@ -1492,7 +1502,7 @@ 
+ 
+ static void copy_wipe_mft(ntfs_walk_clusters_ctx *image, runlist *rl)
+ {
+-      char buff[NTFS_MAX_CLUSTER_SIZE]; /* overflow checked at mount time */
++      char *buff;
+       void *fd;
+       s64 mft_no;
+       u32 mft_record_size;
+@@ -1522,6 +1532,10 @@ 
+               clusters_per_set = mft_record_size/csize;
+               records_per_set = 1;
+       }
++      buff = (char*)ntfs_malloc(mft_record_size);
++      if (!buff)
++              err_exit("Not enough memory");
++
+       mft_no = 0;
+       ri = rj = 0;
+       wi = wj = 0;
+@@ -1554,6 +1568,7 @@ 
+               }
+       }
+       image->current_lcn = current_lcn;
++      free(buff);
+ }
+ 
+ /*
+@@ -1566,7 +1581,7 @@ 
+ 
+ static void copy_wipe_i30(ntfs_walk_clusters_ctx *image, runlist *rl)
+ {
+-      char buff[NTFS_MAX_CLUSTER_SIZE]; /* overflow checked at mount time */
++      char *buff;
+       void *fd;
+       u32 indx_record_size;
+       u32 csize;
+@@ -1595,6 +1610,10 @@ 
+               clusters_per_set = indx_record_size/csize;
+               records_per_set = 1;
+       }
++      buff = (char*)ntfs_malloc(indx_record_size);
++      if (!buff)
++              err_exit("Not enough memory");
++
+       ri = rj = 0;
+       wi = wj = 0;
+       if (rl[ri].length)
+@@ -1627,6 +1646,7 @@ 
+               }
+       }
+       image->current_lcn = current_lcn;
++      free(buff);
+ }
+ 
+ static void dump_clusters(ntfs_walk_clusters_ctx *image, runlist *rl)
+--- a/ntfsprogs/ntfsresize.c.ref       2017-03-23 10:42:44.000000000 +0100
++++ b/ntfsprogs/ntfsresize.c   2018-05-07 09:11:13.076883400 +0200
+@@ -59,6 +59,7 @@ 
+ #include <fcntl.h>
+ #endif
+ 
++#include "param.h"
+ #include "debug.h"
+ #include "types.h"
+ #include "support.h"
+@@ -243,8 +244,6 @@ 
+ #define DIRTY_INODE           (1)
+ #define DIRTY_ATTRIB          (2)
+ 
+-#define NTFS_MAX_CLUSTER_SIZE (65536)
+-
+ static s64 rounded_up_division(s64 numer, s64 denom)
+ {
+       return (numer + (denom - 1)) / denom;
+@@ -404,7 +403,7 @@ 
+       printf("Copyright (c) 2002-2005  Anton Altaparmakov\n");
+       printf("Copyright (c) 2002-2003  Richard Russon\n");
+       printf("Copyright (c) 2007       Yura Pakhuchiy\n");
+-      printf("Copyright (c) 2011-2016  Jean-Pierre Andre\n");
++      printf("Copyright (c) 2011-2018  Jean-Pierre Andre\n");
+       printf("\n%s\n%s%s", ntfs_gpl, ntfs_bugs, ntfs_home);
+ }
+ 
+@@ -1849,9 +1848,13 @@ 
+ static void copy_clusters(ntfs_resize_t *resize, s64 dest, s64 src, s64 len)
+ {
+       s64 i;
+-      char buff[NTFS_MAX_CLUSTER_SIZE]; /* overflow checked at mount time */
++      char *buff;
+       ntfs_volume *vol = resize->vol;
+ 
++      buff = (char*)ntfs_malloc(vol->cluster_size);
++      if (!buff)
++              perr_exit("ntfs_malloc");
++
+       for (i = 0; i < len; i++) {
+ 
+               lseek_to_cluster(vol, src + i);
+@@ -1875,6 +1878,7 @@ 
+               resize->relocations++;
+               progress_update(&resize->progress, resize->relocations);
+       }
++      free(buff);
+ }
+ 
+ static void relocate_clusters(ntfs_resize_t *r, runlist *dest_rl, s64 src_lcn)
+--- a/include/ntfs-3g/param.h.ref      2017-03-23 10:42:44.000000000 +0100
++++ b/include/ntfs-3g/param.h  2018-05-07 09:11:13.088302600 +0200
+@@ -40,6 +40,13 @@ 
+ };
+ 
+ /*
++ *            Parameters for formatting
++ */
++
++              /* Up to Windows 10, the cluster size was limited to 64K */
++#define NTFS_MAX_CLUSTER_SIZE 2097152 /* Windows 10 Creators allows 2MB */
++
++/*
+  *            Parameters for compression
+  */
+ 

diff --git a/sys-fs/ntfs3g/files/ntfs3g-2017.3.23-check-mftmirr.patch 
b/sys-fs/ntfs3g/files/ntfs3g-2017.3.23-check-mftmirr.patch
new file mode 100644
index 00000000000..f56eadc882f
--- /dev/null
+++ b/sys-fs/ntfs3g/files/ntfs3g-2017.3.23-check-mftmirr.patch
@@ -0,0 +1,12 @@
+--- a/libntfs-3g/volume.c.ref  2017-03-23 10:42:44.000000000 +0100
++++ b/libntfs-3g/volume.c      2017-12-20 08:11:51.842424300 +0100
+@@ -959,7 +959,8 @@
+               vol->mftmirr_size = l;
+       }
+       ntfs_log_debug("Comparing $MFTMirr to $MFT...\n");
+-      for (i = 0; i < vol->mftmirr_size; ++i) {
++              /* Windows 10 does not update the full $MFTMirr any more */
++      for (i = 0; (i < vol->mftmirr_size) && (i < FILE_first_user); ++i) {
+               MFT_RECORD *mrec, *mrec2;
+               const char *ESTR[12] = { "$MFT", "$MFTMirr", "$LogFile",
+                       "$Volume", "$AttrDef", "root directory", "$Bitmap",

diff --git a/sys-fs/ntfs3g/files/ntfs3g-2017.3.23-full-clusters.patch 
b/sys-fs/ntfs3g/files/ntfs3g-2017.3.23-full-clusters.patch
new file mode 100644
index 00000000000..7d2496d372d
--- /dev/null
+++ b/sys-fs/ntfs3g/files/ntfs3g-2017.3.23-full-clusters.patch
@@ -0,0 +1,81 @@
+--- a/ntfsprogs/ntfsclone.c    2018-05-16 18:46:47.114964000 +0200
++++ b/ntfsprogs/ntfsclone.c    2018-07-16 14:03:20.273809100 +0200
+@@ -776,6 +776,10 @@ 
+ 
+               /* possible partial cluster holding the backup boot sector */
+       backup_bootsector = (lcn + 1)*csize >= full_device_size;
++      buff = (char*)ntfs_malloc(csize);
++      if (!buff)
++              err_exit("Not enough memory");
++
+       if (backup_bootsector) {
+               csize = full_device_size - lcn*csize;
+               if (csize < 0) {
+@@ -783,10 +787,6 @@ 
+               }
+       }
+ 
+-      buff = (char*)ntfs_malloc(csize);
+-      if (!buff)
+-              err_exit("Not enough memory");
+-
+ // need reading when not about to write ?
+       if (read_all(fd, buff, csize) == -1) {
+ 
+@@ -1507,6 +1507,7 @@ 
+       s64 mft_no;
+       u32 mft_record_size;
+       u32 csize;
++      u32 buff_size;
+       u32 bytes_per_sector;
+       u32 records_per_set;
+       u32 clusters_per_set;
+@@ -1524,15 +1525,18 @@ 
+               /*
+                * Depending on the sizes, there may be several records
+                * per cluster, or several clusters per record.
++               * Anyway, full clusters are needed for rescuing bad ones.
+                */
+       if (csize >= mft_record_size) {
+               records_per_set = csize/mft_record_size;
+               clusters_per_set = 1;
++              buff_size = csize;
+       } else {
+               clusters_per_set = mft_record_size/csize;
+               records_per_set = 1;
++              buff_size = mft_record_size;
+       }
+-      buff = (char*)ntfs_malloc(mft_record_size);
++      buff = (char*)ntfs_malloc(buff_size);
+       if (!buff)
+               err_exit("Not enough memory");
+ 
+@@ -1585,6 +1589,7 @@ 
+       void *fd;
+       u32 indx_record_size;
+       u32 csize;
++      u32 buff_size;
+       u32 bytes_per_sector;
+       u32 records_per_set;
+       u32 clusters_per_set;
+@@ -1601,16 +1606,19 @@ 
+               /*
+                * Depending on the sizes, there may be several records
+                * per cluster, or several clusters per record.
++               * Anyway, full clusters are needed for rescuing bad ones.
+                */
+       indx_record_size = image->ni->vol->indx_record_size;
+       if (csize >= indx_record_size) {
+               records_per_set = csize/indx_record_size;
+               clusters_per_set = 1;
++              buff_size = csize;
+       } else {
+               clusters_per_set = indx_record_size/csize;
+               records_per_set = 1;
++              buff_size = indx_record_size;
+       }
+-      buff = (char*)ntfs_malloc(indx_record_size);
++      buff = (char*)ntfs_malloc(buff_size);
+       if (!buff)
+               err_exit("Not enough memory");
+ 

diff --git a/sys-fs/ntfs3g/ntfs3g-2017.3.23-r2.ebuild 
b/sys-fs/ntfs3g/ntfs3g-2017.3.23-r2.ebuild
new file mode 100644
index 00000000000..fb67e549b9c
--- /dev/null
+++ b/sys-fs/ntfs3g/ntfs3g-2017.3.23-r2.ebuild
@@ -0,0 +1,103 @@
+# Copyright 1999-2019 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=6
+inherit linux-info udev toolchain-funcs libtool
+
+MY_PN=${PN/3g/-3g}
+MY_P=${MY_PN}_ntfsprogs-${PV}
+
+DESCRIPTION="Open source read-write NTFS driver that runs under FUSE"
+HOMEPAGE="http://www.tuxera.com/community/ntfs-3g-download/";
+SRC_URI="http://tuxera.com/opensource/${MY_P}.tgz";
+
+LICENSE="GPL-2"
+# The subslot matches the SONAME major #.
+SLOT="0/88"
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ppc ~ppc64 ~sparc ~x86 ~amd64-linux 
~x86-linux"
+IUSE="acl debug +external-fuse ntfsdecrypt +ntfsprogs static-libs suid xattr"
+
+RDEPEND="!<sys-apps/util-linux-2.20.1-r2
+       !sys-fs/ntfsprogs
+       ntfsdecrypt? (
+               >=dev-libs/libgcrypt-1.2.2:0
+               >=net-libs/gnutls-1.4.4
+       )
+       external-fuse? (
+               >=sys-fs/fuse-2.8.0:0
+       )
+"
+DEPEND="${RDEPEND}
+       sys-apps/attr
+       virtual/pkgconfig
+"
+
+S="${WORKDIR}/${MY_P}"
+
+DOCS="AUTHORS ChangeLog CREDITS README"
+
+PATCHES=(
+       "${FILESDIR}"/${PN}-2014.2.15-no-split-usr.patch
+       "${FILESDIR}"/${PN}-2016.2.22-sysmacros.patch #580136
+       # Fedora fixes
+       "${FILESDIR}"/${PN}-2017.3.23-check-mftmirr.patch
+       "${FILESDIR}"/${PN}-2017.3.23-big-sectors.patch
+       "${FILESDIR}"/${PN}-2017.3.23-full-clusters.patch
+)
+
+pkg_setup() {
+       if use external-fuse && use kernel_linux; then
+               if kernel_is lt 2 6 9; then
+                       die "Your kernel is too old."
+               fi
+               CONFIG_CHECK="~FUSE_FS"
+               FUSE_FS_WARNING="You need to have FUSE module built to use 
ntfs-3g"
+               linux-info_pkg_setup
+       fi
+}
+
+src_prepare() {
+       default
+       # Keep the symlinks in the same place we put the main binaries.
+       # Having them in / when all the progs are in /usr is pointless.
+       sed -i \
+               -e 's:/sbin:$(sbindir):g' \
+               {ntfsprogs,src}/Makefile.in || die #578336
+       # Note: patches apply to Makefile.in, so don't run autotools here.
+       elibtoolize
+}
+
+src_configure() {
+       # disable hd library until we have the right library in the tree and
+       # don't links to hwinfo one causing issues like bug #602360
+       tc-ld-disable-gold
+       econf \
+               --prefix="${EPREFIX}"/usr \
+               --exec-prefix="${EPREFIX}"/usr \
+               --docdir="${EPREFIX}"/usr/share/doc/${PF} \
+               $(use_enable debug) \
+               --enable-ldscript \
+               --disable-ldconfig \
+               $(use_enable acl posix-acls) \
+               $(use_enable xattr xattr-mappings) \
+               $(use_enable ntfsdecrypt crypto) \
+               $(use_enable ntfsprogs) \
+               $(use_enable ntfsprogs quarantined) \
+               --without-uuid \
+               --without-hd \
+               --enable-extras \
+               $(use_enable static-libs static) \
+               --with-fuse=$(usex external-fuse external internal)
+}
+
+src_install() {
+       default
+
+       use suid && fperms u+s /usr/bin/${MY_PN}
+       # Not needed with the link of mount.ntfs being created, causes
+       # issues like bug #635080
+#      udev_dorules "${FILESDIR}"/99-ntfs3g.rules
+       dosym mount.ntfs-3g /usr/sbin/mount.ntfs #374197
+
+       find "${D}" -name '*.la' -type f -delete || die
+}

Reply via email to