# Guard against environment variables
MAN8_TXT =

# Top level commands
MAN8_TXT += btrfs.asciidoc
MAN8_TXT += btrfs-convert.asciidoc
MAN8_TXT += btrfs-find-root.asciidoc
MAN8_TXT += btrfs-image.asciidoc
MAN8_TXT += btrfs-map-logical.asciidoc
MAN8_TXT += btrfs-select-super.asciidoc
MAN8_TXT += btrfstune.asciidoc
MAN8_TXT += fsck.btrfs.asciidoc
MAN8_TXT += mkfs.btrfs.asciidoc

# Sub commands for btrfs
MAN8_TXT += btrfs-subvolume.asciidoc
MAN8_TXT += btrfs-filesystem.asciidoc
MAN8_TXT += btrfs-balance.asciidoc
MAN8_TXT += btrfs-device.asciidoc
MAN8_TXT += btrfs-scrub.asciidoc
MAN8_TXT += btrfs-check.asciidoc
MAN8_TXT += btrfs-rescue.asciidoc
MAN8_TXT += btrfs-inspect-internal.asciidoc
MAN8_TXT += btrfs-send.asciidoc
MAN8_TXT += btrfs-receive.asciidoc
MAN8_TXT += btrfs-quota.asciidoc
MAN8_TXT += btrfs-qgroup.asciidoc
MAN8_TXT += btrfs-replace.asciidoc
MAN8_TXT += btrfs-restore.asciidoc
MAN8_TXT += btrfs-property.asciidoc

# Category 5 manual page
MAN5_TXT += btrfs-man5.asciidoc

MAN3_TXT += btrfs-ioctl.asciidoc

MAN_TXT = $(MAN3_TXT) $(MAN8_TXT) $(MAN5_TXT)
MAN_XML = $(patsubst %.asciidoc,%.xml,$(MAN_TXT))
MAN_HTML = $(patsubst %.asciidoc,%.html,$(MAN_TXT))
GZ_MAN3 = $(patsubst %.asciidoc,%.3.gz,$(MAN3_TXT))
GZ_MAN5 = $(patsubst %.asciidoc,%.5.gz,$(MAN5_TXT))
GZ_MAN8 = $(patsubst %.asciidoc,%.8.gz,$(MAN8_TXT))

mandir ?= $(prefix)/share/man
man3dir = $(mandir)/man3
man5dir = $(mandir)/man5
man8dir = $(mandir)/man8

ASCIIDOC = @ASCIIDOC@
ASCIIDOC_EXTRA =
MANPAGE_XSL = manpage-normal.xsl
XMLTO = @XMLTO@
XMLTO_EXTRA =
XMLTO_EXTRA = -m manpage-bold-literal.xsl
GZIPCMD = @GZIP@
INSTALL = @INSTALL@
RM = @RM@
RMDIR = @RMDIR@
LN_S = @LN_S@
MV = @MV@
SED = @SED@
BTRFS_VERSION = $(shell $(SED) -n 's/.*PACKAGE_VERSION "\(.*\)"/\1/p'\
		  ../config.h)

ifneq ($(findstring $(MAKEFLAGS),s),s)
ifndef V
	QUIET_RM	= @
	QUIET_ASCIIDOC	= @echo "    [ASCII]  $@";
	QUIET_XMLTO	= @echo "    [XMLTO]  $@";
	QUIET_GZIP	= @echo "    [GZ]     $@";
endif
endif

all: man
man: man3 man5 man8
man3: $(GZ_MAN3)
man5: $(GZ_MAN5)
man8: $(GZ_MAN8)
html: $(MAN_HTML)

install: install-man

install-man: man
	$(INSTALL) -d -m 755 $(DESTDIR)$(man5dir)
	$(INSTALL) -d -m 755 $(DESTDIR)$(man8dir)
	$(INSTALL) -m 644 $(GZ_MAN5) $(DESTDIR)$(man5dir)
	# the source file name of btrfs.5 clashes with section 8 page, but we
	# want to keep the code generic
	$(MV) $(DESTDIR)$(man5dir)/btrfs-man5.5.gz $(DESTDIR)$(man5dir)/btrfs.5.gz
	$(INSTALL) -m 644 $(GZ_MAN8) $(DESTDIR)$(man8dir)
	$(LN_S) -f btrfs-check.8.gz $(DESTDIR)$(man8dir)/btrfsck.8.gz
	$(LN_S) -f btrfs-rescue.8.gz $(DESTDIR)$(man8dir)/btrfs-zero-log.8.gz
	$(LN_S) -f btrfs-inspect-internal.8.gz $(DESTDIR)$(man8dir)/btrfs-debug-tree.8.gz
	$(LN_S) -f btrfs-inspect-internal.8.gz $(DESTDIR)$(man8dir)/btrfs-show-super.8.gz

uninstall:
	cd $(DESTDIR)$(man8dir); rm -f btrfs-check.8.gz $(GZ_MAN8)
	$(RMDIR) -p --ignore-fail-on-non-empty $(DESTDIR)$(man8dir)

clean:
	$(QUIET_RM)$(RM) -f *.xml *.xml+ *.5 *.5.gz *.8 *.8.gz *.html

%.3.gz : %.3
	$(QUIET_GZIP)$(GZIPCMD) -n -c $< > $@

%.5.gz : %.5
	$(QUIET_GZIP)$(GZIPCMD) -n -c $< > $@

%.8.gz : %.8
	$(QUIET_GZIP)$(GZIPCMD) -n -c $< > $@

%.3 : %.xml
	$(QUIET_XMLTO)$(RM) -f $@ && \
	$(XMLTO) -m $(MANPAGE_XSL) $(XMLTO_EXTRA) man $<

%.5 : %.xml
	$(QUIET_XMLTO)$(RM) -f $@ && \
	$(XMLTO) -m $(MANPAGE_XSL) $(XMLTO_EXTRA) man $<

%.8 : %.xml
	$(QUIET_XMLTO)$(RM) -f $@ && \
	$(XMLTO) -m $(MANPAGE_XSL) $(XMLTO_EXTRA) man $<

%.xml : %.asciidoc asciidoc.conf
	$(QUIET_ASCIIDOC)$(RM) -f $@+ $@ && \
	$(ASCIIDOC) -b docbook -d manpage -f asciidoc.conf \
		$(ASCIIDOC_EXTRA) -abtrfs_version=$(BTRFS_VERSION) \
		-o $@+ $< && \
	$(MV) $@+ $@

%.html : %.asciidoc asciidoc.conf
	$(QUIET_ASCIIDOC)$(RM) -f $@+ $@ && \
	$(ASCIIDOC) -b html -d article -f asciidoc.conf \
		$(ASCIIDOC_EXTRA) -abtrfs_version=$(BTRFS_VERSION) \
		-o $@+ $< && \
	$(MV) $@+ $@
