como fazer o makeinfo dos arquivos texinfo do manual do gcc?

como fazer o makeinfo dos arquivos texinfo do manual do gcc?

Eu baixei um arquivo com o manual de informações do gcc emuma página oficial. A extração do arquivo leva não a um único arquivo .texi, mas a uma estrutura de diretórios muito complexa quando há muitos arquivos .texi. Não tenho certeza de como realmente convertê-los em um único arquivo .info (para que eu possa instalar-info no meu diretório de informações do emacs /usr/share/info, eu sei como fazer isso).

Não é completamente óbvio para mim como obter um arquivo .info deste diretório com muitos arquivos .texi. Do diretório de nível superior que foi extraído, fui para gcc/doc e encontrei (entre cerca de 30 outros arquivos texi) um arquivo chamado gcc.texi. Tentar makeinfo gcc.texifez com que reclamasse que gcc.texi:25: @include: could not find gcc-common.texi, mesmo que o arquivo estivesse em gcc/doc/include.

Qual é o comando que devo usar para construir isso?

Responder1

Não acho que exista uma maneira simples e direta de extrair apenas o código desejado e executá-lo independentemente do Makefile(que é gerado Makefile.inquando você executa ./configureetc. para construir todo o pacote GCC). Se você realmente precisa compilar localmente, siga as instruções de compilação padrão do pacote.

Com mais alguns detalhes,Makefile.incontém os seguintes trechos;

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

A definição prossegue com uma lista muito longa de metas individuais, e não fui até o fim.

Responder2

OP aqui, aqui está um hack que resolve o problema, pelo menos para a versão 8.3.0 das fontes texinfo autônomas baixadas do link no OP:

TLDR:

Passo 1: Na docspasta que contém gcc.texi, abra o arquivo install.texi2htmlusando um editor de texto e remova a linha final que diz rm $DESTDIR/gcc-vers.texi.

Etapa 2: execute o script usando `./install.texi2html

Etapa 3: executarmakeinfo gcc.texi -P ./HTML -P ./include

Etapa 4: leia o manual usando info gcc.infoou do emacs, faça C-u F1 ientãopath/to/gcc.info

Explicação:

parece que o problema é que os tarballs de fontes texinfo independentes listados nopágina de documentos on-line do gccnão contém nenhum Makefile. Parece que os mantenedores do gcc simplesmente não se preocuparam muito em tornar os manuais de informações independentes fáceis de compilar.

Aqui está um hack para fazê-lo funcionar (funcionou para mim nas fontes texinfo do gcc 8.3):

Primeiro, vá gcc/gcc/docsaté onde extraímos o arquivo. Veremos gcc.texium diretório chamado includee alguns outros .texiarquivos. Se tentarmos fazer makeinfo gcc.texiagora, receberemos muitas reclamações sobre coisas como gcc-common.texinão encontradas. Esses arquivos ausentes estão no includediretório, então adicionamos isso ao caminho de pesquisa usando a -Popção:

makeinfo gcc.texi -P ./include 

No entanto, receberemos uma reclamação sobre um arquivo gcc-vers.info. Esse arquivo não foi encontrado em lugar nenhum, mas foi planejado para ser gerado automaticamente quando autogena árvore de código-fonte completa do gcc (não apenas as fontes do texi) for configurada e construída. Porém, estamos com sorte, pois no mesmo diretório do gcc.texi, existe um script chamado install.texi2html. No final do script, vemos a linha:

rm $DESTDIR/gcc-vers.texi

Isso significa que o script está realmente gerando o arquivo que precisamos, mas depois o excluindo. Portanto, basta remover essa linha do script, executá-lo novamente e veremos HTML/gcc-vers.texi. Então podemos adicionar o HTMLdiretório ao caminho e desta vez gcc.texiconstruir corretamente.

A propósito, a maioria dos .texiarquivos são, na verdade, subnós. Felizmente, eles são facilmente identificados por um comentário próximo ao início de cada arquivo. Para filtrá-los (por esse comentário) e ver uma lista de arquivos de nós de nível superior, faça

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

Os arquivos resultantes são

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

informação relacionada