GNU/Linux >> Tutoriels Linux >  >> Ubuntu

La compilation de M4 1.4.10 à 1.4.18 échoue en raison de "veuillez porter Gnulib Freadahead.c sur votre plate-forme!" Sur Ubuntu 18.10 ?

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.


Ubuntu
  1. Comment vérifier votre version d'Ubuntu

  2. Comment vérifier votre version d'Ubuntu

  3. Comment réparer votre Grub 2 sur Ubuntu

  4. Comment personnaliser l'invite de votre terminal Ubuntu

  5. Meilleurs scanners de ports sur Ubuntu Linux

5 façons d'accélérer votre système Ubuntu

Comment installer le serveur SSH dans Ubuntu 20.04

Comment installer uTorrent dans Ubuntu 20.04

7 façons de vérifier la version d'Ubuntu sur votre serveur

Comment changer le port SSH dans Ubuntu

Changez votre port SSH dans Ubuntu et Debian