[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: remaining tasks before Autoconf release
From: |
Bruno Haible |
Subject: |
Re: remaining tasks before Autoconf release |
Date: |
Sat, 06 May 2023 12:09:51 +0200 |
Hi Paul,
> > I see two issues:
> >
> > 1) For AC_SYS_YEAR2038 and AC_SYS_YEAR2038_RECOMMENDED, when run on a 32-bit
> > platform (x86) with glibc < 2.34, there is no
> > checking for <$CC> option for timestamps after 2038...
> > line in the output. It _looks_like_ the macro was not invoked or did no
> > checks. This is quite confusing for a developer who wants to understand what
> > happened.
> > Suggestion: Print
> > checking for gcc option for timestamps after 2038... support not detected
>
> That's odd, since I just tried it and it worked for me. That is, I ran
>
> ./gnulib-tool --create-testdir --dir foo -h year2038-recommended
When I say "I test a testdir without gnulib and it has two issues"
and you say "I test a testdir with gnulib and it works", this is no
contradiction. These are simply different test cases.
I was testing without gnulib first, because
- if there are issues without gnulib, it is easier to investigate
than with gnulib,
- if there are issues with gnulib but not without gnulib, the
investigation should focus on gnulib/m4/largefile.m4.
The testdirs without gnulib, that I attached to
https://lists.gnu.org/archive/html/autoconf/2023-04/msg00030.html,
are still the current ones. (Regenerating them with the newest autoconf
only changes s/2.72c.20-a347/2.72c.20-9c018/ .)
But I made a mistake during this testing: My testing script on that
particular machine (glibc 2.27/x86) was always adding --disable-year2038;
this explains the absence of output. Without this option, the results are:
==== hello-lf ====
glibc x86 2.27
checking for gcc option to enable large file support... -D_FILE_OFFSET_BITS=64
==== hello-2038 ====
glibc x86 2.27
checking for gcc option to enable large file support... -D_FILE_OFFSET_BITS=64
checking for gcc option for timestamps after 2038... support not detected
==== hello-2038rc ====
glibc x86 2.27
checking for gcc option to enable large file support... -D_FILE_OFFSET_BITS=64
checking for gcc option for timestamps after 2038... support not detected
configure: error: in '/home/bruno/hello-2038rc/build':
configure: error: could not enable timestamps after mid-January 2038.
Did you mean to build a 64-bit binary? (E.g.,
'CC="gcc -m64"'.) To proceed with 32-bit time_t,
configure with '--disable-year2038'.
See 'config.log' for more details
The two issues I reported earlier are moot. But there is one other issue:
3) The hint
Did you mean to build a 64-bit binary? (E.g.,
'CC="gcc -m64"'.)
should not occur on a 32-bit OS. It should only occur on bi-arch systems
(64-bit OS, 32-bit $CC).
On my test machine, Ubuntu 18.04 32-bit, "gcc -m64" does not work:
$ gcc -m64 hello.c
In file included from hello.c:1:0:
/usr/include/stdio.h:27:10: fatal error: bits/libc-header-start.h: No such
file or directory
#include <bits/libc-header-start.h>
^~~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
On your test machine, gcc45.fsffrance.org, "gcc -m64" works but produces
executables that don't work:
$ uname -a
Linux gcc45 3.16.0-11-686-pae #1 SMP Debian 3.16.84-1 (2020-06-09) i686
GNU/Linux
$ gcc -m64 hello.c
$ file a.out
a.out: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically
linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32,
BuildID[sha1]=71f55073fdd349a5de86d90ace175f4ee3a2f2c6, not stripped
$ ./a.out
-bash: ./a.out: cannot execute binary file: Exec format error
In both cases, this suggestion to build a 64-bit binary is pointless and
thus should be omitted.
Only on a bi-arch system, such as gcc13.fsffrance.org, with CC="gcc -m32",
the configure output is
checking for gcc -m32 option to enable large file support...
-D_FILE_OFFSET_BITS=64
checking for gcc -m32 option for timestamps after 2038... support not detected
configure: error: in '/home/haible/hello-2038rc':
configure: error: this system appears to support timestamps after
mid-January 2038, but no mechanism for enabling wide
'time_t' was detected. Did you mean to build a 64-bit
binary? (E.g., 'CC="gcc -m32 -m64"'.) To proceed with
32-bit time_t, configure with '--disable-year2038'.
See 'config.log' for more details
and here the suggestion to build a 64-bit binary is justified.
In other words, what I am suggesting is the attached patch.
Bruno
0001-AC_SYS_YEAR2038_RECOMMENDED-Improve-configure-output.patch
Description: Text Data