# SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause)
# Most of this file is copied from tools/perf/Documentation/Makefile

include ../../../scripts/Makefile.include
include ../../../scripts/utilities.mak

MAN3_TXT  = libperf.txt
MAN7_TXT  = libperf-counting.txt libperf-sampling.txt
MAN_EX    = examples/*.c

MAN_TXT   = $(MAN3_TXT) $(MAN7_TXT)

_MAN_XML  = $(patsubst %.txt,%.xml,$(MAN_TXT))
_MAN_HTML = $(patsubst %.txt,%.html,$(MAN_TXT))
_MAN_3    = $(patsubst %.txt,%.3,$(MAN3_TXT))
_MAN_7    = $(patsubst %.txt,%.7,$(MAN7_TXT))

MAN_XML   = $(addprefix $(OUTPUT),$(_MAN_XML))
MAN_HTML  = $(addprefix $(OUTPUT),$(_MAN_HTML))
MAN_3     = $(addprefix $(OUTPUT),$(_MAN_3))
MAN_7     = $(addprefix $(OUTPUT),$(_MAN_7))
MAN_X     = $(MAN_3) $(MAN_7)

# Make the path relative to DESTDIR, not prefix
ifndef DESTDIR
  prefix ?=$(HOME)
endif

mandir  ?= $(prefix)/share/man
man3dir  = $(mandir)/man3
man7dir  = $(mandir)/man7

docdir  ?= $(prefix)/share/doc/libperf
htmldir  = $(docdir)/html
exdir    = $(docdir)/examples

ASCIIDOC        = asciidoc
ASCIIDOC_EXTRA  = --unsafe -f asciidoc.conf
ASCIIDOC_HTML   = xhtml11
MANPAGE_XSL     = manpage-normal.xsl
XMLTO_EXTRA     =
XMLTO           =xmlto

INSTALL ?= install
RM      ?= rm -f

# For asciidoc ...
#	-7.1.2,	no extra settings are needed.
#	8.0-,	set ASCIIDOC8.
#

# For docbook-xsl ...
#	-1.68.1,	set ASCIIDOC_NO_ROFF? (based on changelog from 1.73.0)
#	1.69.0,		no extra settings are needed?
#	1.69.1-1.71.0,	set DOCBOOK_SUPPRESS_SP?
#	1.71.1,		no extra settings are needed?
#	1.72.0,		set DOCBOOK_XSL_172.
#	1.73.0-,	set ASCIIDOC_NO_ROFF

# If you had been using DOCBOOK_XSL_172 in an attempt to get rid
# of 'the ".ft C" problem' in your generated manpages, and you
# instead ended up with weird characters around callouts, try
# using ASCIIDOC_NO_ROFF instead (it works fine with ASCIIDOC8).

ifdef ASCIIDOC8
  ASCIIDOC_EXTRA += -a asciidoc7compatible
endif
ifdef DOCBOOK_XSL_172
  ASCIIDOC_EXTRA += -a libperf-asciidoc-no-roff
  MANPAGE_XSL = manpage-1.72.xsl
else
  ifdef ASCIIDOC_NO_ROFF
    # docbook-xsl after 1.72 needs the regular XSL, but will not
    # pass-thru raw roff codes from asciidoc.conf, so turn them off.
    ASCIIDOC_EXTRA += -a libperf-asciidoc-no-roff
  endif
endif
ifdef MAN_BOLD_LITERAL
  XMLTO_EXTRA += -m manpage-bold-literal.xsl
endif
ifdef DOCBOOK_SUPPRESS_SP
  XMLTO_EXTRA += -m manpage-suppress-sp.xsl
endif

DESTDIR ?=
DESTDIR_SQ = '$(subst ','\'',$(DESTDIR))'

export DESTDIR DESTDIR_SQ

# Please note that there is a minor bug in asciidoc.
# The version after 6.0.3 _will_ include the patch found here:
#   http://marc.theaimsgroup.com/?l=libtraceevent&m=111558757202243&w=2
#
# Until that version is released you may have to apply the patch
# yourself - yes, all 6 characters of it!

QUIET_SUBDIR0  = +$(MAKE) -C # space to separate -C and subdir
QUIET_SUBDIR1  =

ifneq ($(findstring $(MAKEFLAGS),w),w)
  PRINT_DIR = --no-print-directory
else # "make -w"
  NO_SUBDIR = :
endif

ifneq ($(findstring $(MAKEFLAGS),s),s)
  ifneq ($(V),1)
    QUIET_ASCIIDOC = @echo '  ASCIIDOC '$@;
    QUIET_XMLTO    = @echo '  XMLTO    '$@;
  endif
endif

all: $(MAN_X) $(MAN_HTML)

$(MAN_HTML) $(MAN_X): asciidoc.conf

install-man: all
	$(call QUIET_INSTALL, man) \
		$(INSTALL) -d -m 755 $(DESTDIR)$(man3dir); \
		$(INSTALL) -m 644 $(MAN_3) $(DESTDIR)$(man3dir); \
		$(INSTALL) -d -m 755 $(DESTDIR)$(man7dir); \
		$(INSTALL) -m 644 $(MAN_7) $(DESTDIR)$(man7dir);

install-html:
	$(call QUIET_INSTALL, html) \
		$(INSTALL) -d -m 755 $(DESTDIR)$(htmldir); \
		$(INSTALL) -m 644 $(MAN_HTML) $(DESTDIR)$(htmldir); \

install-examples:
	$(call QUIET_INSTALL, examples) \
		$(INSTALL) -d -m 755 $(DESTDIR)$(exdir); \
		$(INSTALL) -m 644 $(MAN_EX) $(DESTDIR)$(exdir); \

CLEAN_FILES =					\
	$(MAN_XML) $(addsuffix +,$(MAN_XML))	\
	$(MAN_HTML) $(addsuffix +,$(MAN_HTML))	\
	$(MAN_X)

clean:
	$(call QUIET_CLEAN, Documentation) $(RM) $(CLEAN_FILES)

$(MAN_3): $(OUTPUT)%.3: %.xml
	$(QUIET_XMLTO)$(XMLTO) -o $(OUTPUT). -m $(MANPAGE_XSL) $(XMLTO_EXTRA) man $<

$(MAN_7): $(OUTPUT)%.7: %.xml
	$(QUIET_XMLTO)$(XMLTO) -o $(OUTPUT). -m $(MANPAGE_XSL) $(XMLTO_EXTRA) man $<

$(MAN_XML): $(OUTPUT)%.xml: %.txt
	$(QUIET_ASCIIDOC)$(ASCIIDOC) -b docbook -d manpage \
		$(ASCIIDOC_EXTRA) -alibperf_version=$(EVENT_PARSE_VERSION) -o $@+ $< && \
	mv $@+ $@

$(MAN_HTML): $(OUTPUT)%.html: %.txt
	$(QUIET_ASCIIDOC)$(ASCIIDOC) -b $(ASCIIDOC_HTML) -d manpage \
	$(ASCIIDOC_EXTRA) -aperf_version=$(EVENT_PARSE_VERSION) -o $@+ $< && \
	mv $@+ $@
