Subject: bug#18896: regressions in coreutils 8.23 on Yosemite

From: Jack Howarth <[email-masked]>
Date: Mon, 3 Nov 2014 15:09:45 -0500

On Mon, Nov 03, 2014 at 03:16:58PM +0100, Pádraig Brady wrote:
> On 10/31/2014 05:03 PM, Pádraig Brady wrote:
> > On 10/31/2014 03:41 PM, Jack Howarth wrote:
> >> On Fri, Oct 31, 2014 at 03:56:06AM +0000, Pádraig Brady wrote:
> >>> On 10/31/2014 03:30 AM, Jack Howarth wrote:
> >>>> On Fri, Oct 31, 2014 at 02:29:05AM +0000, Pádraig Brady wrote:
> >>>>>
> >>>>> So linkat() is now available but doesn't support hardlinks to symlinks
> >>>>> contrary to the POSIX spec. So it would be best we consider linkat()
> >>>>> unavailable, which can be done manually like:
> >>>>>
> >>>>>   ac_cv_func_linkat=no ./configure
> >>>>>
> >>>>> We'll have to augment the gnulib linkat check to actually check
> >>>>> that linkat() works, rather than just being available.
> >>>>
> >>>> Passing ac_cv_func_linkat=no to configure and using your attached patch
> >>>> results in a large number of failures on x86_64-apple-darwin14.
> >>>
> >>> Good that's better. coreutils tests have passed, and you're getting
> >>> to gnulib issues below.
> 
> I pushed the following slightly different more general patch
> to gnulib to address this issue:
> http://git.sv.gnu.org/gitweb/?p=gnulib.git;a=commitdiff;h=c8e57ce5
> 
> thanks,
> Pádraig.

Pádraig,
     Using...

diff --git a/lib/symlinkat.c b/lib/symlinkat.c
index 9797f46..5df605f 100644
--- a/lib/symlinkat.c
+++ b/lib/symlinkat.c
@@ -20,6 +20,8 @@
 
 #include <unistd.h>
 #include <errno.h>
+#include <string.h>
+#include <sys/stat.h>
 
 #if HAVE_SYMLINKAT
 # undef symlinkat
diff --git a/tests/test-stdnoreturn.c b/tests/test-stdnoreturn.c
index a8aead8..04107bc 100644
--- a/tests/test-stdnoreturn.c
+++ b/tests/test-stdnoreturn.c
@@ -18,6 +18,8 @@
 
 #include <config.h>
 
+#include <unistd.h>
+
 #include <stdnoreturn.h>
 
 #include <stdlib.h>

...gets the compilation of gnulib to...

make[4]: Entering directory `/private/tmp/testdir/gltests'
depbase=`echo test-strtoll.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
gcc -DHAVE_CONFIG_H -I. -I..  -DGNULIB_STRICT_CHECKING=1 -DIN_GNULIB_TESTS=1 -I. -I. -I.. -I./.. -I../gllib -I./../gllib -Wall -std=c89  -g -O2 -MT test-strtoll.o -MD -MP -MF $depbase.Tpo -c -o test-strtoll.o test-strtoll.c &&\
mv -f $depbase.Tpo $depbase.Po
test-strtoll.c:23:18: error: use of undeclared identifier 'strtoll'
SIGNATURE_CHECK (strtoll, long long, (const char *, char **, int));
                 ^
./signature.h:39:21: note: expanded from macro 'SIGNATURE_CHECK'
  SIGNATURE_CHECK1 (fn, ret, args, __LINE__)
                    ^
./signature.h:44:21: note: expanded from macro 'SIGNATURE_CHECK1'
  SIGNATURE_CHECK2 (fn, ret, args, id) /* macroexpand line */
                    ^
./signature.h:46:58: note: expanded from macro 'SIGNATURE_CHECK2'
  static ret (* _GL_UNUSED signature_check ## id) args = fn
                                                         ^
test-strtoll.c:39:14: warning: implicit declaration of function 'strtoll' [-Wimplicit-function-declaration]
    result = strtoll (input, &ptr, 10);
             ^
1 warning and 1 error generated.

The /usr/include/stdlib.h header on darwin14 has...

#if !__DARWIN_NO_LONG_LONG
long long
         strtoll(const char *, char **, int);
#endif /* !__DARWIN_NO_LONG_LONG */

         Jack