1
0
mirror of https://github.com/rkd77/elinks.git synced 2024-12-04 14:46:47 -05:00
elinks/contrib/mkdist
Kalle Olavi Niemitalo 2338d9124a mkdist: build documentation unless -d given
The documentation has version numbers in a few places and it's easier
to get those right this way than by building it elsewhere before
running mkdist.  This change slows down mkdist but ccache can mitigate
some of that and snapshots use prebuilt documentation anyway.
2008-06-30 20:36:56 +03:00

153 lines
4.2 KiB
Bash
Executable File

#!/bin/bash
#
# This script can be used by a cron to generate snapshots.
# For example, use:
# 35 0 * * * mkdist -r elinks-0.11 -l 0.11 -s >>mkdist.log 2>&1
# 40 0 * * * mkdist -r HEAD -l 0.12 -s >>mkdist.log 2>&1
#
# Options:
# -g GIT_DIR Git repository from which this script exports ELinks.
# May be given in the environment instead.
# -r REVISION Git revision to be exported from the repository.
# -l LABEL User-friendly name of the branch or release.
# This ends up in the name of the tar file, and in the
# name of the directory it contains.
# -s Generate a snapshot (which has a date in the top-level
# directory).
# -d DOCDIR Copy prebuilt documentation from DOCDIR.
# -o OUTDIR Place the output files in OUTDIR. Defaults to the
# current directory.
# set -x
cat <<EOF
-------------------------------------------------
Date: $(date)
Args: $*
-------------------------------------------------
EOF
# Variables used in this script:
# $GIT_DIR = option -g GIT_DIR; passed in environment to Git
# $OPTARG = Bash special: argument of the option being parsed
# $OPTIND = Bash special: index of argument to be parsed next
# $commit = commit ID corresponding to $rev
# $docdir = option -d DOCDIR
# $label = option -l LABEL
# $opt = option letter being parsed, or '?' on error
# $outdir = option -o OUTDIR
# $rev = option -r REVISION
# $snap = option -s
# $tarbasename = name of the tar file without .tar.* extensions
# $tartopdir = name of the top directory within the tar file
# $tmpdir = temporary directory created by this script
rev=
label=
snap=
docdir=
outdir=.
while getopts "g:r:l:sd:o:" opt
do
case "$opt" in
(g) GIT_DIR=$OPTARG ;;
(r) rev=$OPTARG ;;
(l) label=$OPTARG ;;
(s) snap=1 ;;
(d) docdir=$OPTARG ;;
(o) outdir=$OPTARG ;;
("?") exit 1 ;;
(*) printf >&2 "%s:%d: bug found\n" "$0" "$LINENO"
exit 1 ;;
esac
done
if [ $OPTIND -le $# ]
then
printf >&2 "%s: too many non-option arguments\n" "$0"
exit 1
fi
if [ -z "$GIT_DIR" ]
then
printf >&2 "%s: Must specify -g GIT_DIR option\n" "$0"
exit 1
fi
if [ -z "$outdir" ]
then
printf >&2 "%s: Must specify -o OUTDIR option\n" "$0"
exit 1
fi
if [ -z "$rev" ]
then
printf >&2 "%s: Must specify -r REVISION option\n" "$0"
exit 1
fi
if [ -z "$label" ]
then
label=$rev
fi
commit=$(git --git-dir="$GIT_DIR" rev-parse --verify "$rev^{commit}") || exit 1
if [ "$snap" ]
then
tartopdir=elinks-$label-$(date +%Y%m%d)
tarbasename=elinks-current-$label
else
tartopdir=elinks-$label
tarbasename=elinks-$label
fi
tmpdir=$(mktemp -d -t elinks-dist-XXXXXXXX) || exit 1
# To make it easier to compare build logs, put the source first in an
# "elinks" directory, and only move to "$tartopdir" when finished.
git --git-dir="$GIT_DIR" archive --format=tar --prefix="elinks/" "$rev" |
(cd -- "$tmpdir" && tar -xf -)
mkdir -- "$tmpdir/elinks/.git"
printf "%s\n" "$commit" > "$tmpdir/elinks/.git/HEAD"
(set -e
cd -- "$tmpdir/elinks"
./autogen.sh
mkdir build
cd build
# Enable lots of features so that their options will appear in elinks
# --config-help and doc/html/elinks.conf.5.html.
../configure --enable-bittorrent --enable-cgi --enable-fsp --enable-nntp
make -C po
mv po/*.gmo ../po/
mv contrib/elinks.spec ../contrib/
) || exit 1
if [ -n "$docdir" ]; then
mkdir -- "$tmpdir/elinks/doc/html"
cp -r -- "$docdir"/*.html* "$tmpdir/elinks/doc/html/"
# mkdir doc/pdf
# cp "$docdir"/*.pdf doc/pdf
else
make -C "$tmpdir/elinks/build"
make -C "$tmpdir/elinks/build/doc" html
mkdir -- "$tmpdir/elinks/doc/html"
mv -- "$tmpdir/elinks/build/doc"/*.html* "$tmpdir/elinks/doc/html/"
fi
rm -rf -- "$tmpdir/elinks/build"
mv -- "$tmpdir/elinks" "$tmpdir/$tartopdir"
(set -e
cd -- "$tmpdir"
tar cf "$tarbasename.tar" "$tartopdir"
md5sum --binary -- "$tarbasename.tar" > "$tarbasename.md5"
bzip2 --keep -- "$tarbasename.tar"
gzip -9 -- "$tarbasename.tar"
md5sum --binary -- "$tarbasename.tar.gz" "$tarbasename.tar.bz2" >> "$tarbasename.md5"
) || exit 1
mv -- "$tmpdir/$tarbasename.tar.gz" "$outdir"
mv -- "$tmpdir/$tarbasename.tar.bz2" "$outdir"
mv -- "$tmpdir/$tarbasename.md5" "$outdir"
rm -rf -- "$tmpdir"