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.texi
fez 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.in
quando você executa ./configure
etc. 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.in
conté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 docs
pasta que contém gcc.texi
, abra o arquivo install.texi2html
usando 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.info
ou do emacs, faça C-u F1 i
entã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/docs
até onde extraímos o arquivo. Veremos gcc.texi
um diretório chamado include
e alguns outros .texi
arquivos. Se tentarmos fazer makeinfo gcc.texi
agora, receberemos muitas reclamações sobre coisas como gcc-common.texi
não encontradas. Esses arquivos ausentes estão no include
diretório, então adicionamos isso ao caminho de pesquisa usando a -P
opçã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 autogen
a á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 HTML
diretório ao caminho e desta vez gcc.texi
construir corretamente.
A propósito, a maioria dos .texi
arquivos 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