GNU Autotools: Comment inclure des fichiers source dans le tarball « faire dist » qui sont au-dessus du répertoire source racine?

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

Question

J'ai un projet qui utilise Subversion pour gérer le code source dans un sous-dossier Gnu Autotools (à savoir, automake, autoconf et libtool) (appelé 'subpackage'). Les fichiers source de références sous-paquet qui sont au-dessus du répertoire source racine du sous-paquet, et sont communs à d'autres sous paquets. Malheureusement, lors de l'exécution « make dist » pour créer la distribution tarball, les fichiers source commune ne sont pas inclus dans la distribution.

Y at-il un moyen d'utiliser autoconf / automake pour déplacer ces fichiers source commune dans un sous-répertoire du sous-paquet avant de distribuer la source, et d'avoir le makefile s'adapter à pointer correctement les fichiers source relocalisés? De toute évidence, il serait possible d'avoir le makefile déplacer ces fichiers source sur avant de compiler, mais pour travailler dans le dépôt Subversion, cela pose des problèmes parce que ces fichiers déplacés sont contrôlés par la révision, et il est facile de modifier accidentellement le fichier déplacé au lieu de l'original .

Était-ce utile?

La solution

Au lieu de déplacer des fichiers (qui sonne toujours fishy me), Pourquoi ne pas utiliser des liens symboliques? Vous pourriez avoir votre référence subpackage uniquement les fichiers locaux, et une règle de Makefile qui dit « si les fichiers locaux ne sont pas ici, créer un lien symbolique vers le fichier du parent ». Pendant make dist, le lien symbolique sera converti en un simple fichier automatiquement.

Autres conseils

Vous pourriez avoir un répertoire vide dans subpackage, appelé, par exemple, « commun », avec un makefile qui copie les fichiers externes. Ensuite, vous pouvez utiliser la cible crochet dist pour déplacer les fichiers directement dans la version du " répertoire commun » qui se zippé dans le tarball. De cette façon, vous n'avez pas à vous soucier de les traîner et en cours d'édition. Vous écraserait aussi le Makefile.am, Makefile.in et Makefile dans « commun » que vous avez copié.

Exemple de sous-paquet / common / Makefile.am (non testé):

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

Je ne suis pas 100% sûr que cela fonctionnera bien. Il pourrait briser le reste de votre colis, selon l'endroit où tout le reste attend à trouver les fichiers source; il sera probablement casser faire dist si vous décompressez l'archive et essayer de faire dist à partir de là. Vous devez savoir que ce genre de supercherie est mal. Mais j'espère que je vous ai donné assez d'idées pour jouer avec.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top