linux-imx/tools/perf/Documentation/Makefile
Ben Hutchings 61b3d2107d perf doc: Add support for KBUILD_BUILD_TIMESTAMP
When building man pages from a Git checkout, we consistently set the
man page date based on when the input was last changed.  Otherwise, it
defaults to the build time, which is not reproducible.

Allow the date to be set through the KBUILD_BUILD_TIMESTAMP variable,
as for timestamps in the kernel itself.

Signed-off-by: Ben Hutchings <benh@debian.org>
Acked-by: Ian Rogers<irogers@google.com>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Salvatore Bonaccorso <carnil@debian.org>
Link: https://lore.kernel.org/r/ZF/1F1P+b9qZ/vVH@decadent.org.uk
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2023-05-15 17:49:01 -03:00

8.6 KiB

SPDX-License-Identifier: GPL-2.0-only

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

ARTICLES =

with their own formatting rules.

SP_ARTICLES =

MAN1_TXT=
$(filter-out $(addsuffix .txt, $(ARTICLES) $(SP_ARTICLES)),
$(wildcard perf-*.txt))
perf.txt MAN5_TXT= MAN7_TXT=

MAN_TXT = $(MAN1_TXT) $(MAN5_TXT) $(MAN7_TXT) _MAN_XML=$(patsubst %.txt,%.xml,$(MAN_TXT)) _MAN_HTML=$(patsubst %.txt,%.html,$(MAN_TXT))

MAN_XML=$(addprefix $(OUTPUT),$(_MAN_XML)) MAN_HTML=$(addprefix $(OUTPUT),$(_MAN_HTML))

_DOC_HTML = $(_MAN_HTML) _DOC_HTML+=$(patsubst %,%.html,$(ARTICLES) $(SP_ARTICLES)) DOC_HTML=$(addprefix $(OUTPUT),$(_DOC_HTML))

_DOC_MAN1=$(patsubst %.txt,%.1,$(MAN1_TXT)) _DOC_MAN5=$(patsubst %.txt,%.5,$(MAN5_TXT)) _DOC_MAN7=$(patsubst %.txt,%.7,$(MAN7_TXT))

DOC_MAN1=$(addprefix $(OUTPUT),$(_DOC_MAN1)) DOC_MAN5=$(addprefix $(OUTPUT),$(_DOC_MAN5)) DOC_MAN7=$(addprefix $(OUTPUT),$(_DOC_MAN7))

Make the path relative to DESTDIR, not prefix

ifndef DESTDIR prefix?=$(HOME) endif bindir?=$(prefix)/bin htmldir?=$(prefix)/share/doc/perf-doc pdfdir?=$(prefix)/share/doc/perf-doc mandir?=$(prefix)/share/man man1dir=$(mandir)/man1 man5dir=$(mandir)/man5 man7dir=$(mandir)/man7

ASCIIDOC=asciidoc ASCIIDOC_EXTRA += --unsafe -f asciidoc.conf ASCIIDOC_HTML = xhtml11 MANPAGE_XSL = manpage-normal.xsl XMLTO_EXTRA = INSTALL?=install RM ?= rm -f DOC_REF = origin/man HTML_REF = origin/html

ifdef USE_ASCIIDOCTOR ASCIIDOC = asciidoctor ASCIIDOC_EXTRA += -a compat-mode ASCIIDOC_EXTRA += -I. -rasciidoctor-extensions ASCIIDOC_EXTRA += -a mansource="perf" -a manmanual="perf Manual" ASCIIDOC_HTML = xhtml5 endif

infodir?=$(prefix)/share/info MAKEINFO=makeinfo INSTALL_INFO=install-info DOCBOOK2X_TEXI=docbook2x-texi DBLATEX=dblatex XMLTO=xmlto ifndef PERL_PATH PERL_PATH = /usr/bin/perl endif

-include ../config.mak.autogen -include ../config.mak

