GNU/Linux >> Linux Esercitazione >  >> Ubuntu

La compilazione di M4 da 1.4.10 a 1.4.18 non riesce a causa di "porta Gnulib Freadahead.c sulla tua piattaforma!" Su Ubuntu 18.10?

La creazione di versioni tarball di GNU m4 da 1.4.10 a 1.4.18 (non ha testato tutte le versioni di hotfix, ma presumo che l'errore sia coerente in questo intervallo) con ./configure && make -j1 e git git repository http://git.savannah.gnu.org/r/m4.git con ./bootstrap && ./configure && make -j1 (commit cvs-readonly-359-gd69fa528 cioè HEAD di master ) fallisce a causa di

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'

Sono molto confuso da questo errore e secondo una ricerca superficiale su Google il problema è la conseguenza di un aggiornamento a monte troppo lungo ignorato, vedi ad es. https://bugzilla.redhat.com/show_bug.cgi?id=1573342 con la geniale documentazione della correzione "Grazie per la segnalazione di bug, corretto!" – se questo non aiuta gli altri...

Ho provato a compilare glibc dal sorgente e installarlo in un prefisso personalizzato[1]. 2.28 e 2.27 presentano lo stesso problema e 2.26 non riesce a causa di

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

e 2,25 a causa di

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

il che mi ha fatto decidere di non provare un'altra versione.

Correlati:Software Center vuoto "Nessuna utilità dal server" "Nessun nome utente nel file di configurazione" in Ubuntu?

[La discussione su un rapporto su un problema simile in findutils] suggerisce di sovrascrivere freadahead.{c,h} da una radice di origine gnulib aggiornata. Ciò causa una catena di problemi che non è necessario documentare qui poiché non so cosa sto facendo.

Come iniziare a correggere, segnalare e/o risolvere questo problema?

Sto costruendo m4 dal sorgente per uno script bootstrap per sistemi in cui un utente non dispone dei privilegi per utilizzare il gestore pacchetti. Sono davvero solo interessato a costruire l'originale GNU m4 dai tarball dei sorgenti di rilascio.

Una panoramica dei risultati di compilazione su altri sistemi altrettanto semplici è disponibile all'indirizzo https://gitlab.com/krichter/m4/pipelines/36977411.

[1] Nel caso tu stia indagando su questo, installa sempre glibc in un prefisso personalizzato perché un'installazione nel prefisso predefinito /usr/local sicuramente rovinerà il tuo sistema. Prendi in considerazione l'utilizzo di checkinstall certo.

Risposta accettata:

Prova ad applicare questa patch. È un backport generato da OpenEmbedded della patch upstream.


Ubuntu
  1. Come controllare la tua versione di Ubuntu

  2. Come controllare la tua versione di Ubuntu

  3. Come riparare il tuo Grub 2 su Ubuntu

  4. Come personalizzare il prompt del tuo terminale Ubuntu

  5. I migliori scanner di porte su Ubuntu Linux

5 modi per velocizzare il tuo sistema Ubuntu

Come installare il server SSH in Ubuntu 20.04

Come installare uTorrent in Ubuntu 20.04

7 modi per controllare la versione di Ubuntu sul tuo server

Come modificare la porta SSH in Ubuntu

Cambia la tua porta SSH in Ubuntu e Debian