AC_SUBST для указания дополнительного исходного каталога - PullRequest
0 голосов
/ 23 сентября 2019

У меня есть конфигурация, которая определяет переменную как:

AC_ARG_WITH(mylib,
[  --with-mylib=PATH     Sets PATH for my additional sources (../mylib) ],
[
        MYLIB_PATH="${withval}"
        AC_MSG_RESULT(Using mylib source from ${withval})
],[
        MYLIB_PATH="../mylib"
])

dnl convert to absolute path
MYLIB_PATH=`readlink -f ${MYLIB_PATH}`
AC_SUBST(MYLIB_PATH)
AC_OUTPUT(Makefile src/Makefile)

Мой верхний уровень Makefile.am:

ACLOCAL_AMFLAGS = -I m4
SUBDIRS = src

Затем в моем src/Makefile.am я хочу добавитьисточники из указанного пути mylib:

...
bin_PROGRAMS = fooApp
fooApp_SOURCES = main.c \
            @MYLIB_PATH@/logger.c
fooApp_CFLAGS = -I@MYLIB_PATH@/lib

Так что идея заключается в том, что я храню отдельный репозиторий для этих общих источников.Во время настройки я могу указать, где у меня их оформить.Т.е.:

./configure --with-mylib=/tmp/mylib 

К сожалению, когда я запускаю configure, появляется скрипт для создания .deps (для файлов .Po) под моим src, как будто он удаляет первую косую черту пути:

src/tmp/mylib/.deps/fooApp-logger.Po

Теперь явно произойдет сбой make, поскольку он пытается загрузить файл .Po по пути: /tmp/mylib/.deps/fooApp-logger.Po

Есть идеи, что я делаю неправильно?Как правильно настроить, где найти дополнительные источники?

1 Ответ

0 голосов
/ 25 сентября 2019

Ладно, для тех, кто сталкивается с подобной проблемой, я подозреваю, что это проблема с автомобилем, который делает что-то не так, когда вычисляет местоположение пути .Po файлов из расширенного пути через AC_SUBST.

Обходной путь должен всегда использовать относительный путь вместо абсолютного пути при определении пути, который раскрывается через AC_SUBST.

В приведенном выше примере не используйте readlink`` to convert MYLIB_PATH to absolute, instead use realpath```, чтобы найти относительный путь ккаталог, в котором выполняется сборка:

MYLIB_PATH=`realpath --relative-to src "${MYLIB_PATH}"`

Я создал полный репродуктор и сообщил об ошибке в GNU (ошибка # 37499)

...