# 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'
# - 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

# 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

MAN_CONF_PAGES = \
	nut.conf.5 \
	ups.conf.5 \
	upsd.conf.5 \
	upsd.users.5 \
	upsmon.conf.5 \
	upssched.conf.5

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

SRC_CLIENT_PAGES = \
	nutupsdrv.txt \
	upsc.txt \
	upscmd.txt \
	upsd.txt \
	upsdrvctl.txt \
	upslog.txt \
	upsmon.txt \
	upsrw.txt \
	upssched.txt

MAN_CLIENT_PAGES = \
	nutupsdrv.8 \
	upsc.8 \
	upscmd.8 \
	upsd.8 \
	upsdrvctl.8 \
	upslog.8 \
	upsmon.8 \
	upsrw.8 \
	upssched.8

man8_MANS = $(MAN_CLIENT_PAGES)

HTML_CLIENT_MANS = \
	nutupsdrv.html \
	upsc.html \
	upscmd.html \
	upsd.html \
	upsdrvctl.html \
	upslog.html \
	upsmon.html \
	upsrw.html \
	upssched.html

SRC_TOOL_PAGES = nut-scanner.txt nut-recorder.txt

MAN_TOOL_PAGES = nut-scanner.8 nut-recorder.8

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

MAN5_CGI_PAGES = \
	hosts.conf.5 \
	upsset.conf.5 \
	upsstats.html.5

MAN8_CGI_PAGES = \
	upsset.cgi.8 \
	upsstats.cgi.8 \
	upsimage.cgi.8

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.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

# NOTE: nutclient_*.3 has no source counterpart (libnutclient_*.txt)
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_sendline.3 \
	upscli_splitaddr.3 \
	upscli_splitname.3 \
	upscli_ssl.3 \
	upscli_strerror.3 \
	upscli_upserror.3 \
	libnutclient.3 \
	libnutclient_commands.3 \
	libnutclient_devices.3 \
	libnutclient_general.3 \
	libnutclient_misc.3 \
	libnutclient_tcp.3 \
	libnutclient_variables.3 \
	nutclient_authenticate.3 \
	nutclient_destroy.3 \
	nutclient_device_forced_shutdown.3 \
	nutclient_device_login.3 \
	nutclient_device_master.3 \
	nutclient_execute_device_command.3 \
	nutclient_get_device_command_description.3 \
	nutclient_get_device_commands.3 \
	nutclient_get_device_description.3 \
	nutclient_get_device_num_logins.3 \
	nutclient_get_device_rw_variables.3 \
	nutclient_get_devices.3 \
	nutclient_get_device_variable_description.3 \
	nutclient_get_device_variables.3 \
	nutclient_get_device_variable_values.3 \
	nutclient_has_device.3 \
	nutclient_has_device_command.3 \
	nutclient_has_device_variable.3 \
	nutclient_logout.3 \
	nutclient_set_device_variable_value.3 \
	nutclient_set_device_variable_values.3 \
	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 \
	nutscan.3 \
	nutscan_scan_snmp.3 \
	nutscan_scan_usb.3 \
	nutscan_scan_xml_http.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

MAN1_DEV_PAGES = \
	libupsclient-config.1

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.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	\
	nutdrv_qx.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

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	\
	nutdrv_qx.8	\
	oneac.8		\
	microdowell.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

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	\
	nutdrv_qx.html	\
	oneac.html		\
	microdowell.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
MAN_SNMP_PAGES = snmp-ups.8

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 \
	nutdrv_qx.txt	\
	richcomm_usb.txt \
	riello_usb.txt	\
	tripplite_usb.txt \
	usbhid-ups.txt

MAN_USB_LIBUSB_PAGES = \
	bcmxcp_usb.8 \
	blazer_usb.8 \
	nutdrv_atcl_usb.8 \
	nutdrv_qx.8	\
	richcomm_usb.8 \
	riello_usb.8	\
	tripplite_usb.8 \
	usbhid-ups.8

if WITH_USB
 man8_MANS += $(MAN_USB_LIBUSB_PAGES)
endif

HTML_USB_LIBUSB_MANS = \
	bcmxcp_usb.html \
	blazer_usb.html	\
	nutdrv_qx.html	\
	nutdrv_atcl_usb.html \
	richcomm_usb.html \
	riello_usb.html	\
	tripplite_usb.html \
	usbhid-ups.html

