glib can't be built anymore
Closed this issue · 6 comments
glib can't be be built correctly with my ubuntu20 lts wsl2 system and current basement layers.
the error output of bob:
../../../../../../../../src/libs/glib/1/workspace/glib/gnulib/meson.build:306:2: ERROR: Problem encountered: frexp() is missing or broken beyond repair, and we have nothing to replace it with
there are multiple strange things.
-
for building sanity executables, the ubuntu
cc
tool instead of thehost-compat-toolchain
will be used, because the host-compat-toolchain has nocc
tool. -
while building, the process tries to execute cross compiled executables, hm?! which needs glibc 2.34, but it tries to use the one of the ubuntu system, which just is 2.31.
log file:
/home/mhaase/fdt.bobrecipes/dev/build/libs/glib-dev/x86_64-cross-linux-gnu/O0gpipefPIC/1/workspace/build/meson-private/tmp8z6qmhm7/output.exe: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.34' not found (required by /home/mhaase/fdt.bobrecipes/dev/build/libs/glib-dev/x86_64-cross-linux-gnu/O0gpipefPIC/1/workspace/build/meson-private/tmp8z6qmhm7/output.exe)
Hmm, the missing cc
might indeed be a problem. But what puzzles me is where the glibc 2.34 dependency comes from. Meson must have used a newer glibc when linking the test executable. I'm wondering where it should come from.
but why it tries to execute the built executables, which are cross-compiled. if it would be an aarch64 toolchain, the execute will not work at all.
It doesn't look like it's cross compiled. What does a readelf -h /home/mhaase/fdt.bobrecipes/dev/build/libs/glib-dev/x86_64-cross-linux-gnu/O0gpipefPIC/1/workspace/build/meson-private/tmp8z6qmhm7/output.exe
bring up?
what i only found: https://bytemeta.vip/repo/LibreELEC/LibreELEC.tv/issues/6344
but on official sites i can't find this problem. i am confuesd about that.
some more logs here:
Checking if "frexp works" with dependency -lm runs: NO (1)
Running compile:
Working directory: /home/mhaase/fdt.bobrecipes/dev/build/libs/glib-dev/x86_64-cross-linux-gnu/O0gpipefPIC/1/workspace/build/meson-private/tmp66h8dbwt
Command line: x86_64-cross-linux-gnu-gcc -L/home/mhaase/fdt.bobrecipes/dev/dist/libs/libffi-dev/x86_64-cross-linux-gnu/O0gpipefPIC/1/workspace/usr/lib -L/home/mhaase/fdt.bobrecipes/dev/dist/libs/pcre-lib-1-dev/x86_64-cross-linux-gnu/O0gpipefPIC/1/workspace/usr/lib -L/home/mhaase/fdt.bobrecipes/dev/dist/libs/zlib-dev/x86_64-cross-linux-gnu/O0gpipefPIC/1/workspace/usr/lib -I/home/mhaase/fdt.bobrecipes/dev/dist/libs/libffi-dev/x86_64-cross-linux-gnu/O0gpipefPIC/1/workspace/usr/include -I/home/mhaase/fdt.bobrecipes/dev/dist/libs/pcre-lib-1-dev/x86_64-cross-linux-gnu/O0gpipefPIC/1/workspace/usr/include -I/home/mhaase/fdt.bobrecipes/dev/dist/libs/zlib-dev/x86_64-cross-linux-gnu/O0gpipefPIC/1/workspace/usr/include /home/mhaase/fdt.bobrecipes/dev/build/libs/glib-dev/x86_64-cross-linux-gnu/O0gpipefPIC/1/workspace/build/meson-private/tmp66h8dbwt/testfile.c -o /home/mhaase/fdt.bobrecipes/dev/build/libs/glib-dev/x86_64-cross-linux-gnu/O0gpipefPIC/1/workspace/build/meson-private/tmp66h8dbwt/output.exe -Wdate-time -O0 -g -pipe -fPIC -D_FILE_OFFSET_BITS=64 -O0 -std=gnu99 -Wl,--start-group -lm -Wl,--end-group -Wl,-O1 -Wl,--hash-style=gnu -Wl,-rpath-link=/home/mhaase/fdt.bobrecipes/dev/dist/libs/libffi-dev/x86_64-cross-linux-gnu/O0gpipefPIC/1/workspace/usr/lib -Wl,-rpath-link=/home/mhaase/fdt.bobrecipes/dev/dist/libs/pcre-lib-1-dev/x86_64-cross-linux-gnu/O0gpipefPIC/1/workspace/usr/lib -Wl,-rpath-link=/home/mhaase/fdt.bobrecipes/dev/dist/libs/zlib-dev/x86_64-cross-linux-gnu/O0gpipefPIC/1/workspace/usr/lib
Code:
#include <float.h>
#include <math.h>
/* Override the values of <float.h>, like done in float.in.h. */
#if defined __i386__ && (defined __BEOS__ || defined __OpenBSD__)
# undef LDBL_MIN_EXP
# define LDBL_MIN_EXP (-16381)
#endif
#if defined __i386__ && (defined __FreeBSD__ || defined __DragonFly__)
# undef LDBL_MIN_EXP
# define LDBL_MIN_EXP (-16381)
#endif
#if (defined _ARCH_PPC || defined _POWER) && defined _AIX && (LDBL_MANT_DIG == 106) && defined __GNUC__
# undef LDBL_MIN_EXP
# define LDBL_MIN_EXP DBL_MIN_EXP
#endif
#if defined __sgi && (LDBL_MANT_DIG >= 106)
# if defined __GNUC__
# undef LDBL_MIN_EXP
# define LDBL_MIN_EXP DBL_MIN_EXP
# endif
#endif
extern
#ifdef __cplusplus
"C"
#endif
#if !defined (_MSC_VER) || defined (TEST_FREXPL_DECL)
long double frexpl (long double, int *);
#endif
int main()
{
int result = 0;
volatile long double x;
/* Test on finite numbers that fails on AIX 5.1. */
x = 16.0L;
{
int exp = -9999;
frexpl (x, &exp);
if (exp != 5)
result |= 1;
}
/* Test on finite numbers that fails on Mac OS X 10.4, because its frexpl
function returns an invalid (incorrectly normalized) value: it returns
y = { 0x3fe028f5, 0xc28f5c28, 0x3c9eb851, 0xeb851eb8 }
but the correct result is
0.505L = { 0x3fe028f5, 0xc28f5c29, 0xbc547ae1, 0x47ae1480 } */
x = 1.01L;
{
int exp = -9999;
long double y = frexpl (x, &exp);
if (!(exp == 1 && y == 0.505L))
result |= 2;
}
/* Test on large finite numbers. This fails on BeOS at i = 16322, while
LDBL_MAX_EXP = 16384.
In the loop end test, we test x against Infinity, rather than comparing
i with LDBL_MAX_EXP, because BeOS <float.h> has a wrong LDBL_MAX_EXP. */
{
int i;
for (i = 1, x = 1.0L; x != x + x; i++, x *= 2.0L)
{
int exp = -9999;
frexpl (x, &exp);
if (exp != i)
{
result |= 4;
break;
}
}
}
/* Test on denormalized numbers. */
{
int i;
for (i = 1, x = 1.0L; i >= LDBL_MIN_EXP; i--, x *= 0.5L)
;
if (x > 0.0L)
{
int exp;
long double y = frexpl (x, &exp);
/* On machines with IEEE854 arithmetic: x = 1.68105e-4932,
exp = -16382, y = 0.5. On Mac OS X 10.5: exp = -16384, y = 0.5. */
if (exp != LDBL_MIN_EXP - 1)
result |= 8;
}
}
/* Test on infinite numbers. */
/* The dance around 0.0L is an attempt to prevent MSVC from erroring out */
x = 0.0L;
x = 1.0L / x;
{
int exp;
long double y = frexpl (x, &exp);
if (y != x)
result |= 16;
}
return result;
}
Compiler stdout:
Compiler stderr:
Program stdout:
Program stderr:
/home/mhaase/fdt.bobrecipes/dev/build/libs/glib-dev/x86_64-cross-linux-gnu/O0gpipefPIC/1/workspace/build/meson-private/tmp66h8dbwt/output.exe: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.34' not found (required by /home/mhaase/fdt.bobrecipes/dev/build/libs/glib-dev/x86_64-cross-linux-gnu/O0gpipefPIC/1/workspace/build/meson-private/tmp66h8dbwt/output.exe)
Checking if "frexpl works" with dependency -lm runs: NO (1)
Running compile:
Working directory: /home/mhaase/fdt.bobrecipes/dev/build/libs/glib-dev/x86_64-cross-linux-gnu/O0gpipefPIC/1/workspace/build/meson-private/tmpbj360byu
Command line: x86_64-cross-linux-gnu-gcc -I/home/mhaase/fdt.bobrecipes/dev/dist/libs/libffi-dev/x86_64-cross-linux-gnu/O0gpipefPIC/1/workspace/usr/include -I/home/mhaase/fdt.bobrecipes/dev/dist/libs/pcre-lib-1-dev/x86_64-cross-linux-gnu/O0gpipefPIC/1/workspace/usr/include -I/home/mhaase/fdt.bobrecipes/dev/dist/libs/zlib-dev/x86_64-cross-linux-gnu/O0gpipefPIC/1/workspace/usr/include /home/mhaase/fdt.bobrecipes/dev/build/libs/glib-dev/x86_64-cross-linux-gnu/O0gpipefPIC/1/workspace/build/meson-private/tmpbj360byu/testfile.c -o /home/mhaase/fdt.bobrecipes/dev/build/libs/glib-dev/x86_64-cross-linux-gnu/O0gpipefPIC/1/workspace/build/meson-private/tmpbj360byu/output.obj -c -Wdate-time -O0 -g -pipe -fPIC -D_FILE_OFFSET_BITS=64 -O0 -std=gnu99
Code:
#define TEST_FREXPL_DECL 1
#include <float.h>
#include <math.h>
/* Override the values of <float.h>, like done in float.in.h. */
#if defined __i386__ && (defined __BEOS__ || defined __OpenBSD__)
# undef LDBL_MIN_EXP
# define LDBL_MIN_EXP (-16381)
#endif
#if defined __i386__ && (defined __FreeBSD__ || defined __DragonFly__)
# undef LDBL_MIN_EXP
# define LDBL_MIN_EXP (-16381)
#endif
#if (defined _ARCH_PPC || defined _POWER) && defined _AIX && (LDBL_MANT_DIG == 106) && defined __GNUC__
# undef LDBL_MIN_EXP
# define LDBL_MIN_EXP DBL_MIN_EXP
#endif
#if defined __sgi && (LDBL_MANT_DIG >= 106)
# if defined __GNUC__
# undef LDBL_MIN_EXP
# define LDBL_MIN_EXP DBL_MIN_EXP
# endif
#endif
extern
#ifdef __cplusplus
"C"
#endif
#if !defined (_MSC_VER) || defined (TEST_FREXPL_DECL)
long double frexpl (long double, int *);
#endif
int main()
{
int result = 0;
volatile long double x;
/* Test on finite numbers that fails on AIX 5.1. */
x = 16.0L;
{
int exp = -9999;
frexpl (x, &exp);
if (exp != 5)
result |= 1;
}
/* Test on finite numbers that fails on Mac OS X 10.4, because its frexpl
function returns an invalid (incorrectly normalized) value: it returns
y = { 0x3fe028f5, 0xc28f5c28, 0x3c9eb851, 0xeb851eb8 }
but the correct result is
0.505L = { 0x3fe028f5, 0xc28f5c29, 0xbc547ae1, 0x47ae1480 } */
x = 1.01L;
{
int exp = -9999;
long double y = frexpl (x, &exp);
if (!(exp == 1 && y == 0.505L))
result |= 2;
}
/* Test on large finite numbers. This fails on BeOS at i = 16322, while
LDBL_MAX_EXP = 16384.
In the loop end test, we test x against Infinity, rather than comparing
i with LDBL_MAX_EXP, because BeOS <float.h> has a wrong LDBL_MAX_EXP. */
{
int i;
for (i = 1, x = 1.0L; x != x + x; i++, x *= 2.0L)
{
int exp = -9999;
frexpl (x, &exp);
if (exp != i)
{
result |= 4;
break;
}
}
}
/* Test on denormalized numbers. */
{
int i;
for (i = 1, x = 1.0L; i >= LDBL_MIN_EXP; i--, x *= 0.5L)
;
if (x > 0.0L)
{
int exp;
long double y = frexpl (x, &exp);
/* On machines with IEEE854 arithmetic: x = 1.68105e-4932,
exp = -16382, y = 0.5. On Mac OS X 10.5: exp = -16384, y = 0.5. */
if (exp != LDBL_MIN_EXP - 1)
result |= 8;
}
}
/* Test on infinite numbers. */
/* The dance around 0.0L is an attempt to prevent MSVC from erroring out */
x = 0.0L;
x = 1.0L / x;
{
int exp;
long double y = frexpl (x, &exp);
if (y != x)
result |= 16;
}
return result;
}
Compiler stdout:
Compiler stderr:
Checking if "frexpl prototype can be re-listed" compiles: YES
../../../../../../../../src/libs/glib/1/workspace/glib/gnulib/meson.build:306:2: ERROR: Problem encountered: frexp() is missing or broken beyond repair, and we have nothing to replace it with
the temporary files are gone instantly.
but a patch with commenting the subjected lines helps to built the glib completely.
@jkloetzke should be fixed by development progress, isn't it?
Probably. I was never able to reproduce it. So if you don't see it either, feel free to close the ticket. 😉