1MAINTAINERCLEANFILES = Makefile.in .dirstamp 2EXTRA_DIST = 3 4# Is "egrep == grep -E" always valid? (maybe all a job for configure.ac) 5EGREP = egrep 6#EGREP = grep -E 7 8IMAGE_FILES = images/asciidoc.png \ 9 images/hostedby.png \ 10 images/nut_layering.png \ 11 images/nut-logo.png \ 12 images/note.png \ 13 images/warning.png \ 14 images/blue-arrow.png \ 15 images/simple.png \ 16 images/advanced.png \ 17 images/bigbox.png \ 18 images/bizarre.png \ 19 images/old-cgi.png 20 21# Only track here the local deps 22SHARED_DEPS = nut-names.txt daisychain.txt asciidoc.conf asciidoc.txt 23 24USER_MANUAL_DEPS = acknowledgements.txt cables.txt config-notes.txt \ 25 config-prereqs.txt ci-farm-lxc-setup.txt \ 26 configure.txt download.txt documentation.txt features.txt history.txt \ 27 outlets.txt scheduling.txt security.txt support.txt user-manual.txt 28 29DEVELOPER_GUIDE_DEPS = contact-closure.txt design.txt developers.txt \ 30 developer-guide.txt hid-subdrivers.txt macros.txt new-clients.txt \ 31 new-drivers.txt net-protocol.txt nutdrv_qx-subdrivers.txt \ 32 snmp-subdrivers.txt sock-protocol.txt 33 34CABLES_DEPS = cables/apc-rs500-serial.txt \ 35 cables/apc.txt cables/ge-imv-victron.txt cables/imv.txt \ 36 cables/mgeups.txt cables/powerware.txt cables/repotec.txt \ 37 cables/sms.txt 38 39CABLES_IMAGES = images/cables/73-0724.png images/cables/940-0024C.jpg \ 40 images/cables/belkin-f6cx-rkm-xu-cable.jpg images/cables/Lansafecable.jpg \ 41 images/cables/mac-940-0024C.png images/cables/mge-66049.png \ 42 images/cables/mge-db9-rj12.jpg images/cables/mge-db9-rj45.jpg \ 43 images/cables/mge-usb-rj45.jpg \ 44 images/cables/SOLA-330.png 45 46ALL_TXT_SRC = nut-names.txt daisychain.txt \ 47 $(USER_MANUAL_DEPS) $(DEVELOPER_GUIDE_DEPS) \ 48 $(CABLES_DEPS) FAQ.txt nut-qa.txt packager-guide.txt snmp.txt \ 49 solaris-usb.txt 50 51NUT_SPELL_DICT = nut.dict 52EXTRA_DIST += $(ALL_TXT_SRC) $(SHARED_DEPS) $(IMAGE_FILES) \ 53 $(CABLES_IMAGES) $(NUT_SPELL_DICT) \ 54 common.xsl xhtml.xsl chunked.xsl asciidoc.txt 55 56ASCIIDOC_HTML_SINGLE = user-manual.html \ 57 developer-guide.html \ 58 packager-guide.html \ 59 solaris-usb.html \ 60 cables.html \ 61 FAQ.html 62 63ASCIIDOC_HTML_CHUNKED = user-manual.chunked \ 64 developer-guide.chunked \ 65 packager-guide.chunked \ 66 solaris-usb.chunked \ 67 cables.chunked \ 68 FAQ.chunked 69 70ASCIIDOC_PDF = user-manual.pdf \ 71 developer-guide.pdf \ 72 packager-guide.pdf \ 73 solaris-usb.pdf \ 74 cables.pdf \ 75 FAQ.pdf 76 77SUBDIRS = man cables 78SUFFIXES = .txt .html .pdf -spellchecked 79 80all: doc 81 82# This list is defined by configure script choices and options: 83check-local: @DOC_CHECK_LIST@ 84 85# This list is defined by configure script choices and options: 86doc: @DOC_BUILD_LIST@ 87 88# This target can be called by developers to go around the configure 89# script choices at their risk (e.g. missing tools are possible): 90docs: pdf html-single html-chunked man 91 92all-docs: docs 93 94check-docs: check-pdf check-html-single check-html-chunked check-man 95 96pdf: $(ASCIIDOC_PDF) 97# also build the HTML manpages with these targets 98html-single: $(ASCIIDOC_HTML_SINGLE) 99html-chunked: $(ASCIIDOC_HTML_CHUNKED) 100 101# the "for" loops might better use $^ but it might be not portable 102check-pdf: $(ASCIIDOC_PDF) 103 @FAILED=""; LANG=C; LC_ALL=C; export LANG; export LC_ALL; \ 104 for F in $(ASCIIDOC_PDF) ; do \ 105 test -s "$$F" && { file "$$F" | $(EGREP) -i 'PDF document' > /dev/null ; } || FAILED="$$FAILED $$F" ; \ 106 done; if test -n "$$FAILED" ; then \ 107 echo "FAILED PDF sanity check for:$$FAILED" >&2 ; file $$FAILED >&2 ; exit 1; \ 108 fi; echo "PASSED PDF sanity check"; exit 0 109 110check-html-single: $(ASCIIDOC_HTML_SINGLE) 111 @FAILED=""; LANG=C; LC_ALL=C; export LANG; export LC_ALL; \ 112 for F in $(ASCIIDOC_HTML_SINGLE) ; do \ 113 test -s "$$F" && { file "$$F" | $(EGREP) -i '(XML|HTML.*document)' > /dev/null ; } || FAILED="$$FAILED $$F" ; \ 114 done; if test -n "$$FAILED" ; then \ 115 echo "FAILED HTML-single sanity check for:$$FAILED" >&2 ; file $$FAILED >&2 ; exit 1; \ 116 fi; echo "PASSED HTML-single sanity check"; exit 0 117 118check-html-chunked: $(ASCIIDOC_HTML_CHUNKED) 119 @FAILED=""; LANG=C; LC_ALL=C; export LANG; export LC_ALL; \ 120 for D in $(ASCIIDOC_HTML_CHUNKED); do \ 121 for F in "$$D"/*.html ; do \ 122 test -s "$$F" && { file "$$F" | $(EGREP) -i '(XML|HTML.*document)' > /dev/null ; } || FAILED="$$FAILED $$F" ; \ 123 done; \ 124 for F in "$$D"/*.css ; do \ 125 test -s "$$F" && { $(EGREP) -i 'CSS stylesheet' "$$F" > /dev/null ; } || FAILED="$$FAILED $$F" ; \ 126 done; \ 127 done; if test -n "$$FAILED" ; then \ 128 echo "FAILED HTML-chunked sanity check for:$$FAILED" >&2 ; file $$FAILED >&2 ; exit 1; \ 129 fi; echo "PASSED HTML-chunked sanity check"; exit 0 130 131# Note: usually the results from man-page check will be reported twice: 132# once as a SUBDIRS child makefile, and once via DOC_CHECK_LIST expansion 133check-man: 134 cd $(top_builddir)/docs/man/ && $(MAKE) -f Makefile $@ 135 136man: 137 cd $(top_builddir)/docs/man/ && $(MAKE) -f Makefile all 138 139CLEANFILES = *.xml *.html *.pdf *-spellchecked docbook-xsl.css 140 141# Dirs to clean 142clean-local: 143 rm -rf *.chunked *.bak tmp 144 145### TODO: automatic dependency generation 146# Add other directory deps (not for local EXTRA_DIST) and generated contents 147FULL_USER_MANUAL_DEPS = $(USER_MANUAL_DEPS) $(SHARED_DEPS) ../README \ 148 ../INSTALL.nut ../UPGRADING ../TODO ../scripts/ufw/README 149FULL_DEVELOPER_GUIDE_DEPS = $(DEVELOPER_GUIDE_DEPS) $(SHARED_DEPS) \ 150 ../scripts/augeas/README ../TODO ../lib/README \ 151 ../tools/nut-scanner/README 152 153user-manual.html user-manual.chunked user-manual.pdf: $(FULL_USER_MANUAL_DEPS) 154developer-guide.html developer-guide.chunked developer-guide.pdf: $(FULL_DEVELOPER_GUIDE_DEPS) 155packager-guide.html packager-guide.chunked packager-guide.pdf: packager-guide.txt asciidoc.conf 156solaris-usb.html solaris-usb.chunked solaris-usb.pdf: solaris-usb.txt asciidoc.conf 157 158# Note: without the "-v", asciidoc (circa 8.6.2) sometimes hangs when 159# generating the chunked HTML. In this case, export the environment 160# variable ASCIIDOC_VERBOSE to "-v", ie: 161# $ ASCIIDOC_VERBOSE=-v make 162A2X_COMMON_OPTS = $(ASCIIDOC_VERBOSE) --attribute icons \ 163 --xsltproc-opts="--nonet" \ 164 --xsltproc-opts="--stringparam nut.localdate \"`TZ=UTC date +%Y-%m-%d`\"" \ 165 --xsltproc-opts="--stringparam nut.localtime \"`TZ=UTC date +%H:%M:%S`\"" \ 166 --xsltproc-opts="--stringparam nut.nutversion \"@PACKAGE_VERSION@\"" \ 167 --attribute iconsdir=$(srcdir)/images \ 168 --attribute=badges \ 169 --attribute=external_title \ 170 --attribute tree_version=@TREE_VERSION@ \ 171 -a toc -a numbered --destination-dir=$${A2X_OUTDIR} 172# NOTE: a2x newer than 8.6.8 says "--destination-dir" is only valid for HTML. 173# As of version 8.6.9 it lies, and the argument is required for our distcheck 174# (and does affect PDF builds, as found during work on collision-avoidance - 175# true with at least asciidoc/a2x versions 9.0.0rc2). 176# For more details see issues https://github.com/asciidoc/asciidoc/issues/44 177# and https://github.com/networkupstools/nut/pull/281 (in short, attempts 178# to "fix" this warning broke NUT build). If this is to be retried later, see 179# https://github.com/networkupstools/nut/pull/281/commits/fe17861c4ea12679b3ebfefa8a6d692d79d99f2d 180# and do not forget to fix up docs/man/Makefile.am too ;) 181 182# NOTE: a2x tends to copy some files into its working area, preserving original 183# permissions. If those files are read-only in origin (e.g. packaged stylesheet 184# or our resources coming from EXTRA_DIST) the next a2x can not overwrite it. 185# Also note that such hoarding of files has potential to break parallel builds 186# (or cause them to produce undefined results if some bad timing happens). 187# As a brutal workaround for the former problem, we chmod. For second one we 188# might try magic with .SEQUENTIAL recipe hints, but that is gmake-dependent. 189 190# Note we only remove the original target (if present), if it is a directory - 191# e.g. created by "html-chunked" targets. 192DOCBUILD_BEGIN = { \ 193 if test -n "$${A2X_OUTDIR}" && test "$${A2X_OUTDIR}" != '.' ; then \ 194 rm -rf "./$${A2X_OUTDIR}" || true ; \ 195 test -d "$@" && rm -rf "$@" || true ; \ 196 mkdir -p "./$${A2X_OUTDIR}" || exit ; \ 197 else A2X_OUTDIR='.' ; fi; \ 198 if test -s "${builddir}/docbook-xsl.css" \ 199 && test -r "${builddir}/docbook-xsl.css" \ 200 && ! test -w "${builddir}/docbook-xsl.css" \ 201 ; then chmod u+w "${builddir}/docbook-xsl.css" ; fi ; \ 202 chmod -R u+w "./$${A2X_OUTDIR}" || true; \ 203} 204 205# When moving "*" hope a2x did not make any "hidden" files 206# like ".*" that would be required for resulting documents. 207# Leave the "images/" dir there, though. 208# Otherwise, we would have to `find` them all. 209DOCBUILD_END = { \ 210 if test -n "$${A2X_OUTDIR}" && test "$${A2X_OUTDIR}" != '.' ; then \ 211 chmod -R u+w "./$${A2X_OUTDIR}" || true; \ 212 test -d "$@" && rm -rf "$@" || true ; \ 213 mv -f "./$${A2X_OUTDIR}/$(@F)" ./ || exit ; \ 214 mv -f "./$${A2X_OUTDIR}/"*.* ./ 2>/dev/null || true ; \ 215 rm -rf "./$${A2X_OUTDIR}" ; \ 216 fi ; \ 217} 218 219# PORTABILITY NOTE: POSIX Make forbids the suffix rule definitions with 220# prerequisites like done below, and GNU Make of some versions complains; 221# https://www.gnu.org/software/make/manual/html_node/Error-Messages.html 222# says the prerequisites were ignored while a suffix rule was created; 223# eventually the POSIX stance would be taken to define a rule for a weird 224# verbatim target file name with prerequisites: 225# ../docs/Makefile:936: warning: ignoring prerequisites on suffix rule definition 226# Changes from ".txt.pdf: docinfo.xml" to "*.pdf: docinfo.xml" = ".txt.pdf:" 227# as done below may be pointless in the end (with regard to a portable way 228# to trigger builds by a changed dependency), but at least predictable and 229# not toxic. 230*.html: common.xsl xhtml.xsl 231.txt.html: 232 @A2X_OUTDIR="tmp/html-single.$(@F).$$$$" ; \ 233 echo " DOC-HTML Generating $@"; \ 234 $(DOCBUILD_BEGIN) ; RES=0; \ 235 $(A2X) $(A2X_COMMON_OPTS) --attribute=xhtml11_format --format=xhtml --xsl-file=$(srcdir)/xhtml.xsl $< || RES=$$? ; \ 236 $(DOCBUILD_END) ; exit $$RES 237 238*.chunked: common.xsl chunked.xsl 239.txt.chunked: 240 @A2X_OUTDIR="tmp/html-chunked.$(@F).$$$$" ; \ 241 echo " DOC-HTML-CHUNKED Generating $@"; \ 242 $(DOCBUILD_BEGIN) ; RES=0; \ 243 $(A2X) $(A2X_COMMON_OPTS) --attribute=chunked_format --format=chunked --xsl-file=$(srcdir)/chunked.xsl $< || RES=$$? ; \ 244 $(DOCBUILD_END) ; exit $$RES 245 246# Note: non-HTML a2x modes may ignore the destination directory 247*.pdf: docinfo.xml 248.txt.pdf: 249 @A2X_OUTDIR="tmp/pdf.$(@F).$$$$" ; \ 250 echo " DOC-PDF Generating $@"; \ 251 $(DOCBUILD_BEGIN) ; RES=0; \ 252 $(A2X) $(A2X_COMMON_OPTS) --attribute=pdf_format --format=pdf -a docinfo1 $< || RES=$$? ; \ 253 $(DOCBUILD_END) ; exit $$RES 254 255if HAVE_ASPELL 256# Non-interactively spell check all documentation source files. 257# This is useful for Buildbot and automated QA processing 258# FIXME: how to present output (std{out,err}, single file or per target)? 259# NOTE: ../ChangeLog is nowadays generated from commit messages, so 260# its spelling (or errors in that) are not fixable and thus irrelevant. 261# Similarly for the ../INSTALL file that is prepared by autoconf and not 262# tracked as a source file by NUT Git repository. 263SPELLCHECK_SRC = $(ALL_TXT_SRC) ../README ../INSTALL.nut ../UPGRADING ../NEWS \ 264 ../TODO ../scripts/ufw/README ../scripts/augeas/README ../lib/README \ 265 ../tools/nut-scanner/README \ 266 ../AUTHORS ../COPYING ../LICENSE-GPL2 ../LICENSE-GPL3 267 268# Directory SPELLCHECK_SRC files are relative to. Overriden by other Makefiles. 269SPELLCHECK_DIR = $(srcdir) 270 271# Note: de-facto our documentation is beyond ASCII (at least in names of 272# international committers). The grep tests below look if the aspell output 273# contained something other than the OK lines (tagged with asterisk) and 274# aspell's version (tagged with @) and if it did - those lines must be the 275# spellcheck complaints. Empty OUT is ok. 276# We also must indent the input, because certain piped-in characters are 277# interpreted as commands, and seems this feature can not be turned off. 278# See also http://aspell.net/man-html/Through-A-Pipe.html 279# TODO: Is "grep -a" or "grep -b" (treat input as ascii/bin) portable enough? 280# Set SPELLCHECK_ERROR_FATAL=no if there are some unavoidable issues 281# due to spellchecking, to temporarily not fail builds due to this. 282# For Travis CI in particular, see ci_build.sh in NUT codebase root. 283SPELLCHECK_ERROR_FATAL = yes 284SPELLCHECK_ENV_DEBUG = no 285ASPELL_NUT_COMMON_ARGS = -p $(abs_srcdir)/$(NUT_SPELL_DICT) 286ASPELL_NUT_COMMON_ARGS += -d en --lang=en --ignore-accents 287ASPELL_NUT_COMMON_ARGS += --encoding=utf-8 288ASPELL_ENV_LANG = en.UTF-8 289ASPELL_OUT_NOTERRORS = (^[ \t]*[\*\@]|^$$) 290 291# WARNING: The percent wildcard is a GNU extension; otherwise we need 292# a ".txt.txt-spellchecked" type of rule and files like "README" all 293# renamed to *.txt, or lots of rules for files without the extensions 294# Other Makefiles have a relatively simple life, dealing with just a 295# few texts and name/extension patterns in their directories. 296#?#.txt.txt-spellchecked: Makefile.am $(abs_srcdir)/$(NUT_SPELL_DICT) 297#%-spellchecked: % Makefile.am $(abs_srcdir)/$(NUT_SPELL_DICT) 298#*-spellchecked */*-spellchecked: $(@:-spellchecked=) $(top_srcdir)/docs/Makefile.am $(abs_srcdir)/$(NUT_SPELL_DICT) 299# NOTE: This portable rule RELIES on just one SPELLCHECK_SRC defined 300# at a time, with an outer Makefile caller ensuring the looping: 301$(SPELLCHECK_DIR)/$(SPELLCHECK_SRC_ONE)-spellchecked: $(SPELLCHECK_DIR)/$(SPELLCHECK_SRC_ONE) $(abs_top_srcdir)/docs/Makefile.am $(abs_srcdir)/$(NUT_SPELL_DICT) 302 @LANG=C; LC_ALL=C; export LANG; export LC_ALL; \ 303 rm -f "$@" || true ; \ 304 echo " ASPELL Spell checking on $(SPELLCHECK_DIR)/$(SPELLCHECK_SRC_ONE)"; \ 305 OUT="`(sed 's,^\(.*\)$$, \1,' | $(ASPELL) -a -t $(ASPELL_NUT_COMMON_ARGS) 2>&1) < "$(SPELLCHECK_DIR)/$(SPELLCHECK_SRC_ONE)"`" \ 306 && { if test -n "$$OUT" ; then OUT="`echo "$$OUT" | $(EGREP) -b -v '$(ASPELL_OUT_NOTERRORS)' `" ; fi; \ 307 test -z "$$OUT" ; } \ 308 || { RES=$$? ; \ 309 echo "FAILED : Aspell reported errors here:" >&2 \ 310 && echo "----- vvv" >&2 \ 311 && echo "$$OUT" >&2 \ 312 && echo "----- ^^^" >&2 ; \ 313 exit $$RES; } ; \ 314 touch "$@" 315 316spellcheck: 317 @if test "$(SPELLCHECK_ENV_DEBUG)" != no ; then \ 318 echo "ASPELL DEBUG : information about the setup follows:"; \ 319 LANG=$(ASPELL_ENV_LANG); LC_ALL=$(ASPELL_ENV_LANG); export LANG; export LC_ALL; \ 320 $(ASPELL) --help || true; \ 321 dpkg -l |grep -i aspell || true ; \ 322 echo "ASPELL automatic execution line is : ( sed 's,^\(.*\)$$, \1,' < docfile.txt | $(ASPELL) -a -t $(ASPELL_NUT_COMMON_ARGS) | $(EGREP) -b -v '$(ASPELL_OUT_NOTERRORS)' )" ; \ 323 echo "ASPELL proceeding to spellchecking job..."; \ 324 else true; fi 325 @FAILED="" ; LANG=C; LC_ALL=C; export LANG; export LC_ALL; \ 326 for docsrc in $(SPELLCHECK_SRC); do \ 327 if test "$(SPELLCHECK_ENV_DEBUG)" != no ; then \ 328 echo "ASPELL MAKEFILE DEBUG: Will see from `pwd` if '$(SPELLCHECK_DIR)/$${docsrc}-spellchecked' is up to date" >&2; \ 329 else true ; fi ; \ 330 $(MAKE) -s -f "$(abs_top_builddir)/docs/Makefile" SPELLCHECK_SRC_ONE="$${docsrc}" SPELLCHECK_DIR="$(SPELLCHECK_DIR)" "$(SPELLCHECK_DIR)/$${docsrc}-spellchecked" \ 331 || FAILED="$$FAILED $(SPELLCHECK_DIR)/$$docsrc"; \ 332 done ; \ 333 if test -n "$$FAILED" ; then \ 334 echo "=====================================================================" ; \ 335 echo "FAILED automatic spellcheck for the following sources (relative to `pwd`): $$FAILED" ; \ 336 echo "=====================================================================" ; \ 337 echo "Please 'cd $(abs_top_builddir) && make spellcheck-interactive'"; \ 338 echo "to either fix document sources or update the dictionary of accepted"; \ 339 echo "words and spellings listed in the '$(NUT_SPELL_DICT)' file there."; \ 340 echo "Either way, please follow up by posting a pull request or a patch"; \ 341 echo "to integrate your fixes into the common NUT codebase."; \ 342 echo "=====================================================================" ; \ 343 test x"$(SPELLCHECK_ERROR_FATAL)" = xno || exit 1; \ 344 echo "NOTE: SPELLCHECK_ERROR_FATAL == no so this make does not break the build!"; \ 345 echo "=====================================================================" ; \ 346 fi >&2 ; exit 0 347 348# Interactively spell check all documentation source files below (so a human 349# can edit the documentation errors and/or add words to custom dictionary). 350# Note that here we do not restrain reported issues, so this might catch more 351# than the automated test above. 352spellcheck-sortdict: $(abs_builddir)/$(NUT_SPELL_DICT).sorted 353 354# Note that the source file may be not overwritable (distcheck, cdrom, ...), 355# so we'd ignore that failure. But the practical use-case is a developer's 356# in-tree workspace, so we want the working copy of the dictionary fixed up 357# for easy `git diff`ing if possible. 358# Note also that "$(<F)" is not POSIX portable, so we spell out the name var :( 359$(abs_builddir)/$(NUT_SPELL_DICT).sorted: $(abs_srcdir)/$(NUT_SPELL_DICT) 360 @cp -pf $(abs_srcdir)/$(NUT_SPELL_DICT) $(abs_builddir)/$(NUT_SPELL_DICT).bak-pre-sorting 361 @LANG=$(ASPELL_ENV_LANG); LC_ALL=$(ASPELL_ENV_LANG); export LANG; export LC_ALL; ( \ 362 WORDLIST="`tail -n +2 < "$<" | sort | uniq`"; \ 363 WORDCOUNT="`echo "$$WORDLIST" | wc -l`"; \ 364 head -1 < "$<" | while read P L C E ; do echo "$$P $$L $$WORDCOUNT $$E"; break; done ; \ 365 echo "$$WORDLIST"; \ 366 ) > "$@" 367 @cp -f "$@" "$(abs_builddir)/$(NUT_SPELL_DICT)" 368 @if [ "$(abs_builddir)" != "$(abs_srcdir)" ] ; then \ 369 cp -f "$@" "$<" || true ; \ 370 cp -f "$(abs_builddir)/$(NUT_SPELL_DICT).bak-pre-sorting" "$(abs_srcdir)/" || true ; \ 371 fi 372 373DISTCLEANFILES = $(NUT_SPELL_DICT).bak-pre-sorting .$(NUT_SPELL_DICT).sorted $(NUT_SPELL_DICT).sorted 374 375spellcheck-interactive: 376 @FAILED="" ; for docsrc in $(SPELLCHECK_SRC); do \ 377 echo "Spell checking on $(SPELLCHECK_DIR)/$$docsrc"; \ 378 LANG=$(ASPELL_ENV_LANG) LC_ALL=$(ASPELL_ENV_LANG) $(ASPELL) check $(ASPELL_NUT_COMMON_ARGS) $(SPELLCHECK_DIR)/$$docsrc || \ 379 FAILED="$$FAILED $(SPELLCHECK_DIR)/$$docsrc"; \ 380 done ; \ 381 if test -n "$$FAILED" ; then \ 382 echo "FAILED interactive spellcheck for the following sources (relative to `pwd`): $$FAILED" >&2 ; \ 383 exit 1; \ 384 fi ; exit 0 385 $(MAKE) spellcheck-sortdict 386 @echo "------------------------------------------------------------------------"; \ 387 echo "Custom dictionary file $(NUT_SPELL_DICT) may have been updated now."; \ 388 echo "Use 'git add -p docs/$(NUT_SPELL_DICT) && git checkout -- docs/$(NUT_SPELL_DICT) && make spellcheck-sortdict && git add -p docs/$(NUT_SPELL_DICT)'"; \ 389 echo "to review changes (please DO NOT REMOVE LINES that aspell chose to drop,"; \ 390 echo "because other systems might not know these words in their system dictionaries)"; \ 391 echo "------------------------------------------------------------------------" 392else !HAVE_ASPELL 393# This rule woulf probably just fail; normally with no ASPELL there are no callers for it 394*/*-spellchecked *-spellchecked: Makefile.am $(abs_srcdir)/$(NUT_SPELL_DICT) 395 @echo " SKIP-ASPELL $@ : Documentation spell check not available since 'aspell' was not found." >&2 396spellcheck: 397 @echo "Documentation spell check not available since 'aspell' was not found." 398spellcheck-interactive: 399 @echo "Documentation spell check not available since 'aspell' was not found." 400endif !HAVE_ASPELL 401 402.PHONY: html html-chunked html-single pdf man 403