如何制作 gcc 手册 texinfo 文件?

如何制作 gcc 手册 texinfo 文件?

我从以下网址下载了包含 gcc 信息手册的档案官方页面。提取存档文件后,得到的不是一个单独的 .texi 文件,而是一个包含许多 .texi 文件的非常复杂的目录结构。我不确定如何将它们实际转换为单独的 .info 文件(这样我就可以将其 install-info 到我的 emacs info 目录 /usr/share/info 中,我知道如何做到这一点)。

我完全不明白如何从这个包含许多 .texi 文件的目录中获取 .info 文件。从解压的顶层目录中,我转到 gcc/doc,然后找到(在大约 30 个其他 texi 文件中)一个名为 gcc.texi 的文件。尝试后,makeinfo gcc.texi它抱怨说gcc.texi:25: @include: could not find gcc-common.texi,即使该文件位于 gcc/doc/include 中。

我应该使用什么命令来构建它?

答案1

我认为没有一种简单直接的方法可以提取您想要的代码,然后独立运行它Makefile(它是在Makefile.in您运行./configureetc 构建整个 GCC 包时生成的)。如果您确实需要在本地构建,请遵循包的标准构建说明。

更详细地说,Makefile.in包含以下片段;

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

该定义接下来列出了很长的单个目标,而我并没有坚持到最后。

答案2

OP 在这里,这里有一个可以解决这个问题的黑客,至少对于从 OP 中的链接下载的独立 texinfo 源的 8.3.0 版本来说是这样:

总结:

步骤 1:在docs包含的文件夹中gcc.texi,使用文本编辑器打开文件install.texi2html,然后删除最后一行rm $DESTDIR/gcc-vers.texi

第 2 步:使用 ./install.texi2html 运行脚本

步骤 3:运行makeinfo gcc.texi -P ./HTML -P ./include

步骤 4:使用 阅读手册info gcc.info,或者从 emacs 中C-u F1 i执行path/to/gcc.info

解释:

问题似乎是在gcc 在线文档页面不包含任何 Makefile。看来 gcc 维护者并没有过多担心如何让独立信息手册易于编译。

以下是让它工作的一个小窍门(对我来说,对于 gcc 8.3 texinfo 源,这个小窍门很有用):

首先,转到gcc/gcc/docs我们提取档案的位置。我们将看到gcc.texi,一个名为的目录include,以及一些其他.texi文件。如果我们现在尝试这样做makeinfo gcc.texi,我们会收到很多关于未找到之类的投诉gcc-common.texi。那些丢失的文件恰好在目录中include,因此我们使用以下选项将其添加到搜索路径中-P

makeinfo gcc.texi -P ./include 

但是,我们会收到有关缺少 的投诉gcc-vers.info。该文件无处可寻,但原本打算在autogen配置和构建完整的 gcc 源代码树(而不仅仅是 texi 源代码)时自动生成。但是,我们很幸运,因为在 的同一目录中gcc.texi,有一个名为 的脚本install.texi2html。在脚本的末尾,我们看到了以下行:

rm $DESTDIR/gcc-vers.texi

这意味着脚本实际上生成了我们需要的文件,但随后将其删除。因此,只需从脚本中删除该行,再次运行它,我们就会看到HTML/gcc-vers.texi。然后我们可以将HTML目录添加到路径中,这次gcc.texi构建正确。

顺便说一句,大多数.texi文件实际上是子节点。幸运的是,它们很容易通过每个文件开头附近的注释来识别。要过滤它们(通过该注释)并查看顶层节点文件列表,请执行以下操作

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

生成的文件是

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

相关内容