# (--with-neon)
SRC_NETXML_PAGES = netxml-ups.txt
MAN_NETXML_PAGES = netxml-ups.8

if WITH_NEON
   man8_MANS += $(MAN_NETXML_PAGES)
endif

HTML_NETXML_MANS = netxml-ups.html

# (--with-powerman)
SRC_POWERMAN_PAGES = powerman-pdu.txt
MAN_POWERMAN_PAGES = powerman-pdu.8

if WITH_LIBPOWERMAN
   man8_MANS += $(MAN_POWERMAN_PAGES)
endif

HTML_POWERMAN_MANS = powerman-pdu.html

# (--with-ipmi)
SRC_IPMIPSU_PAGES = nut-ipmipsu.txt
MAN_IPMIPSU_PAGES = nut-ipmipsu.8

if WITH_IPMI
   man8_MANS += $(MAN_IPMIPSU_PAGES)
endif

HTML_IPMIPSU_MANS = nut-ipmipsu.html

SRC_MACOSX_PAGES = macosx-ups.txt
MAN_MACOSX_PAGES = macosx-ups.8

if WITH_MACOSX
   man8_MANS += $(MAN_MACOSX_PAGES)
endif

HTML_MACOSX_MANS = macosx-ups.html

SRC_LINUX_I2C_PAGES = asem.txt
MAN_LINUX_I2C_PAGES = asem.8

if WITH_LINUX_I2C
   man8_MANS += $(LINUX_I2C_PAGES)
endif

HTML_LINUX_I2C_MANS = asem.html

# SOME_DRIVERS
endif

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_NETXML_PAGES) \
	$(MAN_POWERMAN_PAGES) \
	$(MAN_IPMIPSU_PAGES) \
	$(MAN_MACOSX_PAGES) \
	$(MAN_LINUX_I2C_PAGES)

# distribute everything, even those not installed by default
# Note that 'dist' target requires AsciiDoc!
EXTRA_DIST = \
	$(SRC_CONF_PAGES) \
	$(SRC_CLIENT_PAGES) \
	$(SRC_TOOL_PAGES) \
	$(SRC_CGI_PAGES) \
	$(SRC_DEV_PAGES) \
	$(SRC_SERIAL_PAGES) \
	$(SRC_SNMP_PAGES) \
	$(SRC_USB_LIBUSB_PAGES) \
	$(SRC_NETXML_PAGES) \
	$(SRC_POWERMAN_PAGES) \
	$(SRC_IPMIPSU_PAGES) \
	$(SRC_MACOSX_PAGES) \
	$(SRC_LINUX_I2C_PAGES) \
	$(MAN_MANS) \
	asciidoc.conf

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_NETXML_MANS) \
	$(HTML_POWERMAN_MANS) \
	$(HTML_IPMIPSU_MANS) \
	$(HTML_MACOSX_MANS) \
	$(HTML_LINUX_I2C_MANS)

all:

html-man: $(HTML_MANS) index.html

CLEANFILES = *.xml *.html

SUFFIXES = .txt .html .1 .3 .5 .8

if HAVE_ASCIIDOC

.txt.html:
	$(ASCIIDOC) --backend=xhtml11 \
		--attribute localdate=`TZ=UTC date +%Y-%m-%d` \
		--attribute localtime=`TZ=UTC date +%H:%M:%S` \
		--attribute nutversion="@PACKAGE_VERSION@" \
		-o $@ $<

### Prior to Asciidoc ~8.6.8, the --destination-dir flag didn't seem to affect the location of the intermediate .xml file.
A2X_MANPAGE_OPTS = --doctype manpage --format manpage \
	--xsltproc-opts "--nonet" \
	--attribute mansource="Network UPS Tools" \
	--attribute manversion="@PACKAGE_VERSION@" \
	--attribute manmanual="NUT Manual" \
	--destination-dir=.

.txt.1:
	$(A2X) $(A2X_MANPAGE_OPTS) $<

.txt.3:
	$(A2X) $(A2X_MANPAGE_OPTS) $<

.txt.5:
	$(A2X) $(A2X_MANPAGE_OPTS) $<

.txt.8:
	$(A2X) $(A2X_MANPAGE_OPTS) $<

else !HAVE_ASCIIDOC

.txt.html:
	@if [ -r "$@" ]; 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 "$@" ]; 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 "$@" ]; 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 "$@" ]; 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 "$@" ]; 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