2009-12-02 6 views
4

У меня есть проект Subversion, который использует Gnu Autotools (т. Е. Automake, autoconf и libtool) для управления исходным кодом внутри подпапки (называемой «subpackage»). Subpackage ссылается на исходные файлы, которые находятся над корневым исходным каталогом подпакета и являются общими для других подпакетов. К сожалению, при запуске 'make dist' для создания дистрибутивного tarball общие исходные файлы не включаются в дистрибутив.GNU Autotools: Как вы включаете исходные файлы в tar-архив 'make dist', который находится над корневым исходным каталогом?

Есть ли способ использовать autoconf/automake для перемещения этих общих исходных файлов в подкаталог подпакета, прежде чем распространять исходный код и настроить makefile, чтобы правильно указать на перемещенные исходные файлы? Очевидно, что было бы возможно, чтобы make-файл перемещал эти исходные файлы перед компиляцией, но для работы в репозитории Subversion это вызывает проблемы, поскольку эти перемещенные файлы контролируются ревизией, и его легко случайно изменить перемещенный файл вместо оригинала ,

ответ

2

Вместо того, чтобы перемещать файлы вокруг (что всегда кажется мне неприятным), почему бы не использовать символические ссылки? У вас может быть ссылка на ваш субпакет только локальные файлы и правило Makefile, в котором говорится: «Если локальных файлов здесь нет, создайте символическую ссылку на файл родителя». Во время make dist символическая ссылка будет преобразована в простой файл автоматически.

+0

Мне нравится этот подход и даст ему шанс! Мое ​​единственное сомнение в том, будет ли оно работать на Windows (возможно, Cygwin). В системах Windows символические ссылки появляются как .lnk-файлы. Вероятно, это нормально в чистой установке Cygwin (поскольку Cygwin Bash правильно интерпретирует файлы .lnk как символические ссылки), но мне интересно, Microsoft Visual Studio также будет обрабатывать их правильно. –

3

У вас может быть пустой каталог в подпапке, называемый, скажем, «общим», с файлом make, который копирует внешние файлы. Затем вы можете использовать цель dist-hook для перемещения файлов непосредственно в версию «общий» каталог, который будет зашифрован в tarball. Таким образом, вам не нужно беспокоиться о том, чтобы они лежали и редактировались. Вы также перезаписываете Makefile.am, Makefile.in и Makefile в «общем» при копировании.

Пример в подпакете/общий/Makefile.am (непроверенный):

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

Я не 100% уверен, что это будет работать, хотя. Это может сломать остальную часть вашего пакета, в зависимости от того, где все остальное ожидает найти эти исходные файлы; он, вероятно, сломается, если вы распакуете архив и попытаетесь отвлечься оттуда. Вы должны знать, что этот трюк неодобрительно. Но я надеюсь, что дал вам достаточно идей для игры.

+0

Благодарим вас за предложения! Это несколько похоже на то, что мы делаем сегодня в аналогичном контексте, за исключением того, что сначала мы копируем файлы, а затем создаем их (чтобы Make-файлы были правильными как для подрывной деятельности, так и для распространения). Проблема заключается в получении всех Makefile (makefile в общем каталоге и makefile в $ (top_srcdir), чтобы играть красиво. –