-EXTRA_DIST = ustctl.1 ust-consumerd.1 usttrace.1
-man_MANS = ustctl.1 ust-consumerd.1 usttrace.1
+# SPDX-FileCopyrightText: 2023 EfficiOS, Inc
+#
+# SPDX-License-Identifier: LGPL-2.1-only
+
+# Man pages are only built if they are enabled at configure time.
+#
+# They should always be built before creating a distribution tarball.
+
+# Function which adds the source directory prefix and adds a given suffix:
+manaddsuffix = $(addsuffix $(1),$(addprefix $(srcdir)/,$(2)))
+
+# List only the names without the .*.txt extension here:
+MAN1_NAMES = \
+ lttng-gen-tp
+MAN3_NAMES = \
+ lttng-ust \
+ lttng-ust-dl \
+ lttng-ust-cyg-profile \
+ lttng_ust_tracef \
+ lttng_ust_tracelog \
+ tracef \
+ tracelog
+
+# Man page aliases (generated from other sources):
+MAN3_ALIASES = lttng_ust_vtracef.3 lttng_ust_vtracelog.3
+
+# troff man pages:
+MAN3_TROFF = \
+ do_tracepoint.3 \
+ lttng_ust_do_tracepoint.3 \
+ lttng_ust_tracepoint.3 \
+ lttng_ust_tracepoint_enabled.3 \
+ tracepoint.3 \
+ tracepoint_enabled.3
+
+# AsciiDoc sources and outputs:
+MAN1_TXT = $(call manaddsuffix,.1.txt,$(MAN1_NAMES))
+MAN3_TXT = $(call manaddsuffix,.3.txt,$(MAN3_NAMES))
+MAN_TXT = $(MAN1_TXT) $(MAN3_TXT) $(MAN8_TXT)
+MAN_XML = $(patsubst $(srcdir)/%.txt,%.xml,$(MAN_TXT))
+
+# Common AsciiDoc source files:
+COMMON_TXT = \
+ $(srcdir)/common-footer.txt \
+ $(srcdir)/common-authors.txt \
+ $(srcdir)/common-copyrights.txt \
+ $(srcdir)/log-levels.txt \
+ $(srcdir)/tracef-tracelog-limitations.txt
+
+# AsciiDoc configuration and XSL files:
+ASCIIDOC_CONF = $(srcdir)/asciidoc.conf
+XSL_FILE = $(srcdir)/manpage.xsl
+
+# Common dependencies:
+COMMON_DEPS = $(ASCIIDOC_CONF) $(COMMON_TXT)
+
+# Man pages destinations:
+MAN1 = $(addsuffix .1,$(MAN1_NAMES))
+MAN3 = $(addsuffix .3,$(MAN3_NAMES)) $(MAN3_ALIASES)
+MAN = $(MAN1) $(MAN3)
+
+if ENABLE_MAN_PAGES
+# At this point, we know the user asked to build the man pages.
+if HAVE_ASCIIDOC_XMLTO
+
+asciidoc_verbose = $(asciidoc_verbose_@AM_V@)
+asciidoc_verbose_ = $(asciidoc_verbose_@AM_DEFAULT_V@)
+asciidoc_verbose_0 = @echo " ASCIIDOC " $@;
+
+xmlto_verbose = $(xmlto_verbose_@AM_V@)
+xmlto_verbose_ = $(xmlto_verbose_@AM_DEFAULT_V@)
+xmlto_verbose_0 = @echo " XMLTO " $@;
+
+xmlto_verbose_out = $(xmlto_verbose_out_@AM_V@)
+xmlto_verbose_out_ = $(xmlto_verbose_out_@AM_DEFAULT_V@)
+xmlto_verbose_out_0 = 2>/dev/null
+
+# Tools to execute:
+ADOC = $(asciidoc_verbose)$(ASCIIDOC) -v -f $(ASCIIDOC_CONF) -d manpage \
+ -a mansource="LTTng" \
+ -a manmanual="LTTng Manual" \
+ -a manversion="$(PACKAGE_VERSION)" \
+ -a lttng_version="$(LTTNG_UST_MAJOR_VERSION).$(LTTNG_UST_MINOR_VERSION)"
+
+ADOC_DOCBOOK = $(ADOC) -b docbook
+XTO = $(xmlto_verbose)$(XMLTO) -v -m $(XSL_FILE) man
+
+# Recipes:
+%.1.xml: $(srcdir)/%.1.txt $(COMMON_DEPS)
+ $(ADOC_DOCBOOK) -o $@ $<
+
+%.1: %.1.xml $(XSL_FILE)
+ $(XTO) $< $(xmlto_verbose_out)
+
+%.3.xml: $(srcdir)/%.3.txt $(COMMON_DEPS)
+ $(ADOC_DOCBOOK) -o $@ $<
+
+# These pair of files are generated by a single invocation of xmlto, use
+# an empty rule that depends on a fake intermediate file to track the
+# dependencies without resorting to Group Targets which were only
+# introduced in GNU Make 4.3.
+lttng_ust_tracef.3 lttng_ust_vtracef.3: lttng_ust_tracef.3.alias
+ @# Empty recipe to mark lttng_ust_tracef.3 and lttng_ust_vtracef.3 as rebuilt
+
+lttng_ust_tracelog.3 lttng_ust_vtracelog.3: lttng_ust_tracelog.3.alias
+ @# Empty recipe to mark lttng_ust_tracelog.3 and lttng_ust_vtracelog.3 as rebuilt
+
+
+.INTERMEDIATE: tracef.3.alias tracelog.3.alias lttng_ust_tracef.3.alias lttng_ust_tracelog.3.alias
+
+tracef.3.alias: tracef.3.xml $(XSL_FILE)
+ $(XTO) $< $(xmlto_verbose_out)
+
+tracelog.3.alias: tracelog.3.xml $(XSL_FILE)
+ $(XTO) $< $(xmlto_verbose_out)
+
+lttng_ust_tracef.3.alias: lttng_ust_tracef.3.xml $(XSL_FILE)
+ $(XTO) $< $(xmlto_verbose_out)
+
+lttng_ust_tracelog.3.alias: lttng_ust_tracelog.3.xml $(XSL_FILE)
+ $(XTO) $< $(xmlto_verbose_out)
+
+%.3: %.3.xml $(XSL_FILE)
+ $(XTO) $< $(xmlto_verbose_out)
+
+# Only clean the generated files if we have the tools to generate them again.
+CLEANFILES = $(MAN_XML) $(MAN)
+else # HAVE_ASCIIDOC_XMLTO
+# Create man page targets used to stop the build if we want to
+# build the man pages, but we don't have the necessary tools to do so.
+ERR_MSG = "Error: Cannot build target because asciidoc or xmlto tool is missing."
+ERR_MSG += "Make sure both tools are installed and run the configure script again."
+
+%.1: $(srcdir)/%.1.txt $(COMMON_DEPS)
+ @echo $(ERR_MSG)
+ @false
+
+%.3: $(srcdir)/%.3.txt $(COMMON_DEPS)
+ @echo $(ERR_MSG)
+ @false
+endif # HAVE_ASCIIDOC_XMLTO
+endif # ENABLE_MAN_PAGES
+
+# Start with empty distributed/installed man pages:
+dist_man1_MANS =
+dist_man3_MANS =
+EXTRA_DIST =
+
+if ENABLE_MAN_PAGES
+# Building man pages: we can install and distribute them.
+dist_man1_MANS += $(MAN1)
+dist_man3_MANS += $(MAN3) $(MAN3_TROFF)
+else # ENABLE_MAN_PAGES
+# Those are not known by automake yet because dist_man3_MANS is empty
+# at this point, so make sure they are distributed.
+EXTRA_DIST += $(MAN3_TROFF)
+endif # ENABLE_MAN_PAGES
+
+if !ENABLE_MAN_PAGES
+dist-hook:
+ @echo "Error: Please enable the man pages before creating a distribution tarball."
+ @false
+endif # !ENABLE_MAN_PAGES
+
+# Always distribute the source files.
+EXTRA_DIST += $(MAN_TXT) $(COMMON_TXT) $(XSL_FILE) $(ASCIIDOC_CONF) README.md