diff options
author | Richard Braun <rbraun@sceen.net> | 2017-03-23 22:45:59 +0100 |
---|---|---|
committer | Richard Braun <rbraun@sceen.net> | 2017-03-23 23:00:27 +0100 |
commit | 5c5efc7d176a08a3486811f3a3a9c37e21e7a67d (patch) | |
tree | a37a01d3b0009691dafc47f9a2ab4578a1080746 | |
parent | d7130c4ea367ed0ee560df6c0095d57ad7ccf0e0 (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.am | 20 | ||||
-rw-r--r-- | Makefrag.am | 1 | ||||
-rw-r--r-- | configure.ac | 8 | ||||
-rw-r--r-- | doc/Makefrag.am | 23 | ||||
-rw-r--r-- | tools/m4/ax_check_a2x.m4 | 5 | ||||
-rw-r--r-- | tools/m4/ax_check_asciidoc.m4 | 5 |
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])]) |