diff --git a/configure.ac b/configure.ac index db1de0fce6..975476e726 100644 --- a/configure.ac +++ b/configure.ac @@ -700,16 +700,16 @@ NUT_REPORT_FEATURE([build and install documentation], [${nut_with_doc}], [], DOC_INSTALL_DISTED_MANS=no case "${nut_with_doc}" in - yes|all) + yes|all|all=yes) nut_doc_build_list="man html-single html-chunked pdf" ;; - auto) + auto|all=auto) nut_doc_build_list="man=auto html-single=auto html-chunked=auto pdf=auto" ;; - skip) + skip|all=skip) nut_doc_build_list="man=skip html-single=skip html-chunked=skip pdf=skip" ;; - no) + no|all=no) nut_doc_build_list="" ;; dnl If user passed --with-doc='' they they want nothing, right? @@ -897,6 +897,15 @@ esac NUT_REPORT_FEATURE([build specific documentation format(s)], [${nut_with_doc}], [${DOC_BUILD_LIST}], [WITH_DOCS], [Define to enable overall documentation generation]) +# To cater for less portable make's, precalculate the target list +# for "make check" in "docs/" here... +DOC_CHECK_LIST="" +if test "${nut_with_doc}" = yes ; then + for V in $DOC_BUILD_LIST ; do + DOC_CHECK_LIST="$DOC_CHECK_LIST check-$V" + done +fi + WITH_MANS=no SKIP_MANS=no if echo "${DOC_BUILD_LIST}" | grep -w "man" >/dev/null || test "${DOC_INSTALL_DISTED_MANS}" = "yes" ; then @@ -1711,6 +1720,7 @@ AC_SUBST(LIBMODBUS_LIBS) AC_SUBST(LIBIPMI_CFLAGS) AC_SUBST(LIBIPMI_LIBS) AC_SUBST(DOC_BUILD_LIST) +AC_SUBST(DOC_CHECK_LIST) AC_SUBST(LIBWRAP_CFLAGS) AC_SUBST(LIBWRAP_LIBS) AC_SUBST(LIBLTDL_CFLAGS) diff --git a/docs/Makefile.am b/docs/Makefile.am index ede141b5d9..06fdfa8418 100644 --- a/docs/Makefile.am +++ b/docs/Makefile.am @@ -74,6 +74,8 @@ SUFFIXES = .txt .html .pdf all: doc +check-local: @DOC_CHECK_LIST@ + doc: @DOC_BUILD_LIST@ pdf: $(ASCIIDOC_PDF) @@ -81,8 +83,44 @@ pdf: $(ASCIIDOC_PDF) html-single: $(ASCIIDOC_HTML_SINGLE) html-chunked: $(ASCIIDOC_HTML_CHUNKED) +# the "for" loops might better use $^ but it might be not portable +check-pdf: $(ASCIIDOC_PDF) + @FAILED=""; LANG=C; LC_ALL=C; export LANG; export LC_ALL; \ + for F in $(ASCIIDOC_PDF) ; do \ + test -s "$$F" && { file "$$F" | egrep 'PDF document' > /dev/null ; } || FAILED="$$FAILED $$F" ; \ + done; if test -n "$$FAILED" ; then \ + echo "FAILED PDF sanity check for:$$FAILED" >&2 ; file $$FAILED >&2 ; exit 1; \ + fi; echo "PASSED PDF sanity check"; exit 0 + +check-html-single: $(ASCIIDOC_HTML_SINGLE) + @FAILED=""; LANG=C; LC_ALL=C; export LANG; export LC_ALL; \ + for F in $(ASCIIDOC_HTML_SINGLE) ; do \ + test -s "$$F" && { file "$$F" | egrep '(XML|HTML.*document)' > /dev/null ; } || FAILED="$$FAILED $$F" ; \ + done; if test -n "$$FAILED" ; then \ + echo "FAILED HTML-single sanity check for:$$FAILED" >&2 ; file $$FAILED >&2 ; exit 1; \ + fi; echo "PASSED HTML-single sanity check"; exit 0 + +check-html-chunked: $(ASCIIDOC_HTML_CHUNKED) + @FAILED=""; LANG=C; LC_ALL=C; export LANG; export LC_ALL; \ + for D in $(ASCIIDOC_HTML_CHUNKED); do \ + for F in "$$D"/*.html ; do \ + test -s "$$F" && { file "$$F" | egrep '(XML|HTML.*document)' > /dev/null ; } || FAILED="$$FAILED $$F" ; \ + done; \ + for F in "$$D"/*.css ; do \ + test -s "$$F" && { egrep 'CSS stylesheet' "$$F" > /dev/null ; } || FAILED="$$FAILED $$F" ; \ + done; \ + done; if test -n "$$FAILED" ; then \ + echo "FAILED HTML-chunked sanity check for:$$FAILED" >&2 ; file $$FAILED >&2 ; exit 1; \ + fi; echo "PASSED HTML-chunked sanity check"; exit 0 + +# Note: usually the results from man-page check will be reported twice: +# once as a SUBDIRS child makefile, and once via DOC_CHECK_LIST expansion +check-man: + cd $(top_builddir)/docs/man/ && $(MAKE) -f Makefile $@ + clean-local: - rm -rf *.pdf *.html *.chunked docbook-xsl.css *.bak + rm -f *.pdf *.html docbook-xsl.css + rm -rf *.chunked *.bak ### TODO: automatic dependency generation # Add other directory deps (not for local EXTRA_DIST) and generated contents diff --git a/docs/man/Makefile.am b/docs/man/Makefile.am index 86434fb33d..235e333251 100644 --- a/docs/man/Makefile.am +++ b/docs/man/Makefile.am @@ -686,7 +686,7 @@ if ! SKIP_MANS # runs ./configure --with-doc=skip (or --with-doc=man=skip specifically) EXTRA_DIST += dist dist: - echo "ERROR: Manpage building was disabled by configure script, and these pages are required for our proper 'make dist'" >&2 ; false + @echo "ERROR: Manpage building was disabled by configure script, and these pages are required for our proper 'make dist'" >&2 ; false endif endif @@ -719,6 +719,62 @@ all: html-man: $(HTML_MANS) index.html +if WITH_MANS +if ! SKIP_MANS +check-local: check-man +else +check-local: check-man-txt check-man-pages + @echo "Man-page generation was SKIPPED per user request, so pregenerated pages were sanity-checked (if any)" >&2 +endif +else +check-local: check-man-txt check-man-pages + @echo "Man-page generation was not done, so pregenerated pages were sanity-checked (if any)" >&2 +endif + +check-man: check-man-txt check-man-pages check-html-man + +# the "for" loops might better use $^ but it might be not portable +check-man-html: check-html-man + +check-html-man: $(HTML_MANS) + @FAILED=""; CHECKED=0; LANG=C; LC_ALL=C; export LANG; export LC_ALL; \ + for F in $(HTML_MANS) ; do \ + CHECKED="`expr $$CHECKED + 1`"; \ + test -s "$$F" && { file "$$F" | egrep '(XML|HTML.*document)' > /dev/null ; } || FAILED="$$FAILED $$F" ; \ + done; if test -n "$$FAILED" ; then \ + echo "FAILED HTML-man sanity check for:$$FAILED" >&2 ; file $$FAILED >&2 ; exit 1; \ + fi; echo "PASSED HTML-man sanity check (checked $$CHECKED files)"; exit 0 + +# Note: many man-pages here have code samples and are mis-identified as C code +check-man-page: check-man-pages + +# Man-pages may be pre-generated (srcdir), or re-built (builddir) +check-man-pages: $(MAN_MANS) + @FAILED=""; CHECKED=0; LANG=C; LC_ALL=C; export LANG; export LC_ALL; \ + for F in $(MAN_MANS) ; do \ + CHECKED="`expr $$CHECKED + 1`"; \ + ( test -s "$(abs_srcdir)/$$F" && { file "$(abs_srcdir)/$$F" | egrep '(troff.* input|C source|ASCII text)' > /dev/null ; } ) || \ + ( test -s "$(abs_builddir)/$$F" && { file "$(abs_builddir)/$$F" | egrep '(troff.* input|C source|ASCII text)' > /dev/null ; } ) || \ + FAILED="$$FAILED $$F" ; \ + done; if test -n "$$FAILED" ; then \ + echo "FAILED man-page sanity check for:$$FAILED" >&2 ; \ + ( echo "SRCDIR:"; cd "$(abs_srcdir)/" && file $$FAILED ; \ + echo "BUILDDIR:"; cd "$(abs_builddir)/" && file $$FAILED ; \ + ) >&2 ; exit 1; \ + fi; echo "PASSED man-page sanity check (checked $$CHECKED files)"; exit 0 + +check-man-source: check-man-txt + +check-man-txt: $(SRC_ALL_PAGES) + @FAILED=""; CHECKED=0; LANG=C; LC_ALL=C; export LANG; export LC_ALL; \ + cd $(abs_srcdir) || exit; \ + for F in $(SRC_ALL_PAGES) ; do \ + CHECKED="`expr $$CHECKED + 1`"; \ + test -s "$$F" && { file "$$F" | egrep '(ASCII|UTF-8|Unicode|ISO-8859|English).* text' > /dev/null ; } || FAILED="$$FAILED $$F" ; \ + done; if test -n "$$FAILED" ; then \ + echo "FAILED man-source sanity check for:$$FAILED" >&2 ; file $$FAILED >&2 ; exit 1; \ + fi; echo "PASSED man-source sanity check (checked $$CHECKED files)"; exit 0 + CLEANFILES = *.xml *.html SUFFIXES = .txt .html .1 .3 .5 .8