summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Braun <rbraun@sceen.net>2017-03-23 22:45:59 +0100
committerRichard Braun <rbraun@sceen.net>2017-03-23 23:00:27 +0100
commit5c5efc7d176a08a3486811f3a3a9c37e21e7a67d (patch)
treea37a01d3b0009691dafc47f9a2ab4578a1080746
parentd7130c4ea367ed0ee560df6c0095d57ad7ccf0e0 (diff)
Make the build system handle Asciidoc documentation
Asciidoc was selected because of its text-based lightweight markup nature, its extensibility and configurability, and the range of available output formats. Most importantly, it's an acceptable way to write Unix man pages and guides. Despite the surprising lack of pre-existing autotools support, it was quite easy to implement correctly.
-rw-r--r--Makefile.am20
-rw-r--r--Makefrag.am1
-rw-r--r--configure.ac8
-rw-r--r--doc/Makefrag.am23
-rw-r--r--tools/m4/ax_check_a2x.m45
-rw-r--r--tools/m4/ax_check_asciidoc.m45
6 files changed, 59 insertions, 3 deletions
diff --git a/Makefile.am b/Makefile.am
index 08511002..809e5a2f 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -2,6 +2,7 @@ EXTRA_DIST =
MOSTLYCLEANFILES =
AM_CPPFLAGS =
AM_CFLAGS =
+SUFFIXES =
AM_CPPFLAGS += -pipe
AM_CPPFLAGS += -imacros config.h
@@ -36,12 +37,27 @@ AM_CFLAGS += -fno-stack-protector
AM_CFLAGS += -nostdlib
-SUFFIXES = .lds .lds.S
+SUFFIXES += .lds .lds.S
.lds.S.lds:
$(AM_V_GEN)$(CPP) -P $(AM_CPPFLAGS) -o $@ $<
-exec_bootdir = $(exec_prefix)/boot
+ASCIIDOC_FLAGS = -d manpage -a revnumber=@PACKAGE_VERSION@
+A2X_FLAGS = -d manpage -a revnumber=@PACKAGE_VERSION@
+
+SUFFIXES += .9 .9.html .9.xml .9.txt
+
+.9.txt.9.html:
+ $(AM_V_GEN)$(ASCIIDOC) $(ASCIIDOC_FLAGS) -b html5 -o $(abs_top_builddir)/$@ $<
+
+# Expose intermediate DocBook files for correct parallel builds.
+.9.txt.9.xml:
+ $(AM_V_GEN)$(ASCIIDOC) $(ASCIIDOC_FLAGS) -b docbook -o $(abs_top_builddir)/$@ $<
+
+.9.xml.9:
+ $(AM_V_GEN)$(A2X) $(A2X_FLAGS) -f manpage --xsltproc-opts="-o $(abs_top_builddir)/$@" $<
+
+exec_bootdir = /boot
exec_boot_PROGRAMS = x15
x15_DEPENDENCIES = arch/$(arch)/x15.lds
MOSTLYCLEANFILES += arch/$(arch)/x15.lds
diff --git a/Makefrag.am b/Makefrag.am
index f4f8f631..b16fd8f5 100644
--- a/Makefrag.am
+++ b/Makefrag.am
@@ -1,4 +1,5 @@
include arch/x86/Makefrag.am
+include doc/Makefrag.am
EXTRA_DIST += tools/qemu.sh
diff --git a/configure.ac b/configure.ac
index 6bd2e8b7..9dd3bc0b 100644
--- a/configure.ac
+++ b/configure.ac
@@ -4,18 +4,24 @@ AC_CONFIG_SRCDIR([kern/config.h])
AC_CONFIG_AUX_DIR([build-aux])
AC_CONFIG_MACRO_DIR([tools/m4])
+# Artificially create the doc subdirectory since Automake apparently
+# won't do it itself.
+AC_CONFIG_COMMANDS([doc/.empty])
+
AM_INIT_AUTOMAKE([foreign subdir-objects 1.11])
m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])],
[AC_SUBST([AM_DEFAULT_VERBOSITY], [1])])
-AC_PREFIX_DEFAULT([])
AC_CANONICAL_HOST
AC_PROG_CPP
AC_PROG_CC
AM_PROG_AS
AM_PROG_CC_C_O
+AX_CHECK_ASCIIDOC([AC_MSG_NOTICE([asciidoc not found, not building html documentation])])
+AX_CHECK_A2X([AC_MSG_NOTICE([a2x not found, not building man pages])])
+
# Disable PIE if enabled by default
AX_APPEND_COMPILE_FLAGS([-no-pie -fno-pie])
diff --git a/doc/Makefrag.am b/doc/Makefrag.am
new file mode 100644
index 00000000..0518f6f1
--- /dev/null
+++ b/doc/Makefrag.am
@@ -0,0 +1,23 @@
+x15_DOCS =
+
+x15_SOURCES += $(x15_DOCS)
+
+if HAVE_ASCIIDOC
+
+html_DATA = $(x15_DOCS:%.9.txt=%.9.html)
+MOSTLYCLEANFILES += $(html_DATA)
+
+html: $(html_DATA)
+.PHONY: html
+
+endif HAVE_ASCIIDOC
+
+if HAVE_A2X
+
+man9_MANS = $(x15_DOCS:%.9.txt=%.9)
+MOSTLYCLEANFILES += $(man9_MANS)
+
+man: $(man9_MANS)
+.PHONY: man
+
+endif HAVE_A2X
diff --git a/tools/m4/ax_check_a2x.m4 b/tools/m4/ax_check_a2x.m4
new file mode 100644
index 00000000..438e2478
--- /dev/null
+++ b/tools/m4/ax_check_a2x.m4
@@ -0,0 +1,5 @@
+AC_DEFUN([AX_CHECK_A2X],
+ [AC_ARG_VAR([A2X], [path to a2x command])
+ AC_CHECK_PROG([A2X], [a2x], [a2x])
+ AS_IF([test x"$A2X" = x], [$1])
+ AM_CONDITIONAL([HAVE_A2X], [test x"$A2X" != x])])
diff --git a/tools/m4/ax_check_asciidoc.m4 b/tools/m4/ax_check_asciidoc.m4
new file mode 100644
index 00000000..5f6132ac
--- /dev/null
+++ b/tools/m4/ax_check_asciidoc.m4
@@ -0,0 +1,5 @@
+AC_DEFUN([AX_CHECK_ASCIIDOC],
+ [AC_ARG_VAR([ASCIIDOC], [path to asciidoc command])
+ AC_CHECK_PROG([ASCIIDOC], [asciidoc], [asciidoc])
+ AS_IF([test x"$ASCIIDOC" = x], [$1])
+ AM_CONDITIONAL([HAVE_ASCIIDOC], [test x"$ASCIIDOC" != x])])