_tmp_tool_path := $(call get-executable,$(ASCIIDOC)) ifeq ($(_tmp_tool_path),) missing_tools = $(ASCIIDOC) endif

ifndef USE_ASCIIDOCTOR _tmp_tool_path := $(call get-executable,$(XMLTO)) ifeq ($(_tmp_tool_path),) missing_tools += $(XMLTO) endif endif

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

SHELL_PATH ?= $(SHELL)

Shell quote;

SHELL_PATH_SQ = $(subst ',''',$(SHELL_PATH))

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=perf&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 '$@; QUIET_DB2TEXI = @echo ' DB2TEXI '$@; QUIET_MAKEINFO = @echo ' MAKEINFO '$@; QUIET_DBLATEX = @echo ' DBLATEX '$@; QUIET_XSLTPROC = @echo ' XSLTPROC '$@; QUIET_GEN = @echo ' GEN '$@; QUIET_STDERR = 2> /dev/null QUIET_SUBDIR0 = +@subdir= QUIET_SUBDIR1 = ;$(NO_SUBDIR)
echo ' SUBDIR ' $$subdir;
$(MAKE) $(PRINT_DIR) -C $$subdir export V endif endif

all: html man info

html: $(DOC_HTML)

$(DOC_HTML) $(DOC_MAN1) $(DOC_MAN5) $(DOC_MAN7): asciidoc.conf

man: man1 man5 man7 man1: $(DOC_MAN1) man5: $(DOC_MAN5) man7: $(DOC_MAN7)

info: $(OUTPUT)perf.info $(OUTPUT)perfman.info

install: install-man

check-man-tools: ifdef missing_tools $(error "You need to install $(missing_tools) for man pages") endif

do-install-man: man $(call QUIET_INSTALL, Documentation-man)
$(INSTALL) -d -m 755 $(DESTDIR)$(man1dir); \

$(INSTALL) -d -m 755 $(DESTDIR)$(man5dir); \

$(INSTALL) -d -m 755 $(DESTDIR)$(man7dir); \

	$(INSTALL) -m 644 $(DOC_MAN1) $(DESTDIR)$(man1dir); \

$(INSTALL) -m 644 $(DOC_MAN5) $(DESTDIR)$(man5dir); \

$(INSTALL) -m 644 $(DOC_MAN7) $(DESTDIR)$(man7dir)

install-man: check-man-tools man do-install-man

ifdef missing_tools DO_INSTALL_MAN = $(warning Please install $(missing_tools) to have the man pages installed) else DO_INSTALL_MAN = do-install-man endif

try-install-man: $(DO_INSTALL_MAN)

install-info: info $(call QUIET_INSTALL, Documentation-info)
$(INSTALL) -d -m 755 $(DESTDIR)$(infodir);
$(INSTALL) -m 644 $(OUTPUT)perf.info $(OUTPUT)perfman.info $(DESTDIR)$(infodir);
if test -r $(DESTDIR)$(infodir)/dir; then
$(INSTALL_INFO) --info-dir=$(DESTDIR)$(infodir) perf.info ;
$(INSTALL_INFO) --info-dir=$(DESTDIR)$(infodir) perfman.info ;
else
echo "No directory found in $(DESTDIR)$(infodir)" >&2 ;
fi

#install-html: html

'$(SHELL_PATH_SQ)' ./install-webdoc.sh $(DESTDIR)$(htmldir)

Determine "include::" file references in asciidoc files.

$(OUTPUT)doc.dep : $(wildcard *.txt) build-docdep.perl $(QUIET_GEN)$(RM) $@+ $@ &&
$(PERL_PATH) ./build-docdep.perl >$@+ $(QUIET_STDERR) &&
mv $@+ $@

-include $(OUTPUT)doc.dep

