1# SPDX-License-Identifier: GPL-2.0-only 2include ../../scripts/Makefile.include 3include ../../scripts/utilities.mak 4 5MAN1_TXT= \ 6 $(filter-out $(addsuffix .txt, $(ARTICLES) $(SP_ARTICLES)), \ 7 $(wildcard perf-*.txt)) \ 8 perf.txt 9MAN5_TXT= 10MAN7_TXT= 11 12MAN_TXT = $(MAN1_TXT) $(MAN5_TXT) $(MAN7_TXT) 13_MAN_XML=$(patsubst %.txt,%.xml,$(MAN_TXT)) 14_MAN_HTML=$(patsubst %.txt,%.html,$(MAN_TXT)) 15 16MAN_XML=$(addprefix $(OUTPUT),$(_MAN_XML)) 17MAN_HTML=$(addprefix $(OUTPUT),$(_MAN_HTML)) 18 19ARTICLES = 20# with their own formatting rules. 21SP_ARTICLES = 22API_DOCS = $(patsubst %.txt,%,$(filter-out technical/api-index-skel.txt technical/api-index.txt, $(wildcard technical/api-*.txt))) 23SP_ARTICLES += $(API_DOCS) 24SP_ARTICLES += technical/api-index 25 26_DOC_HTML = $(_MAN_HTML) 27_DOC_HTML+=$(patsubst %,%.html,$(ARTICLES) $(SP_ARTICLES)) 28DOC_HTML=$(addprefix $(OUTPUT),$(_DOC_HTML)) 29 30_DOC_MAN1=$(patsubst %.txt,%.1,$(MAN1_TXT)) 31_DOC_MAN5=$(patsubst %.txt,%.5,$(MAN5_TXT)) 32_DOC_MAN7=$(patsubst %.txt,%.7,$(MAN7_TXT)) 33 34DOC_MAN1=$(addprefix $(OUTPUT),$(_DOC_MAN1)) 35DOC_MAN5=$(addprefix $(OUTPUT),$(_DOC_MAN5)) 36DOC_MAN7=$(addprefix $(OUTPUT),$(_DOC_MAN7)) 37 38# Make the path relative to DESTDIR, not prefix 39ifndef DESTDIR 40prefix?=$(HOME) 41endif 42bindir?=$(prefix)/bin 43htmldir?=$(prefix)/share/doc/perf-doc 44pdfdir?=$(prefix)/share/doc/perf-doc 45mandir?=$(prefix)/share/man 46man1dir=$(mandir)/man1 47man5dir=$(mandir)/man5 48man7dir=$(mandir)/man7 49 50ASCIIDOC=asciidoc 51ASCIIDOC_EXTRA += --unsafe -f asciidoc.conf 52ASCIIDOC_HTML = xhtml11 53MANPAGE_XSL = manpage-normal.xsl 54XMLTO_EXTRA = 55INSTALL?=install 56RM ?= rm -f 57DOC_REF = origin/man 58HTML_REF = origin/html 59 60ifdef USE_ASCIIDOCTOR 61ASCIIDOC = asciidoctor 62ASCIIDOC_EXTRA += -a compat-mode 63ASCIIDOC_EXTRA += -I. -rasciidoctor-extensions 64ASCIIDOC_EXTRA += -a mansource="perf" -a manmanual="perf Manual" 65ASCIIDOC_HTML = xhtml5 66endif 67 68infodir?=$(prefix)/share/info 69MAKEINFO=makeinfo 70INSTALL_INFO=install-info 71DOCBOOK2X_TEXI=docbook2x-texi 72DBLATEX=dblatex 73XMLTO=xmlto 74ifndef PERL_PATH 75 PERL_PATH = /usr/bin/perl 76endif 77 78-include ../config.mak.autogen 79-include ../config.mak 80 81_tmp_tool_path := $(call get-executable,$(ASCIIDOC)) 82ifeq ($(_tmp_tool_path),) 83 missing_tools = $(ASCIIDOC) 84endif 85 86ifndef USE_ASCIIDOCTOR 87_tmp_tool_path := $(call get-executable,$(XMLTO)) 88ifeq ($(_tmp_tool_path),) 89 missing_tools += $(XMLTO) 90endif 91endif 92 93# 94# For asciidoc ... 95# -7.1.2, no extra settings are needed. 96# 8.0-, set ASCIIDOC8. 97# 98 99# 100# For docbook-xsl ... 101# -1.68.1, set ASCIIDOC_NO_ROFF? (based on changelog from 1.73.0) 102# 1.69.0, no extra settings are needed? 103# 1.69.1-1.71.0, set DOCBOOK_SUPPRESS_SP? 104# 1.71.1, no extra settings are needed? 105# 1.72.0, set DOCBOOK_XSL_172. 106# 1.73.0-, set ASCIIDOC_NO_ROFF 107# 108 109# 110# If you had been using DOCBOOK_XSL_172 in an attempt to get rid 111# of 'the ".ft C" problem' in your generated manpages, and you 112# instead ended up with weird characters around callouts, try 113# using ASCIIDOC_NO_ROFF instead (it works fine with ASCIIDOC8). 114# 115 116ifdef ASCIIDOC8 117ASCIIDOC_EXTRA += -a asciidoc7compatible 118endif 119ifdef DOCBOOK_XSL_172 120ASCIIDOC_EXTRA += -a perf-asciidoc-no-roff 121MANPAGE_XSL = manpage-1.72.xsl 122else 123 ifdef ASCIIDOC_NO_ROFF 124 # docbook-xsl after 1.72 needs the regular XSL, but will not 125 # pass-thru raw roff codes from asciidoc.conf, so turn them off. 126 ASCIIDOC_EXTRA += -a perf-asciidoc-no-roff 127 endif 128endif 129ifdef MAN_BOLD_LITERAL 130XMLTO_EXTRA += -m manpage-bold-literal.xsl 131endif 132ifdef DOCBOOK_SUPPRESS_SP 133XMLTO_EXTRA += -m manpage-suppress-sp.xsl 134endif 135 136SHELL_PATH ?= $(SHELL) 137# Shell quote; 138SHELL_PATH_SQ = $(subst ','\'',$(SHELL_PATH)) 139 140# 141# Please note that there is a minor bug in asciidoc. 142# The version after 6.0.3 _will_ include the patch found here: 143# http://marc.theaimsgroup.com/?l=perf&m=111558757202243&w=2 144# 145# Until that version is released you may have to apply the patch 146# yourself - yes, all 6 characters of it! 147# 148 149QUIET_SUBDIR0 = +$(MAKE) -C # space to separate -C and subdir 150QUIET_SUBDIR1 = 151 152ifneq ($(findstring $(MAKEFLAGS),w),w) 153PRINT_DIR = --no-print-directory 154else # "make -w" 155NO_SUBDIR = : 156endif 157 158ifneq ($(findstring $(MAKEFLAGS),s),s) 159ifneq ($(V),1) 160 QUIET_ASCIIDOC = @echo ' ASCIIDOC '$@; 161 QUIET_XMLTO = @echo ' XMLTO '$@; 162 QUIET_DB2TEXI = @echo ' DB2TEXI '$@; 163 QUIET_MAKEINFO = @echo ' MAKEINFO '$@; 164 QUIET_DBLATEX = @echo ' DBLATEX '$@; 165 QUIET_XSLTPROC = @echo ' XSLTPROC '$@; 166 QUIET_GEN = @echo ' GEN '$@; 167 QUIET_STDERR = 2> /dev/null 168 QUIET_SUBDIR0 = +@subdir= 169 QUIET_SUBDIR1 = ;$(NO_SUBDIR) \ 170 echo ' SUBDIR ' $$subdir; \ 171 $(MAKE) $(PRINT_DIR) -C $$subdir 172 export V 173endif 174endif 175 176all: html man info 177 178html: $(DOC_HTML) 179 180$(DOC_HTML) $(DOC_MAN1) $(DOC_MAN5) $(DOC_MAN7): asciidoc.conf 181 182man: man1 man5 man7 183man1: $(DOC_MAN1) 184man5: $(DOC_MAN5) 185man7: $(DOC_MAN7) 186 187info: $(OUTPUT)perf.info $(OUTPUT)perfman.info 188 189install: install-man 190 191check-man-tools: 192ifdef missing_tools 193 $(error "You need to install $(missing_tools) for man pages") 194endif 195 196do-install-man: man 197 $(call QUIET_INSTALL, Documentation-man) \ 198 $(INSTALL) -d -m 755 $(DESTDIR)$(man1dir); \ 199# $(INSTALL) -d -m 755 $(DESTDIR)$(man5dir); \ 200# $(INSTALL) -d -m 755 $(DESTDIR)$(man7dir); \ 201 $(INSTALL) -m 644 $(DOC_MAN1) $(DESTDIR)$(man1dir); \ 202# $(INSTALL) -m 644 $(DOC_MAN5) $(DESTDIR)$(man5dir); \ 203# $(INSTALL) -m 644 $(DOC_MAN7) $(DESTDIR)$(man7dir) 204 205install-man: check-man-tools man do-install-man 206 207ifdef missing_tools 208 DO_INSTALL_MAN = $(warning Please install $(missing_tools) to have the man pages installed) 209else 210 DO_INSTALL_MAN = do-install-man 211endif 212 213try-install-man: $(DO_INSTALL_MAN) 214 215install-info: info 216 $(call QUIET_INSTALL, Documentation-info) \ 217 $(INSTALL) -d -m 755 $(DESTDIR)$(infodir); \ 218 $(INSTALL) -m 644 $(OUTPUT)perf.info $(OUTPUT)perfman.info $(DESTDIR)$(infodir); \ 219 if test -r $(DESTDIR)$(infodir)/dir; then \ 220 $(INSTALL_INFO) --info-dir=$(DESTDIR)$(infodir) perf.info ;\ 221 $(INSTALL_INFO) --info-dir=$(DESTDIR)$(infodir) perfman.info ;\ 222 else \ 223 echo "No directory found in $(DESTDIR)$(infodir)" >&2 ; \ 224 fi 225 226#install-html: html 227# '$(SHELL_PATH_SQ)' ./install-webdoc.sh $(DESTDIR)$(htmldir) 228 229 230# 231# Determine "include::" file references in asciidoc files. 232# 233$(OUTPUT)doc.dep : $(wildcard *.txt) build-docdep.perl 234 $(QUIET_GEN)$(RM) $@+ $@ && \ 235 $(PERL_PATH) ./build-docdep.perl >$@+ $(QUIET_STDERR) && \ 236 mv $@+ $@ 237 238-include $(OUTPUT)doc.dep 239 240CLEAN_FILES = \ 241 $(MAN_XML) $(addsuffix +,$(MAN_XML)) \ 242 $(MAN_HTML) $(addsuffix +,$(MAN_HTML)) \ 243 $(DOC_HTML) $(DOC_MAN1) $(DOC_MAN5) $(DOC_MAN7) \ 244 $(OUTPUT)*.texi $(OUTPUT)*.texi+ $(OUTPUT)*.texi++ \ 245 $(OUTPUT)perf.info $(OUTPUT)perfman.info \ 246 $(OUTPUT)howto-index.txt $(OUTPUT)howto/*.html $(OUTPUT)doc.dep \ 247 $(OUTPUT)technical/api-*.html $(OUTPUT)technical/api-index.txt 248clean: 249 $(call QUIET_CLEAN, Documentation) $(RM) $(CLEAN_FILES) 250 251$(MAN_HTML): $(OUTPUT)%.html : %.txt 252 $(QUIET_ASCIIDOC)$(RM) $@+ $@ && \ 253 $(ASCIIDOC) -b $(ASCIIDOC_HTML) -d manpage \ 254 $(ASCIIDOC_EXTRA) -aperf_version=$(PERF_VERSION) -o $@+ $< && \ 255 mv $@+ $@ 256 257ifdef USE_ASCIIDOCTOR 258$(OUTPUT)%.1 $(OUTPUT)%.5 $(OUTPUT)%.7 : %.txt 259 $(QUIET_ASCIIDOC)$(RM) $@+ $@ && \ 260 $(ASCIIDOC) -b manpage -d manpage \ 261 $(ASCIIDOC_EXTRA) -aperf_version=$(PERF_VERSION) -o $@+ $< && \ 262 mv $@+ $@ 263endif 264 265$(OUTPUT)%.1 $(OUTPUT)%.5 $(OUTPUT)%.7 : $(OUTPUT)%.xml 266 $(QUIET_XMLTO)$(RM) $@ && \ 267 $(XMLTO) -o $(OUTPUT). -m $(MANPAGE_XSL) $(XMLTO_EXTRA) man $< 268 269$(OUTPUT)%.xml : %.txt 270 $(QUIET_ASCIIDOC)$(RM) $@+ $@ && \ 271 $(ASCIIDOC) -b docbook -d manpage \ 272 $(ASCIIDOC_EXTRA) -aperf_version=$(PERF_VERSION) \ 273 -aperf_date=$(shell git log -1 --pretty="format:%cd" \ 274 --date=short $<) \ 275 -o $@+ $< && \ 276 mv $@+ $@ 277 278XSLT = docbook.xsl 279XSLTOPTS = --xinclude --stringparam html.stylesheet docbook-xsl.css 280 281$(OUTPUT)perfman.texi: $(MAN_XML) cat-texi.perl 282 $(QUIET_DB2TEXI)$(RM) $@+ $@ && \ 283 ($(foreach xml,$(MAN_XML),$(DOCBOOK2X_TEXI) --encoding=UTF-8 \ 284 --to-stdout $(xml) &&) true) > $@++ && \ 285 $(PERL_PATH) cat-texi.perl $@ <$@++ >$@+ && \ 286 rm $@++ && \ 287 mv $@+ $@ 288 289$(OUTPUT)perfman.info: $(OUTPUT)perfman.texi 290 $(QUIET_MAKEINFO)$(MAKEINFO) --no-split --no-validate -o $@ $*.texi 291 292$(patsubst %.txt,%.texi,$(MAN_TXT)): %.texi : %.xml 293 $(QUIET_DB2TEXI)$(RM) $@+ $@ && \ 294 $(DOCBOOK2X_TEXI) --to-stdout $*.xml >$@+ && \ 295 mv $@+ $@ 296 297howto-index.txt: howto-index.sh $(wildcard howto/*.txt) 298 $(QUIET_GEN)$(RM) $@+ $@ && \ 299 '$(SHELL_PATH_SQ)' ./howto-index.sh $(wildcard howto/*.txt) >$@+ && \ 300 mv $@+ $@ 301 302$(patsubst %,%.html,$(ARTICLES)) : %.html : %.txt 303 $(QUIET_ASCIIDOC)$(ASCIIDOC) -b $(ASCIIDOC_HTML) $*.txt 304 305WEBDOC_DEST = /pub/software/tools/perf/docs 306 307$(patsubst %.txt,%.html,$(wildcard howto/*.txt)): %.html : %.txt 308 $(QUIET_ASCIIDOC)$(RM) $@+ $@ && \ 309 sed -e '1,/^$$/d' $< | $(ASCIIDOC) -b $(ASCIIDOC_HTML) - >$@+ && \ 310 mv $@+ $@ 311 312# UNIMPLEMENTED 313#install-webdoc : html 314# '$(SHELL_PATH_SQ)' ./install-webdoc.sh $(WEBDOC_DEST) 315 316# quick-install: quick-install-man 317 318# quick-install-man: 319# '$(SHELL_PATH_SQ)' ./install-doc-quick.sh $(DOC_REF) $(DESTDIR)$(mandir) 320 321#quick-install-html: 322# '$(SHELL_PATH_SQ)' ./install-doc-quick.sh $(HTML_REF) $(DESTDIR)$(htmldir) 323