Как включить относительно текущего .am файла во вложенные включения? - PullRequest
0 голосов
/ 20 сентября 2018

Рассмотрим этот каталог сборки:

grep "" . -r
./sub/Makefile.include.am:include ../Makefile.include.am
./sub/Makefile.am:include Makefile.include.am
./sub/dir/Makefile.include.am:include ../Makefile.include.am
./sub/dir/Makefile.am:include Makefile.include.am
./Makefile.include.am:# empty file
./Makefile.am:include Makefile.include.am
./clean.sh:rm -fr \
./clean.sh:     aclocal.m4 \
./clean.sh:     autom4te.cache \
./clean.sh:     Makefile.in \
./clean.sh:     sub/Makefile.in \
./clean.sh:     sub/dir/Makefile.in \
./clean.sh:     install-sh missing INSTALL NEWS README AUTHORS ChangeLog COPYING \
./configure.ac:AC_INIT([Foo],[0.8.15],[me@pricavy.net])
./configure.ac:AM_INIT_AUTOMAKE([])
./configure.ac:
./configure.ac:AC_CONFIG_FILES([
./configure.ac: Makefile
./configure.ac: sub/Makefile
./configure.ac: sub/dir/Makefile
./configure.ac:])
./run.sh:aclocal
./run.sh:touch install-sh missing INSTALL NEWS README AUTHORS ChangeLog COPYING
./run.sh:automake

Выполнение ./run.sh генерирует эту ошибку:

Deep recursion on subroutine "Automake::read_am_file" at /usr/bin/automake-1.15 line 6536, <GEN115> line 1.
automake-1.15: error: cannot open < sub/dir/../Makefile.include.am: Too many open files

Проблема в том, что при генерации sub/dir/Makefile текущая рабочаякаталог sub/dir и остается таким же при включении sub/Makefile.include.am, поэтому, когда sub/Makefile.include.am пытается включить Makefile.include.am, он фактически включает в себя создание бесконечного цикла до тех пор, пока не произойдет автоматическая ошибка.

ТамЕсть несколько решений, таких как использование абсолютных путей, однако я бы очень хотел сохранить показанный здесь шаблон, используя как можно больше относительных путей.Как я могу перефразировать эти включенные строки, чтобы сделать то, что я хочу?

Что-то вроде include $(selfdir)/../Makefile.include.am в идеале, без необходимости определять selfdir себя?

Вспомогательный скрипт для создания вышеуказанной структуры каталогов:

mkdir foo || exit
cd foo || exit

mkdir sub sub/dir || exit

echo "include ../Makefile.include.am" > sub/Makefile.include.am
echo "include Makefile.include.am" > sub/Makefile.am
echo "include ../Makefile.include.am" > sub/dir/Makefile.include.am
echo "include Makefile.include.am" > sub/dir/Makefile.am
echo "# empty file" > Makefile.include.am
echo "include Makefile.include.am" > Makefile.am
echo -e "rm -fr \\\\\n\taclocal.m4 \\\\\n\tautom4te.cache \\\\\n\tMakefile.in \\\\\n\tsub/Makefile.in \\\\\n\tsub/dir/Makefile.in \\\\\n\tinstall-sh missing INSTALL NEWS README AUTHORS ChangeLog COPYING \\" > clean.sh
echo -e "AC_INIT([Foo],[0.8.15],[me@pricavy.net])\nAM_INIT_AUTOMAKE([])\n\nAC_CONFIG_FILES([\n\tMakefile\n\tsub/Makefile\n\tsub/dir/Makefile\n])" > configure.ac
echo -e "aclocal\ntouch install-sh missing INSTALL NEWS README AUTHORS ChangeLog COPYING\nautomake" > run.sh
chmod +x clean.sh run.sh
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...