Автоинструмент забывает флаги aclocal при восстановлении - PullRequest
0 голосов
/ 18 июня 2019

У меня возникают проблемы при получении Autotools для обнаружения пользовательских макросов m4 при перестройке проекта.

Я настраиваю проект C, используя Autotools в качестве системы сборки, наряду с Make и gcc в Linux,Я указал пользовательский префикс установки (используя --prefix), поэтому я ищу там большинство библиотечных зависимостей.Система сборки этого проекта зависит от нескольких пользовательских макросов m4, установленных на ${prefix}/share/aclocal.Некоторые построены по зависимостям (libgcrypt.m4), другие я установил сам (ax_pthread.m4 из архива автоконфигурации ).

Это хорошо работает, если я скажу aclocal гденайти эти макросы.Обычно я делал это, передавая параметр autoreconf в командной строке: --include=/custom/install/prefix/share/aclocal.Это передается до aclocal, который может затем найти необходимые макросы m4.

Это работает хорошо, если я не коснусь configure.ac.На этом этапе Makefile из Autotool перестроит все configure зависимости, одна из которых предполагает повторный запуск aclocal.Это происходит без обязательного флага --include, поэтому происходит сбой.

Вот команда-нарушитель из сгенерированного Autotool Makefile:

$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
    $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)

Этот вызов aclocal не знаетисходные параметры командной строки для autoreconf, поэтому он не может найти необходимые макросы.Позже Autoconf выдает ошибку из-за неправильно сформированного m4, когда он пытается фактически использовать макросы.

Я попытался добавить содержимое prefix к ACLOCAL_AMFLAGS в Makefile.am, но это не удается, потому чтоMakefile передает содержимое ACLOCAL_AMFLAGS непосредственно в оболочку.В конечном итоге вы получите aclocal -I $(prefix) или что-то подобное.

Хакерское решение - отредактировать содержимое ACLOCAL в configure.ac:

ACLOCAL="ACLOCAL_PATH=$datadir/aclocal $ACLOCAL"

, но это может вызвать проблемыесли пользователь когда-либо решит переопределить ACLOCAL в командной строке.Это тоже неправильно ...

Более жизнеспособное решение - указать ACLOCAL_PATH в командной строке перед запуском autoreconf и make.

Есть ли идиоматический способвключить m4 скрипты из пользовательского каталога установки?Возможно, есть другой подход ко всей проблеме.

...