GNU/Linux >> Tutoriales Linux >  >> Ubuntu

La compilación de M4 1.4.10 a 1.4.18 falla debido a "portar Gnulib Freadahead.c a su plataforma". ¿En Ubuntu 18.10?

La creación de lanzamientos tarball de GNU m4 1.4.10 a 1.4.18 (no probó todas las versiones de revisión, pero asumo que el error es consistente dentro de este rango) con ./configure && make -j1 y git git repositorio http://git.savannah.gnu.org/r/m4.git con ./bootstrap && ./configure && make -j1 (confirmar cvs-readonly-359-gd69fa528 es decir, HEAD de master ) falla debido a

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'

Estoy muy confundido por este error y, de acuerdo con una búsqueda superficial en Google, el problema es la consecuencia de una actualización ascendente ignorada durante demasiado tiempo, consulte, por ejemplo. https://bugzilla.redhat.com/show_bug.cgi?id=1573342 con la genial documentación de la solución "¡Gracias por el informe de error, corregido!" – si eso no ayuda a otros…

Traté de compilar glibc desde la fuente e instalarlo en un prefijo personalizado[1]. 2.28 y 2.27 presentan el mismo problema y 2.26 falla debido a

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

y 2.25 por

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

lo que me hizo decidir no probar más versiones.

Relacionado:Centro de software vacío "Sin utilidad del servidor" "¿No hay nombre de usuario en el archivo de configuración" en Ubuntu?

[La discusión sobre un informe sobre un problema similar en findutils] sugiere sobrescribir freadahead.{c,h} desde una fuente raíz de gnulib actualizada. Esto provoca una cadena de problemas que no es necesario documentar aquí porque no sé lo que estoy haciendo.

¿Cómo comenzar a solucionar, informar o solucionar este problema?

Estoy compilando m4 desde la fuente para un script de arranque para sistemas en los que un usuario no tiene privilegios para usar el administrador de paquetes. Realmente solo estoy interesado en compilar el GNU m4 original a partir de tarballs de fuentes de lanzamiento.

En https://gitlab.com/krichter/m4/pipelines/36977411, se proporciona una descripción general de los resultados de compilación en otros sistemas básicos similares.

[1] En caso de que esté investigando esto, siempre instale glibc en un prefijo personalizado porque una instalación en el prefijo predeterminado /usr/local seguramente arruinará su sistema. Considere usar checkinstall para estar seguro.

Respuesta aceptada:

Intente aplicar este parche. Es un backport generado por OpenEmbedded del parche upstream.


Ubuntu
  1. Cómo verificar su versión de Ubuntu

  2. Cómo verificar su versión de Ubuntu

  3. Cómo reparar tu Grub 2 en Ubuntu

  4. Cómo personalizar su indicador de terminal de Ubuntu

  5. Los mejores escáneres de puertos en Ubuntu Linux

5 formas de acelerar su sistema Ubuntu

Cómo instalar el servidor SSH en Ubuntu 20.04

Cómo instalar uTorrent en Ubuntu 20.04

7 formas de verificar la versión de Ubuntu en su servidor

Cómo cambiar el puerto SSH en Ubuntu

Cambia tu puerto SSH en Ubuntu y Debian