[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-devel] [PATCH 1 of 2 v2] tools: check for documentation generation tools at configure time



It is sometimes hard to discover all the optional tools that should be
on a system to build all available Xen documentation. By checking for
documentation generation tools at ./configure time and displaying a
warning, Xen packagers will more easily learn about new optional build
dependencies, like markdown, when they are introduced.

Changes since v1:
 * require that ./configure be run before building docs
 * remove Docs.mk and make Tools.mk the canonical locaiton where
   docs tools are defined (via ./configure)
 * fold in checking for markdown_py

Signed-off-by: Matt Wilson <msw@xxxxxxxxxx>

diff -r d7e4efa17fb0 -r 512b4e0c49f3 README
--- a/README    Tue Aug 28 15:35:08 2012 -0700
+++ b/README    Thu Aug 30 10:51:00 2012 -0700
@@ -28,8 +28,9 @@
 your system. For full documentation, see the Xen User Manual. If this
 is a pre-built release then you can find the manual at:
  dist/install/usr/share/doc/xen/pdf/user.pdf
-If you have a source release, then 'make -C docs' will build the
-manual at docs/pdf/user.pdf.
+If you have a source release and the required documentation generation
+tools, then './configure; make -C docs' will build the manual at
+docs/pdf/user.pdf.
 
 Quick-Start Guide
 =================
@@ -59,7 +60,6 @@
     * GNU gettext
     * 16-bit x86 assembler, loader and compiler (dev86 rpm or bin86 & bcc debs)
     * ACPI ASL compiler (iasl)
-    * markdown
 
 In addition to the above there are a number of optional build
 prerequisites. Omitting these will cause the related features to be
@@ -67,6 +67,7 @@
     * Development install of Ocaml (e.g. ocaml-nox and
       ocaml-findlib). Required to build ocaml components which
       includes the alternative ocaml xenstored.
+    * markdown
 
 Second, you need to acquire a suitable kernel for use in domain 0. If
 possible you should use a kernel provided by your OS distributor. If
diff -r d7e4efa17fb0 -r 512b4e0c49f3 config/Tools.mk.in
--- a/config/Tools.mk.in        Tue Aug 28 15:35:08 2012 -0700
+++ b/config/Tools.mk.in        Thu Aug 30 10:51:00 2012 -0700
@@ -22,6 +22,18 @@
 LD86                := @LD86@
 BCC                 := @BCC@
 IASL                := @IASL@
+PS2PDF              := @PS2PDF@
+DVIPS               := @DVIPS@
+LATEX               := @LATEX@
+FIG2DEV             := @FIG2DEV@
+LATEX2HTML          := @LATEX2HTML@
+DOXYGEN             := @DOXYGEN@
+POD2MAN             := @POD2MAN@
+POD2HTML            := @POD2HTML@
+POD2TEXT            := @POD2TEXT@
+DOT                 := @DOT@
+NEATO               := @NEATO@
+MARKDOWN            := @MARKDOWN@
 
 # Extra folder for libs/includes
 PREPEND_INCLUDES    := @PREPEND_INCLUDES@
diff -r d7e4efa17fb0 -r 512b4e0c49f3 docs/Docs.mk
--- a/docs/Docs.mk      Tue Aug 28 15:35:08 2012 -0700
+++ /dev/null   Thu Jan 01 00:00:00 1970 +0000
@@ -1,12 +0,0 @@
-PS2PDF         := ps2pdf
-DVIPS          := dvips
-LATEX          := latex
-FIG2DEV                := fig2dev
-LATEX2HTML     := latex2html
-DOXYGEN                := doxygen
-POD2MAN                := pod2man
-POD2HTML       := pod2html
-POD2TEXT       := pod2text
-DOT            := dot
-NEATO          := neato
-MARKDOWN       := markdown
diff -r d7e4efa17fb0 -r 512b4e0c49f3 docs/Makefile
--- a/docs/Makefile     Tue Aug 28 15:35:08 2012 -0700
+++ b/docs/Makefile     Thu Aug 30 10:51:00 2012 -0700
@@ -2,7 +2,7 @@
 
 XEN_ROOT=$(CURDIR)/..
 include $(XEN_ROOT)/Config.mk
-include $(XEN_ROOT)/docs/Docs.mk
+-include $(XEN_ROOT)/config/Tools.mk
 
 VERSION                = xen-unstable
 
@@ -26,10 +26,12 @@
 
 .PHONY: build
 build: html txt man-pages
