Como evitar que o automake sobrescreva INSTALL?

6

Estou trabalhando em um projeto que possui um arquivo INSTALL personalizado. Executar automake --add-missing (ou mais precisamente, autoreconf -i ) gerará o arquivo INSTALL padrão do GNU e sobrescreverá nosso arquivo com ele.

Como posso evitar esse comportamento? Eu quero que ele não gere o arquivo INSTALL do GNU, ou, alternativamente, crie-o com um nome diferente.

Além disso, não quero desabilitar nenhum outro arquivo que automake possa gerar.

Editar 1: do automake manual :

If the --add-missing option is given, automake will add a generic version of the INSTALL file as well as the COPYING file containing the text of the current version of the GNU General Public License […]. However, an existing COPYING file will never be overwritten by automake.

Ele diz que um arquivo COPYING existente não será sobrescrito, mas não diz nada sobre o arquivo INSTALL , então parece que ele será sobrescrito incondicionalmente.

Editar 2: Conforme solicitado, aqui estão meus configure.ac e Makefile.am e também autogen.sh que corremos para autoreconf do projeto:

configure.ac :

AC_INIT([program name], [version number], [bug report], [short name], [url])
AC_CONFIG_SRCDIR([Main/Source/main.cpp])

AM_PROG_AS 
AC_CANONICAL_TARGET
AM_INIT_AUTOMAKE
AC_PROG_CC
AC_PROG_CXX

CFLAGS="$CFLAGS $SDL_CFLAGS "
LIBS="$LIBS $SDL_LIBS"
CPPFLAGS="$SDL_CFLAGS -DLINUX
          -DLOCAL_STATE_DIR=\\"$sharedstatedir/<program name>\\"
          -DDATADIR=\\"$datadir\\" -DUSE_SDL -DGCC"

AC_PROG_INSTALL
AC_PROG_RANLIB
AC_CONFIG_FILES(<list of Makefiles in subdirs>)
AC_OUTPUT

Makefile.am :

SUBDIRS = FooLib Main Bar Baz
EXTRA_DIST = LICENSING <and a bunch of unrelated files>

autogen.sh :

autoreconf -f -i
    
por zenith 19.04.2015 / 15:56

2 respostas

4

A causa do problema foi a tag -f , ou seja, --force , para autoreconf .

A página man para ele afirma: "considere todos os arquivos obsoletos", o que é um pouco vago, então inicialmente não consegui conectá-lo ao meu problema. Sua entrada manual em html é ainda mais enganosa:

Remake even configure scripts and configuration headers that are newer than their input files (configure.ac and, if present, aclocal.m4).

Ele só fala sobre scripts de configuração, mas na realidade também lida com os arquivos GNU padrão.

E, como se mostra , autoreconf -f realmente chama automake --force-missing , que tem uma descrição mais explícita:" forçar a atualização de arquivos padrão "e sua entrada manual html deixa ainda mais claro:

When used with --add-missing, causes standard files to be reinstalled even if they already exist in the source tree. […]

A remoção da tag -f da invocação autoreconf resolveu isso.

Conclusão: As pessoas que trabalham com autoreconf não podem escrever entradas manuais. As pessoas que trabalham em automake podem.

    
por 20.04.2015 / 00:07
5

Adicione a opção foreign a AM_INIT_AUTOMAKE em %código%. Isso dirá ao autotools que você não está seguindo os padrões de codificação GNU, e o Automake não criará os arquivos de texto do projeto GNU, incluindo os arquivos AUTHORS, COPYING, INSTALL, NEWS, README e ChangeLog. A criação automática desses arquivos é realmente inútil. Você sempre pode criá-los você mesmo.

    
por 19.04.2015 / 17:07