GNU Autotools: Как включить исходные файлы в tar-архив 'make dist', которые находятся над корневым исходным каталогом? - PullRequest
4 голосов
/ 03 декабря 2009

У меня есть проект Subversion, который использует Gnu Autotools (то есть, automake, autoconf и libtool) для управления исходным кодом внутри подпапки (называемой «подпакет»). Подпакет ссылается на исходные файлы, которые находятся над корневым исходным каталогом подпакета и являются общими для других подпакетов. К сожалению, при запуске команды make dist для создания архива дистрибутива общие исходные файлы не включаются в дистрибутив.

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

Ответы [ 2 ]

3 голосов
/ 03 декабря 2009

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

Пример в subpackage / common / Makefile.am (не проверено):

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

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

2 голосов
/ 09 декабря 2009

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

...