-       @if which $(DOT) 1>/dev/null 2>/dev/null ; then              \
-       $(MAKE) -C xen-api build ; else                              \
-        echo "Graphviz (dot) not installed; skipping xen-api." ; fi
+ifdef DOT
+       $(MAKE) -C xen-api build
        rm -f *.aux *.dvi *.bbl *.blg *.glo *.idx *.ilg *.log *.ind *.toc
+else
+       @echo "Graphviz (dot) not installed; skipping xen-api."
+endif
 
 .PHONY: dev-docs
 dev-docs: python-dev-docs
@@ -42,18 +44,21 @@
 
 .PHONY: python-dev-docs
 python-dev-docs:
-       @mkdir -v -p api/tools/python
-       @set -e ; if which $(DOXYGEN) 1>/dev/null 2>/dev/null; then \
-        echo "Running doxygen to generate Python tools APIs ... "; \
-       $(DOXYGEN) Doxyfile;                                       \
-       $(MAKE) -C api/tools/python/latex ; else                   \
-        echo "Doxygen not installed; skipping python-dev-docs."; fi
+ifdef DOXYGEN
+       @echo "Running doxygen to generate Python tools APIs ... "
+       mkdir -v -p api/tools/python
+       $(DOXYGEN) Doxyfile && $(MAKE) -C api/tools/python/latex
+else
+       @echo "Doxygen not installed; skipping python-dev-docs."
+endif
 
 .PHONY: man-pages
 man-pages:
-       @if which $(POD2MAN) 1>/dev/null 2>/dev/null; then \
-       $(MAKE) $(DOC_MAN1) $(DOC_MAN5); else              \
-       echo "pod2man not installed; skipping man-pages."; fi
+ifdef POD2MAN
+       $(MAKE) $(DOC_MAN1) $(DOC_MAN5)
+else
+       @echo "pod2man not installed; skipping man-pages."
+endif
 
 man1/%.1: man/%.pod.1 Makefile
        $(INSTALL_DIR) $(@D)
@@ -94,30 +99,40 @@
        perl -w -- ./gen-html-index -i INDEX html $(DOC_HTML)
 
 html/%.html: %.markdown
-       @$(INSTALL_DIR) $(@D)
-       @set -e ; if which $(MARKDOWN) 1>/dev/null 2>/dev/null; then \
-       echo "Running markdown to generate $*.html ... "; \
+       $(INSTALL_DIR) $(@D)
+ifdef MARKDOWN
+       @echo "Running markdown to generate $*.html ... "
        $(MARKDOWN) $< > $@.tmp ; \
-       $(call move-if-changed,$@.tmp,$@) ; else \
-       echo "markdown not installed; skipping $*.html."; fi
+       $(call move-if-changed,$@.tmp,$@)
+else
+       @echo "markdown not installed; skipping $*.html."
+endif
 
 html/%.txt: %.txt
-       @$(INSTALL_DIR) $(@D)
+       $(INSTALL_DIR) $(@D)
        cp $< $@
 
 html/man/%.1.html: man/%.pod.1 Makefile
        $(INSTALL_DIR) $(@D)
+ifdef POD2HTML
        $(POD2HTML) --infile=$< --outfile=$@.tmp
        $(call move-if-changed,$@.tmp,$@)
+else
+       @echo "pod2html not installed; skipping $<."
+endif
 
 html/man/%.5.html: man/%.pod.5 Makefile
        $(INSTALL_DIR) $(@D)
+ifdef POD2HTML
        $(POD2HTML) --infile=$< --outfile=$@.tmp
        $(call move-if-changed,$@.tmp,$@)
+else
+       @echo "pod2html not installed; skipping $<."
+endif
 
 html/hypercall/index.html: ./xen-headers
        rm -rf $(@D)
-       @$(INSTALL_DIR) $(@D)
+       $(INSTALL_DIR) $(@D)
        ./xen-headers -O $(@D) \
                -T 'arch-x86_64 - Xen public headers' \
                -X arch-ia64 -X arch-x86_32 -X xen-x86_32 -X arch-arm \
@@ -137,11 +152,24 @@
 
 txt/man/%.1.txt: man/%.pod.1 Makefile
        $(INSTALL_DIR) $(@D)
+ifdef POD2TEXT
        $(POD2TEXT) $< $@.tmp
        $(call move-if-changed,$@.tmp,$@)
+else
+       @echo "pod2text not installed; skipping $<."
+endif
 
 txt/man/%.5.txt: man/%.pod.5 Makefile
        $(INSTALL_DIR) $(@D)
