Скажем, есть куча (например, около 200) модулей, которые все зависят от основного модуля. Все используют Autotools.
Основной модуль устанавливает файл core.m4, который зависимые модули уже используют для различных целей.
Все иждивенцы также имеют несколько строк в своем правиле install-data-local для создания некоторых сценариев и их установки, например.
core_stuffdir=$(prefix)/share/core/stuff/
install-data-local:
generate-stuff stuff.xml
test -d $(DESTDIR)$(core_stuffdir) || mkdir $(DESTDIR)$(core_stuffdir)
stuff=`xmllint --xpath '//stuff[@install="yes"]/@name' stuff.xml`; \
$(INSTALL_DATA) $$stuff $(DESTDIR)$(core_stuffdir); \
rm $$stuff
…
$(INSTALL_DATA) other-module-specific-stuff …
…
Я хотел бы удалить эти пять строк, которые в настоящее время избыточно дублируются более чем в 200 файлах, и вместо этого определить строки в файле core.m4. Зависимые должны быть в состоянии сказать что-то вроде SOMEVAR: somevalue
(или что-то подобное короткое, в худшем случае однострочное в install-data-local) и выполнить эти строки во время make install.
Есть ли хороший способ определить эти строки в core.m4 и сделать их доступными для Makefile.am? В сети подобных примеров не нашел.
Единственное решение, которое я могу сейчас придумать, это то, что m4 выдает сценарий оболочки, который я могу вызвать из install-data-local, но я не уверен, что это лучший (или самый автоматический) способ.
В качестве альтернативы, есть ли простой способ распространения файла automake fragment.am
из моего основного модуля? (Кажется, так определяются, например, правила компиляции Python.)