From 6a9c6a3b2e6048b5880921b4c377684b59ca35f3 Mon Sep 17 00:00:00 2001 From: Pierre Pronchery Date: Fri, 9 May 2014 03:38:33 +0200 Subject: [PATCH] Imported a manual page for config(1) --- Makefile | 2 + doc/Makefile | 16 +++- doc/config.xml | 114 ++++++++++++++++++++++++++++ doc/docbook.sh | 191 +++++++++++++++++++++++++++++++++++++++++++++++ doc/project.conf | 16 +++- tools/config.c | 4 +- 6 files changed, 336 insertions(+), 7 deletions(-) create mode 100644 doc/config.xml create mode 100755 doc/docbook.sh diff --git a/Makefile b/Makefile index 71a17a2..10d19a1 100644 --- a/Makefile +++ b/Makefile @@ -31,6 +31,8 @@ dist: $(PACKAGE)-$(VERSION)/data/pkgconfig.sh \ $(PACKAGE)-$(VERSION)/data/project.conf \ $(PACKAGE)-$(VERSION)/doc/Makefile \ + $(PACKAGE)-$(VERSION)/doc/config.xml \ + $(PACKAGE)-$(VERSION)/doc/docbook.sh \ $(PACKAGE)-$(VERSION)/doc/gtkdoc.sh \ $(PACKAGE)-$(VERSION)/doc/project.conf \ $(PACKAGE)-$(VERSION)/doc/gtkdoc/Makefile \ diff --git a/doc/Makefile b/doc/Makefile index 83e5ce3..8223a15 100644 --- a/doc/Makefile +++ b/doc/Makefile @@ -1,5 +1,5 @@ SUBDIRS = gtkdoc -TARGETS = gtkdoc/libSystem.types gtkdoc/tmpl.stamp gtkdoc/sgml.stamp gtkdoc/html.stamp +TARGETS = config.1 config.html gtkdoc/libSystem.types gtkdoc/tmpl.stamp gtkdoc/sgml.stamp gtkdoc/html.stamp PREFIX = /usr/local DESTDIR = RM = rm -f @@ -13,6 +13,12 @@ all: subdirs $(TARGETS) subdirs: @for i in $(SUBDIRS); do (cd "$$i" && $(MAKE)) || exit; done +config.1: config.xml + ./docbook.sh -P "$(PREFIX)" -- "config.1" + +config.html: config.xml + ./docbook.sh -P "$(PREFIX)" -- "config.html" + gtkdoc/libSystem.types: ./gtkdoc.sh -P "$(PREFIX)" -- "gtkdoc/libSystem.types" @@ -27,21 +33,25 @@ gtkdoc/html.stamp: gtkdoc/libSystem-docs.xml gtkdoc/sgml.stamp gtkdoc/tmpl.stamp clean: @for i in $(SUBDIRS); do (cd "$$i" && $(MAKE) clean) || exit; done - $(RM) -- $(gtkdoc/libSystem.types_OBJS) $(gtkdoc/tmpl.stamp_OBJS) $(gtkdoc/sgml.stamp_OBJS) $(gtkdoc/html.stamp_OBJS) + $(RM) -- $(config.1_OBJS) $(config.html_OBJS) $(gtkdoc/libSystem.types_OBJS) $(gtkdoc/tmpl.stamp_OBJS) $(gtkdoc/sgml.stamp_OBJS) $(gtkdoc/html.stamp_OBJS) ./gtkdoc.sh -c -P "$(PREFIX)" -- "gtkdoc/html.stamp" distclean: @for i in $(SUBDIRS); do (cd "$$i" && $(MAKE) distclean) || exit; done - $(RM) -- $(gtkdoc/libSystem.types_OBJS) $(gtkdoc/tmpl.stamp_OBJS) $(gtkdoc/sgml.stamp_OBJS) $(gtkdoc/html.stamp_OBJS) + $(RM) -- $(config.1_OBJS) $(config.html_OBJS) $(gtkdoc/libSystem.types_OBJS) $(gtkdoc/tmpl.stamp_OBJS) $(gtkdoc/sgml.stamp_OBJS) $(gtkdoc/html.stamp_OBJS) ./gtkdoc.sh -c -P "$(PREFIX)" -- "gtkdoc/html.stamp" $(RM) -- $(TARGETS) install: $(TARGETS) @for i in $(SUBDIRS); do (cd "$$i" && $(MAKE) install) || exit; done + ./docbook.sh -P "$(DESTDIR)$(PREFIX)" -i -- "config.1" + ./docbook.sh -P "$(DESTDIR)$(PREFIX)" -i -- "config.html" ./gtkdoc.sh -P "$(DESTDIR)$(PREFIX)" -i -- "gtkdoc/html.stamp" uninstall: @for i in $(SUBDIRS); do (cd "$$i" && $(MAKE) uninstall) || exit; done + ./docbook.sh -P "$(DESTDIR)$(PREFIX)" -u -- "config.1" + ./docbook.sh -P "$(DESTDIR)$(PREFIX)" -u -- "config.html" ./gtkdoc.sh -P "$(DESTDIR)$(PREFIX)" -u -- "gtkdoc/html.stamp" .PHONY: all subdirs clean distclean install uninstall diff --git a/doc/config.xml b/doc/config.xml new file mode 100644 index 0000000..c23ea4c --- /dev/null +++ b/doc/config.xml @@ -0,0 +1,114 @@ + + + + + + + + + + + +]> + + + &title; + &package; + + + &firstname; + &surname; + Code and documentation. +
+ &email; +
+
+
+ + 2014 + &firstname; &surname; <&email;> + + + This manual page was written for the DeforaOS project (and may be + used by others). + Permission is granted to copy, distribute and/or modify this + document under the terms of the GNU General Public License, + Version 3 as published by the Free Software Foundation. + +
+ + &name; + §ion; + + + &name; + &purpose; + + + + &name; + + filename + + + section. + variable + + + + &name; + + + filename + + + section. + variable + =value + + + + + Description + &name; is a generic tool for parsing and updating + configuration files. + + + Options + &name; expects the name of a variable to be specified + on the command line, optionally following a section name delimited with a dot + ("."). In write mode, a new value can be set after an equal ("=") delimiter. + The following options are available: + + + + + Filename to parse or update. + + + + + + Be more verbose. + + + + + + Bugs + Issues can be listed and reported at . + + + See also + + + configure + 1 + + + +
+ diff --git a/doc/docbook.sh b/doc/docbook.sh new file mode 100755 index 0000000..73a435a --- /dev/null +++ b/doc/docbook.sh @@ -0,0 +1,191 @@ +#!/bin/sh +#$Id$ +#Copyright (c) 2012-2014 Pierre Pronchery +# +#Redistribution and use in source and binary forms, with or without +#modification, are permitted provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, this +# list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +#THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +#AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +#IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +#DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +#FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +#DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +#SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +#CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +#OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +#OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + + +#variables +PREFIX="/usr/local" +[ -f "../config.sh" ] && . "../config.sh" +#executables +DEBUG="_debug" +FOP="fop" +INSTALL="install -m 0644" +MKDIR="mkdir -m 0755 -p" +RM="rm -f" +XMLLINT="xmllint" +XSLTPROC="xsltproc --nonet --xinclude" + + +#functions +#debug +_debug() +{ + echo "$@" 1>&2 + "$@" +} + + +#docbook +_docbook() +{ + target="$1" + + source="${target%.*}.xml" + ext="${target##*.}" + ext="${ext##.}" + case "$ext" in + html) + XSL="http://docbook.sourceforge.net/release/xsl/current/xhtml/docbook.xsl" + [ -f "${target%.*}.xsl" ] && XSL="${target%.*}.xsl" + $DEBUG $XSLTPROC -o "$target" "$XSL" "$source" + ;; + pdf) + XSL="http://docbook.sourceforge.net/release/xsl/current/fo/docbook.xsl" + [ -f "${target%.*}.xsl" ] && XSL="${target%.*}.xsl" + $DEBUG $XSLTPROC -o "${target%.*}.fo" "$XSL" "$source" && + $DEBUG $FOP -fo "${target%.*}.fo" -pdf "$target" + $RM -- "${target%.*}.fo" + ;; + 1|2|3|4|5|6|7|8|9) + XSL="http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl" + $DEBUG $XSLTPROC -o "$target" "$XSL" "$source" + ;; + *) + echo "$0: $target: Unknown type" 1>&2 + return 2 + ;; + esac + + if [ $? -ne 0 ]; then + echo "$0: $target: Could not create page" 1>&2 + $RM -- "$target" + return 2 + fi +} + + +#error +_error() +{ + echo "docbook.sh: $@" 1>&2 + return 2 +} + + +#usage +_usage() +{ + echo "Usage: docbook.sh [-c|-i|-u][-P prefix] target..." 1>&2 + return 1 +} + + +#main +clean=0 +install=0 +uninstall=0 +while getopts "ciuP:" name; do + case "$name" in + c) + clean=1 + ;; + i) + uninstall=0 + install=1 + ;; + u) + install=0 + uninstall=1 + ;; + P) + PREFIX="$OPTARG" + ;; + ?) + _usage + exit $? + ;; + esac +done +shift $((OPTIND - 1)) +if [ $# -eq 0 ]; then + _usage + exit $? +fi + +#check the variables +if [ -z "$PACKAGE" ]; then + _error "The PACKAGE variable needs to be set" + exit $? +fi + +[ -z "$DATADIR" ] && DATADIR="$PREFIX/share" +[ -z "$MANDIR" ] && MANDIR="$DATADIR/man" + +while [ $# -gt 0 ]; do + target="$1" + shift + + #determine the type + ext="${target##*.}" + ext="${ext##.}" + case "$ext" in + html) + source="${target%.*}.xml" + xpath="string(/refentry/refmeta/manvolnum)" + section=$($XMLLINT --xpath "$xpath" "$source") + [ $? -eq 0 -a -n "$section" ] || exit 2 + instdir="$DATADIR/man/html$section" + ;; + pdf) + instdir="$DATADIR/doc/$ext/$PACKAGE" + ;; + 1|2|3|4|5|6|7|8|9) + instdir="$MANDIR/man$ext" + ;; + *) + echo "$0: $target: Unknown type" 1>&2 + exit 2 + ;; + esac + + #clean + [ "$clean" -ne 0 ] && continue + + #uninstall + if [ "$uninstall" -eq 1 ]; then + $DEBUG $RM -- "$instdir/$target" || exit 2 + continue + fi + + #install + if [ "$install" -eq 1 ]; then + $DEBUG $MKDIR -- "$instdir" || exit 2 + $DEBUG $INSTALL "$target" "$instdir/$target" || exit 2 + continue + fi + + #create + #XXX ignore errors + _docbook "$target" || break +done diff --git a/doc/project.conf b/doc/project.conf index 0f431a9..a0df09c 100644 --- a/doc/project.conf +++ b/doc/project.conf @@ -1,6 +1,18 @@ subdirs=gtkdoc -targets=gtkdoc/libSystem.types,gtkdoc/tmpl.stamp,gtkdoc/sgml.stamp,gtkdoc/html.stamp -dist=Makefile,gtkdoc.sh +targets=config.1,config.html,gtkdoc/libSystem.types,gtkdoc/tmpl.stamp,gtkdoc/sgml.stamp,gtkdoc/html.stamp +dist=Makefile,config.xml,docbook.sh,gtkdoc.sh + +[config.1] +type=script +script=./docbook.sh +depends=config.xml +install= + +[config.html] +type=script +script=./docbook.sh +depends=config.xml +install= [gtkdoc/libSystem.types] type=script diff --git a/tools/config.c b/tools/config.c index 43aab97..69832ae 100644 --- a/tools/config.c +++ b/tools/config.c @@ -84,8 +84,8 @@ static int _error(char const * progname, int ret) /* usage */ static int _usage(void) { - fputs("Usage: config [-v] -f filename [section.]key\n" -" config [-v] -w -f filename [section.]key[=value]\n", stderr); + fputs("Usage: config -f filename [-v] [section.]key\n" +" config -w -f filename [-v] [section.]key[=value]\n", stderr); return 1; }