CLEAN_FILES =
$(MAN_XML) $(addsuffix +,$(MAN_XML))
$(MAN_HTML) $(addsuffix +,$(MAN_HTML))
$(DOC_HTML) $(DOC_MAN1) $(DOC_MAN5) $(DOC_MAN7)
$(OUTPUT).texi $(OUTPUT).texi+ $(OUTPUT).texi++
$(OUTPUT)perf.info $(OUTPUT)perfman.info $(OUTPUT)doc.dep
$(OUTPUT)technical/api-
.html $(OUTPUT)technical/api-index.txt clean: $(call QUIET_CLEAN, Documentation) $(RM) $(CLEAN_FILES)

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

Generate date from either KBUILD_BUILD_TIMESTAMP or git log of

the doc input file

PERF_DATE = $(strip
$(if $(KBUILD_BUILD_TIMESTAMP),
$(shell date -u -d '$(KBUILD_BUILD_TIMESTAMP)' +%Y-%m-%d),
$(shell git log -1 --pretty="format:%cd"
--date=short --no-show-signature $<)))

ifdef USE_ASCIIDOCTOR $(OUTPUT)%.1 $(OUTPUT)%.5 $(OUTPUT)%.7 : %.txt $(QUIET_ASCIIDOC)$(RM) $@+ $@ &&
$(ASCIIDOC) -b manpage -d manpage
$(ASCIIDOC_EXTRA) -aperf_version=$(PERF_VERSION)
-adocdate=$(PERF_DATE) -o $@+ $< &&
mv $@+ $@ endif

$(OUTPUT)%.1 $(OUTPUT)%.5 $(OUTPUT)%.7 : $(OUTPUT)%.xml $(QUIET_XMLTO)$(RM) $@ &&
$(XMLTO) -o $(OUTPUT). -m $(MANPAGE_XSL) $(XMLTO_EXTRA) man $<

$(OUTPUT)%.xml : %.txt $(QUIET_ASCIIDOC)$(RM) $@+ $@ &&
$(ASCIIDOC) -b docbook -d manpage
$(ASCIIDOC_EXTRA) -aperf_version=$(PERF_VERSION)
-aperf_date=$(PERF_DATE) -o $@+ $< &&
mv $@+ $@

XSLT = docbook.xsl XSLTOPTS = --xinclude --stringparam html.stylesheet docbook-xsl.css

$(OUTPUT)perfman.texi: $(MAN_XML) cat-texi.perl $(QUIET_DB2TEXI)$(RM) $@+ $@ &&
($(foreach xml,$(MAN_XML),$(DOCBOOK2X_TEXI) --encoding=UTF-8
--to-stdout $(xml) &&) true) > $@++ &&
$(PERL_PATH) cat-texi.perl $@ <$@++ >$@+ &&
rm $@++ &&
mv $@+ $@

$(OUTPUT)perfman.info: $(OUTPUT)perfman.texi $(QUIET_MAKEINFO)$(MAKEINFO) --no-split --no-validate -o $@ $*.texi

$(patsubst %.txt,%.texi,$(MAN_TXT)): %.texi : %.xml $(QUIET_DB2TEXI)$(RM) $@+ $@ &&
$(DOCBOOK2X_TEXI) --to-stdout $*.xml >$@+ &&
mv $@+ $@

$(patsubst %,%.html,$(ARTICLES)) : %.html : %.txt $(QUIET_ASCIIDOC)$(ASCIIDOC) -b $(ASCIIDOC_HTML) $*.txt

WEBDOC_DEST = /pub/software/tools/perf/docs

UNIMPLEMENTED

#install-webdoc : html

'$(SHELL_PATH_SQ)' ./install-webdoc.sh $(WEBDOC_DEST)

quick-install: quick-install-man

quick-install-man:

'$(SHELL_PATH_SQ)' ./install-doc-quick.sh $(DOC_REF) $(DESTDIR)$(mandir)

#quick-install-html:

'$(SHELL_PATH_SQ)' ./install-doc-quick.sh $(HTML_REF) $(DESTDIR)$(htmldir)