+ifdef POD2TEXT
        $(POD2TEXT) $< $@.tmp
        $(call move-if-changed,$@.tmp,$@)
+else
+       @echo "pod2text not installed; skipping $<."
+endif
 
+ifeq (,$(findstring clean,$(MAKECMDGOALS)))
+$(XEN_ROOT)/config/Tools.mk:
+       $(error You have to run ./configure before building docs)
+endif
+
diff -r d7e4efa17fb0 -r 512b4e0c49f3 docs/xen-api/Makefile
--- a/docs/xen-api/Makefile     Tue Aug 28 15:35:08 2012 -0700
+++ b/docs/xen-api/Makefile     Thu Aug 30 10:51:00 2012 -0700
@@ -2,7 +2,7 @@
 
 XEN_ROOT=$(CURDIR)/../..
 include $(XEN_ROOT)/Config.mk
-include $(XEN_ROOT)/docs/Docs.mk
+-include $(XEN_ROOT)/config/Tools.mk
 
 
 TEX := $(wildcard *.tex)
@@ -42,3 +42,8 @@
 .PHONY: clean
 clean:
        rm -f *.pdf *.ps *.dvi *.aux *.log *.out $(EPSDOT)
+
+ifeq (,$(findstring clean,$(MAKECMDGOALS)))
+$(XEN_ROOT)/config/Tools.mk:
+       $(error You have to run ./configure before building docs)
+endif
diff -r d7e4efa17fb0 -r 512b4e0c49f3 tools/configure.ac
--- a/tools/configure.ac        Tue Aug 28 15:35:08 2012 -0700
+++ b/tools/configure.ac        Thu Aug 30 10:51:00 2012 -0700
@@ -34,6 +34,7 @@
 m4_include([m4/curses.m4])
 m4_include([m4/pthread.m4])
 m4_include([m4/ptyfuncs.m4])
+m4_include([m4/docs_tool.m4])
 
 # Enable/disable options
 AX_ARG_DEFAULT_DISABLE([githttp], [Download GIT repositories via HTTP])
@@ -80,6 +81,18 @@
 AC_PATH_PROG([BISON], [bison])
 AC_PATH_PROG([FLEX], [flex])
 AX_PATH_PROG_OR_FAIL([PERL], [perl])
+AX_DOCS_TOOL_PROG([PS2PDF], [ps2pdf])
+AX_DOCS_TOOL_PROG([DVIPS], [dvips])
+AX_DOCS_TOOL_PROG([LATEX], [latex])
+AX_DOCS_TOOL_PROG([FIG2DEV], [fig2dev])
+AX_DOCS_TOOL_PROG([LATEX2HTML], [latex2html])
+AX_DOCS_TOOL_PROG([DOXYGEN], [doxygen])
+AX_DOCS_TOOL_PROG([POD2MAN], [pod2man])
+AX_DOCS_TOOL_PROG([POD2HTML], [pod2html])
+AX_DOCS_TOOL_PROG([POD2TEXT], [pod2text])
+AX_DOCS_TOOL_PROG([DOT], [dot])
+AX_DOCS_TOOL_PROG([NEATO], [neato])
+AX_DOCS_TOOL_PROGS([MARKDOWN], [markdown markdown_py])
 AS_IF([test "x$xapi" = "xy"], [
     AX_PATH_PROG_OR_FAIL([CURL], [curl-config])
     AX_PATH_PROG_OR_FAIL([XML], [xml2-config])
diff -r d7e4efa17fb0 -r 512b4e0c49f3 tools/m4/docs_tool.m4
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/tools/m4/docs_tool.m4     Thu Aug 30 10:51:00 2012 -0700
@@ -0,0 +1,17 @@
+AC_DEFUN([AX_DOCS_TOOL_PROG], [
+dnl
+    AC_ARG_VAR([$1], [Path to $2 tool])
+    AC_PATH_PROG([$1], [$2])
+    AS_IF([! test -x "$ac_cv_path_$1"], [
+        AC_MSG_WARN([$2 is not available so some documentation won't be built])
+    ])
+])
+
+AC_DEFUN([AX_DOCS_TOOL_PROGS], [
+dnl
+    AC_ARG_VAR([$1], [Path to $2 tool])
+    AC_PATH_PROGS([$1], [$2])
+    AS_IF([! test -x "$ac_cv_path_$1"], [
+        AC_MSG_WARN([$2 is not available so some documentation won't be built])
+    ])
+])

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.