commit: c78b8a7c6373927cbc35e0afe0a4771804e6919c
Author: Michael Haubenwallner <michael.haubenwallner <AT> ssi-schaefer
<DOT> com>
AuthorDate: Mon Apr 18 15:28:28 2016 +0000
Commit: Michael Haubenwallner <haubi <AT> gentoo <DOT> org>
CommitDate: Mon Apr 18 15:28:28 2016 +0000
URL: https://gitweb.gentoo.org/repo/proj/prefix.git/commit/?id=c78b8a7c
coreutils-8.25: add Cygwin patch
sys-apps/coreutils/Manifest | 2 +-
sys-apps/coreutils/coreutils-8.25.ebuild | 7 +
.../coreutils/files/coreutils-8.25-cygwin-3.patch | 1407 ++++++++++++++++++++
3 files changed, 1415 insertions(+), 1 deletion(-)
diff --git a/sys-apps/coreutils/Manifest b/sys-apps/coreutils/Manifest
index 0b97bc7..98f2d6b 100644
--- a/sys-apps/coreutils/Manifest
+++ b/sys-apps/coreutils/Manifest
@@ -27,5 +27,5 @@ EBUILD coreutils-8.22-r1.ebuild 6015 SHA256
08c11cfbd5947d24c48ef169ebf0fe2bc87e
EBUILD coreutils-8.22.ebuild 6317 SHA256
7962673e3eeece23fa543eeec7f4ebc9d3bc14254ddc5c98d1c1778508121b9b SHA512
63203170b5378158fed7fdfdb203e3fddf4ac8be79428e7fe4eb475fc800870a9ecda12dcc63a37dfe811aa57b543b414dad847568b18a00f63bbd5a88446914
WHIRLPOOL
45f47540f7114f3e45e41fa36d4d1cace21bafbadac80d29ad6372487f63d9f36537ee03b7a0a4923e743d3294c17a7e1cb96c8ef42e386706bd152a58d2aa28
EBUILD coreutils-8.23-r00.1.ebuild 6267 SHA256
53c2a4bef763782b3dc6f9c00a3b32ca37dd9fcc1c8096fd41633e2a91e2eb4e SHA512
dc5f1f83dc592a6e0fbf37afb3494d7300f34f63a9b81f8eee08c6f5d2826487fb1c06d3c94ababd6e3ce4430737ffa917ffa00e77e2e51ed07b156d21b45e6d
WHIRLPOOL
49548aad93722d42720dd3bd99fdc6eba76eb272cc320e49875a1dc784cc411eadfe2048d0399e8936c26c360861b30c92a0975186e8de008233ca48bbddd4c3
EBUILD coreutils-8.24.ebuild 6596 SHA256
1e82dda3c1a0b1b6c47af214dffac24ffee45bc19efdd2c403e05890267d078b SHA512
e78d9f8f6e99a767cbc809126284161643af220808753adff57b52e129686ee3a208e7d1742694fd0dd8f3b28d238df759169866da861b7539e9a79b490bd930
WHIRLPOOL
08e2b1ce22af8a0b3b40b62dfc0b6fb739bd22b5db349874ff2c9b70cb14fa247bbb2c896b4db9564f5e6466d62b2483a96fb3c58c2e781419eedb6373108e37
-EBUILD coreutils-8.25.ebuild 6563 SHA256
7e2d7d2b1f87e0c35c95ab595ddee1c5053a666a93d2de4826fb4c427d034cc7 SHA512
7180fe2b3a446659824226111f24516178dbb8e51ec631c346c2a9fdaab6302ee4353eb3e7c1ff1d1344480ec333438f5c04360af2507400039ea975d4b5120d
WHIRLPOOL
aceacf2b77b3311d96ea4fc1da77181d0b325a6e54ee4ae7232e5bd48d2505486b2a5046561baa6b4239c64af057d2960785e29624b4a0a519fca90e47bc9759
+EBUILD coreutils-8.25.ebuild 6851 SHA256
d3b1a63c2358050268bd664c688d4aa7fece44df146af9133e52bb23a493f152 SHA512
9726525fa87d75d972c6e29032f63808167f8f6dbc83c0cf658cbb29dd1c12f34e4bcad63697f9b76801d108324036d30f7642bd0a74279e697e3640a9a18b4c
MISC metadata.xml 668 SHA256
5861c2e0c2723f166f6c52bd9726f5d5020286f6e475c4746516f0cfd59ebe47 SHA512
347e830a93a0fcbaa2ab9104761ad0e0c42dbbe28d4cf29fc953bc21055051afd3c8e0ab0dbecf5c27faf1335f82b3601be78cc8980365b85db5a7a86419bb1c
WHIRLPOOL
091d55503649ee267113ab47f3192b5740961b18f1f542d4ffacded2f7ccfff528ac31ac771b9da220d3486dc10812b91c26a8f6859b4cc51a55d2c2648419ea
diff --git a/sys-apps/coreutils/coreutils-8.25.ebuild
b/sys-apps/coreutils/coreutils-8.25.ebuild
index ef6ae84..b34f290 100644
--- a/sys-apps/coreutils/coreutils-8.25.ebuild
+++ b/sys-apps/coreutils/coreutils-8.25.ebuild
@@ -67,6 +67,9 @@ src_prepare() {
-e "/src_libstdbuf_so_LDFLAGS =
-shared/s:-shared:-dynamiclib -install_name
${EPREFIX}/usr/libexec/coreutils/libstdbuf.dylib:" \
Makefile.in \
|| die
+ elif use elibc_Cygwin ; then
+ epatch "${FILESDIR}"/${P}-cygwin-3.patch
+ sed -i -e 's|\(libstdbuf\.so\)$(EXEEXT)|\1|g' Makefile.in || die
fi
sed -i \
-e "s/libstdbuf\\.so/libstdbuf$(get_libname)/" \
@@ -183,6 +186,10 @@ src_install() {
rm -rf "${ED}"/usr/share/man
fi
+ if use elibc_Cygwin ; then
+ ! use kill || mv "${ED}"/bin/{,g}kill || die
+ mv "${ED}"/usr/libexec/${PN}/libstdbuf$(get_libname){.exe,} ||
die
+ fi
}
pkg_postinst() {
diff --git a/sys-apps/coreutils/files/coreutils-8.25-cygwin-3.patch
b/sys-apps/coreutils/files/coreutils-8.25-cygwin-3.patch
new file mode 100644
index 0000000..3319b1b
--- /dev/null
+++ b/sys-apps/coreutils/files/coreutils-8.25-cygwin-3.patch
@@ -0,0 +1,1407 @@
+This is a copy of coreutils-8.25-3.src.patch from the official Cygwin
+coreutils-8.25-3 source package, modified to avoid re-running autotools:
+
+* Hunks for ./configure.ac go to ./configure instead.
+* Hunks for ./lib/local.mk go to ./Makefile.in instead.
+
+--- origsrc/coreutils-8.25/ChangeLog 2016-01-20 03:55:17.000000000 -0700
++++ src/coreutils-8.25/ChangeLog 2016-04-12 12:50:05.042257400 -0600
+@@ -1,3 +1,235 @@
++2016-03-08 Eric Blake <[email protected]>
++
++ Cygwin release 8.25-1.
++ * lib/set-permissions.c (set_acls_from_mode): Fix missing return.
++
++2015-08-26 Eric Blake <[email protected]>
++
++ Cygwin release 8.24-3.
++ * lib/cygwin.c (cygwin_spelling): Fix uninitialized variable that
++ broke 'cp -r' depending on stack contents.
++
++2015-08-26 Eric Blake <[email protected]>
++
++ Cygwin release 8.24-2.
++ Enable stdbuf (requires hacks to Makefile.in).
++
++
++2015-08-25 Eric Blake <[email protected]>
++
++ Cygwin release 8.24-1.
++
++2014-09-24 Eric Blake <[email protected]>
++
++ Cygwin release 8.23-3.
++ * lib/cygwin.c (cygwin_spelling): Skip .exe magic if .exe is
++ already present. Also honor .exe magic on symlinks.
++ * lib/same.c (same_name): Treat files as same if only difference
++ is .exe magic.
++ * src/copy.c (copy): Move symlink special casing here.
++ * src/install.c (strip): Update caller.
++ * src/ls.c (gobble_file): Likewise.
++ * src/stat.c (do_statfs, do_stat): Likewise.
++
++2014-08-12 Eric Blake <[email protected]>
++
++ Cygwin release 8.23-2.
++ Drop hostname.
++
++2014-08-01 Eric Blake <[email protected]>
++
++ Cygwin release 8.23-1.
++ * configure.ac: Disable stdbuf.
++ * lib/local.mk: Upstream switched to flat make, impacting how
++ we build local cygwin.c code.
++ * lib/canonicalize.c: Accepted upstream.
++ * lib/file-has-acl.c: Likewise.
++ * src/realpath.c: Likewise.
++ * src/su.c: Upstream dropped su.
++ * src/Makefile.am: Drop su changes.
++ * src/chroot.c: Adapt to new upstream code.
++
++2012-02-04 Eric Blake <[email protected]>
++
++ Cygwin release 8.15-1.
++ * lib/fts.c: Early gnulib fix is now upstream.
++ * lib/canonicalize.c: Backport gnulib fix for /// -> /.
++ * src/realpath.c: Backport gnulib fix for --relative-to.
++
++2011-10-27 Eric Blake <[email protected]>
++
++ Cygwin release 8.14-1.
++ * lib/ftc.c: Backport gnulib fix to make rm close before rmdir.
++ * lib/cygwin.c (cygwin_spelling): Fix logic when 'f' and 'f.exe'
++ exist but are different files.
++ * src/stat.c: Fix --append-exe.
++
++2011-02-04 Eric Blake <[email protected]>
++
++ Cygwin release 8.10-1.
++
++2010-12-24 Eric Blake <[email protected]>
++
++ Cygwin release 8.8-1.
++ * lib/mountlist.c (ME_REMOTE): Restore previous cygwin hack to
++ determine remote drives, lost since 6.11-1.
++
++2010-04-29 Eric Blake <[email protected]>
++
++ Cygwin release 8.5-1.
++
++2010-03-11 Eric Blake <[email protected]>
++
++ Cygwin release 8.4-1.
++ * lib/xfreopen.c (xfreopen): Consolidate workaround for broken
++ freopen usage into one place.
++ * src/copy.c (copy): Reinstate .exe magic handling when copying
++ files with implicit .exe.
++
++2008-12-13 Eric Blake <[email protected]>
++
++ Cygwin release 7.0-1.
++
++2008-06-02 Eric Blake <[email protected]>
++
++ Cygwin release 6.12-1.
++
++2008-05-12 Eric Blake <[email protected]>
++
++ Cygwin release 6.11-1, requires cygwin 1.7.0.
++ * lib/cygwin.h (CYGWIN_APPEND_EXE): Accomodate new PATH_MAX.
++ * lib/cygwin.c (cygwin_spelling): Accomodate new trailing
++ `.' semantics.
++ * lib/same.c (same_name): Accomodate new PATH_MAX.
++
++2008-01-24 Eric Blake <[email protected]>
++
++ Cygwin release 6.10-1.
++ * lib/hash-triple.c (triple_hash): Hash case-insensitively.
++ * lib/hash-pjw.h (hash_pjw_case): New interface.
++ * lib/hash-pjw.c (hash_pjw_case): New function.
++ * src/chcon.c (main): Support my root_dev_ino tweaks.
++
++2007-08-21 Eric Blake <[email protected]>
++
++ Cygwin release 6.9-5.
++ * same.c (same_name): Detect same file differing only by case.
++ * src/copy.c (same_file_ok): Add parameter to detect when case
++ change is being attempted.
++ (triple_hash): Hash names case-insensitively.
++ (copy_internal): Accommodate case-change attempts.
++ * src/mv.c (do_move): Allow 'mv foo/ Foo/' as shorthand for
++ 'mv -T foo/ Foo/'.
++
++2007-07-23 Eric Blake <[email protected]>
++
++ Cygwin release 6.9-4.
++ * src/dd.c (main): Fix typo in earlier cygwin patch.
++
++2007-05-29 Eric Blake <[email protected]>
++
++ Cygwin release 6.9-3.
++ * src/cksum.c (main): Don't lose append mode.
++ * src/md5sum.c (main): Likewise.
++ * src/cat.c (main): Likewise.
++ * src/head.c (main): Likewise.
++ * src/tac.c (main): Likewise.
++ * src/tail.c (main): Likewise.
++ * src/tee.c (main): Likewise.
++ * src/tr.c (main): Likewise.
++
++2006-11-24 Eric Blake <[email protected]>
++
++ Cygwin release 6.6-2.
++ * lib/cygwin.c (cygwin_spelling): Work even with old-style
++ symlinks, which lacked .lnk suffix.
++
++2006-04-14 Eric Blake <[email protected]>
++
++ Cygwin release 5.94-5. Experimental only, depends on cygwin
++ snapshot 20060329 or later.
++ * src/dd.c (main): Default to binary mode.
++ * src/system.h (rpl_freopen): Remove this hack, now that cygwin
++ freopen(NULL) works.
++ * lib/quotearg.c (quote_eight_bit): New variable, so I can...
++ (quotearg_buffer_restyled): treat 8-bit characters as printable
++ when outputting to a terminal.
++ * lib/quote.c (quote_n): Use it.
++
++2006-02-28 Eric Blake <[email protected]>
++
++ Cygwin release 5.94-4. Experimental only, depends on cygwin
++ snapshot 20060227 or later.
++ * lib/root-dev-ino.h (struct root_dev_ino): New struct.
++ (ROOT_DEV_INO_CHECK, ROOT_DEV_INO_WARN): Also track //.
++ * lib/root-dev-ino.c (get_root_dev_ino): Also track //.
++ * src/chmod.c (root_dev_ino): Use new type.
++ (main): Ditto.
++ * src/chown-core.h (struct Chown_option): Ditto.
++ * src/chown.c (main): Ditto.
++ * src/remove.h (struct rm_options): Ditto.
++ * src/rm.c (main): Ditto.
++ * src/pwd.c (robust_getcwd): Ditto. Also fix bug when in / or //.
++
++2006-01-24 Eric Blake <[email protected]>
++
++ Cygwin release 5.93-3, depends on cygwin-1.5.19-1 or later.
++ * src/cksum.c (main): Always output binary files.
++ * src/md5sum.c (main): Likewise.
++ * src/su.c (correct_password): On NT machines, attempt
++ passwordless login first, and give better error message if
++ password check fails. I still don't know how to distinguish
++ between insufficient privileges vs. incorrect password.
++ * src/dircolors.c (main): Silence warning from tcsh 6.14.00.
++
++2005-10-15 Eric Blake <[email protected]>
++
++ Cygwin release 5.90-3, depends on snapshot 20051003 or later (will
++ become cygwin 1.5.19).
++ * doc/coreutils.texi (ls invocation, stat invocation): Document
++ --append-exe.
++ * src/ls.c (usage): Ditto.
++ (gobble_file): Append .exe as needed when requested.
++ * src/stat.c (usage): Document --append-exe.
++ (do_stat, do_statfs): Append .exe as needed when requested.
++
++2005-10-08 Eric Blake <[email protected]>
++
++ Cygwin release 5.90-2, depends on snapshot 20051003 or later (will
++ become cygwin 1.5.19).
++ * lib/mkdir-p.c (make_dir_parents): Fix bug in last patch.
++ * lib/cygwin.h (CYGWIN_APPEND_EXE): Factor into common macro.
++ * src/copy.c (copy): Use new macro.
++ * src/install.c (strip): Ditto.
++ * src/ln.c (do_link): Ditto.
++
++2005-07-13 Eric Blake <[email protected]>
++
++ * doc/coreutils.texi (ln invocation): Document --disable-exe-magic.
++ * src/ln.c (usage): Likewise.
++ (do_link): Skip .exe magic when requested.
++
++2005-07-12 Eric Blake <[email protected]>
++
++ * lib/cygwin.c (cygwin_spelling): Don't append .exe to directories.
++ Make sure .exe exists before returning 1, because otherwise
++ virtual directories such as /cygdrive have problems.
++
++2005-07-07 Eric Blake <[email protected]>
++
++ * lib/cygwin.h: New file, defining cygwin_spelling.
++ * lib/cygwin.c: New file.
++ * lib/Makefile.am: Compile it.
++ * src/copy.c (copy_internal, copy): Use new cygwin_spelling() to
++ undo .exe magic.
++ * src/link.c (do_link): Likewise.
++ * src/install.c (strip): Likewise.
++
++2005-01-03 Corinna Vinschen <[email protected]>
++
++ * src/install.c (strip): Check for .exe here since strip doesn't.
++
++
+ 2016-01-20 Pádraig Brady <[email protected]>
+
+ version 8.25
+--- origsrc/coreutils-8.25/configure.ac 2016-01-01 06:48:50.000000000
-0700
++++ src/coreutils-8.25/configure.ac 2016-04-12 12:49:47.302692100 -0600
+#@@ -468,7 +468,8 @@ gl_WARN_ADD([-Werror], [CFLAGS])
+ gl_WARN_ADD([-errwarn], [CFLAGS])
+ # Put this message here, after gl_WARN_ADD's chatter.
+ AC_MSG_CHECKING([whether this system supports stdbuf])
+-CFLAGS="-fPIC $CFLAGS"
++# -fPIC on cygwin is a warning
++# CFLAGS="-fPIC $CFLAGS"
+ LDFLAGS="-shared $LDFLAGS"
+ stdbuf_supported=no
+ # Note we only LINK here rather than RUN to support cross compilation
+#@@ -486,7 +487,7 @@ AC_LINK_IFELSE(
+ ],
+ [stdbuf_supported=yes])
+ AC_MSG_RESULT([$stdbuf_supported])
+-if test "$stdbuf_supported" = "yes" && test -z "$EXEEXT"; then
++if test "$stdbuf_supported" = "yes"; then
+ gl_ADD_PROG([optional_bin_progs], [stdbuf])
+ fi
+ CFLAGS=$ac_save_CFLAGS
+--- origsrc/coreutils-8.25/configure
++++ src/coreutils-8.25/configure
+@@ -63050,7 +63050,8 @@
+ # Put this message here, after gl_WARN_ADD's chatter.
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether this system
supports stdbuf" >&5
+ $as_echo_n "checking whether this system supports stdbuf... " >&6; }
+-CFLAGS="-fPIC $CFLAGS"
++# -fPIC on cygwin is a warning
++# CFLAGS="-fPIC $CFLAGS"
+ LDFLAGS="-shared $LDFLAGS"
+ stdbuf_supported=no
+ # Note we only LINK here rather than RUN to support cross compilation
+@@ -63082,7 +63083,7 @@
+ conftest$ac_exeext conftest.$ac_ext
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $stdbuf_supported" >&5
+ $as_echo "$stdbuf_supported" >&6; }
+-if test "$stdbuf_supported" = "yes" && test -z "$EXEEXT"; then
++if test "$stdbuf_supported" = "yes"; then
+ {
+ if test -z "$optional_bin_progs"; then
+ optional_bin_progs=stdbuf
+--- origsrc/coreutils-8.25/doc/coreutils.texi 2016-01-13 04:16:39.000000000
-0700
++++ src/coreutils-8.25/doc/coreutils.texi 2016-04-12 12:49:47.318287500
-0600
+@@ -7665,6 +7665,14 @@ These options change how file names them
+
+ @table @samp
+
++@item --append-exe
++@opindex --append-exe
++@cindex appending exe on cygwin
++Cygwin only: Cygwin normally performs @samp{.exe} magic, where a
++command line argument typed without an .exe extension transparently
++refers to the existing file with an extension. Specifying this option
++will make the .exe show if cygwin magic was involved.
++
+ @item -b
+ @itemx --escape
+ @itemx --quoting-style=escape
+@@ -11679,6 +11687,14 @@ With this option, @command{stat} acts on
+ by each symbolic link argument.
+ Without it, @command{stat} acts on any symbolic link argument directly.
+
++@item --append-exe
++@opindex --append-exe
++@cindex appending exe on cygwin
++Cygwin only: Cygwin normally performs .exe magic, where a command line
++argument typed without an .exe extension transparently refers to the
++existing file with an extension. Specifying this option will make
++the .exe show if cygwin magic was involved.
++
+ @item -f
+ @itemx --file-system
+ @opindex -f
+--- origsrc/coreutils-8.25/lib/cygwin.c 1969-12-31 17:00:00.000000000
-0700
++++ src/coreutils-8.25/lib/cygwin.c 2016-04-12 12:49:47.318287500 -0600
+@@ -0,0 +1,73 @@
++/* cygwin.c - helper functions unique to Cygwin
++
++ Copyright (C) 2005, 2006, 2008, 2011 Free Software Foundation, Inc.
++
++ This program is free software; you can redistribute it and/or modify
++ it under the terms of the GNU General Public License as published by
++ the Free Software Foundation; either version 3, or (at your option)
++ any later version.
++
++ This program is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ GNU General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with this program; if not, write to the Free Software Foundation,
++ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
++
++ Written by Eric Blake. */
++
++#include <config.h>
++
++#include "cygwin.h"
++
++#include <errno.h>
++#include <limits.h>
++#include <string.h>
++#include <unistd.h>
++
++/* Return -1 if PATH is not found, 0 if PATH will not have .exe
++ appended (it is possible that a PATH that does not exist still
++ returns 0 instead of -1, or fails for a PATH that exists but cannot
++ be stat'ed), and positive if PATH has ".exe" automatically appended
++ by cygwin (1 if PATH is a symlink, 2 otherwise). Won't change errno. */
++
++int
++cygwin_spelling (char const *path)
++{
++ int saved_errno = errno;
++ int result = 0; /* Start with assumption that PATH is okay. */
++ size_t len;
++ struct stat st1;
++ struct stat st2;
++ char *path_exe;
++
++ /* If PATH will cause EINVAL or ENAMETOOLONG, treat it as missing. */
++ if (! path || ! *path)
++ return -1;
++ if (PATH_MAX < (len = strlen (path)))
++ return -1;
++ /* Don't change spelling if there is a trailing `/' or '.exe'. */
++ if (path[len - 1] == '/'
++ || (len > 4 && !strcasecmp (&path[len - 4], ".exe")))
++ return 0;
++ if (lstat (path, &st1) < 0)
++ {
++ errno = saved_errno;
++ return -1;
++ }
++ if (S_ISDIR(st1.st_mode))
++ {
++ errno = saved_errno;
++ return 0;
++ }
++ path_exe = malloca (len + 5); /* adding ".exe" and NUL. */
++ strcat (stpcpy (path_exe, path), ".exe");
++ if (lstat (path_exe, &st2) == 0 && st1.st_ino == st2.st_ino)
++ result = 1 + !S_ISLNK(st1.st_mode);
++ freea (path_exe);
++
++ errno = saved_errno;
++ return result;
++}
+--- origsrc/coreutils-8.25/lib/cygwin.h 1969-12-31 17:00:00.000000000
-0700
++++ src/coreutils-8.25/lib/cygwin.h 2016-04-12 12:49:47.318287500 -0600
+@@ -0,0 +1,38 @@
++/* cygwin.h - helper functions unique to Cygwin
++
++ Copyright (C) 2005, 2006, 2008, 2010, 2011 Free Software Foundation, Inc.
++
++ This program is free software; you can redistribute it and/or modify
++ it under the terms of the GNU General Public License as published by
++ the Free Software Foundation; either version 3, or (at your option)
++ any later version.
++
++ This program is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ GNU General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with this program; if not, write to the Free Software Foundation,
++ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
++
++ Written by Eric Blake. */
++
++#ifndef CYGWIN_H
++# define CYGWIN_H 1
++
++#include "malloca.h"
++
++int cygwin_spelling (char const *);
++
++/* Append ".exe" to char *__NAME_ORIG, where __NAME is either NULL or
++ between __NAME_ORIG and the nul terminator. Both params will be
++ evaluated more than once and assigned the new value. The user must
++ later call freea(__NAME). */
++#define CYGWIN_APPEND_EXE(__name, __name_orig) \
++ __name_orig = __name = \
++ strcat (strcpy (malloca (strchr (__name ? __name : __name_orig, '\0') \
++ - (__name_orig) + 5), \
++ __name_orig), ".exe")
++
++#endif /* CYGWIN_H */
+--- origsrc/coreutils-8.25/lib/hash-pjw.c 2016-01-01 06:45:55.000000000
-0700
++++ src/coreutils-8.25/lib/hash-pjw.c 2016-04-12 12:49:47.318287500 -0600
+@@ -19,6 +19,7 @@
+
+ #include "hash-pjw.h"
+
++#include <ctype.h>
+ #include <limits.h>
+
+ #define SIZE_BITS (sizeof (size_t) * CHAR_BIT)
+@@ -38,3 +39,16 @@ hash_pjw (const void *x, size_t tablesiz
+
+ return h % tablesize;
+ }
++
++/* Likewise, but case-insensitive. */
++size_t
++hash_pjw_case (const void *x, size_t tablesize)
++{
++ const unsigned char *s;
++ size_t h = 0;
++
++ for (s = x; *s; s++)
++ h = tolower (*s) + ((h << 9) | (h >> (SIZE_BITS - 9)));
++
++ return h % tablesize;
++}
+--- origsrc/coreutils-8.25/lib/hash-pjw.h 2016-01-01 06:45:55.000000000
-0700
++++ src/coreutils-8.25/lib/hash-pjw.h 2016-04-12 12:49:47.318287500 -0600
+@@ -21,3 +21,4 @@
+ The result is platform dependent: it depends on the size of the 'size_t'
+ type and on the signedness of the 'char' type. */
+ extern size_t hash_pjw (void const *x, size_t tablesize) _GL_ATTRIBUTE_PURE;
++extern size_t hash_pjw_case (void const *x, size_t tablesize)
_GL_ATTRIBUTE_PURE;
+--- origsrc/coreutils-8.25/lib/hash-triple.c 2016-01-01 06:45:55.000000000
-0700
++++ src/coreutils-8.25/lib/hash-triple.c 2016-04-12 12:49:47.318287500
-0600
+@@ -34,7 +34,13 @@ size_t
+ triple_hash (void const *x, size_t table_size)
+ {
+ struct F_triple const *p = x;
++#if !__CYGWIN__
+ size_t tmp = hash_pjw (p->name, table_size);
++#else // cygwin
++ /* Hash case-insensitively, to force collisions on names that differ by
++ case; copy.c can then account for case-insensitive renames. */
++ size_t tmp = hash_pjw_case (p->name, table_size);
++#endif
+
+ /* Ignoring the device number here should be fine. */
+ return (tmp ^ p->st_ino) % table_size;
+--- origsrc/coreutils-8.25/lib/local.mk 2012-11-13 06:51:53.000000000
-0700
++++ src/coreutils-8.25/lib/local.mk 2016-04-12 12:49:47.318287500 -0600
+#@@ -3,3 +3,6 @@ include lib/gnulib.mk
+ # Allow "make distdir" to succeed before "make all" has run.
+ dist-hook: $(noinst_LIBRARIES)
+ .PHONY: dist-hook
++
++# Hook in cygwin helper
++lib_libcoreutils_a_SOURCES += lib/cygwin.c lib/cygwin.h
+--- origsrc/coreutils-8.25/Makefile.in
++++ src/coreutils-8.25/Makefile.in
+@@ -694,7 +694,8 @@
+ lib/xstriconv.h lib/xstriconv.c lib/xstrndup.h lib/xstrndup.c \
+ lib/xstrtod.c lib/xstrtoimax.c lib/xstrtol.c lib/xstrtoul.c \
+ lib/xstrtol-error.c lib/xstrtold.c lib/xstrtoumax.c \
+- lib/xvasprintf.h lib/xvasprintf.c lib/xasprintf.c lib/yesno.c
++ lib/xvasprintf.h lib/xvasprintf.c lib/xasprintf.c lib/yesno.c \
++ lib/cygwin.c lib/cygwin.h
+ am__dirstamp = $(am__leading_dot)dirstamp
+ @LIBUNISTRING_COMPILE_UNISTR_U8_MBTOUCR_TRUE@am__objects_1 =
lib/unistr/u8-mbtoucr.$(OBJEXT)
+ @LIBUNISTRING_COMPILE_UNISTR_U8_UCTOMB_TRUE@am__objects_2 =
lib/unistr/u8-uctomb.$(OBJEXT) \
+@@ -799,7 +800,8 @@
+ lib/xstrtol.$(OBJEXT) lib/xstrtoul.$(OBJEXT) \
+ lib/xstrtol-error.$(OBJEXT) lib/xstrtold.$(OBJEXT) \
+ lib/xstrtoumax.$(OBJEXT) lib/xvasprintf.$(OBJEXT) \
+- lib/xasprintf.$(OBJEXT) lib/yesno.$(OBJEXT)
++ lib/xasprintf.$(OBJEXT) lib/yesno.$(OBJEXT) \
++ lib/cygwin.$(OBJEXT)
+ lib_libcoreutils_a_OBJECTS = $(am_lib_libcoreutils_a_OBJECTS)
+ src_libsinglebin___a_AR = $(AR) $(ARFLAGS)
+ src_libsinglebin___a_LIBADD =
+@@ -4215,6 +4217,8 @@
+ # mv $@-t $@
+ #EXTRA_DIST += script.in
+ #MOSTLYCLEANFILES += script script-t
++
++# Hook in cygwin helper
+ lib_libcoreutils_a_SOURCES = lib/copy-acl.c lib/set-acl.c \
+ lib/acl-errno-valid.c lib/acl-internal.c lib/get-permissions.c \
+ lib/set-permissions.c lib/allocator.c lib/areadlink.c \
+@@ -4288,7 +4292,8 @@
+ lib/xstriconv.h lib/xstriconv.c lib/xstrndup.h lib/xstrndup.c \
+ lib/xstrtod.c lib/xstrtoimax.c lib/xstrtol.c lib/xstrtoul.c \
+ lib/xstrtol-error.c lib/xstrtold.c lib/xstrtoumax.c \
+- lib/xvasprintf.h lib/xvasprintf.c lib/xasprintf.c lib/yesno.c
++ lib/xvasprintf.h lib/xvasprintf.c lib/xasprintf.c lib/yesno.c \
++ lib/cygwin.c lib/cygwin.h
+ lib_libcoreutils_a_LIBADD = $(gl_LIBOBJS) @ALLOCA@
+ lib_libcoreutils_a_DEPENDENCIES = $(gl_LIBOBJS) @ALLOCA@
+ EXTRA_lib_libcoreutils_a_SOURCES = lib/acl_entries.c lib/alloca.c \
+@@ -6321,6 +6326,8 @@
+ lib/xasprintf.$(OBJEXT): lib/$(am__dirstamp) \
+ lib/$(DEPDIR)/$(am__dirstamp)
+ lib/yesno.$(OBJEXT): lib/$(am__dirstamp) lib/$(DEPDIR)/$(am__dirstamp)
++lib/cygwin.$(OBJEXT): lib/$(am__dirstamp) \
++ lib/$(DEPDIR)/$(am__dirstamp)
+ lib/acl_entries.$(OBJEXT): lib/$(am__dirstamp) \
+ lib/$(DEPDIR)/$(am__dirstamp)
+ lib/alloca.$(OBJEXT): lib/$(am__dirstamp) \
+@@ -8262,6 +8269,7 @@
+ @AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/copy-acl.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/creat-safer.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/cycle-check.Po@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/cygwin.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/di-set.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/diacrit.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/dirchownmod.Po@am__quote@
+--- origsrc/coreutils-8.25/lib/root-dev-ino.c 2016-01-01 06:48:50.000000000
-0700
++++ src/coreutils-8.25/lib/root-dev-ino.c 2016-04-12 12:49:47.318287500
-0600
+@@ -25,13 +25,17 @@
+ /* Call lstat to get the device and inode numbers for '/'.
+ Upon failure, return NULL. Otherwise, set the members of
+ *ROOT_D_I accordingly and return ROOT_D_I. */
+-struct dev_ino *
+-get_root_dev_ino (struct dev_ino *root_d_i)
++struct root_dev_ino *
++get_root_dev_ino (struct root_dev_ino *root_d_i)
+ {
+ struct stat statbuf;
+ if (lstat ("/", &statbuf))
+ return NULL;
+- root_d_i->st_ino = statbuf.st_ino;
+- root_d_i->st_dev = statbuf.st_dev;
++ root_d_i->single_slash.st_ino = statbuf.st_ino;
++ root_d_i->single_slash.st_dev = statbuf.st_dev;
++ if (lstat ("//", &statbuf))
++ return NULL;
++ root_d_i->double_slash.st_ino = statbuf.st_ino;
++ root_d_i->double_slash.st_dev = statbuf.st_dev;
+ return root_d_i;
+ }
+--- origsrc/coreutils-8.25/lib/root-dev-ino.h 2016-01-01 06:48:50.000000000
-0700
++++ src/coreutils-8.25/lib/root-dev-ino.h 2016-04-12 12:49:47.318287500
-0600
+@@ -21,19 +21,26 @@
+ # include "dev-ino.h"
+ # include "same-inode.h"
+
+-struct dev_ino *
+-get_root_dev_ino (struct dev_ino *root_d_i);
++struct root_dev_ino
++{
++ struct dev_ino single_slash;
++ struct dev_ino double_slash;
++};
++
++struct root_dev_ino *
++get_root_dev_ino (struct root_dev_ino *root_d_i);
+
+ /* These macros are common to the programs that support the
+ --preserve-root and --no-preserve-root options. */
+
+ # define ROOT_DEV_INO_CHECK(Root_dev_ino, Dir_statbuf) \
+- (Root_dev_ino && SAME_INODE (*Dir_statbuf, *Root_dev_ino))
++ (Root_dev_ino && (SAME_INODE (*Dir_statbuf, (Root_dev_ino)->single_slash) \
++ || SAME_INODE (*Dir_statbuf,
(Root_dev_ino)->double_slash)))
+
+ # define ROOT_DEV_INO_WARN(Dirname) \
+ do \
+ { \
+- if (STREQ (Dirname, "/"))
\
++ if (STREQ (Dirname, "/") || STREQ (Dirname, "//")) \
+ error (0, 0, _("it is dangerous to operate recursively on %s"),
\
+ quoteaf (Dirname)); \
+ else \
+--- origsrc/coreutils-8.25/lib/same.c 2016-01-01 06:45:55.000000000 -0700
++++ src/coreutils-8.25/lib/same.c 2016-04-12 12:49:47.318287500 -0600
+@@ -40,6 +40,13 @@
+ #include "error.h"
+ #include "same-inode.h"
+
++#if __CYGWIN__
++# include <sys/cygwin.h>
++# include "cygwin.h"
++# include "malloca.h"
++# include "memcasecmp.h"
++#endif
++
+ #ifndef MIN
+ # define MIN(a, b) ((a) < (b) ? (a) : (b))
+ #endif
+@@ -59,6 +66,45 @@ same_name (const char *source, const cha
+ (source_baselen == dest_baselen
+ && memcmp (source_basename, dest_basename, dest_baselen) == 0);
+ bool compare_dirs = identical_basenames;
++#if __CYGWIN__
++ /* If two names differ case-insensitively by only an '.exe' suffix,
++ do some sleuthing to see if .exe magic matters on the shorter
++ name. Swapping the longer name to dest avoids duplication. */
++ if (source_baselen == dest_baselen + 4)
++ {
++ char const *tmp_basename = source_basename;
++ size_t tmp_baselen = source_baselen;
++ source_basename = dest_basename;
++ source_baselen = dest_baselen;
++ dest_basename = tmp_basename;
++ dest_baselen = tmp_baselen;
++ }
++ if (source_baselen + 4 == dest_baselen
++ && !memcasecmp (dest_basename - 4, ".exe", 4)
++ && !memcasecmp (source_basename, dest_basename, source_baselen)
++ && 0 < cygwin_spelling(source))
++ dest_baselen -= 4;
++ /* Some, but not all, files are case-insensitive (depending on mount
++ options, CYGWIN=case settings, and virtual file systems). Do
++ some sleuthing to decide whether case-insensitivity matters. */
++ if (! compare_dirs && source_baselen == dest_baselen)
++ {
++ ssize_t wsrclen = cygwin_conv_path (CCP_POSIX_TO_WIN_W,
++ source, NULL, 0);
++ ssize_t wdstlen = cygwin_conv_path (CCP_POSIX_TO_WIN_W,
++ dest, NULL, 0);
++ char *wsrc = malloca (wsrclen);
++ char *wdst = malloca (wdstlen);
++ if (cygwin_conv_path (CCP_POSIX_TO_WIN_W, source, wsrc, wsrclen))
++ error (EXIT_FAILURE, errno, "unable to convert path name %s", source);
++ if (cygwin_conv_path (CCP_POSIX_TO_WIN_W, dest, wdst, wdstlen))
++ error (EXIT_FAILURE, errno, "unable to convert path name %s", dest);
++ if (wsrclen == wdstlen && memcasecmp (wsrc, wdst, wsrclen) == 0)
++ compare_dirs = true;
++ freea (wsrc);
++ freea (wdst);
++ }
++#endif /* __CYGWIN__ */
+ bool same = false;
+
+ #if ! _POSIX_NO_TRUNC && HAVE_PATHCONF && defined _PC_NAME_MAX
+--- origsrc/coreutils-8.25/lib/set-permissions.c 2016-01-01
06:45:55.000000000 -0700
++++ src/coreutils-8.25/lib/set-permissions.c 2016-04-12 12:49:47.318287500
-0600
+@@ -269,6 +269,7 @@ set_acls_from_mode (const char *name, in
+ }
+ return -1;
+ }
++ return 0;
+ }
+ }
+
+@@ -494,7 +495,7 @@ set_acls (struct permission_context *ctx
+
+ # ifndef HAVE_ACL_FROM_TEXT
+ # error Must have acl_from_text (see POSIX 1003.1e draft 17).
+-# endif
++ # endif
+ # ifndef HAVE_ACL_DELETE_DEF_FILE
+ # error Must have acl_delete_def_file (see POSIX 1003.1e draft 17).
+ # endif
+--- origsrc/coreutils-8.25/lib/sys_select.in.h 2016-01-01 07:17:01.000000000
-0700
++++ src/coreutils-8.25/lib/sys_select.in.h 2016-04-12 12:48:36.181822100
-0600
+@@ -81,8 +81,8 @@
+ of 'struct timeval', and no definition of this type.
+ Also, Mac OS X, AIX, HP-UX, IRIX, Solaris, Interix declare select()
+ in <sys/time.h>.
+- But avoid namespace pollution on glibc systems. */
+-# ifndef __GLIBC__
++ But avoid namespace pollution on glibc/Cygwin systems. */
++# if !(defined __GLIBC__ || defined __CYGWIN__)
+ # include <sys/time.h>
+ # endif
+
+@@ -103,7 +103,7 @@
+ But avoid namespace pollution on glibc systems.
+ Do this after the include_next (for the sake of OpenBSD 5.0) but before
+ the split double-inclusion guard (for the sake of Solaris). */
+-#if !(defined __GLIBC__ && !defined __UCLIBC__)
++#if !((defined __GLIBC__ || defined __CYGWIN__) && !defined __UCLIBC__)
+ # include <signal.h>
+ #endif
+
+--- origsrc/coreutils-8.25/lib/xfreopen.c 2016-01-01 06:45:55.000000000
-0700
++++ src/coreutils-8.25/lib/xfreopen.c 2016-04-12 12:49:47.318287500 -0600
+@@ -18,6 +18,7 @@
+ #include "xfreopen.h"
+
+ #include <errno.h>
++#include <fcntl.h>
+ #include "error.h"
+ #include "exitfail.h"
+ #include "quote.h"
+@@ -26,9 +27,17 @@
+ #include "gettext.h"
+ #define _(msgid) gettext (msgid)
+
++#define STREQ(s1, s2) (strcmp (s1, s2) == 0)
++
+ void
+ xfreopen (char const *filename, char const *mode, FILE *fp)
+ {
++ if (!filename && STREQ (mode, "wb"))
++ {
++ int flag = fcntl (fileno (fp), F_GETFL);
++ if (0 <= flag && (flag & O_APPEND))
++ mode = "ab";
++ }
+ if (!freopen (filename, mode, fp))
+ {
+ char const *f = (filename ? filename
+--- origsrc/coreutils-8.25/src/chcon.c 2016-01-01 06:48:50.000000000 -0700
++++ src/coreutils-8.25/src/chcon.c 2016-04-12 12:49:47.318287500 -0600
+@@ -47,7 +47,7 @@ static bool verbose;
+
+ /* Pointer to the device and inode numbers of '/', when --recursive.
+ Otherwise NULL. */
+-static struct dev_ino *root_dev_ino;
++static struct root_dev_ino *root_dev_ino;
+
+ /* The name of the context file is being given. */
+ static char const *specified_context;
+@@ -569,7 +569,7 @@ main (int argc, char **argv)
+
+ if (recurse && preserve_root)
+ {
+- static struct dev_ino dev_ino_buf;
++ static struct root_dev_ino dev_ino_buf;
+ root_dev_ino = get_root_dev_ino (&dev_ino_buf);
+ if (root_dev_ino == NULL)
+ error (EXIT_FAILURE, errno, _("failed to get attributes of %s"),
+--- origsrc/coreutils-8.25/src/chgrp.c 2016-01-01 06:48:50.000000000 -0700
++++ src/coreutils-8.25/src/chgrp.c 2016-04-12 12:49:47.318287500 -0600
+@@ -300,7 +300,7 @@ main (int argc, char **argv)
+
+ if (chopt.recurse && preserve_root)
+ {
+- static struct dev_ino dev_ino_buf;
++ static struct root_dev_ino dev_ino_buf;
+ chopt.root_dev_ino = get_root_dev_ino (&dev_ino_buf);
+ if (chopt.root_dev_ino == NULL)
+ error (EXIT_FAILURE, errno, _("failed to get attributes of %s"),
+--- origsrc/coreutils-8.25/src/chmod.c 2016-01-01 06:48:50.000000000 -0700
++++ src/coreutils-8.25/src/chmod.c 2016-04-12 12:49:47.318287500 -0600
+@@ -80,7 +80,7 @@ static enum Verbosity verbosity = V_off;
+
+ /* Pointer to the device and inode numbers of '/', when --recursive.
+ Otherwise NULL. */
+-static struct dev_ino *root_dev_ino;
++static struct root_dev_ino *root_dev_ino;
+
+ /* For long options that have no equivalent short option, use a
+ non-character as a pseudo short option, starting with CHAR_MAX + 1. */
+@@ -551,7 +551,7 @@ main (int argc, char **argv)
+
+ if (recurse && preserve_root)
+ {
+- static struct dev_ino dev_ino_buf;
++ static struct root_dev_ino dev_ino_buf;
+ root_dev_ino = get_root_dev_ino (&dev_ino_buf);
+ if (root_dev_ino == NULL)
+ error (EXIT_FAILURE, errno, _("failed to get attributes of %s"),
+--- origsrc/coreutils-8.25/src/chown-core.h 2016-01-01 06:48:50.000000000
-0700
++++ src/coreutils-8.25/src/chown-core.h 2016-04-12 12:49:47.333906200
-0600
+@@ -50,7 +50,7 @@ struct Chown_option
+
+ /* Pointer to the device and inode numbers of '/', when --recursive.
+ Need not be freed. Otherwise NULL. */
+- struct dev_ino *root_dev_ino;
++ struct root_dev_ino *root_dev_ino;
+
+ /* This corresponds to the --dereference (opposite of -h) option. */
+ bool affect_symlink_referent;
+--- origsrc/coreutils-8.25/src/chown.c 2016-01-01 06:48:50.000000000 -0700
++++ src/coreutils-8.25/src/chown.c 2016-04-12 12:49:47.333906200 -0600
+@@ -312,7 +312,7 @@ main (int argc, char **argv)
+
+ if (chopt.recurse && preserve_root)
+ {
+- static struct dev_ino dev_ino_buf;
++ static struct root_dev_ino dev_ino_buf;
+ chopt.root_dev_ino = get_root_dev_ino (&dev_ino_buf);
+ if (chopt.root_dev_ino == NULL)
+ error (EXIT_FAILURE, errno, _("failed to get attributes of %s"),
+--- origsrc/coreutils-8.25/src/chroot.c 2016-01-01 06:48:50.000000000
-0700
++++ src/coreutils-8.25/src/chroot.c 2016-04-12 12:49:47.333906200 -0600
+@@ -170,7 +170,8 @@ static bool
+ is_root (const char* dir)
+ {
+ char *resolved = canonicalize_file_name (dir);
+- bool is_res_root = resolved && STREQ ("/", resolved);
++ bool is_res_root = resolved && (STREQ ("/", resolved)
++ || STREQ ("//", resolved));
+ free (resolved);
+ return is_res_root;
+ }
+--- origsrc/coreutils-8.25/src/cksum.c 2016-01-01 06:48:50.000000000 -0700
++++ src/coreutils-8.25/src/cksum.c 2016-04-12 12:49:47.333906200 -0600
+@@ -301,6 +301,9 @@ main (int argc, char **argv)
+
+ have_read_stdin = false;
+
++ if (O_BINARY)
++ xfreopen (NULL, "wb", stdout);
++
+ if (optind == argc)
+ ok = cksum ("-", false);
+ else
+--- origsrc/coreutils-8.25/src/copy.c 2016-01-16 12:09:33.000000000 -0700
++++ src/coreutils-8.25/src/copy.c 2016-04-12 12:49:47.333906200 -0600
+@@ -74,6 +74,10 @@
+ # include <linux/falloc.h>
+ #endif
+
++#if __CYGWIN__
++# include "cygwin.h"
++#endif
++
+ #ifndef HAVE_FCHOWN
+ # define HAVE_FCHOWN false
+ # define fchown(fd, uid, gid) (-1)
+@@ -1416,7 +1420,11 @@ close_src_desc:
+ static bool
+ same_file_ok (char const *src_name, struct stat const *src_sb,
+ char const *dst_name, struct stat const *dst_sb,
+- const struct cp_options *x, bool *return_now)
++ const struct cp_options *x, bool *return_now
++#if __CYGWIN__
++ , bool *case_change
++#endif
++ )
+ {
+ const struct stat *src_sb_link;
+ const struct stat *dst_sb_link;
+@@ -1560,6 +1568,18 @@ same_file_ok (char const *src_name, stru
+ if (S_ISLNK (dst_sb_link->st_mode))
+ return true;
+
++#if __CYGWIN__
++ /* If the files have the same name, but differ in case, then let
++ rename() change the case. */
++ if (same_link && x->move_mode && same_name (src_name, dst_name)
++ && memcmp (last_component (src_name), last_component (dst_name),
++ base_len (src_name)))
++ {
++ *case_change = true;
++ return true;
++ }
++#endif /* __CYGWIN__ */
++
+ /* It's not ok if they're distinct hard links to the same file as
+ this causes a race condition and we may lose data in this case. */
+ if (same_link
+@@ -1907,10 +1927,20 @@ copy_internal (char const *src_name, cha
+ && ! (x->move_mode || x->symbolic_link || x->hard_link
+ || x->backup_type != no_backups
+ || x->unlink_dest_before_opening));
+- if ((use_stat
+- ? stat (dst_name, &dst_sb)
+- : lstat (dst_name, &dst_sb))
+- != 0)
++ int res = (use_stat
++ ? stat (dst_name, &dst_sb)
++ : lstat (dst_name, &dst_sb));
++#if __CYGWIN__
++ /* stat("a") succeeds even if it was really "a.exe". */
++ if (! res && cygwin_spelling (dst_name) != 0)
++ {
++ /* Only DST_NAME.exe exists, but we want the non-existant
++ DST_NAME. */
++ res = -1;
++ errno = ENOENT;
++ }
++#endif /* __CYGWIN__ */
++ if (res != 0)
+ {
+ if (errno != ENOENT)
+ {
+@@ -1926,10 +1956,17 @@ copy_internal (char const *src_name, cha
+ { /* Here, we know that dst_name exists, at least to the point
+ that it is stat'able or lstat'able. */
+ bool return_now;
++#if __CYGWIN__
++ bool case_change = false;
++#endif /* __CYGWIN__ */
+
+ have_dst_lstat = !use_stat;
+ if (! same_file_ok (src_name, &src_sb, dst_name, &dst_sb,
+- x, &return_now))
++ x, &return_now
++#if __CYGWIN__
++ , &case_change
++#endif /* __CYGWIN__ */
++ ))
+ {
+ error (0, 0, _("%s and %s are the same file"),
+ quoteaf_n (0, src_name), quoteaf_n (1, dst_name));
+@@ -1988,6 +2025,9 @@ copy_internal (char const *src_name, cha
+ cp and mv treat -i and -f differently. */
+ if (x->move_mode)
+ {
++#if __CYGWIN__
++ if (!case_change)
++#endif /* __CYGWIN__ */
+ if (abandon_move (x, dst_name, &dst_sb))
+ {
+ /* Pretend the rename succeeded, so the caller (mv)
+@@ -2144,7 +2184,11 @@ copy_internal (char const *src_name, cha
+ /* Never unlink dst_name when in move mode. */
+ && ! x->move_mode
+ && (x->unlink_dest_before_opening
+- || (x->preserve_links && 1 < dst_sb.st_nlink)
++ || (x->preserve_links && 1 < dst_sb.st_nlink
++#if __CYGWIN__
++ && !case_change
++#endif /* __CYGWIN__ */
++ )
+ || (x->dereference == DEREF_NEVER
+ && ! S_ISREG (src_sb.st_mode))
+ ))
+@@ -2920,6 +2964,21 @@ copy (char const *src_name, char const *
+ {
+ assert (valid_options (options));
+
++#if __CYGWIN__
++ /* .exe magic - if src exists with an implicit .exe suffix and is
++ not a symlink, but dst does not exist and was also specified
++ without a suffix, then append .exe to dst. */
++ int cygwin = cygwin_spelling (src_name);
++ char *p;
++ if (cygwin == 2
++ && ((p = strchr (dst_name, '\0') - 4) <= dst_name
++ || strcasecmp (p, ".exe") != 0))
++ {
++ cygwin = 3;
++ CYGWIN_APPEND_EXE (p, dst_name);
++ }
++#endif /* __CYGWIN__ */
++
+ /* Record the file names: they're used in case of error, when copying
+ a directory into itself. I don't like to make these tools do *any*
+ extra work in the common case when that work is solely to handle
+@@ -2931,10 +2990,15 @@ copy (char const *src_name, char const *
+ top_level_dst_name = dst_name;
+
+ bool first_dir_created_per_command_line_arg = false;
+- return copy_internal (src_name, dst_name, nonexistent_dst, NULL, NULL,
++ bool result = copy_internal (src_name, dst_name, nonexistent_dst, NULL,
NULL,
+ options, true,
+ &first_dir_created_per_command_line_arg,
+ copy_into_self, rename_succeeded);
++#if __CYGWIN__
++ if (cygwin == 3)
++ freea ((char *) dst_name);
++#endif /* __CYGWIN__ */
++ return result;
+ }
+
+ /* Set *X to the default options for a value of type struct cp_options. */
+--- origsrc/coreutils-8.25/src/dd.c 2016-01-13 04:16:39.000000000 -0700
++++ src/coreutils-8.25/src/dd.c 2016-04-12 12:49:47.333906200 -0600
+@@ -36,6 +36,10 @@
+ #include "xstrtol.h"
+ #include "xtime.h"
+
++#if __CYGWIN__
++# include <io.h>
++#endif
++
+ /* The official name of this program (e.g., no 'g' prefix). */
+ #define PROGRAM_NAME "dd"
+
+@@ -1984,6 +1988,13 @@ copy_with_unblock (char const *buf, size
+ static void
+ set_fd_flags (int fd, int add_flags, char const *name)
+ {
++#if __CYGWIN__
++ /* Cygwin does not allow fcntl to set the mode. */
++ int mode_flags = add_flags & (O_BINARY | O_TEXT);
++ add_flags &= ~(O_BINARY | O_TEXT);
++ if (mode_flags && setmode (fd, mode_flags) == -1)
++ error (EXIT_FAILURE, errno, _("setting flags for %s"), quote (name));
++#endif /* __CYGWIN__ */
+ /* Ignore file creation flags that are no-ops on file descriptors. */
+ add_flags &= ~ (O_NOCTTY | O_NOFOLLOW);
+
+@@ -2374,6 +2385,8 @@ main (int argc, char **argv)
+ }
+ else
+ {
++ if ((input_flags & (O_BINARY | O_TEXT)) == 0)
++ input_flags |= O_BINARY;
+ if (ifd_reopen (STDIN_FILENO, input_file, O_RDONLY | input_flags, 0) <
0)
+ error (EXIT_FAILURE, errno, _("failed to open %s"),
+ quoteaf (input_file));
+@@ -2397,6 +2410,8 @@ main (int argc, char **argv)
+ | (conversions_mask & C_NOCREAT ? 0 : O_CREAT)
+ | (conversions_mask & C_EXCL ? O_EXCL : 0)
+ | (seek_records || (conversions_mask & C_NOTRUNC) ? 0 : O_TRUNC));
++ if ((opts & (O_BINARY | O_TEXT)) == 0)
++ opts |= O_BINARY;
+
+ /* Open the output file with *read* access only if we might
+ need to read to satisfy a 'seek=' request. If we can't read
+--- origsrc/coreutils-8.25/src/dircolors.c 2016-01-01 06:48:50.000000000
-0700
++++ src/coreutils-8.25/src/dircolors.c 2016-04-12 12:49:47.333906200 -0600
+@@ -495,8 +495,12 @@ main (int argc, char **argv)
+ }
+ else
+ {
++ /* tcsh treats LS_COLORS as a magic shell variable for its
++ builtin ls-F, but does not recognize all the categories
++ that coreutils ls does. Therefore, silence stderr to
++ avoid messages like "Unknown colorls variable `su'.". */
+ prefix = "setenv LS_COLORS '";
+- suffix = "'\n";
++ suffix = "' >&/dev/null\n";
+ }
+ fputs (prefix, stdout);
+ fwrite (s, 1, len, stdout);
+--- origsrc/coreutils-8.25/src/install.c 2016-01-03 05:59:44.000000000
-0700
++++ src/coreutils-8.25/src/install.c 2016-04-12 12:49:47.333906200 -0600
+@@ -43,6 +43,10 @@
+ #include "utimens.h"
+ #include "xstrtol.h"
+
++#if __CYGWIN__
++# include "cygwin.h"
++#endif
++
+ /* The official name of this program (e.g., no 'g' prefix). */
+ #define PROGRAM_NAME "install"
+
+@@ -531,6 +535,16 @@ strip (char const *name)
+ error (0, errno, _("fork system call failed"));
+ break;
+ case 0: /* Child. */
++#if __CYGWIN__
++ {
++ /* Check for .exe here, since strip doesn't. */
++ char *p;
++ if (((p = strchr (name, '\0') - 4) <= name
++ || strcasecmp (p, ".exe") != 0)
++ && 0 < cygwin_spelling (name))
++ CYGWIN_APPEND_EXE (p, name);
++ }
++#endif /* __CYGWIN__ */
+ execlp (strip_program, strip_program, name, NULL);
+ error (EXIT_FAILURE, errno, _("cannot run %s"), quoteaf
(strip_program));
+ break;
+--- origsrc/coreutils-8.25/src/ls.c 2016-01-14 05:16:23.000000000 -0700
++++ src/coreutils-8.25/src/ls.c 2016-04-12 12:49:47.333906200 -0600
+@@ -117,6 +117,10 @@
+ # include <sys/capability.h>
+ #endif
+
++#if __CYGWIN__
++# include "cygwin.h"
++#endif
++
+ #define PROGRAM_NAME (ls_mode == LS_LS ? "ls" \
+ : (ls_mode == LS_MULTI_COL \
+ ? "dir" : "vdir"))
+@@ -753,6 +757,11 @@ static char const *long_time_format[2] =
+ N_("%b %e %H:%M")
+ };
+
++#if __CYGWIN__
++/* Whether .exe should be appended to command-line args as needed. */
++static bool append_exe;
++#endif /* __CYGWIN__ */
++
+ /* The set of signals that are caught. */
+
+ static sigset_t caught_signals;
+@@ -788,6 +797,9 @@ enum
+ enum
+ {
+ AUTHOR_OPTION = CHAR_MAX + 1,
++#if __CYGWIN__
++ APPEND_EXE_OPTION,
++#endif /* __CYGWIN__ */
+ BLOCK_SIZE_OPTION,
+ COLOR_OPTION,
+ DEREFERENCE_COMMAND_LINE_SYMLINK_TO_DIR_OPTION,
+@@ -849,6 +861,9 @@ static struct option const long_options[
+ {"block-size", required_argument, NULL, BLOCK_SIZE_OPTION},
+ {"context", no_argument, 0, 'Z'},
+ {"author", no_argument, NULL, AUTHOR_OPTION},
++#if __CYGWIN__
++ {"append-exe", no_argument, NULL, APPEND_EXE_OPTION},
++#endif /* __CYGWIN__ */
+ {GETOPT_HELP_OPTION_DECL},
+ {GETOPT_VERSION_OPTION_DECL},
+ {NULL, 0, NULL, 0}
+@@ -1953,6 +1968,12 @@ decode_switches (int argc, char **argv)
+ print_scontext = true;
+ break;
+
++#if __CYGWIN__
++ case APPEND_EXE_OPTION:
++ append_exe = true;
++ break;
++#endif /* __CYGWIN__ */
++
+ case_GETOPT_HELP_CHAR;
+
+ case_GETOPT_VERSION_CHAR (PROGRAM_NAME, AUTHORS);
+@@ -2943,6 +2964,12 @@ gobble_file (char const *name, enum file
+ uintmax_t blocks = 0;
+ struct fileinfo *f;
+
++#if __CYGWIN__
++ char *name_alt = NULL;
++ if (command_line_arg && append_exe && 0 < cygwin_spelling (name))
++ CYGWIN_APPEND_EXE (name_alt, name);
++#endif /* __CYGWIN__ */
++
+ /* An inode value prior to gobble_file necessarily came from readdir,
+ which is not used for command line arguments. */
+ assert (! command_line_arg || inode == NOT_AN_INODE_NUMBER);
+@@ -3053,11 +3080,19 @@ gobble_file (char const *name, enum file
+ file_failure (command_line_arg,
+ _("cannot access %s"), absolute_name);
+ if (command_line_arg)
+- return 0;
++ {
++#if __CYGWIN__
++ freea (name_alt);
++#endif /* __CYGWIN__ */
++ return 0;
++ }
+
+ f->name = xstrdup (name);
+ cwd_n_used++;
+
++#if __CYGWIN__
++ freea (name_alt);
++#endif /* __CYGWIN__ */
+ return 0;
+ }
+
+@@ -3241,6 +3276,9 @@ gobble_file (char const *name, enum file
+ f->name = xstrdup (name);
+ cwd_n_used++;
+
++#if __CYGWIN__
++ freea (name_alt);
++#endif /* __CYGWIN__ */
+ return blocks;
+ }
+
+@@ -4961,6 +4999,11 @@ Sort entries alphabetically if none of -
+ -1 list one file per line. Avoid '\\n' with -q or
-b\
+ \n\
+ "), stdout);
++#if __CYGWIN__
++ fputs (_("\
++ --append-exe append .exe if cygwin magic was needed\n\
++"), stdout);
++#endif /* __CYGWIN__ */
+ fputs (HELP_OPTION_DESCRIPTION, stdout);
+ fputs (VERSION_OPTION_DESCRIPTION, stdout);
+ emit_size_note ();
+--- origsrc/coreutils-8.25/src/md5sum.c 2016-01-01 06:48:50.000000000
-0700
++++ src/coreutils-8.25/src/md5sum.c 2016-04-12 12:49:47.333906200 -0600
+@@ -867,6 +867,9 @@ main (int argc, char **argv)
+ if (optind == argc)
+ argv[argc++] = bad_cast ("-");
+
++ if (O_BINARY)
++ xfreopen (NULL, "wb", stdout);
++
+ for (; optind < argc; ++optind)
+ {
+ char *file = argv[optind];
+--- origsrc/coreutils-8.25/src/mv.c 2016-01-12 04:41:44.000000000 -0700
++++ src/coreutils-8.25/src/mv.c 2016-04-12 12:49:47.333906200 -0600
+@@ -91,7 +91,7 @@ rm_option_init (struct rm_options *x)
+ x->require_restore_cwd = true;
+
+ {
+- static struct dev_ino dev_ino_buf;
++ static struct root_dev_ino dev_ino_buf;
+ x->root_dev_ino = get_root_dev_ino (&dev_ino_buf);
+ if (x->root_dev_ino == NULL)
+ error (EXIT_FAILURE, errno, _("failed to get attributes of %s"),
+@@ -466,6 +466,16 @@ main (int argc, char **argv)
+ else if (!target_directory)
+ {
+ assert (2 <= n_files);
++#if __CYGWIN__
++ struct stat s1, s2;
++ if (2 == n_files
++ && lstat (file[0], &s1) == 0 && lstat (file[1], &s2) == 0
++ && s1.st_ino == s2.st_ino)
++ {
++ /* Allow 'mv foo Foo' to change case of the directory foo. */
++ }
++ else
++#endif /* __CYGWIN__ */
+ if (target_directory_operand (file[n_files - 1]))
+ target_directory = file[--n_files];
+ else if (2 < n_files)
+--- origsrc/coreutils-8.25/src/pwd.c 2016-01-01 06:48:50.000000000 -0700
++++ src/coreutils-8.25/src/pwd.c 2016-04-12 12:49:47.333906200 -0600
+@@ -268,8 +268,8 @@ static void
+ robust_getcwd (struct file_name *file_name)
+ {
+ size_t height = 1;
+- struct dev_ino dev_ino_buf;
+- struct dev_ino *root_dev_ino = get_root_dev_ino (&dev_ino_buf);
++ struct root_dev_ino dev_ino_buf;
++ struct root_dev_ino *root_dev_ino = get_root_dev_ino (&dev_ino_buf);
+ struct stat dot_sb;
+
+ if (root_dev_ino == NULL)
+@@ -282,7 +282,7 @@ robust_getcwd (struct file_name *file_na
+ while (1)
+ {
+ /* If we've reached the root, we're done. */
+- if (SAME_INODE (dot_sb, *root_dev_ino))
++ if (ROOT_DEV_INO_CHECK (root_dev_ino, &dot_sb))
+ break;
+
+ find_dir_entry (&dot_sb, file_name, height++);
+@@ -291,6 +291,9 @@ robust_getcwd (struct file_name *file_na
+ /* See if a leading slash is needed; file_name_prepend adds one. */
+ if (file_name->start[0] == '\0')
+ file_name_prepend (file_name, "", 0);
++ /* If we aren't in `/', we must be in `//'. */
++ if (! SAME_INODE (root_dev_ino->single_slash, dot_sb))
++ file_name_prepend (file_name, "", 0);
+ }
+
+
+--- origsrc/coreutils-8.25/src/remove.h 2016-01-01 06:48:50.000000000
-0700
++++ src/coreutils-8.25/src/remove.h 2016-04-12 12:49:47.333906200 -0600
+@@ -54,7 +54,7 @@ struct rm_options
+
+ /* Pointer to the device and inode numbers of '/', when --recursive
+ and preserving '/'. Otherwise NULL. */
+- struct dev_ino *root_dev_ino;
++ struct root_dev_ino *root_dev_ino;
+
+ /* If nonzero, stdin is a tty. */
+ bool stdin_tty;
+--- origsrc/coreutils-8.25/src/rm.c 2016-01-01 06:48:50.000000000 -0700
++++ src/coreutils-8.25/src/rm.c 2016-04-12 12:49:47.333906200 -0600
+@@ -323,7 +323,7 @@ main (int argc, char **argv)
+
+ if (x.recursive && preserve_root)
+ {
+- static struct dev_ino dev_ino_buf;
++ static struct root_dev_ino dev_ino_buf;
+ x.root_dev_ino = get_root_dev_ino (&dev_ino_buf);
+ if (x.root_dev_ino == NULL)
+ error (EXIT_FAILURE, errno, _("failed to get attributes of %s"),
+--- origsrc/coreutils-8.25/src/stat.c 2016-01-13 04:16:39.000000000 -0700
++++ src/coreutils-8.25/src/stat.c 2016-04-12 12:49:47.333906200 -0600
+@@ -72,6 +72,13 @@
+ #include "find-mount-point.h"
+ #include "xvasprintf.h"
+
++#if __CYGWIN__
++# include "cygwin.h"
++/* Whether .exe should be appended to command-line args as needed. */
++static bool append_exe;
++# define APPEND_EXE_OPTION 10000
++#endif
++
+ #if USE_STATVFS
+ # define STRUCT_STATXFS_F_FSID_IS_INTEGER STRUCT_STATVFS_F_FSID_IS_INTEGER
+ # define HAVE_STRUCT_STATXFS_F_TYPE HAVE_STRUCT_STATVFS_F_TYPE
+@@ -189,6 +196,9 @@ static struct option const long_options[
+ {"format", required_argument, NULL, 'c'},
+ {"printf", required_argument, NULL, PRINTF_OPTION},
+ {"terse", no_argument, NULL, 't'},
++#if __CYGWIN__
++ {"append-exe", no_argument, NULL, APPEND_EXE_OPTION},
++#endif /* __CYGWIN__ */
+ {GETOPT_HELP_OPTION_DECL},
+ {GETOPT_VERSION_OPTION_DECL},
+ {NULL, 0, NULL, 0}
+@@ -1284,14 +1294,26 @@ do_statfs (char const *filename, char co
+ return false;
+ }
+
++#if __CYGWIN__
++ char *name_alt = NULL;
++ if (append_exe && 0 < cygwin_spelling (filename))
++ CYGWIN_APPEND_EXE (name_alt, filename);
++#endif /* __CYGWIN__ */
++
+ if (STATFS (filename, &statfsbuf) != 0)
+ {
+ error (0, errno, _("cannot read file system information for %s"),
+ quoteaf (filename));
++#if __CYGWIN__
++ freea (name_alt);
++#endif /* __CYGWIN__ */
+ return false;
+ }
+
+ bool fail = print_it (format, -1, filename, print_statfs, &statfsbuf);
++#if __CYGWIN__
++ freea (name_alt);
++#endif /* __CYGWIN__ */
+ return ! fail;
+ }
+
+@@ -1302,6 +1324,7 @@ do_stat (char const *filename, char cons
+ {
+ int fd = STREQ (filename, "-") ? 0 : -1;
+ struct stat statbuf;
++ char *name_alt = NULL;
+
+ if (0 <= fd)
+ {
+@@ -1314,18 +1337,28 @@ do_stat (char const *filename, char cons
+ /* We can't use the shorter
+ (follow_links?stat:lstat) (filename, &statbug)
+ since stat might be a function-like macro. */
+- else if ((follow_links
+- ? stat (filename, &statbuf)
+- : lstat (filename, &statbuf)) != 0)
++ else
+ {
+- error (0, errno, _("cannot stat %s"), quoteaf (filename));
+- return false;
++ if ((follow_links
++ ? stat (filename, &statbuf)
++ : lstat (filename, &statbuf)) != 0)
++ {
++ error (0, errno, _("cannot stat %s"), quoteaf (filename));
++ return false;
++ }
++#if __CYGWIN__
++ if (append_exe && 0 < cygwin_spelling (filename))
++ CYGWIN_APPEND_EXE (name_alt, filename);
++#endif /* __CYGWIN__ */
+ }
+
+ if (S_ISBLK (statbuf.st_mode) || S_ISCHR (statbuf.st_mode))
+ format = format2;
+
+ bool fail = print_it (format, fd, filename, print_stat, &statbuf);
++#if __CYGWIN__
++ freea (name_alt);
++#endif /* __CYGWIN__ */
+ return ! fail;
+ }
+
+@@ -1447,6 +1480,11 @@ Display file or file system status.\n\
+ if you want a newline, include \\n in FORMAT\n\
+ -t, --terse print the information in terse form\n\
+ "), stdout);
++#if __CYGWIN__
++ fputs (_("\
++ --append-exe append .exe if cygwin magic was needed\n\
++"), stdout);
++#endif /* __CYGWIN__ */
+ fputs (HELP_OPTION_DESCRIPTION, stdout);
+ fputs (VERSION_OPTION_DESCRIPTION, stdout);
+
+@@ -1567,6 +1605,12 @@ main (int argc, char *argv[])
+ terse = true;
+ break;
+
++#if __CYGWIN__
++ case APPEND_EXE_OPTION:
++ append_exe = true;
++ break;
++#endif /* __CYGWIN__ */
++
+ case_GETOPT_HELP_CHAR;
+
+ case_GETOPT_VERSION_CHAR (PROGRAM_NAME, AUTHORS);