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.in
cuando ejecuta, ./configure
etc. 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.in
contiene 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 docs
carpeta que contiene gcc.texi
, abra el archivo install.texi2html
usando 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 i
luego 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/docs
desde donde extrajimos el archivo. Veremos gcc.texi
un directorio llamado include
y algunos otros .texi
archivos. Si intentamos hacerlo makeinfo gcc.texi
ahora, recibiremos muchas quejas sobre cosas como gcc-common.texi
no encontradas. Esos archivos faltantes están en el include
directorio, por lo que los agregamos a la ruta de búsqueda usando la -P
opció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 autogen
cuando 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 HTML
directorio a la ruta y esta vez gcc.texi
se compila correctamente.
Por cierto, la mayoría de los .texi
archivos 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