mirror of
https://git.notmuchmail.org/git/notmuch
synced 2024-12-26 11:24:53 +01:00
a962842d9b
gzip includes the name of the uncompressed file and its modification timestamp into the compressed archive. The latter makes it hard to reproduce the generated files bit for bit at a later time, so omit this information from the archive using the "--no-name" option. This is a reproducibility best practice, see https://wiki.debian.org/ReproducibleBuilds/TimestampsInGzipHeaders
145 lines
5 KiB
Makefile
145 lines
5 KiB
Makefile
# -*- makefile -*-
|
|
|
|
dir := doc
|
|
|
|
# You can set these variables from the command line.
|
|
SPHINXOPTS := -q
|
|
SPHINXBUILD = WITH_EMACS=${WITH_EMACS} RSTI_DIR=$(realpath emacs) sphinx-build
|
|
DOCBUILDDIR := $(dir)/_build
|
|
|
|
# Internal variables.
|
|
ALLSPHINXOPTS := $(SPHINXOPTS) $(srcdir)/$(dir)
|
|
APIMAN := $(DOCBUILDDIR)/man/man3/notmuch.3
|
|
DOXYFILE := $(srcdir)/$(dir)/doxygen.cfg
|
|
|
|
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
|
|
|
|
MAN1_ROFF := $(patsubst $(srcdir)/doc/%,$(DOCBUILDDIR)/man/%,$(MAN1_RST:.rst=.1))
|
|
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)
|
|
|
|
MAN_GZIP_FILES := $(addsuffix .gz,${MAN_ROFF_FILES})
|
|
|
|
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
|
|
|
|
INFO_INFO_FILES := $(INFO_TEXI_FILES:.texi=.info)
|
|
|
|
.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 sphinx-html sphinx-texinfo: docstring.stamp
|
|
endif
|
|
|
|
sphinx-html: $(DOCBUILDDIR)/.html.stamp
|
|
|
|
$(DOCBUILDDIR)/.html.stamp: $(ALL_RST_FILES)
|
|
$(SPHINXBUILD) -b html -d $(DOCBUILDDIR)/html_doctrees $(ALLSPHINXOPTS) $(DOCBUILDDIR)/html
|
|
touch $@
|
|
|
|
sphinx-texinfo: $(DOCBUILDDIR)/.texi.stamp
|
|
|
|
$(DOCBUILDDIR)/.texi.stamp: $(ALL_RST_FILES)
|
|
$(SPHINXBUILD) -b texinfo -d $(DOCBUILDDIR)/texinfo_doctrees $(ALLSPHINXOPTS) $(DOCBUILDDIR)/texinfo
|
|
touch $@
|
|
|
|
sphinx-info: sphinx-texinfo
|
|
$(MAKE) -C $(DOCBUILDDIR)/texinfo info
|
|
|
|
# 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
|
|
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
|
|
cd $(DESTDIR)/$(mandir)/man1 && ln -sf notmuch.1.gz notmuch-setup.1.gz
|
|
endif
|
|
|
|
ifneq ($(HAVE_SPHINX)$(HAVE_MAKEINFO),11)
|
|
build-info:
|
|
@echo "Missing sphinx or makeinfo, not building info pages"
|
|
else
|
|
build-info: sphinx-info
|
|
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
|
|
CLEAN := $(CLEAN) $(MAN_GZIP_FILES) $(MAN_ROFF_FILES) $(dir)/conf.pyc $(dir)/config.dox
|