Autoconf / Automake условия и правила dist - PullRequest
4 голосов
/ 11 августа 2011

Я недавно начал использовать autoconf и automake для проекта, над которым я работаю. Документация проекта написана на LaTeX. Поскольку я не хочу использовать LaTeX в качестве зависимости, я хочу проверить наличие двоичного файла pdflatex с помощью autoconf, а затем использовать эту информацию в Makefile.am , чтобы решить, следует ли просто скопируйте файл .tex в каталог документации или создайте файл PDF и скопируйте оба файла.

Это соответствующий раздел в configure.ac :

# Check for presence of pdfLaTeX
AC_CHECK_PROG(PDFLATEX, pdflatex, pdflatex)
if test -z "$PDFLATEX"; then
  AC_MSG_WARN([Unable to create PDF version of the user manual.])
fi

AM_CONDITIONAL([HAVE_PDFLATEX], test -n "$PDFLATEX")

В каталоге doc / у меня есть следующий Makefile.am :

docfiles = manual.tex QuickStart.txt

if HAVE_PDFLATEX
docfiles += manual.pdf
MANNAME = manual
MANTEXSRC = $(MANNAME).tex
MANAUX = $(MANNAME).aux
MANPDF = $(MANNAME).pdf

CLEANFILES = $(MANPDF) $(MANNAME).log $(MANNAME).idx $(MANNAME).out \
 $(MANNAME).toc $(MANAUX)

$(MANPDF): $(srcdir)/$(MANTEXSRC)
    $(PDFLATEX) $<
endif

dist_doc_DATA = $(docfiles)

Эта настройка работает, когда присутствует pdflatex , но когда он отсутствует, работает make , но make distcheck запрашивает способ создания файла PDF :

make[1]: *** No rule to make target `manual.pdf', needed by `distdir'.  Stop.

Глядя в Makefile , который сгенерировал Automake, я вижу:

#am__append_1 = manual.pdf
am__dist_doc_DATA_DIST = manual.tex QuickStart.txt manual.pdf

и дальше я нахожу:

docfiles = manual.tex QuickStart.txt $(am__append_1)
#MANNAME = manual
#MANTEXSRC = $(MANNAME).tex
#MANAUX = $(MANNAME).aux
#MANPDF = $(MANNAME).pdf
#CLEANFILES = $(MANPDF) $(MANNAME).log $(MANNAME).idx $(MANNAME).out \
# $(MANNAME).toc $(MANAUX) .btmp

dist_doc_DATA = $(docfiles)

Что мне здесь не хватает?

1 Ответ

5 голосов
/ 12 августа 2011

Я думаю, что ваша проблема в том, что вы условно "распределяете" manual.pdf, и automake довольно консервативен в отношении правил distПопробуйте это:

if HAVE_PDFLATEX
doc_DATA = manual.pdf
# Rest of your stuff...
endif
...