Autotools: snippet de código (AM_MAINTAINER_MODE)

1

Quanto a este snippet de código:

AM_MAINTAINER_MODE
if test "x$enable_maintainer_mode" = xyes; then
    AC_PATH_PROG(PERL,perl)
    if test -z "$PERL"; then
        AC_MSG_ERROR([perl not found])
    fi
fi

# This should be checked before AC_PROG_CC
if test "x$CFLAGS" = x; then
    default_CFLAGS=yes
fi

if test "x$host_cpu" = xx86_64; then
    CFLAGS="-m32 $CFLAGS"
fi

Não consigo encontrar informações sobre as três variáveis que estão sendo testadas (x $ enable_maintainer_mode, x $ CFLAGS, x $ host_cpu). Essas variáveis são geradas após a execução da macro AM_MAINTAINER_MODE? Se sim, onde posso encontrar mais informações sobre eles?

Além disso, qual é o objetivo do modo AM_MAINTAINER_MODE?

Pelo que entendi, ele está desativado por padrão:

  • Se um usuário executar 'configure' e todas as dependências NÃO forem atendidas (versão, ferramentas, bibliotecas etc.), o Automake terminará e não prosseguirá mais.
  • Se um usuário executar 'configure' e todas as dependências forem atendidas, ele cria e executa o script config.status, que gera os arquivos 'make'
  • Um usuário pode substituir essa configuração pela opção –enable-maintainer-mode. Isso permitirá que eles modifiquem arquivos Autotool diferentes (como configure.ac, Makefile.am) e o sistema de compilação tentará gerar novamente os arquivos que precisam ser atualizados para refletir essas alterações (o Autotools irá procurar por arquivos desatualizados e atualizá-los adequadamente).

Eu posso ver porque a desativação desse modo pode ser preferível. Quaisquer motivos para ativar esse recurso?

    
por supmethods 12.10.2018 / 13:12

2 respostas

1

A ideia geral por trás de AM_MAINTAINER_MODE é de duas maneiras de trabalhar com projetos: um em que o usuário “apenas” deseja construir e instalar o projeto (consumindo um artefato baseado na origem para instalação) e talvez fazer alterações no projeto. o código do projeto sem tocar em seu sistema de compilação e o outro em que o usuário deseja que qualquer alteração feita em qualquer lugar do projeto seja refletida na saída de compilação.

Assim, quando AM_MAINTAINER_MODE está desativado, arquivos como configure , Makefile.in etc. não são recriados, mesmo se o arquivo de origem correspondente ( configure.ac , Makefile.am etc.) for alterado. A suposta vantagem disso é que ela evita que os usuários tenham as ferramentas de criação necessárias e evita ter que lidar com as alterações nas próprias ferramentas (pergunte a qualquer um que tenha tentado reconstruir um projeto antigo e complexo usando as ferramentas automáticas atuais). A desvantagem é que as alterações feitas em determinados arquivos são ignoradas, portanto, os usuários precisam garantir que todos os arquivos apropriados sejam atualizados manualmente ... (Esse é um dos motivos pelos quais muitos patches que você vê na Internet incluem alterações em Makefile.am < em> e Makefile.in e às vezes até Makefile .)

A vantagem de ativar AM_MAINTAINER_MODE é que todas as alterações feitas nos arquivos são levadas em consideração. A desvantagem é que o usuário precisa saber quais são os arquivos de origem reais: se você fizer uma mudança para Makefile.in e reconstruir com o mantenedor, poderá perder suas mudanças!

O consenso geral parece ser que a reconstrução a partir da fonte real é melhor, e esse modo de manutenção não é uma boa ideia. ( A FAQ do automake fornece referências.) Isso não significa que todos os usuários precisam de repente ter todas as ferramentas necessárias para reconstruir tudo ; Se um projeto enviar os arquivos gerados em seus artefatos de release, desde que os timestamps sejam bons, os usuários não precisarão reconstruí-los.

    
por 12.10.2018 / 13:56
0

As variáveis aqui são variáveis de shell com um 'x' adicionado a ele.

x $ enable_maintainer_mode será configurado para xyes quando você passar a opção --enable-maintainer-mode para configurar e xno quando você passar a opção --disable-maintainer-mode para configurar. Caso contrário, a variável será 'x'.

A variável CFLAGS pode ser definida através de ./configure CFLAGS = 'opções de flag do compilador'. Caso contrário, se nada for definido, então o default_CFLAGS = yes. x $ host_cpu pode ser obtido da macro AC_CANONICAL_HOST. Aqui está um link relacionado para o host_cpu e Chamada macro AC_CANONICAL_HOST.

    
por 13.10.2018 / 14:40

Tags