mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 10:11:27 +01:00
For top-level targets which use more than a single program to produce content (txt already, pdf once pandoc is supported), these current checks are unsuitable. By moving the the install checks to the rules which actually use the programs, it is now possible to build a subset of a top-level target depending on the installed programs. As a bonus, it removes the need to recurse for txt, man-pages and pdf targets. A side effect of this is that every individual source which cannot be generated will have a specific message logged, giving the file and program. As such, these message are updated to consistently report the target file which was not generated. Finally, update "ifdef foo" to "ifneq($(foo),)" to be more resilient to errors caused by having foo defined as an empty string. Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com> Acked-by: Ian Campbell <ian.campbell@citrix.com>
188 lines
4.7 KiB
Makefile
188 lines
4.7 KiB
Makefile
XEN_ROOT=$(CURDIR)/..
|
|
include $(XEN_ROOT)/Config.mk
|
|
-include $(XEN_ROOT)/config/Docs.mk
|
|
|
|
VERSION := $(shell $(MAKE) -C $(XEN_ROOT)/xen --no-print-directory xenversion)
|
|
|
|
DOC_ARCHES := arm x86_32 x86_64
|
|
|
|
# Documentation sources to build
|
|
MAN1SRC-y := $(sort $(wildcard man/xl*.pod.1))
|
|
MAN1SRC-y += $(sort $(wildcard man/xenstore*.pod.1))
|
|
|
|
MAN5SRC-y := $(sort $(wildcard man/xl*.pod.5))
|
|
|
|
MARKDOWNSRC-y := $(sort $(wildcard misc/*.markdown))
|
|
|
|
TXTSRC-y := $(sort $(wildcard misc/*.txt))
|
|
|
|
# Documentation targets
|
|
DOC_MAN1 := $(patsubst man/%.pod.1,man1/%.1,$(MAN1SRC-y))
|
|
DOC_MAN5 := $(patsubst man/%.pod.5,man5/%.5,$(MAN5SRC-y))
|
|
DOC_HTML := $(patsubst %.markdown,html/%.html,$(MARKDOWNSRC-y)) \
|
|
$(patsubst man/%.pod.1,html/man/%.1.html,$(MAN1SRC-y)) \
|
|
$(patsubst man/%.pod.5,html/man/%.5.html,$(MAN5SRC-y)) \
|
|
$(patsubst %.txt,html/%.txt,$(TXTSRC-y)) \
|
|
$(patsubst %,html/hypercall/%/index.html,$(DOC_ARCHES))
|
|
DOC_TXT := $(patsubst %.txt,txt/%.txt,$(TXTSRC-y)) \
|
|
$(patsubst %.markdown,txt/%.txt,$(MARKDOWNSRC-y)) \
|
|
$(patsubst man/%.pod.1,txt/man/%.1.txt,$(MAN1SRC-y)) \
|
|
$(patsubst man/%.pod.5,txt/man/%.5.txt,$(MAN5SRC-y))
|
|
DOC_PDF := $(patsubst %.markdown,pdf/%.pdf,$(MARKDOWNSRC-y))
|
|
|
|
# Top level build targets
|
|
.PHONY: all
|
|
all: build
|
|
|
|
.PHONY: build
|
|
build: html txt pdf man-pages figs
|
|
|
|
.PHONY: html
|
|
html: $(DOC_HTML) html/index.html
|
|
|
|
.PHONY: txt
|
|
txt: $(DOC_TXT)
|
|
|
|
.PHONY: figs
|
|
figs:
|
|
ifneq ($(FIG2DEV),)
|
|
set -x; $(MAKE) -C figs
|
|
else
|
|
@echo "fig2dev (transfig) not installed; skipping figs."
|
|
endif
|
|
|
|
.PHONY: man-pages
|
|
man-pages: $(DOC_MAN1) $(DOC_MAN5)
|
|
|
|
.PHONY: pdf
|
|
pdf: $(DOC_PDF)
|
|
|
|
.PHONY: clean
|
|
clean:
|
|
$(MAKE) -C figs clean
|
|
rm -rf .word_count *.aux *.dvi *.bbl *.blg *.glo *.idx *~
|
|
rm -rf *.ilg *.log *.ind *.toc *.bak *.tmp core
|
|
rm -rf html txt pdf
|
|
rm -rf man5
|
|
rm -rf man1
|
|
|
|
.PHONY: distclean
|
|
distclean: clean
|
|
rm -rf $(XEN_ROOT)/config/Docs.mk config.log config.status config.cache \
|
|
autom4te.cache
|
|
|
|
# Top level install targets
|
|
.PHONY: install-man-pages
|
|
install-man-pages: man-pages
|
|
$(INSTALL_DIR) $(DESTDIR)$(MANDIR)
|
|
cp -R man1 $(DESTDIR)$(MANDIR)
|
|
cp -R man5 $(DESTDIR)$(MANDIR)
|
|
|
|
.PHONY: install-html
|
|
install-html: html txt figs
|
|
$(INSTALL_DIR) $(DESTDIR)$(DOCDIR)
|
|
[ ! -d html ] || cp -R html $(DESTDIR)$(DOCDIR)
|
|
|
|
.PHONY: install
|
|
install: install-man-pages install-html
|
|
|
|
# Individual file build targets
|
|
man1/%.1: man/%.pod.1 Makefile
|
|
ifneq ($(POD2MAN),)
|
|
@$(INSTALL_DIR) $(@D)
|
|
$(POD2MAN) --release=$(VERSION) --name=$* -s 1 -c "Xen" $< $@
|
|
else
|
|
@echo "pod2man not installed; skipping $@"
|
|
endif
|
|
|
|
man5/%.5: man/%.pod.5 Makefile
|
|
ifneq ($(POD2MAN),)
|
|
@$(INSTALL_DIR) $(@D)
|
|
$(POD2MAN) --release=$(VERSION) --name=$* -s 5 -c "Xen" $< $@
|
|
else
|
|
@echo "pod2man not installed; skipping $@"
|
|
endif
|
|
|
|
html/index.html: $(DOC_HTML) $(CURDIR)/gen-html-index INDEX
|
|
$(PERL) -w -- $(CURDIR)/gen-html-index -i INDEX html $(DOC_HTML)
|
|
|
|
html/%.html: %.markdown
|
|
ifneq ($(MARKDOWN),)
|
|
@$(INSTALL_DIR) $(@D)
|
|
$(MARKDOWN) $< > $@
|
|
else
|
|
@echo "markdown not installed; skipping $@"
|
|
endif
|
|
|
|
html/%.txt: %.txt
|
|
@$(INSTALL_DIR) $(@D)
|
|
$(INSTALL_DATA) $< $@
|
|
|
|
html/man/%.1.html: man/%.pod.1 Makefile
|
|
ifneq ($(POD2HTML),)
|
|
@$(INSTALL_DIR) $(@D)
|
|
$(POD2HTML) --infile=$< --outfile=$@
|
|
else
|
|
@echo "pod2html not installed; skipping $@"
|
|
endif
|
|
|
|
html/man/%.5.html: man/%.pod.5 Makefile
|
|
ifneq ($(POD2HTML),)
|
|
@$(INSTALL_DIR) $(@D)
|
|
$(POD2HTML) --infile=$< --outfile=$@
|
|
else
|
|
@echo "pod2html not installed; skipping $@"
|
|
endif
|
|
|
|
# For non-x86 arches exclude the subarch whole x86 arch.
|
|
$(foreach i,$(filter-out x86_32 x86_64,$(DOC_ARCHES)),html/hypercall/$(i)/index.html): EXTRA_EXCLUDE := -X arch-x86
|
|
|
|
html/hypercall/%/index.html: $(CURDIR)/xen-headers Makefile
|
|
rm -rf $(@D)
|
|
$(INSTALL_DIR) $(@D)
|
|
$(PERL) -w $(CURDIR)/xen-headers -O $(@D) \
|
|
-T 'arch-$* - Xen public headers' \
|
|
$(patsubst %,-X arch-%,$(filter-out $*,$(DOC_ARCHES))) \
|
|
$(patsubst %,-X xen-%,$(filter-out $*,$(DOC_ARCHES))) \
|
|
$(EXTRA_EXCLUDE) \
|
|
$(XEN_ROOT)/xen include/public include/xen/errno.h
|
|
|
|
-include $(wildcard html/hypercall/*/.deps)
|
|
|
|
txt/%.txt: %.txt
|
|
@$(INSTALL_DIR) $(@D)
|
|
$(INSTALL_DATA) $< $@
|
|
|
|
txt/%.txt: %.markdown
|
|
@$(INSTALL_DIR) $(@D)
|
|
$(INSTALL_DATA) $< $@
|
|
|
|
txt/man/%.1.txt: man/%.pod.1 Makefile
|
|
ifneq ($(POD2TEXT),)
|
|
@$(INSTALL_DIR) $(@D)
|
|
$(POD2TEXT) $< $@
|
|
else
|
|
@echo "pod2text not installed; skipping $@"
|
|
endif
|
|
|
|
txt/man/%.5.txt: man/%.pod.5 Makefile
|
|
ifneq ($(POD2TEXT),)
|
|
@$(INSTALL_DIR) $(@D)
|
|
$(POD2TEXT) $< $@
|
|
else
|
|
@echo "pod2text not installed; skipping $@"
|
|
endif
|
|
|
|
pdf/%.pdf: %.markdown
|
|
ifneq ($(PANDOC),)
|
|
@$(INSTALL_DIR) $(@D)
|
|
$(PANDOC) --number-sections --toc --standalone $< --output $@
|
|
else
|
|
@echo "pandoc not installed; skipping $@"
|
|
endif
|
|
|
|
ifeq (,$(findstring clean,$(MAKECMDGOALS)))
|
|
$(XEN_ROOT)/config/Docs.mk:
|
|
$(error You have to run ./configure before building docs)
|
|
endif
|