From f02f08fd808b0edaa65a9374ea6e63a56e8d5451 Mon Sep 17 00:00:00 2001 From: Pierre Pronchery Date: Sun, 21 Feb 2016 22:03:12 +0100 Subject: [PATCH] Build manual pages reproducibly --- doc/{panel-embed.xml => panel-embed.xml.in} | 1 + ...panel-message.xml => panel-message.xml.in} | 1 + doc/{panel-notify.xml => panel-notify.xml.in} | 1 + doc/{panel.xml => panel.xml.in} | 1 + doc/{panelctl.xml => panelctl.xml.in} | 1 + doc/project.conf | 58 +++-- doc/{wifibrowser.xml => wifibrowser.xml.in} | 1 + tools/project.conf | 2 +- tools/subst.sh | 205 ++++++++++++++++++ 9 files changed, 256 insertions(+), 15 deletions(-) rename doc/{panel-embed.xml => panel-embed.xml.in} (99%) rename doc/{panel-message.xml => panel-message.xml.in} (99%) rename doc/{panel-notify.xml => panel-notify.xml.in} (99%) rename doc/{panel.xml => panel.xml.in} (99%) rename doc/{panelctl.xml => panelctl.xml.in} (99%) rename doc/{wifibrowser.xml => wifibrowser.xml.in} (99%) create mode 100755 tools/subst.sh diff --git a/doc/panel-embed.xml b/doc/panel-embed.xml.in similarity index 99% rename from doc/panel-embed.xml rename to doc/panel-embed.xml.in index c734bec..fd1cb6e 100644 --- a/doc/panel-embed.xml +++ b/doc/panel-embed.xml.in @@ -15,6 +15,7 @@ &title; + @DATE@ &package; diff --git a/doc/panel-message.xml b/doc/panel-message.xml.in similarity index 99% rename from doc/panel-message.xml rename to doc/panel-message.xml.in index c0197e9..5355c00 100644 --- a/doc/panel-message.xml +++ b/doc/panel-message.xml.in @@ -15,6 +15,7 @@ &title; + @DATE@ &package; diff --git a/doc/panel-notify.xml b/doc/panel-notify.xml.in similarity index 99% rename from doc/panel-notify.xml rename to doc/panel-notify.xml.in index 41581e0..6809dd2 100644 --- a/doc/panel-notify.xml +++ b/doc/panel-notify.xml.in @@ -15,6 +15,7 @@ &title; + @DATE@ &package; diff --git a/doc/panel.xml b/doc/panel.xml.in similarity index 99% rename from doc/panel.xml rename to doc/panel.xml.in index 649b9c5..7c62677 100644 --- a/doc/panel.xml +++ b/doc/panel.xml.in @@ -15,6 +15,7 @@ &title; + @DATE@ &package; diff --git a/doc/panelctl.xml b/doc/panelctl.xml.in similarity index 99% rename from doc/panelctl.xml rename to doc/panelctl.xml.in index 1805c58..10d739f 100644 --- a/doc/panelctl.xml +++ b/doc/panelctl.xml.in @@ -15,6 +15,7 @@ &title; + @DATE@ &package; diff --git a/doc/project.conf b/doc/project.conf index f2fbabc..9244c2b 100644 --- a/doc/project.conf +++ b/doc/project.conf @@ -1,74 +1,104 @@ -targets=panel.1,panel.html,panelctl.1,panelctl.html,panel-embed.1,panel-embed.html,panel-message.1,panel-message.html,panel-notify.1,panel-notify.html,wifibrowser.1,wifibrowser.html -dist=Makefile,docbook.sh,manual.css.xml,panel.conf,panel.css.xml,panel.xml,panelctl.css.xml,panelctl.xml,panel-embed.css.xml,panel-embed.xml,panel-message.css.xml,panel-message.xml,panel-notify.css.xml,panel-notify.xml,wifibrowser.css.xml,wifibrowser.xml +targets=panel.1,panel.html,panel.xml,panelctl.1,panelctl.html,panelctl.xml,panel-embed.1,panel-embed.html,panel-embed.xml,panel-message.1,panel-message.html,panel-message.xml,panel-notify.1,panel-notify.html,panel-notify.xml,wifibrowser.1,wifibrowser.html,wifibrowser.xml +dist=Makefile,docbook.sh,manual.css.xml,panel.conf,panel.css.xml,panel.xml.in,panelctl.css.xml,panelctl.xml.in,panel-embed.css.xml,panel-embed.xml.in,panel-message.css.xml,panel-message.xml.in,panel-notify.css.xml,panel-notify.xml.in,wifibrowser.css.xml,wifibrowser.xml.in [panel.1] type=script script=./docbook.sh install= -depends=panel.xml +depends=$(OBJDIR)panel.xml [panel.html] type=script script=./docbook.sh install= -depends=manual.css.xml,panel.css.xml,panel.xml +depends=manual.css.xml,panel.css.xml,$(OBJDIR)panel.xml + +[panel.xml] +type=script +script=../tools/subst.sh +depends=panel.xml.in [panelctl.1] type=script script=./docbook.sh install= -depends=panelctl.xml +depends=$(OBJDIR)panelctl.xml [panelctl.html] type=script script=./docbook.sh install= -depends=manual.css.xml,panelctl.css.xml,panelctl.xml +depends=manual.css.xml,panelctl.css.xml,$(OBJDIR)panelctl.xml + +[panelctl.xml] +type=script +script=../tools/subst.sh +depends=panelctl.xml.in [panel-embed.1] type=script script=./docbook.sh install= -depends=panel-embed.xml +depends=$(OBJDIR)panel-embed.xml [panel-embed.html] type=script script=./docbook.sh install= -depends=manual.css.xml,panel-embed.css.xml,panel-embed.xml +depends=manual.css.xml,panel-embed.css.xml,$(OBJDIR)panel-embed.xml + +[panel-embed.xml] +type=script +script=../tools/subst.sh +depends=panel-embed.xml.in [panel-message.1] type=script script=./docbook.sh install= -depends=panel-message.xml +depends=$(OBJDIR)panel-message.xml [panel-message.html] type=script script=./docbook.sh install= -depends=manual.css.xml,panel-message.css.xml,panel-message.xml +depends=manual.css.xml,panel-message.css.xml,$(OBJDIR)panel-message.xml + +[panel-message.xml] +type=script +script=../tools/subst.sh +depends=panel-message.xml.in [panel-notify.1] type=script script=./docbook.sh install= -depends=panel-notify.xml +depends=$(OBJDIR)panel-notify.xml [panel-notify.html] type=script script=./docbook.sh install= -depends=manual.css.xml,panel-notify.css.xml,panel-notify.xml +depends=manual.css.xml,panel-notify.css.xml,$(OBJDIR)panel-notify.xml + +[panel-notify.xml] +type=script +script=../tools/subst.sh +depends=panel-notify.xml.in [wifibrowser.1] type=script script=./docbook.sh install= -depends=wifibrowser.xml +depends=$(OBJDIR)wifibrowser.xml [wifibrowser.html] type=script script=./docbook.sh install= -depends=manual.css.xml,wifibrowser.css.xml,wifibrowser.xml +depends=manual.css.xml,wifibrowser.css.xml,$(OBJDIR)wifibrowser.xml + +[wifibrowser.xml] +type=script +script=../tools/subst.sh +depends=wifibrowser.xml.in diff --git a/doc/wifibrowser.xml b/doc/wifibrowser.xml.in similarity index 99% rename from doc/wifibrowser.xml rename to doc/wifibrowser.xml.in index e45e75b..e1b639f 100644 --- a/doc/wifibrowser.xml +++ b/doc/wifibrowser.xml.in @@ -15,6 +15,7 @@ &title; + @DATE@ &package; diff --git a/tools/project.conf b/tools/project.conf index 0b1ab05..0564b61 100644 --- a/tools/project.conf +++ b/tools/project.conf @@ -3,7 +3,7 @@ cflags_force=`pkg-config --cflags libDesktop` cflags=-W -Wall -g -O2 -pedantic -fPIE -D_FORTIFY_SOURCE=2 -fstack-protector-all ldflags_force=`pkg-config --libs libDesktop` ldflags=-Wl,-pie -Wl,-z,relro -Wl,-z,now -dist=Makefile,helper.c +dist=Makefile,helper.c,subst.sh [panel-embed] type=binary diff --git a/tools/subst.sh b/tools/subst.sh new file mode 100755 index 0000000..7fe7d1e --- /dev/null +++ b/tools/subst.sh @@ -0,0 +1,205 @@ +#!/bin/sh +#$Id$ +#Copyright (c) 2012-2016 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 +CONFIGSH="${0%/subst.sh}/../config.sh" +PREFIX="/usr/local" +BINDIR= +DATADIR= +INCLUDEDIR= +LDSO= +LIBDIR= +LIBEXECDIR= +MANDIR= +PROGNAME="subst.sh" +SYSCONFDIR= +[ -f "$CONFIGSH" ] && . "$CONFIGSH" +#executables +CHMOD="chmod" +DATE="date" +DEBUG="_debug" +DEVNULL="/dev/null" +INSTALL="install" +MKDIR="mkdir -m 0755 -p" +RM="rm -f" +SED="sed" + + +#functions +#subst +_subst() +{ + #check the variables + if [ -z "$PACKAGE" ]; then + _error "The PACKAGE variable needs to be set" + return $? + fi + if [ -z "$VERSION" ]; then + _error "The VERSION variable needs to be set" + return $? + fi + [ -z "$BINDIR" ] && BINDIR="$PREFIX/bin" + [ -z "$DATADIR" ] && DATADIR="$PREFIX/share" + [ -z "$INCLUDEDIR" ] && INCLUDEDIR="$PREFIX/include" + if [ -z "$LDSO" ]; then + case "$(uname -s)" in + FreeBSD) + LDSO="/libexec/ld-elf.so.1" + ;; + Linux) + LDSO="/lib/ld-linux-$(uname -p).so.2" + ;; + *) + LDSO="/libexec/ld.elf_so" + ;; + esac + fi + [ -z "$LIBDIR" ] && LIBDIR="$PREFIX/lib" + [ -z "$LIBEXECDIR" ] && LIBEXECDIR="$PREFIX/libexec" + [ -z "$MANDIR" ] && MANDIR="$DATADIR/man" + if [ -z "$SYSCONFDIR" ]; then + SYSCONFDIR="$PREFIX/etc" + [ "$PREFIX" = "/usr" ] && SYSCONFDIR="/etc" + fi + + while [ $# -gt 0 ]; do + target="$1" + shift + + #clean + [ "$clean" -ne 0 ] && continue + + #uninstall + if [ "$uninstall" -eq 1 ]; then + $DEBUG $RM -- "$PREFIX/$target" || return 2 + continue + fi + + #install + if [ "$install" -eq 1 ]; then + source="${target#$OBJDIR}" + $DEBUG $MKDIR -- "$PREFIX" || return 2 + mode="-m 0644" + [ -x "${source}.in" ] && mode="-m 0755" + $DEBUG $INSTALL $mode "$target" "$PREFIX/$source" \ + || return 2 + continue + fi + + #create + source="${target#$OBJDIR}" + source="${source}.in" + $DEBUG $SED -e "s;@PACKAGE@;$PACKAGE;g" \ + -e "s;@VERSION@;$VERSION;g" \ + -e "s;@PREFIX@;$PREFIX;g" \ + -e "s;@BINDIR@;$BINDIR;g" \ + -e "s;@DATADIR@;$DATADIR;g" \ + -e "s;@DATE@;$DATE;g" \ + -e "s;@INCLUDEDIR@;$INCLUDEDIR;g" \ + -e "s;@LDSO@;$LDSO;g" \ + -e "s;@LIBDIR@;$LIBDIR;g" \ + -e "s;@LIBEXECDIR@;$LIBEXECDIR;g" \ + -e "s;@MANDIR@;$MANDIR;g" \ + -e "s;@SYSCONFDIR@;$SYSCONFDIR;g" \ + -e "s;@PWD@;$PWD;g" \ + -- "$source" > "$target" + if [ $? -ne 0 ]; then + $RM -- "$target" 2> "$DEVNULL" + return 2 + elif [ -x "$source" ]; then + $DEBUG $CHMOD -- 0755 "$target" + fi + done + return 0 +} + +#debug +_debug() +{ + echo "$@" 1>&3 + "$@" +} + + +#error +_error() +{ + echo "$PROGNAME: $@" 1>&2 + return 2 +} + + +#usage +_usage() +{ + echo "Usage: $PROGNAME [-c|-i|-u][-P prefix] target..." 1>&2 + return 1 +} + + +#main +clean=0 +install=0 +uninstall=0 +while getopts "ciuO:P:" name; do + case $name in + c) + clean=1 + ;; + i) + uninstall=0 + install=1 + ;; + u) + install=0 + uninstall=1 + ;; + O) + export "${OPTARG%%=*}"="${OPTARG#*=}" + ;; + P) + PREFIX="$OPTARG" + ;; + ?) + _usage + exit $? + ;; + esac +done +shift $(($OPTIND - 1)) +if [ $# -eq 0 ]; then + _usage + exit $? +fi + +if [ -n "$SOURCE_DATE_EPOCH" ]; then + DATE="$($DATE -d "@$SOURCE_DATE_EPOCH" '+%B %d, %Y')" +else + DATE="$($DATE '+%B %d, %Y')" +fi + +exec 3>&1 +_subst "$@"