Subject: Re: bug#37876: Regression in MAKE-GCC-TOOLCHAIN after core-updates merge

From: Ludovic Courtès <[email-masked]>
Date: Tue, 22 Oct 2019 23:09:02 +0200

Hello,

Carl Dong <[email-masked]> skribis:

> I believe there's been a recent regression w/re MAKE-GCC-TOOLCHAIN. I'm unable
> to guix build the following minimal reproducer:
>
> (use-modules (gnu packages commencement)
>              (gnu packages gcc)
>              (gnu packages base))
>
> (make-gcc-toolchain gcc glibc-2.27)
>
> My guix describe output:
> Generation 33   Oct 22 2019 15:07:03    (current)
>   guix f5d6c88
>     repository URL: https://git.savannah.gnu.org/git/guix.git
>     commit: f5d6c88d0f5e1556295c1a19c46ddfcb7a23107f
>
> The build failure logs can be found here:
> https://www.dropbox.com/s/y7sg3m786ziiwvb/gcc-glibc-2.27-7.4.0.drv.log?dl=0

So we see tons of things like:

--8<---------------cut here---------------start------------->8---
In file included from /gnu/store/5k8l1l6j8sjws40xvlhs7hqjb68ylf7l-glibc-2.27/include/bits/fcntl.h:61:0,
                 from /gnu/store/5k8l1l6j8sjws40xvlhs7hqjb68ylf7l-glibc-2.27/include/fcntl.h:35,
                 from ../../gcc-7.4.0/gcc/system.h:349,
                 from ../../gcc-7.4.0/gcc/genchecksum.c:21:
/gnu/store/5k8l1l6j8sjws40xvlhs7hqjb68ylf7l-glibc-2.27/include/bits/fcntl-linux.h:355:27: warning: ISO C++ forbids zero-size array ‘f_handle’ [-Wpedantic]
   unsigned char f_handle[0];
                           ^
In file included from ./bconfig.h:3:0,
                 from ../../gcc-7.4.0/gcc/genchecksum.c:20:
./auto-host.h:2363:16: error: declaration does not declare anything [-fpermissive]
 #define rlim_t long
                ^
/gnu/store/5k8l1l6j8sjws40xvlhs7hqjb68ylf7l-glibc-2.27/include/bits/resource.h:131:18: note: in expansion of macro ‘rlim_t’
 typedef __rlim_t rlim_t;
                  ^~~~~~
[…]

../../gcc-7.4.0/gcc/system.h:540:20: error: conflicting declaration of C function ‘const char* strsignal(int)’
 extern const char *strsignal (int);
                    ^~~~~~~~~
In file included from /gnu/store/x3jx25cd3q363mr7nbgzrhrv1vza6cf7-gcc-7.4.0/include/c++/cstring:42:0,
                 from ../../gcc-7.4.0/gcc/system.h:235,
                 from ../../gcc-7.4.0/gcc/genhooks.c:21:
/gnu/store/5k8l1l6j8sjws40xvlhs7hqjb68ylf7l-glibc-2.27/include/string.h:446:14: note: previous declaration ‘char* strsignal(int)’
 extern char *strsignal (int __sig) __THROW;
              ^~~~~~~~~

[…]

In file included from ../../gcc-7.4.0/gcc/genmodes.c:21:0:
../../gcc-7.4.0/gcc/system.h:488:14: error: conflicting declaration of C function ‘void* sbrk(int)’
 extern void *sbrk (int);
              ^~~~
In file included from ../../gcc-7.4.0/gcc/system.h:294:0,
                 from ../../gcc-7.4.0/gcc/genmodes.c:21:
/gnu/store/5k8l1l6j8sjws40xvlhs7hqjb68ylf7l-glibc-2.27/include/unistd.h:1044:14: note: previous declaration ‘void* sbrk(intptr_t)’
 extern void *sbrk (intptr_t __delta) __THROW;
              ^~~~

[…]
make[1]: Leaving directory '/tmp/guix-build-gcc-glibc-2.27-7.4.0.drv-0/build'
make: *** [Makefile:934: all] Error 2
command "make" "-j" "48" "FLAGS_FOR_TARGET=-B/gnu/store/5k8l1l6j8sjws40xvlhs7hqjb68ylf7l-glibc-2.27/lib" "LDFLAGS_FOR_TARGET=-B/gnu/store/5k8l1l6j8sjws40xvlhs7hqjb68ylf7l-glibc-2.27/lib -Wl,-dynamic-linker -Wl,/gnu/store/5k8l1l6j8sjws40xvlhs7hqjb68ylf7l-glibc-2.27/lib/ld-linux-x86-64.so.2" "LDFLAGS=-Wl,-rpath=/gnu/store/5k8l1l6j8sjws40xvlhs7hqjb68ylf7l-glibc-2.27/lib -Wl,-dynamic-linker -Wl,/gnu/store/5k8l1l6j8sjws40xvlhs7hqjb68ylf7l-glibc-2.27/lib/ld-linux-x86-64.so.2" "BOOT_CFLAGS=-O2 -g0" failed with status
--8<---------------cut here---------------end--------------->8---

The ‘configure’ phase shows that ‘strsignal’ and ‘sbrk’ were not quite
found, but this is confusing:

--8<---------------cut here---------------start------------->8---
checking for strsignal... no
checking for pstat_getstatic... yes
checking for sysconf... no
checking for realpath... yes
checking for sysctl... yes
checking for setrlimit... yes
checking for sysmp... yes
checking for sbrk... no
checking for table... yes
checking for spawnve... no
checking for times... no
checking for spawnvpe... yes
checking for wait3... no
checking for strerror... yes
checking for wait4... yes
checking for strsignal... yes
[…]
checking whether sbrk is declared... yes
--8<---------------cut here---------------end--------------->8---

Does it work with ‘glibc-2.28’?

We’re not building any such toolchain in CI but we probably should…

Ludo’.