wie erstelle ich die manuellen Texinfo-Dateien des GCC?

wie erstelle ich die manuellen Texinfo-Dateien des GCC?

Ich habe ein Archiv mit dem gcc-Infohandbuch heruntergeladen voneine offizielle Seite. Das Extrahieren des Archivs führt nicht zu einer einzelnen .texi-Datei, sondern zu einer sehr komplexen Verzeichnisstruktur mit vielen, vielen .texi-Dateien. Ich bin nicht sicher, wie ich diese tatsächlich in eine einzelne .info-Datei umwandeln kann (damit ich diese in mein Emacs-Info-Verzeichnis /usr/share/info installieren kann, ich weiß, wie das geht).

Es ist mir völlig unklar, wie ich aus diesem Verzeichnis mit den vielen vielen .texi-Dateien eine .info-Datei bekomme. Vom entpackten obersten Verzeichnis aus bin ich zu gcc/doc gegangen und habe dort (neben etwa 30 anderen .texi-Dateien) eine Datei namens gcc.texi gefunden. Beim Versuch makeinfo gcc.texiwurde das bemängelt gcc.texi:25: @include: could not find gcc-common.texi, obwohl sich die Datei in gcc/doc/include befindet.

Welchen Befehl muss ich zum Erstellen verwenden?

Antwort1

Ich glaube nicht, dass es eine einfache und unkomplizierte Möglichkeit gibt, nur den gewünschten Code zu extrahieren und ihn dann unabhängig davon auszuführen Makefile(der generiert wird, Makefile.inwenn Sie ./configureusw. ausführen, um das gesamte GCC-Paket zu erstellen). Wenn Sie wirklich lokal erstellen müssen, befolgen Sie die Standard-Build-Anweisungen des Pakets.

Um etwas genauer zu werden:Makefile.inenthält die folgenden Ausschnitte;

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

Die Definition geht mit einer sehr langen Liste einzelner Ziele weiter, die ich nicht bis zum Ende durchgearbeitet habe.

Antwort2

OP hier, hier ist ein Hack, der das Problem löst, zumindest für die Version 8.3.0 der eigenständigen Texinfo-Quellen, die über den Link im OP heruntergeladen wurden:

Kurz zusammengefasst:

Schritt 1: Öffnen Sie in dem docsOrdner, der enthält gcc.texi, die Datei install.texi2htmlmit einem Texteditor und entfernen Sie die letzte Zeile mit dem Inhalt rm $DESTDIR/gcc-vers.texi.

Schritt 2: Führen Sie das Skript mit `./install.texi2html aus

Schritt 3: Ausführenmakeinfo gcc.texi -P ./HTML -P ./include

Schritt 4: Lesen Sie das Handbuch mit info gcc.infooder von Emacs aus C-u F1 i.path/to/gcc.info

Erläuterung:

es scheint, dass das Problem darin besteht, dass die eigenständigen Texinfo-Quellen-Tarballs auf dergcc onlinedocs-Seiteenthalten keine Makefiles. Es scheint, dass sich die gcc-Betreuer einfach nicht allzu viele Gedanken darüber gemacht haben, wie einfach die Kompilierung der eigenständigen Info-Handbücher sein kann.

Hier ist ein Hack, um es zum Laufen zu bringen (bei mir hat das mit den Texinfo-Quellen von gcc 8.3 funktioniert):

Gehen Sie zunächst gcc/gcc/docsdorthin, wo wir das Archiv entpackt haben. Wir sehen gcc.texi, ein Verzeichnis namens include, und einige andere .texiDateien. Wenn wir dies jetzt versuchen würden makeinfo gcc.texi, würden wir viele Beschwerden über Dinge wie „ gcc-common.texinicht gefunden“ erhalten. Diese fehlenden Dateien befinden sich zufällig im includeVerzeichnis, also fügen wir es dem Suchpfad mit der -POption hinzu:

makeinfo gcc.texi -P ./include 

Wir erhalten jedoch eine Beschwerde über ein fehlendes gcc-vers.info. Diese Datei ist nirgends zu finden, sollte aber automatisch generiert werden, autogenwenn der vollständige GCC-Quellcodebaum (nicht nur die Texi-Quellen) konfiguriert und erstellt wird. Wir haben jedoch Glück, denn im selben Verzeichnis wie gcc.texigibt es ein Skript namens install.texi2html. Am Ende des Skripts sehen wir die Zeile:

rm $DESTDIR/gcc-vers.texi

Das bedeutet, dass das Skript tatsächlich die benötigte Datei generiert, sie dann aber löscht. Entfernen Sie daher einfach diese Zeile aus dem Skript, führen Sie es erneut aus und wir werden sehen HTML/gcc-vers.texi. Dann können wir das Verzeichnis zum Pfad hinzufügen HTMLund es wird diesmal gcc.texikorrekt erstellt.

Übrigens .texisind die meisten Dateien eigentlich Unterknoten. Glücklicherweise sind sie leicht an einem Kommentar am Anfang jeder Datei zu erkennen. Um sie (anhand dieses Kommentars) herauszufiltern und eine Liste der Knotendateien auf oberster Ebene anzuzeigen, führen Sie Folgendes aus:

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

Die resultierenden Dateien sind

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

verwandte Informationen