La construction des versions tarball de GNU m4 1.4.10 à 1.4.18 (n'a pas testé toutes les versions de correctifs, mais je suppose que l'erreur est cohérente parmi cette gamme) avec ./configure && make -j1
et git git
référentiel http://git.savannah.gnu.org/r/m4.git avec ./bootstrap && ./configure && make -j1
(commit cvs-readonly-359-gd69fa528
c'est-à-dire HEAD
de master
) échoue en raison de
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'
Je suis très confus par cette erreur et selon une recherche google superficielle le problème est la conséquence d'une mise à jour en amont ignorée trop longue, voir par ex. https://bugzilla.redhat.com/show_bug.cgi?id=1573342 avec la documentation géniale du correctif « Merci pour le rapport de bogue, corrigé ! » – si cela n'aide pas les autres…
J'ai essayé de compiler glibc à partir des sources et de l'installer dans un préfixe personnalisé[1]. 2.28 et 2.27 présentent le même problème et 2.26 échoue en raison de
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
et 2,25 en raison de
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
ce qui m'a fait décider de ne pas essayer d'autres versions.
Connexes:Software Center vide "Aucune utilité du serveur" "Aucun nom d'utilisateur dans le fichier de configuration" dans Ubuntu ?
[La discussion sur un rapport sur un problème similaire dans findutils] suggère de remplacer freadahead.{c,h}
à partir d'une racine source gnulib à jour. Cela provoque une chaîne de problèmes qu'il est inutile de documenter ici car je ne sais pas ce que je fais.
Comment commencer à résoudre, signaler et/ou contourner ce problème ?
Je construis m4 à partir de la source pour un script d'amorçage pour les systèmes où un utilisateur n'a pas les privilèges d'utiliser le gestionnaire de packages. Je suis vraiment intéressé par la construction du GNU m4 original à partir des archives tar de la source de publication.
Un aperçu des résultats de construction sur d'autres systèmes nus similaires est fourni sur https://gitlab.com/krichter/m4/pipelines/36977411.
[1] Dans le cas où vous étudiez cela, installez toujours glibc dans un préfixe personnalisé car une installation dans le préfixe par défaut /usr/local
ruinera très certainement votre système. Envisagez d'utiliser checkinstall
pour être sûr.
Réponse acceptée :
Essayez d'appliquer ce patch. Il s'agit d'un rétroportage du correctif en amont généré par OpenEmbedded.