gcc マニュアルの texinfo ファイルを makeinfo する方法は?

gcc マニュアルの texinfo ファイルを makeinfo する方法は?

gcc infoマニュアルのアーカイブをダウンロードしました公式ページアーカイブを解凍すると、単一の .texi ファイルではなく、多数の .texi ファイルが含まれる非常に複雑なディレクトリ構造になります。これらを実際に単一の .info ファイルに変換する方法がわかりません (emacs info ディレクトリ /usr/share/info に install-info できるようにするには、その方法を知っています)。

多数の .texi ファイルがあるこのディレクトリから .info ファイルを取得する方法がまったくわかりません。抽出された最上位ディレクトリから gcc/doc に移動し、(約 30 個の他の texi ファイルの中に) gcc.texi というファイルを見つけました。試してみると、そのファイルが gcc/doc/include にあるにもかかわらず、makeinfo gcc.texiというエラーが表示されます。gcc.texi:25: @include: could not find gcc-common.texi

これを構築するために使用する必要があるコマンドは何ですか?

答え1

必要なコードだけを抽出し、それをMakefile( etcMakefile.inを実行して./configureGCC パッケージ全体をビルドするときに生成される) とは独立して実行する、単純明快な方法はないと思います。本当にローカルでビルドする必要がある場合は、パッケージの標準ビルド手順に従ってください。

もう少し詳しく説明すると、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:またはemacsを使用してマニュアルを読みinfo gcc.infoC-u F1 ipath/to/gcc.info

説明:

問題は、スタンドアロンのtexinfoソースtarballが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。そのファイルはどこにも見つかりませんが、完全な gcc ソース ツリー (texi ソースだけではなく) が構成され、ビルドされるときに によって自動的に生成されることを意図したものです。ただし、 と同じディレクトリにというスクリプトがあるautogenため、幸運です。スクリプトの最後には、次の行があります。gcc.texiinstall.texi2html

rm $DESTDIR/gcc-vers.texi

これは、スクリプトが実際に必要なファイルを生成し、その後それを削除していることを意味します。したがって、スクリプトからその行を削除して再度実行すると、 が表示されます。次に、ディレクトリをパスにHTML/gcc-vers.texi追加すると、今度は正しくビルドされます。HTMLgcc.texi

ちなみに、ほとんどの.texiファイルは実際にはサブノードです。幸いなことに、各ファイルの先頭近くにあるコメントで簡単に識別できます。それらを(そのコメントで)フィルタリングしてトップレベルのノードファイルのリストを表示するには、次のようにします。

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

結果のファイルは

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

関連情報