¿Cómo crear información sobre los archivos texinfo del manual de gcc?

¿Cómo crear información sobre los archivos texinfo del manual de gcc?

Descargué un archivo con el manual de información de gcc deuna pagina oficial. La extracción del archivo no genera un solo archivo .texi, sino una estructura de directorios muy compleja con muchos archivos .texi. No estoy seguro de cómo convertirlos en un único archivo .info (para poder instalar la información en mi directorio de información de emacs /usr/share/info, sé cómo hacerlo).

No es completamente obvio para mí cómo obtener un archivo .info de este directorio con muchos archivos .texi. Desde el directorio de nivel superior que se extrajo, fui a gcc/doc y luego encontré (entre otros 30 archivos texi) un archivo llamado gcc.texi. Al intentarlo makeinfo gcc.texi, se quejó de eso gcc.texi:25: @include: could not find gcc-common.texi, a pesar de que ese archivo está en gcc/doc/include.

¿Cuál es el comando que debo usar para construir esto?

Respuesta1

No creo que exista una forma sencilla y directa de extraer solo el código que desea y luego ejecutarlo independientemente del Makefile(que se genera Makefile.incuando ejecuta, ./configureetc. para compilar el paquete GCC completo). Si realmente necesita compilar localmente, siga las instrucciones de compilación estándar del paquete.

Con algo más de detalle,Makefile.incontiene los siguientes fragmentos;

info: do-info

# Make sure makeinfo is built before we do a `make info', if we're
# in fact building texinfo.
do-info: maybe-all-texinfo

install-info: do-install-info dir.info
    s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
    if [ -f dir.info ]; then \
      $(INSTALL_DATA) dir.info $(DESTDIR)$(infodir)/dir.info; \
    else true; fi
#...
.PHONY: all-texinfo maybe-all-texinfo
maybe-all-texinfo:
@if gcc-bootstrap
all-texinfo: stage_current
@endif gcc-bootstrap
@if texinfo
TARGET-texinfo=all
maybe-all-texinfo: all-texinfo
all-texinfo: configure-texinfo
    @: $(MAKE); $(unstage)
    @r=`${PWD_COMMAND}`; export r; \
    s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
    $(HOST_EXPORTS)  \
    (cd $(HOST_SUBDIR)/texinfo && \
      $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS) $(STAGE1_FLAGS_TO_PASS)  \
        $(TARGET-texinfo))
@endif texinfo
#...
.PHONY: do-install-info
do-install-info:
    @: $(MAKE); $(unstage)
    @r=`${PWD_COMMAND}`; export r; \
    s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
    $(MAKE) $(RECURSE_FLAGS_TO_PASS) install-info-host \
      install-info-target


.PHONY: install-info-host

install-info-host: maybe-install-info-bfd
install-info-host: maybe-install-info-opcodes
install-info-host: maybe-install-info-binutils
install-info-host: maybe-install-info-bison

La definición continúa con una lista muy larga de objetivos individuales y no la seguí hasta el final.

Respuesta2

OP aquí, aquí hay un truco que resuelve el problema, al menos para la versión 8.3.0 de las fuentes independientes de texinfo descargadas desde el enlace en el OP:

TLDR:

Paso 1: En la docscarpeta que contiene gcc.texi, abra el archivo install.texi2htmlusando un editor de texto y elimine la línea final que dice rm $DESTDIR/gcc-vers.texi.

Paso 2: ejecute el script usando `./install.texi2html

Paso 3: ejecutarmakeinfo gcc.texi -P ./HTML -P ./include

Paso 4: lea el manual usando info gcc.info, o desde emacs, C-u F1 iluego hágalopath/to/gcc.info

Explicación:

Parece que el problema es que los archivos comprimidos de fuentes independientes de texinfo que figuran en elpágina de documentos en línea de gccno contiene ningún Makefiles. Parece que los mantenedores de gcc simplemente no se preocuparon demasiado por hacer que los manuales de información independientes fueran fáciles de compilar.

Aquí hay un truco para que funcione (esto funcionó para mí para las fuentes texinfo de gcc 8.3):

Primero, vaya a gcc/gcc/docsdesde donde extrajimos el archivo. Veremos gcc.texiun directorio llamado includey algunos otros .texiarchivos. Si intentamos hacerlo makeinfo gcc.texiahora, recibiremos muchas quejas sobre cosas como gcc-common.texino encontradas. Esos archivos faltantes están en el includedirectorio, por lo que los agregamos a la ruta de búsqueda usando la -Popción:

makeinfo gcc.texi -P ./include 

Sin embargo, recibiremos una queja sobre una desaparición gcc-vers.info. Ese archivo no se encuentra por ningún lado, pero estaba destinado a ser generado automáticamente autogencuando se configura y construye el árbol de fuentes gcc completo (no solo las fuentes texi). Sin embargo, estamos de suerte, porque en el mismo directorio que gcc.texi, hay un script llamado install.texi2html. Al final del script, vemos la línea:

rm $DESTDIR/gcc-vers.texi

Esto significa que el script en realidad genera el archivo que necesitamos, pero luego lo elimina. Por lo tanto, simplemente elimine esa línea del script, ejecútela nuevamente y veremos HTML/gcc-vers.texi. Luego podemos agregar el HTMLdirectorio a la ruta y esta vez gcc.texise compila correctamente.

Por cierto, la mayoría de los .texiarchivos son en realidad subnodos. Afortunadamente, se identifican fácilmente mediante un comentario cerca del comienzo de cada archivo. Para filtrarlos (por ese comentario) y ver una lista de archivos de nodo de nivel superior, haga

grep -L '@c This is part of the' *.texi

Los archivos resultantes son

ppinternals.texi
cpp.texi
gccint.texi
gcc.texi
install.texi
poly-int.texi

información relacionada