Subject: bug#44763: Error when 'make'ing latest version of coreutils

From: Chris Elvidge <[email-masked]>
Date: Sat, 21 Nov 2020 19:54:39 +0000

OK All. Thanks for all the help.
Whether the bison (3.0.2 -> 3.7) upgrade was needed seems to be a moot 
point.
Berny's mod to the bootstrap process (adding a step just before 
configure 'git clean -xdfq && ./bootstrap') got over the first error.
Akim's mod to lib/parse-datetime.y (below) cured the second error.

make-check
============================================================================
Testsuite summary for GNU coreutils 8.32.74-d889b
============================================================================
# TOTAL: 622
# PASS:  513
# SKIP:  109
# XFAIL: 0
# FAIL:  0
# XPASS: 0
# ERROR: 0
============================================================================

but then:

   CC       test-nl_langinfo-mt.o
test-nl_langinfo-mt.c: In function 'threadN_func':
test-nl_langinfo-mt.c:185:1: error: no return statement in function 
returning non-void [-Werror=return-type]
  }
  ^
cc1: all warnings being treated as errors
Makefile:6586: recipe for target 'test-nl_langinfo-mt.o' failed
make[5]: *** [test-nl_langinfo-mt.o] Error 1
make[5]: Leaving directory '/home/chris/Downloads/coreutils/gnulib-tests'
Makefile:9494: recipe for target 'check-am' failed
make[4]: *** [check-am] Error 2
make[4]: Leaving directory '/home/chris/Downloads/coreutils/gnulib-tests'
Makefile:6691: recipe for target 'check-recursive' failed
make[3]: *** [check-recursive] Error 1
make[3]: Leaving directory '/home/chris/Downloads/coreutils/gnulib-tests'
Makefile:9497: recipe for target 'check' failed
make[2]: *** [check] Error 2
make[2]: Leaving directory '/home/chris/Downloads/coreutils/gnulib-tests'
Makefile:12479: recipe for target 'check-recursive' failed
make[1]: *** [check-recursive] Error 1
make[1]: Leaving directory '/home/chris/Downloads/coreutils'
Makefile:12956: recipe for target 'check' failed
make: *** [check] Error 2

As I didn't really care about the tests I did sudo make install which 
said the version number was out-of-date ans asked for make _version.
I did that and then sudo make install again.

It all seems to have worked. --version reports 8.32.74-d889b-dirty

Thanks again
Cheers

On 21/11/2020 06:14 pm, Akim Demaille wrote:
> Hi Chris,
> 
> I saw nothing suspicious about Bison in the logs you sent.
> 
>> Le 21 nov. 2020 à 18:33, Chris Elvidge <[email-masked]> a écrit :
>>
>>   CC       lib/parse-datetime.o
>> In file included from lib/gettext.h:26:0,
>>                  from parse-datetime.y:71:
>> parse-datetime.y: In function 'parse_datetime2':
>> parse-datetime.y:2301:27: error: format '%lld' expects argument of type 'long long int', but argument 2 has type 'time_t {aka long int}' [-Werror=format=]
>> parse-datetime.y:2301:25: note: in expansion of macro '_'
> 
> This is the only error I spotted, and that corresponds to:
> 
>    2296	            dbg_printf (_("after time adjustment (%+"PRIdMAX" hours, "
>    2297	                          "%+"PRIdMAX" minutes, "
>    2298	                          "%+"PRIdMAX" seconds, %+d ns),\n"),
>    2299	                        pc.rel.hour, pc.rel.minutes, pc.rel.seconds,
>    2300	                        pc.rel.ns);
>    2301	            dbg_printf (_("    new time = %"PRIdMAX" epoch-seconds\n"), t4);
> 
> with
> 
>          time_t t4;
> 
> so it appears we "only" have a portability issue where gnulib
> believes %PRIdMAX is ok for time_t, but it is not.
> 
> The other guys (in the previous gdb_printf) are intmax_t:
> 
> /* Relative times.  */
> typedef struct
> {
>    /* Relative year, month, day, hour, minutes, seconds, and nanoseconds.  */
>    intmax_t year;
>    intmax_t month;
>    intmax_t day;
>    intmax_t hour;
>    intmax_t minutes;
>    intmax_t seconds;
>    int ns;
> } relative_time;
> 
> I have no idea what is the best course of action to fix the error
> (a cast?  A configure check to fight the right printf format?  Changing
> the type of t4?), but Chris, if you just want to build, then simply
> change 2301 into
> 
> dbg_printf (_("    new time = %ld epoch-seconds\n"), t4);
> 
> That should do it.
> 
> Cheers!
> 

-- 

Chris Elvidge