# Network UPS Tools: man # # Notes: # - sources (.txt) and groff formats are both distributed, # - only sources are versioned ; groff files are generated at worst # during 'make dist' (while preparing a release tarball) # - HTML files are built upon request, if AsciiDoc is available, # - groff update will only happen if AsciiDoc is available too, # - all this can probably (and hopefully) be improved, but I've not # found a way to do pattern replacement on the fly for target deps! # FIXME: investigate an autogen.sh hook # - Ref: http://www.gnu.org/software/hello/manual/automake/Man-pages.html # - WITH_MANS can be enabled if either we are building man-pages, or if # the --with-doc=man=auto detected an inability to build the man-pages # but enabled the DOC_INSTALL_DISTED_MANS toggle so we deliver disted # files from source tree # Is "egrep == grep -E" always valid? (maybe all a job for configure.ac) EGREP = egrep #EGREP = grep -E # Base configuration and client manpages, always installed SRC_CONF_PAGES = \ nut.conf.txt \ ups.conf.txt \ upsd.conf.txt \ upsd.users.txt \ upsmon.conf.txt \ upssched.conf.txt if WITH_MANS MAN_CONF_PAGES = \ nut.conf.5 \ ups.conf.5 \ upsd.conf.5 \ upsd.users.5 \ upsmon.conf.5 \ upssched.conf.5 endif man5_MANS = $(MAN_CONF_PAGES) HTML_CONF_MANS = \ nut.conf.html \ ups.conf.html \ upsd.conf.html \ upsd.users.html \ upsmon.conf.html \ upssched.conf.html # NOTE: Currently SRC_DRIVERTOOL_PAGES are a separate list to generate # a linkman-drivertool-names.txt file, but historically remain part of # MAN/HTML_CLIENT_PAGES in the bigger picture. SRC_DRIVERTOOL_PAGES = \ nut-driver-enumerator.txt \ upsdrvctl.txt \ upsdrvsvcctl.txt SRC_CLIENT_PAGES = \ $(SRC_DRIVERTOOL_PAGES) \ nutupsdrv.txt \ upsc.txt \ upscmd.txt \ upsd.txt \ upslog.txt \ upsmon.txt \ upsrw.txt \ upssched.txt if WITH_MANS MAN_CLIENT_PAGES = \ nutupsdrv.8 \ nut-driver-enumerator.8 \ upsc.8 \ upscmd.8 \ upsd.8 \ upsdrvctl.8 \ upsdrvsvcctl.8 \ upslog.8 \ upsmon.8 \ upsrw.8 \ upssched.8 endif man8_MANS = $(MAN_CLIENT_PAGES) HTML_CLIENT_MANS = \ nutupsdrv.html \ nut-driver-enumerator.html \ upsc.html \ upscmd.html \ upsd.html \ upsdrvctl.html \ upsdrvsvcctl.html \ upslog.html \ upsmon.html \ upsrw.html \ upssched.html SRC_TOOL_PAGES = nut-scanner.txt nut-recorder.txt if WITH_MANS MAN_TOOL_PAGES = nut-scanner.8 nut-recorder.8 endif man8_MANS += $(MAN_TOOL_PAGES) HTML_TOOL_MANS = nut-scanner.html nut-recorder.html # CGI (--with-cgi) related manpages SRC_CGI_PAGES = \ hosts.conf.txt \ upsset.conf.txt \ upsstats.html.txt \ upsset.cgi.txt \ upsstats.cgi.txt \ upsimage.cgi.txt if WITH_MANS MAN5_CGI_PAGES = \ hosts.conf.5 \ upsset.conf.5 \ upsstats.html.5 MAN8_CGI_PAGES = \ upsset.cgi.8 \ upsstats.cgi.8 \ upsimage.cgi.8 endif if WITH_CGI man5_MANS += $(MAN5_CGI_PAGES) man8_MANS += $(MAN8_CGI_PAGES) endif HTML_CGI_MANS = \ hosts.conf.html \ upsset.conf.html \ upsstats.html.html \ upsset.cgi.html \ upsstats.cgi.html \ upsimage.cgi.html # Development (--with-dev) related manpages SRC_DEV_PAGES = \ upsclient.txt \ upscli_add_host_cert.txt \ upscli_cleanup.txt \ upscli_connect.txt \ upscli_disconnect.txt \ upscli_fd.txt \ upscli_get.txt \ upscli_init.txt \ upscli_list_next.txt \ upscli_list_start.txt \ upscli_readline.txt \ upscli_sendline.txt \ upscli_splitaddr.txt \ upscli_splitname.txt \ upscli_ssl.txt \ upscli_strerror.txt \ upscli_upserror.txt \ libnutclient.txt \ libnutclient_commands.txt \ libnutclient_devices.txt \ libnutclient_general.txt \ libnutclient_misc.txt \ libnutclient_tcp.txt \ libnutclient_variables.txt \ nutscan.txt \ nutscan_scan_snmp.txt \ nutscan_scan_usb.txt \ nutscan_scan_xml_http_range.txt \ nutscan_scan_nut.txt \ nutscan_scan_avahi.txt \ nutscan_scan_ipmi.txt \ nutscan_scan_eaton_serial.txt \ nutscan_display_ups_conf.txt \ nutscan_display_parsable.txt \ nutscan_cidr_to_ip.txt \ nutscan_new_device.txt \ nutscan_free_device.txt \ nutscan_add_option_to_device.txt \ nutscan_add_device_to_device.txt \ nutscan_init.txt \ nutscan_get_serial_ports_list.txt \ libupsclient-config.txt \ skel.txt if WITH_MANS # NOTE: nutclient_*.3 has no source counterpart (libnutclient_*.txt) LIBNUTCLIENT_MISC_DEPS= \ nutclient_authenticate.3 \ nutclient_logout.3 \ nutclient_device_login.3 \ nutclient_get_device_num_logins.3 \ nutclient_device_master.3 \ nutclient_device_forced_shutdown.3 $(LIBNUTCLIENT_MISC_DEPS): libnutclient_misc.3 touch $@ LIBNUTCLIENT_TCP_DEPS= \ nutclient_tcp_create_client.3 \ nutclient_tcp_disconnect.3 \ nutclient_tcp_get_timeout.3 \ nutclient_tcp_is_connected.3 \ nutclient_tcp_reconnect.3 \ nutclient_tcp_set_timeout.3 $(LIBNUTCLIENT_TCP_DEPS): libnutclient_tcp.3 touch $@ LIBNUTCLIENT_GENERAL_DEPS= \ nutclient_destroy.3 $(LIBNUTCLIENT_GENERAL_DEPS): libnutclient_general.3 touch $@ LIBNUTCLIENT_VARIABLES_DEPS= \ nutclient_get_device_rw_variables.3 \ nutclient_get_device_variable_description.3 \ nutclient_get_device_variables.3 \ nutclient_get_device_variable_values.3 \ nutclient_has_device_variable.3 \ nutclient_set_device_variable_value.3 \ nutclient_set_device_variable_values.3 $(LIBNUTCLIENT_VARIABLES_DEPS): libnutclient_variables.3 touch $@ LIBNUTCLIENT_COMMANDS_DEPS= \ nutclient_execute_device_command.3 \ nutclient_get_device_command_description.3 \ nutclient_get_device_commands.3 \ nutclient_has_device_command.3 $(LIBNUTCLIENT_COMMANDS_DEPS): libnutclient_commands.3 touch $@ LIBNUTCLIENT_DEVICES_DEPS= \ nutclient_get_device_description.3 \ nutclient_get_devices.3 \ nutclient_has_device.3 $(LIBNUTCLIENT_DEVICES_DEPS): libnutclient_devices.3 touch $@ MAN3_DEV_PAGES = \ upsclient.3 \ upscli_add_host_cert.3 \ upscli_cleanup.3 \ upscli_connect.3 \ upscli_disconnect.3 \ upscli_fd.3 \ upscli_get.3 \ upscli_init.3 \ upscli_list_next.3 \ upscli_list_start.3 \ upscli_readline.3 \ upscli_readline_timeout.3 \ upscli_sendline.3 \ upscli_sendline_timeout.3 \ upscli_splitaddr.3 \ upscli_splitname.3 \ upscli_ssl.3 \ upscli_strerror.3 \ upscli_upserror.3 \ libnutclient.3 \ libnutclient_commands.3 \ $(LIBNUTCLIENT_COMMANDS_DEPS) \ libnutclient_devices.3 \ $(LIBNUTCLIENT_DEVICES_DEPS) \ libnutclient_general.3 \ $(LIBNUTCLIENT_GENERAL_DEPS) \ libnutclient_misc.3 \ $(LIBNUTCLIENT_MISC_DEPS) \ libnutclient_tcp.3 \ $(LIBNUTCLIENT_TCP_DEPS) \ libnutclient_variables.3 \ $(LIBNUTCLIENT_VARIABLES_DEPS) \ nutscan.3 \ nutscan_scan_snmp.3 \ nutscan_scan_usb.3 \ nutscan_scan_xml_http_range.3 \ nutscan_scan_nut.3 \ nutscan_scan_avahi.3 \ nutscan_scan_ipmi.3 \ nutscan_scan_eaton_serial.3 \ nutscan_display_ups_conf.3 \ nutscan_display_parsable.3 \ nutscan_cidr_to_ip.3 \ nutscan_new_device.3 \ nutscan_free_device.3 \ nutscan_add_option_to_device.3 \ nutscan_add_device_to_device.3 \ nutscan_get_serial_ports_list.3 \ nutscan_init.3 upscli_readline_timeout.3: upscli_readline.3 touch $@ upscli_sendline_timeout.3: upscli_sendline.3 touch $@ MAN1_DEV_PAGES = \ libupsclient-config.1 endif if WITH_DEV man3_MANS = $(MAN3_DEV_PAGES) if !WITH_PKG_CONFIG man1_MANS = $(MAN1_DEV_PAGES) endif # WITH_DEV endif HTML_DEV_MANS = \ upsclient.html \ upscli_add_host_cert.html \ upscli_cleanup.html \ upscli_connect.html \ upscli_disconnect.html \ upscli_fd.html \ upscli_get.html \ upscli_init.html \ upscli_list_next.html \ upscli_list_start.html \ upscli_readline.html \ upscli_sendline.html \ upscli_splitaddr.html \ upscli_splitname.html \ upscli_ssl.html \ upscli_strerror.html \ upscli_upserror.html \ libnutclient.html \ libnutclient_commands.html \ libnutclient_devices.html \ libnutclient_general.html \ libnutclient_misc.html \ libnutclient_tcp.html \ libnutclient_variables.html \ nutscan.html \ nutscan_scan_snmp.html \ nutscan_scan_usb.html \ nutscan_scan_xml_http_range.html \ nutscan_scan_nut.html \ nutscan_scan_avahi.html \ nutscan_scan_ipmi.html \ nutscan_scan_eaton_serial.html \ nutscan_display_ups_conf.html \ nutscan_display_parsable.html \ nutscan_cidr_to_ip.html \ nutscan_new_device.html \ nutscan_free_device.html \ nutscan_add_option_to_device.html \ nutscan_add_device_to_device.html \ nutscan_get_serial_ports_list.html \ nutscan_init.html \ libupsclient-config.html \ skel.html # Drivers related manpages # (--with-drivers=...) if SOME_DRIVERS man8_MANS += $(DRIVER_MAN_LIST) else # (--with-serial) SRC_SERIAL_PAGES = \ al175.txt \ apcsmart.txt \ apcsmart-old.txt \ bcmxcp.txt \ belkin.txt \ belkinunv.txt \ bestfortress.txt \ bestuferrups.txt \ bestups.txt \ bestfcom.txt \ blazer-common.txt \ blazer_ser.txt \ clone.txt \ dummy-ups.txt \ etapro.txt \ everups.txt \ gamatronic.txt \ genericups.txt \ isbmex.txt \ ivtscd.txt \ liebert.txt \ liebert-esp2.txt \ masterguard.txt \ metasys.txt \ mge-shut.txt \ mge-utalk.txt \ oneac.txt \ microdowell.txt \ microsol-apc.txt \ nutdrv_siemens_sitop.txt \ optiups.txt \ powercom.txt \ powerpanel.txt \ rhino.txt \ riello_ser.txt \ safenet.txt \ solis.txt \ tripplite.txt \ tripplitesu.txt \ upscode2.txt \ victronups.txt \ apcupsd-ups.txt if WITH_MANS MAN_SERIAL_PAGES = \ al175.8 \ apcsmart.8 \ apcsmart-old.8 \ bcmxcp.8 \ belkin.8 \ belkinunv.8 \ bestfortress.8 \ bestuferrups.8 \ bestups.8 \ bestfcom.8 \ blazer_ser.8 \ clone.8 \ dummy-ups.8 \ etapro.8 \ everups.8 \ gamatronic.8 \ genericups.8 \ isbmex.8 \ ivtscd.8 \ liebert.8 \ liebert-esp2.8 \ masterguard.8 \ metasys.8 \ mge-shut.8 \ mge-utalk.8 \ oneac.8 \ microdowell.8 \ microsol-apc.8 \ nutdrv_siemens_sitop.8 \ optiups.8 \ powercom.8 \ powerpanel.8 \ rhino.8 \ riello_ser.8 \ safenet.8 \ solis.8 \ tripplite.8 \ tripplitesu.8 \ upscode2.8 \ victronups.8 \ apcupsd-ups.8 endif if WITH_SERIAL man8_MANS += $(MAN_SERIAL_PAGES) endif HTML_SERIAL_MANS = \ al175.html \ apcsmart.html \ apcsmart-old.html \ bcmxcp.html \ belkin.html \ belkinunv.html \ bestfortress.html \ bestuferrups.html \ bestups.html \ bestfcom.html \ blazer_ser.html \ clone.html \ dummy-ups.html \ etapro.html \ everups.html \ gamatronic.html \ genericups.html \ isbmex.html \ ivtscd.html \ liebert.html \ liebert-esp2.html \ masterguard.html \ metasys.html \ mge-shut.html \ mge-utalk.html \ oneac.html \ microdowell.html \ microsol-apc.html \ nutdrv_siemens_sitop.html \ optiups.html \ powercom.html \ powerpanel.html \ rhino.html \ riello_ser.html \ safenet.html \ solis.html \ tripplite.html \ tripplitesu.html \ upscode2.html \ victronups.html \ apcupsd-ups.html # (--with-snmp) SRC_SNMP_PAGES = snmp-ups.txt if WITH_MANS MAN_SNMP_PAGES = snmp-ups.8 endif if WITH_SNMP man8_MANS += $(MAN_SNMP_PAGES) endif HTML_SNMP_MANS = snmp-ups.html # (--with-usb) SRC_USB_LIBUSB_PAGES = \ bcmxcp_usb.txt \ blazer-common.txt \ blazer_usb.txt \ nutdrv_atcl_usb.txt \ richcomm_usb.txt \ riello_usb.txt \ tripplite_usb.txt \ usbhid-ups.txt if WITH_MANS MAN_USB_LIBUSB_PAGES = \ bcmxcp_usb.8 \ blazer_usb.8 \ nutdrv_atcl_usb.8 \ richcomm_usb.8 \ riello_usb.8 \ tripplite_usb.8 \ usbhid-ups.8 endif if WITH_USB man8_MANS += $(MAN_USB_LIBUSB_PAGES) endif HTML_USB_LIBUSB_MANS = \ bcmxcp_usb.html \ blazer_usb.html \ nutdrv_atcl_usb.html \ richcomm_usb.html \ riello_usb.html \ tripplite_usb.html \ usbhid-ups.html # (--with-serial / --with-usb) SRC_SERIAL_USB_PAGES = \ nutdrv_qx.txt if WITH_MANS MAN_SERIAL_USB_PAGES = \ nutdrv_qx.8 endif if WITH_SERIAL man8_MANS += $(MAN_SERIAL_USB_PAGES) else if WITH_USB man8_MANS += $(MAN_SERIAL_USB_PAGES) endif endif HTML_SERIAL_USB_MANS = \ nutdrv_qx.html # (--with-neon) SRC_NETXML_PAGES = netxml-ups.txt if WITH_MANS MAN_NETXML_PAGES = netxml-ups.8 endif if WITH_NEON man8_MANS += $(MAN_NETXML_PAGES) endif HTML_NETXML_MANS = netxml-ups.html # (--with-powerman) SRC_POWERMAN_PAGES = powerman-pdu.txt if WITH_MANS MAN_POWERMAN_PAGES = powerman-pdu.8 endif if WITH_LIBPOWERMAN man8_MANS += $(MAN_POWERMAN_PAGES) endif HTML_POWERMAN_MANS = powerman-pdu.html # (--with-ipmi) SRC_IPMIPSU_PAGES = nut-ipmipsu.txt if WITH_MANS MAN_IPMIPSU_PAGES = nut-ipmipsu.8 endif if WITH_IPMI man8_MANS += $(MAN_IPMIPSU_PAGES) endif HTML_IPMIPSU_MANS = nut-ipmipsu.html SRC_MACOSX_PAGES = macosx-ups.txt if WITH_MANS MAN_MACOSX_PAGES = macosx-ups.8 endif if WITH_MACOSX man8_MANS += $(MAN_MACOSX_PAGES) endif HTML_MACOSX_MANS = macosx-ups.html SRC_MODBUS_PAGES = phoenixcontact_modbus.txt \ generic_modbus.txt \ huawei-ups2000.txt \ socomec_jbus.txt \ adelsystem_cbi.txt if WITH_MANS MAN_MODBUS_PAGES = phoenixcontact_modbus.8 \ generic_modbus.8 \ huawei-ups2000.8 \ socomec_jbus.8 \ adelsystem_cbi.8 endif if WITH_MODBUS man8_MANS += $(MAN_MODBUS_PAGES) endif HTML_MODBUS_MANS = phoenixcontact_modbus.html \ generic_modbus.html \ huawei-ups2000.html \ socomec_jbus.html \ adelsystem_cbi.html SRC_LINUX_I2C_PAGES = asem.txt pijuice.txt if WITH_MANS MAN_LINUX_I2C_PAGES = asem.8 pijuice.8 endif if WITH_LINUX_I2C man8_MANS += $(MAN_LINUX_I2C_PAGES) endif HTML_LINUX_I2C_MANS = asem.html pijuice.html # SOME_DRIVERS endif MAN_MANS = if WITH_MANS MAN_MANS += \ $(MAN_CONF_PAGES) \ $(MAN_CLIENT_PAGES) \ $(MAN_TOOL_PAGES) \ $(MAN5_CGI_PAGES) \ $(MAN8_CGI_PAGES) \ $(MAN1_DEV_PAGES) \ $(MAN3_DEV_PAGES) \ $(MAN_SERIAL_PAGES) \ $(MAN_SNMP_PAGES) \ $(MAN_USB_LIBUSB_PAGES) \ $(MAN_SERIAL_USB_PAGES) \ $(MAN_NETXML_PAGES) \ $(MAN_POWERMAN_PAGES) \ $(MAN_IPMIPSU_PAGES) \ $(MAN_MACOSX_PAGES) \ $(MAN_MODBUS_PAGES) \ $(MAN_LINUX_I2C_PAGES) endif SRC_DRIVERS_PAGES = \ $(SRC_SERIAL_PAGES) \ $(SRC_SNMP_PAGES) \ $(SRC_USB_LIBUSB_PAGES) \ $(SRC_SERIAL_USB_PAGES) \ $(SRC_NETXML_PAGES) \ $(SRC_POWERMAN_PAGES) \ $(SRC_IPMIPSU_PAGES) \ $(SRC_MACOSX_PAGES) \ $(SRC_MODBUS_PAGES) \ $(SRC_LINUX_I2C_PAGES) # distribute everything, even those not installed by default # Note that 'dist' target requires AsciiDoc! SRC_ALL_PAGES = \ $(SRC_CONF_PAGES) \ $(SRC_CLIENT_PAGES) \ $(SRC_TOOL_PAGES) \ $(SRC_CGI_PAGES) \ $(SRC_DEV_PAGES) \ $(SRC_DRIVERS_PAGES) EXTRA_DIST = \ $(SRC_ALL_PAGES) \ $(MAN_MANS) \ asciidoc.conf if ! WITH_MANS if ! SKIP_MANS # Cause "make dist" to fail, unless caller (like the stack of distcheck-dmf) # 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 endif endif # For builds done from dist'ed sources, there may be a conflict of timestamps # between original *.txt files and pre-built manpages etc. leading to skipping # of manpage re-generation even if that activity is possible and requested. # Possibly a cleaner, but less portable, solution would be to touch the # generated files to long ago. Current solution assumes good valid clocks :) dist-hook: @echo "Fix up manpage source timestamps" && cd $(distdir) && touch $(SRC_ALL_PAGES) HTML_MANS = \ $(HTML_CONF_MANS) \ $(HTML_CLIENT_MANS) \ $(HTML_TOOL_MANS) \ $(HTML_CGI_MANS) \ $(HTML_DEV_MANS) \ $(HTML_SERIAL_MANS) \ $(HTML_SNMP_MANS) \ $(HTML_USB_LIBUSB_MANS) \ $(HTML_SERIAL_USB_MANS) \ $(HTML_NETXML_MANS) \ $(HTML_POWERMAN_MANS) \ $(HTML_IPMIPSU_MANS) \ $(HTML_MACOSX_MANS) \ $(HTML_MODBUS_MANS) \ $(HTML_LINUX_I2C_MANS) # Note: target documents, except nutupsdrv.txt itself, start the # list of drivers with `- linkman:nutupsdrv[8]` entry # To regenerate these files, do `make distclean` first LINKMAN_INCLUDE_GENERATED = linkman-driver-names.txt linkman-drivertool-names.txt LINKMAN_INCLUDE_CONSUMERS = index.txt upsd.txt nutupsdrv.txt linkman-driver-names.txt: @if test x"$(srcdir)" != x"$(builddir)" ; then \ if ! test -s "$(builddir)/$@" && test -s "$(srcdir)/$(@F)" ; then \ ln -fs "$(srcdir)/$(@F)" "$(builddir)/" ; \ fi ; \ fi @if test -s "$@" ; then exit 0 ; fi ; \ (LC_ALL=C; LANG=C; export LC_ALL LANG; \ for F in $(SRC_DRIVERS_PAGES) ; do echo "$$F" ; done \ | grep -vE '^nutupsdrv\.txt$$' \ | sort -n | uniq \ | sed 's,^\(.*\)\.txt$$,- linkman:\1[8],' ; \ ) > "$@" linkman-drivertool-names.txt: @if test x"$(srcdir)" != x"$(builddir)" ; then \ if ! test -s "$(builddir)/$@" && test -s "$(srcdir)/$(@F)" ; then \ ln -fs "$(srcdir)/$(@F)" "$(builddir)/" ; \ fi ; \ fi @if test -s "$@" ; then exit 0 ; fi ; \ (LC_ALL=C; LANG=C; export LC_ALL LANG; \ for F in $(SRC_DRIVERTOOL_PAGES) ; do echo "$$F" ; done \ | sort -n | uniq \ | sed 's,^\(.*\)\.txt$$,- linkman:\1[8],' ; \ ) > "$@" # Dependencies are about particular filenames, since over time # we might have several use-cases for LINKMAN_INCLUDE_GENERATED: $(LINKMAN_INCLUDE_CONSUMERS): linkman-driver-names.txt linkman-drivertool-names.txt # These files are generated when we build from git source so not tracked in # git, and not part of tarball (to be in builddir) - so not in EXTRA_DIST. DISTCLEANFILES = $(LINKMAN_INCLUDE_GENERATED) all: all-html html-man: $(HTML_MANS) index.html # Have a way to build all man pages, not just those that fit currently # configured drivers, daemons, developer aspect, etc. all-man man-man: $(MAN_MANS) 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) -i '(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) -i '(roff.* input|C source|ASCII text)' > /dev/null ; } ) || \ ( test -s "$(abs_builddir)/$$F" && { file "$(abs_builddir)/$$F" | $(EGREP) -i '(roff.* 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 # Note: (GNU) make can helpfully add VPATH to the short source filenames # which we had listed above, so the "case" below handles two possibilities 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`"; \ case "$$F" in \ */*) ;; \ *) F="$(abs_srcdir)/$$F" ;; \ esac ; \ test -s "$$F" && { file "$$F" | $(EGREP) -i '(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 = *-spellchecked SUFFIXES = .txt .html .1 .3 .5 .8 # For builds with allowed installation of prebuild man pages, check that # they exist in sources (make would pull them automatically as a fallback # from failed lookup in build products). For builds that require rebuild # of man pages, abort with error if build product is missing. if DOC_INSTALL_DISTED_MANS SRC_PREBUILT_CLAUSE=|| [ -r "$(srcdir)/`basename $@`" ] else SRC_PREBUILT_CLAUSE= endif if HAVE_ASCIIDOC CLEANFILES += *.1 *.3 *.5 *.8 *.xml *.html *.pdf # Working around a2x not friendly to parallelized runs. # See more details in the main NUT docs/Makefile.am DOCBUILD_BEGIN = { \ if test -n "$${A2X_OUTDIR}" && test "$${A2X_OUTDIR}" != '.' ; then \ rm -rf "./$${A2X_OUTDIR}" || true ; \ test -d "$@" && rm -rf "$@" || true ; \ mkdir -p "./$${A2X_OUTDIR}" || exit ; \ for F in $(LINKMAN_INCLUDE_GENERATED) ; do \ if [ -s "./$$F" ] ; then ln -f -s "../../$$F" "./$${A2X_OUTDIR}/" ; else \ if [ -s "$(abs_srcdir)/$$F" ] ; then ln -f -s "$(abs_srcdir)/$$F" "./$${A2X_OUTDIR}/" ; fi ; fi ; \ done ; \ else A2X_OUTDIR='.' ; fi; \ if test -s "${builddir}/docbook-xsl.css" \ && test -r "${builddir}/docbook-xsl.css" \ && ! test -w "${builddir}/docbook-xsl.css" \ ; then chmod u+w "${builddir}/docbook-xsl.css" ; fi ; \ chmod -R u+w "./$${A2X_OUTDIR}" || true ; \ if test x"$(srcdir)" != x"$(builddir)" ; then \ if ! test -s "$(builddir)/$<" && test -s "$(srcdir)/`basename $<`" ; then \ ln -fs "$(srcdir)/`basename $<`" "$(builddir)/" ; \ fi ; \ fi ; \ A2X_VERBOSE="$(ASCIIDOC_VERBOSE)"; if [ "$(V)" = 1 ]; then A2X_VERBOSE="--verbose"; fi; \ } # Note that documents with sub-pages (see LIBNUTCLIENT_*_DEPS above) # may generate multiple files in one go... so we move "*" and hope # for no required hidden files (or would have to `find` them all). DOCBUILD_END = { \ if test -n "$${A2X_OUTDIR}" && test "$${A2X_OUTDIR}" != '.' ; then \ chmod -R u+w "./$${A2X_OUTDIR}" || true ; \ test -d "$@" && rm -rf "$@" || true ; \ for F in $(LINKMAN_INCLUDE_GENERATED) ; do \ rm -f "./$${A2X_OUTDIR}/$$F" || true ; \ done ; \ mv -f "./$${A2X_OUTDIR}/$(@F)" ./ || exit ; \ mv -f "./$${A2X_OUTDIR}/"*.* ./ 2>/dev/null || true ; \ rm -rf "./$${A2X_OUTDIR}" ; \ fi ; \ } ### Regarding absolute paths in attributes below: by default asciidoc ### resolves include paths relative to the main document, so while we ### see the relative builddir as "." in the makefile, for included ### data it would mean the source directory where the .txt resides. .txt.html: @A2X_OUTDIR="tmp/man-html.$(@F).$$$$" ; \ echo " DOC-MAN-HTML Generating $@"; \ $(DOCBUILD_BEGIN) ; RES=0; \ $(ASCIIDOC) --backend=xhtml11 $${A2X_VERBOSE} \ --attribute localdate="`TZ=UTC date +%Y-%m-%d`" \ --attribute localtime="`TZ=UTC date +%H:%M:%S`" \ --attribute nutversion="@PACKAGE_VERSION@" \ --attribute srcdir="$(abs_srcdir)" \ --attribute builddir="$(abs_builddir)" \ -o "$${A2X_OUTDIR}/$(@F)" $< || RES=$$? ; \ $(DOCBUILD_END) ; exit $$RES ### Prior to Asciidoc ~8.6.8, the --destination-dir flag didn't seem to affect the location of the intermediate .xml file. ### This parameter is currently required; see docs/Makefile.am for more detail. A2X_MANPAGE_OPTS = --doctype manpage --format manpage $${A2X_VERBOSE} \ --xsltproc-opts="--nonet" \ --attribute mansource="Network UPS Tools" \ --attribute manversion="@PACKAGE_VERSION@" \ --attribute manmanual="NUT Manual" \ --attribute srcdir="$(abs_srcdir)" \ --attribute builddir="$(abs_builddir)" \ --destination-dir="$${A2X_OUTDIR}" .txt.1: @A2X_OUTDIR="tmp/man1.$(@F).$$$$" ; \ echo " DOC-MAN Generating $@"; \ $(DOCBUILD_BEGIN) ; RES=0; \ $(A2X) $(A2X_MANPAGE_OPTS) $< || RES=$$? ; \ $(DOCBUILD_END) ; exit $$RES .txt.3: @A2X_OUTDIR="tmp/man3.$(@F).$$$$" ; \ echo " DOC-MAN Generating $@"; \ $(DOCBUILD_BEGIN) ; RES=0; \ $(A2X) $(A2X_MANPAGE_OPTS) $< || RES=$$? ; \ $(DOCBUILD_END) ; exit $$RES .txt.5: @A2X_OUTDIR="tmp/man5.$(@F).$$$$" ; \ echo " DOC-MAN Generating $@"; \ $(DOCBUILD_BEGIN) ; RES=0; \ $(A2X) $(A2X_MANPAGE_OPTS) $< || RES=$$? ; \ $(DOCBUILD_END) ; exit $$RES .txt.8: @A2X_OUTDIR="tmp/man8.$(@F).$$$$" ; \ echo " DOC-MAN Generating $@"; \ $(DOCBUILD_BEGIN) ; RES=0; \ $(A2X) $(A2X_MANPAGE_OPTS) $< || RES=$$? ; \ $(DOCBUILD_END) ; exit $$RES else !HAVE_ASCIIDOC .txt.html: @if [ -r "$@" ] $(SRC_PREBUILT_CLAUSE); then \ echo "Not (re)building $@ manual page, since 'asciidoc', 'xmllint' or 'xsltproc' were not found." ; \ else \ echo "Could not find prebuilt $@ manual page." ; \ echo "If you are building from Git, do you have all of the asciidoc/a2x tools installed?"; \ exit 1; \ fi .txt.1: @if [ -r "$@" ] $(SRC_PREBUILT_CLAUSE); then \ echo "Not (re)building $@ manual page, since 'asciidoc', 'xmllint' or 'xsltproc' were not found." ; \ else \ echo "Could not find prebuilt $@ manual page." ; \ echo "If you are building from Git, do you have all of the asciidoc/a2x tools installed?"; \ exit 1; \ fi .txt.3: @if [ -r "$@" ] $(SRC_PREBUILT_CLAUSE); then \ echo "Not (re)building $@ manual page, since 'asciidoc', 'xmllint' or 'xsltproc' were not found." ; \ else \ echo "Could not find prebuilt $@ manual page." ; \ echo "If you are building from Git, do you have all of the asciidoc/a2x tools installed?"; \ exit 1; \ fi .txt.5: @if [ -r "$@" ] $(SRC_PREBUILT_CLAUSE); then \ echo "Not (re)building $@ manual page, since 'asciidoc', 'xmllint' or 'xsltproc' were not found." ; \ else \ echo "Could not find prebuilt $@ manual page." ; \ echo "If you are building from Git, do you have all of the asciidoc/a2x tools installed?"; \ exit 1; \ fi .txt.8: @if [ -r "$@" ] $(SRC_PREBUILT_CLAUSE); then \ echo "Not (re)building $@ manual page, since 'asciidoc', 'xmllint' or 'xsltproc' were not found." ; \ else \ echo "Could not find prebuilt $@ manual page." ; \ echo "If you are building from Git, do you have all of the asciidoc/a2x tools installed?"; \ exit 1; \ fi endif !HAVE_ASCIIDOC # NOTE: Due to portability, we do not use a GNU percent-wildcard extension: #%-spellchecked: % Makefile.am $(top_srcdir)/docs/Makefile.am $(abs_srcdir)/$(NUT_SPELL_DICT) # $(MAKE) -s -f $(top_builddir)/docs/Makefile SPELLCHECK_SRC_ONE="$<" SPELLCHECK_DIR="$(srcdir)" $@ # NOTE: Portable suffix rules do not allow prerequisites, so we shim them here # by a wildcard target in case the make implementation can put the two together. *.txt-spellchecked: Makefile.am $(abs_top_srcdir)/docs/Makefile.am $(abs_srcdir)/$(NUT_SPELL_DICT) .txt.txt-spellchecked: $(MAKE) -s -f $(top_builddir)/docs/Makefile SPELLCHECK_SRC_ONE="$<" SPELLCHECK_DIR="$(srcdir)" $@ spellcheck spellcheck-interactive spellcheck-sortdict: $(MAKE) -f $(top_builddir)/docs/Makefile SPELLCHECK_SRC="$(SRC_ALL_PAGES)" SPELLCHECK_DIR="$(srcdir)" $@ MAINTAINERCLEANFILES = Makefile.in .dirstamp clean-local: rm -rf tmp