как создать файлы texinfo руководства gcc?

как создать файлы texinfo руководства gcc?

Я скачал архив с руководством по gcc info с сайтаофициальная страница. Извлечение архива приводит не к одному файлу .texi, а к очень сложной структуре каталогов, когда много-много файлов .texi. Я не уверен, как на самом деле преобразовать их в один файл .info (чтобы я мог установить-info, который находится в моем каталоге emacs info /usr/share/info, я знаю, как это сделать).

Для меня совершенно неочевидно, как получить файл .info из этого каталога со множеством файлов .texi. Из каталога верхнего уровня, который был извлечен, я перешел в 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, вот хак, который решает эту проблему, по крайней мере для версии 8.3.0 автономных источников texinfo, загруженных по ссылке в OP:

Краткий обзор:

Шаг 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

Объяснение:

похоже, проблема в том, что автономные исходные архивы texinfo перечислены настраница gcc onlinedocsне содержат никаких Makefiles. Похоже, что разработчики gcc просто не слишком беспокоились о том, чтобы сделать отдельные руководства info простыми для компиляции.

Вот хак, который заставит это работать (мне это помогло с исходниками texinfo для gcc 8.3):

Сначала перейдите в папку, gcc/gcc/docsоткуда мы извлекли архив. Мы увидим gcc.texi, каталог с именем includeи некоторые другие .texiфайлы. Если мы попытаемся сделать это makeinfo gcc.texiсейчас, то получим много жалоб на что-то вроде gcc-common.texinot found. Эти отсутствующие файлы как раз находятся в каталоге 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

Связанный контент