GNU Autotools: Como você incluir arquivos de origem do 'make dist' tarball que estão acima do diretório de origem raiz?

StackOverflow https://stackoverflow.com/questions/1836209

Pergunta

Eu tenho um projeto Subversion que usa Gnu Autotools (ou seja, automake, autoconf, e libtool) para gerenciar o código fonte dentro de uma subpasta (chamada 'subpackage'). Os arquivos de origem referências subpacote que estão acima de diretório de origem raiz do subpackage, e são comuns a outros subpackages. Infelizmente, ao executar 'make dist' para criar o arquivo tar de distribuição, os arquivos de origem comum não são incluídos na distribuição.

Existe uma maneira de usar autoconf / automake para mover esses arquivos de origem comuns em um subdiretório do subpackage antes de distribuir a fonte, e para ter o makefile ajustar-se corretamente apontam para os arquivos de origem movido? Claramente, seria possível ter o makefile mover esses arquivos de origem ao longo antes de compilar, mas para trabalhar dentro do repositório Subversion, este problemas causas porque esses arquivos movidos são revisão controlado, e é fácil acidentalmente editar o arquivo movido em vez do original .

Foi útil?

Solução

Em vez de mover arquivos (que sempre parece suspeito para mim), Por que não usar links simbólicos? Você poderia ter sua referência subpackage somente os arquivos locais, e uma regra Makefile que diz "se os arquivos locais não está aqui, criar um link simbólico para o arquivo do pai". Durante make dist, o link simbólico será convertido em um arquivo simples automaticamente.

Outras dicas

Você poderia ter um diretório vazio em subpackage, chamada, digamos, "comum", com um makefile que copia os arquivos externos. Então você poderia usar o alvo dist-hook para mover os arquivos diretamente para a versão do " diretório comum" que vai ficar fechado acima para o arquivo tar. Dessa forma, você não tem que se preocupar com eles em torno de mentir e que está sendo editado. Você também iria substituir o Makefile.am, Makefile.in e Makefile em "comum", como você copiou.

Exemplo em subpacote / common / Makefile.am (não testada):

dist-hook:
    cp -p $(top_srcdir)/../common/Makefile* $(top_srcdir)/../common/*.[ch] $(distdir)

Eu não estou 100% de certeza que isso vai funcionar embora. Pode quebrar o resto do seu pacote, dependendo de onde tudo o resto espera encontrar esses arquivos de origem; ele provavelmente vai quebrar tornando dist se você descompactar o arquivo tar e tentar fazer dist de lá. Você deve saber que este tipo de trapaça é desaprovada. Mas eu espero que eu te dei bastante idéias para brincar com.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top