X-Git-Url: https://git.notmuchmail.org/git?p=notmuch;a=blobdiff_plain;f=doc%2FMakefile.local;h=b4e0c9558101a81bcc0fb65b201b42f6c1e7c850;hp=ec23012537f4884b3aee7a1a6b32d608834652e1;hb=HEAD;hpb=d736260385a689b5c77d8121f48e29440e3adfa4 diff --git a/doc/Makefile.local b/doc/Makefile.local index ec230125..aafa77a0 100644 --- a/doc/Makefile.local +++ b/doc/Makefile.local @@ -1,27 +1,163 @@ -# -*- makefile -*- +# -*- makefile-gmake -*- dir := doc # You can set these variables from the command line. -SPHINXOPTS := -q -c $(dir) -SPHINXBUILD = sphinx-build +SPHINXOPTS := -q +SPHINXBUILD = env LD_LIBRARY_PATH=${NOTMUCH_BUILDDIR}/lib sphinx-build DOCBUILDDIR := $(dir)/_build # Internal variables. -ALLSPHINXOPTS := -d $(DOCBUILDDIR)/doctrees $(SPHINXOPTS) $(dir) +ALLSPHINXOPTS := $(SPHINXOPTS) $(srcdir)/$(dir) +APIMAN := $(DOCBUILDDIR)/man/man3/notmuch.3 +DOXYFILE := $(srcdir)/$(dir)/doxygen.cfg -.PHONY: sphinx-html sphinx-man sphinx-texinfo sphinx-info +MAN1_RST := $(wildcard $(srcdir)/doc/man1/*.rst) +MAN5_RST := $(wildcard $(srcdir)/doc/man5/*.rst) +MAN7_RST := $(wildcard $(srcdir)/doc/man7/*.rst) +MAN_RST_FILES := $(MAN1_RST) $(MAN5_RST) $(MAN7_RST) +ALL_RST_FILES := $(MAN_RST_FILES) $(srcdir)/doc/notmuch-emacs.rst -sphinx-html: - $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(DOCBUILDDIR)/html +COPY_ROFF1 := $(patsubst %,$(DOCBUILDDIR)/man/man1/%.1,nmbug notmuch-setup) +MAN1_ROFF := $(patsubst $(srcdir)/doc/%,$(DOCBUILDDIR)/man/%,$(MAN1_RST:.rst=.1)) +MAN1_ROFF := $(MAN1_ROFF) $(COPY_ROFF1) +MAN5_ROFF := $(patsubst $(srcdir)/doc/%,$(DOCBUILDDIR)/man/%,$(MAN5_RST:.rst=.5)) +MAN7_ROFF := $(patsubst $(srcdir)/doc/%,$(DOCBUILDDIR)/man/%,$(MAN7_RST:.rst=.7)) +MAN_ROFF_FILES := $(MAN1_ROFF) $(MAN5_ROFF) $(MAN7_ROFF) -sphinx-man: - $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(DOCBUILDDIR)/man +MAN_GZIP_FILES := $(addsuffix .gz,${MAN_ROFF_FILES}) -sphinx-texinfo: - $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(DOCBUILDDIR)/texinfo +MAN1_TEXI := $(patsubst $(srcdir)/doc/man1/%.rst,$(DOCBUILDDIR)/texinfo/%.texi,$(MAN1_RST)) +MAN5_TEXI := $(patsubst $(srcdir)/doc/man5/%.rst,$(DOCBUILDDIR)/texinfo/%.texi,$(MAN5_RST)) +MAN7_TEXI := $(patsubst $(srcdir)/doc/man7/%.rst,$(DOCBUILDDIR)/texinfo/%.texi,$(MAN7_RST)) +INFO_TEXI_FILES := $(MAN1_TEXI) $(MAN5_TEXI) $(MAN7_TEXI) +ifeq ($(WITH_EMACS),1) + INFO_TEXI_FILES += $(DOCBUILDDIR)/texinfo/notmuch-emacs.texi +endif -sphinx-info: sphinx-texinfo - make -C $(DOCBUILDDIR)/texinfo info +COPY_INFO1 := $(patsubst $(DOCBUILDDIR)/man/man1/%.1,$(DOCBUILDDIR)/texinfo/%.info,$(COPY_ROFF1)) +INFO_INFO_FILES := $(INFO_TEXI_FILES:.texi=.info) $(COPY_INFO1) -CLEAN := $(CLEAN) $(DOCBUILDDIR) +.PHONY: sphinx-html sphinx-texinfo sphinx-info + +.PHONY: install-man build-man apidocs install-apidocs + +%.gz: % + rm -f $@ && gzip --no-name --stdout $^ > $@ + +ifeq ($(WITH_EMACS),1) +$(DOCBUILDDIR)/.roff.stamp $(DOCBUILDDIR)/.html.stamp $(DOCBUILDDIR)/.texi.stamp : docstring.stamp +endif + +ifeq ($(HAVE_PYTHON3_CFFI),1) +DOC_PREREQS=bindings/python-cffi.stamp +else +DOC_PREREQS= +endif + +sphinx-html: $(DOCBUILDDIR)/.html.stamp + +$(DOCBUILDDIR)/.html.stamp: $(ALL_RST_FILES) $(DOC_PREREQS) + $(SPHINXBUILD) -b html -d $(DOCBUILDDIR)/html_doctrees $(ALLSPHINXOPTS) $(DOCBUILDDIR)/html + touch $@ + +sphinx-texinfo: $(DOCBUILDDIR)/.texi.stamp + +$(DOCBUILDDIR)/.texi.stamp: $(ALL_RST_FILES) $(DOC_PREREQS) + $(SPHINXBUILD) -b texinfo -d $(DOCBUILDDIR)/texinfo_doctrees $(ALLSPHINXOPTS) $(DOCBUILDDIR)/texinfo + touch $@ + +sphinx-info: $(DOCBUILDDIR)/.info.stamp + +$(DOCBUILDDIR)/.info.stamp: $(DOCBUILDDIR)/.texi.stamp $(DOC_PREREQS) + $(MAKE) -C $(DOCBUILDDIR)/texinfo info + touch $@ + +# Use the man page converter that is available. We should never depend +# on MAN_ROFF_FILES if a converter is not available. +${MAN_ROFF_FILES}: $(DOCBUILDDIR)/.roff.stamp + +# By using $(DOCBUILDDIR)/.roff.stamp instead of ${MAN_ROFF_FILES}, we +# convey to make that a single invocation of this recipe builds all +# of the roff files. This prevents parallel make from starting an +# instance of this recipe for each roff file. +$(DOCBUILDDIR)/.roff.stamp: ${MAN_RST_FILES} +ifeq ($(HAVE_SPHINX),1) + $(SPHINXBUILD) -b man -d $(DOCBUILDDIR)/man_doctrees $(ALLSPHINXOPTS) $(DOCBUILDDIR)/man + for section in 1 5 7; do \ + mkdir -p $(DOCBUILDDIR)/man/man$${section}; \ + mv $(DOCBUILDDIR)/man/*.$${section} $(DOCBUILDDIR)/man/man$${section}; \ + done +else + @echo "Fatal: build dependency fail." + @false +endif + touch $@ + +install-man: install-apidocs + +ifeq ($(HAVE_DOXYGEN),1) +MAN_GZIP_FILES += ${APIMAN}.gz +apidocs: $(APIMAN) +install-apidocs: ${APIMAN}.gz + mkdir -p "$(DESTDIR)$(mandir)/man3" + install -m0644 $(filter %.3.gz,$(MAN_GZIP_FILES)) $(DESTDIR)/$(mandir)/man3 + +$(APIMAN): $(dir)/config.dox $(srcdir)/$(dir)/doxygen.cfg $(srcdir)/lib/notmuch.h + mkdir -p $(DOCBUILDDIR)/man/man3 + doxygen $(DOXYFILE) + rm -f $(DOCBUILDDIR)/man/man3/_*.3 + perl -pi -e 's/^[.]RI "\\fI/.RI "\\fP/' $(APIMAN) +else +apidocs: +install-apidocs: +endif + +# Do not try to build or install man pages if a man page converter is +# not available. +ifeq ($(HAVE_SPHINX),0) +build-man: +install-man: + @echo "No sphinx, will not install man pages." +else + +# it should be safe to depend on the stamp file, because it is created +# after all roff files are moved into place. +${MAN_GZIP_FILES}: ${DOCBUILDDIR}/.roff.stamp + +build-man: ${MAN_GZIP_FILES} +install-man: ${MAN_GZIP_FILES} + mkdir -m0755 -p "$(DESTDIR)$(mandir)/man1" + mkdir -m0755 -p "$(DESTDIR)$(mandir)/man5" + mkdir -m0755 -p "$(DESTDIR)$(mandir)/man7" + install -m0644 $(filter %.1.gz,$(MAN_GZIP_FILES)) $(DESTDIR)/$(mandir)/man1 + install -m0644 $(filter %.5.gz,$(MAN_GZIP_FILES)) $(DESTDIR)/$(mandir)/man5 + install -m0644 $(filter %.7.gz,$(MAN_GZIP_FILES)) $(DESTDIR)/$(mandir)/man7 +endif + +ifneq ($(HAVE_SPHINX)$(HAVE_MAKEINFO),11) +build-info: + @echo "Missing sphinx or makeinfo, not building info pages" +else +build-info: $(DOCBUILDDIR)/.info.stamp +endif + +ifneq ($(HAVE_SPHINX)$(HAVE_MAKEINFO)$(HAVE_INSTALL_INFO),111) +install-info: + @echo "Missing prerequisites, not installing info pages" +else +install-info: build-info + mkdir -m0755 -p "$(DESTDIR)$(infodir)" + install -m0644 $(INFO_INFO_FILES) $(DESTDIR)$(infodir) + for file in $(INFO_INFO_FILES); do install-info $$file $(DESTDIR)$(infodir)/dir; done +endif + +$(dir)/config.dox: version.stamp + echo "PROJECT_NAME = \"Notmuch $(VERSION)\"" > $@ + echo "INPUT=${srcdir}/lib/notmuch.h" >> $@ + +CLEAN := $(CLEAN) $(DOCBUILDDIR) $(DOCBUILDDIR)/.roff.stamp $(DOCBUILDDIR)/.texi.stamp +CLEAN := $(CLEAN) $(DOCBUILDDIR)/.html.stamp $(DOCBUILDDIR)/.info.stamp +CLEAN := $(CLEAN) $(MAN_GZIP_FILES) $(MAN_ROFF_FILES) $(dir)/conf.pyc $(dir)/config.dox + +CLEAN := $(CLEAN) $(dir)/__pycache__