Sestavení tarballových vydání GNU m4 1.4.10 až 1.4.18 (netestovalo všechny verze opravy hotfix, ale předpokládám, že chyba je v tomto rozsahu konzistentní) s ./configure && make -j1
a git git
úložiště http://git.savannah.gnu.org/r/m4.git s ./bootstrap && ./configure && make -j1
(zavázat cvs-readonly-359-gd69fa528
tj. HEAD
z master
) selže z důvodu
freadahead.c: In function 'freadahead':
freadahead.c:92:3: error: #error "Please port gnulib freadahead.c to your platform! Look at the definition of fflush, fread, ungetc on your system, then report this to bug-gnulib."
#error "Please port gnulib freadahead.c to your platform! Look at the definition of fflush, fread, ungetc on your system, then report this to bug-gnulib."
^~~~~
make[3]: *** [Makefile:1910: freadahead.o] Error 1
make[3]: Leaving directory '/mnt/data/sources/m4-1.4.18/lib'
Jsem z této chyby velmi zmatený a podle povrchního vyhledávání Google je problém důsledkem příliš dlouhé ignorované upstream aktualizace, viz např. https://bugzilla.redhat.com/show_bug.cgi?id=1573342 s geniální dokumentací opravy „Díky za hlášení o chybě, opraveno!“ – pokud to ostatním nepomůže…
Zkusil jsem sestavit glibc ze zdrojového kódu a nainstalovat jej do vlastní předpony[1]. 2.28 a 2.27 vykazují stejný problém a 2.26 selhává z důvodu
make[2]: Verzeichnis „/mnt/data/sources/glibc-2.26/inet“ wird betreten
gcc ../sysdeps/unix/sysv/linux/if_index.c -c -std=gnu11 -fgnu89-inline -O2 -Wall -Werror -Wundef -Wwrite-strings -fmerge-all-constants -fno-stack-protector -frounding-math -g -Wstrict-prototypes -Wold-style-definition -ftls-model=initial-exec -U_FORTIFY_SOURCE -I../include -I/mnt/data/sources/glibc-2.26-build/inet -I/mnt/data/sources/glibc-2.26-build -I../sysdeps/unix/sysv/linux/x86_64/64 -I../sysdeps/unix/sysv/linux/x86_64 -I../sysdeps/unix/sysv/linux/x86 -I../sysdeps/x86/nptl -I../sysdeps/unix/sysv/linux/wordsize-64 -I../sysdeps/x86_64/nptl -I../sysdeps/unix/sysv/linux/include -I../sysdeps/unix/sysv/linux -I../sysdeps/nptl -I../sysdeps/pthread -I../sysdeps/gnu -I../sysdeps/unix/inet -I../sysdeps/unix/sysv -I../sysdeps/unix/x86_64 -I../sysdeps/unix -I../sysdeps/posix -I../sysdeps/x86_64/64 -I../sysdeps/x86_64/fpu/multiarch -I../sysdeps/x86_64/fpu -I../sysdeps/x86/fpu/include -I../sysdeps/x86/fpu -I../sysdeps/x86_64/multiarch -I../sysdeps/x86_64 -I../sysdeps/x86 -I../sysdeps/ieee754/float128 -I../sysdeps/ieee754/ldbl-96/include -I../sysdeps/ieee754/ldbl-96 -I../sysdeps/ieee754/dbl-64/wordsize-64 -I../sysdeps/ieee754/dbl-64 -I../sysdeps/ieee754/flt-32 -I../sysdeps/wordsize-64 -I../sysdeps/ieee754 -I../sysdeps/generic -I.. -I../libio -I. -D_LIBC_REENTRANT -include /mnt/data/sources/glibc-2.26-build/libc-modules.h -DMODULE_NAME=libc -include ../include/libc-symbols.h -DPIC -DTOP_NAMESPACE=glibc -o /mnt/data/sources/glibc-2.26-build/inet/if_index.o -MD -MP -MF /mnt/data/sources/glibc-2.26-build/inet/if_index.o.dt -MT /mnt/data/sources/glibc-2.26-build/inet/if_index.o
../sysdeps/unix/sysv/linux/if_index.c: In function ‘__if_nametoindex’:
../sysdeps/unix/sysv/linux/if_index.c:46:3: error: ‘strncpy’ specified bound 16 equals destination size [-Werror=stringop-truncation]
strncpy (ifr.ifr_name, ifname, sizeof (ifr.ifr_name));
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
cc1: all warnings being treated as errors
make[2]: *** [/mnt/data/sources/glibc-2.26-build/sysd-rules:213: /mnt/data/sources/glibc-2.26-build/inet/if_index.o] Fehler 1
make[2]: Verzeichnis „/mnt/data/sources/glibc-2.26/inet“ wird verlassen
make[1]: *** [Makefile:215: inet/subdir_lib] Fehler 2
make[1]: Verzeichnis „/mnt/data/sources/glibc-2.26“ wird verlassen
make: *** [Makefile:9: all] Fehler 2
a 2.25 kvůli
strftime_l.c: In function ‘__strftime_internal’:
strftime_l.c:719:4: error: macro expands to multiple statements [-Werror=multistatement-macros]
digits = d > width ? d : width;
^~~~~~
strftime_l.c:1260:6: note: in expansion of macro ‘DO_NUMBER’
DO_NUMBER (1, tp->tm_year + TM_YEAR_BASE);
^~~~~~~~~
strftime_l.c:1259:4: note: some parts of macro expansion are not guarded by this ‘else’ clause
else
^~~~
In file included from wcsftime_l.c:23:
strftime_l.c: In function ‘__strftime_internal’:
strftime_l.c:719:4: error: macro expands to multiple statements [-Werror=multistatement-macros]
digits = d > width ? d : width;
^~~~~~
strftime_l.c:1260:6: note: in expansion of macro ‘DO_NUMBER’
DO_NUMBER (1, tp->tm_year + TM_YEAR_BASE);
^~~~~~~~~
strftime_l.c:1259:4: note: some parts of macro expansion are not guarded by this ‘else’ clause
else
^~~~
cc1: all warnings being treated as errors
make[2]: *** [../o-iterator.mk:9: /mnt/data/sources/glibc-2.25-build/time/strftime_l.os] Fehler 1
což mě přimělo k rozhodnutí nezkoušet další verzi.
Související:Softwarové centrum prázdné „Žádná užitečnost ze serveru“ „Žádné uživatelské jméno v konfiguračním souboru“ v Ubuntu?
[Diskuse o zprávě o podobném problému ve findutils] navrhuje přepsat freadahead.{c,h}
z aktuálního kořenového zdroje gnulib. To způsobuje řetězec problémů, které zde není nutné dokumentovat, protože nevím, co dělám.
Jak začít s opravou, hlášením a/nebo řešením tohoto problému?
Vytvářím m4 ze zdroje pro bootstrap skript pro systémy, kde uživatel nemá oprávnění používat správce balíčků. Opravdu mě zajímá jen sestavení původního GNU m4 ze zdrojových tarballů vydání.
Přehled výsledků sestavení na jiných podobně holých systémech je uveden na https://gitlab.com/krichter/m4/pipelines/36977411.
[1] V případě, že to zkoumáte, vždy nainstalujte glibc do vlastní předpony, protože instalace s výchozí předponou /usr/local
zcela jistě zničí váš systém. Zvažte použití checkinstall
pro jistotu.
Přijatá odpověď:
Zkuste použít tento patch. Je to OpenEmbedded generovaný backport upstream patche.