mkdist: separate md5 file for each file
[elinks.git] / contrib / mkdist
blobe56cb032991ca013c2e4739e521713017513b325
1 #!/bin/bash
3 # This script can be used by a cron to generate snapshots.
4 # For example, use:
5 # 35 0 * * * mkdist -r elinks-0.11 -l 0.11 -s >>mkdist.log 2>&1
6 # 40 0 * * * mkdist -r HEAD -l 0.12 -s >>mkdist.log 2>&1
8 # Options:
9 # -g GIT_DIR Git repository from which this script exports ELinks.
10 # May be given in the environment instead.
11 # -r REVISION Git revision to be exported from the repository.
12 # -l LABEL User-friendly name of the branch or release.
13 # This ends up in the name of the tar file, and in the
14 # name of the directory it contains.
15 # -s Generate a snapshot (which has a date in the top-level
16 # directory).
17 # -d DOCDIR Copy prebuilt documentation from DOCDIR.
18 # -o OUTDIR Place the output files in OUTDIR. Defaults to the
19 # current directory.
21 # set -x
23 cat <<EOF
24 -------------------------------------------------
25 Date: $(date)
26 Args: $*
27 -------------------------------------------------
28 EOF
30 # Variables used in this script:
31 # $GIT_DIR = option -g GIT_DIR; passed in environment to Git
32 # $OPTARG = Bash special: argument of the option being parsed
33 # $OPTIND = Bash special: index of argument to be parsed next
34 # $commit = commit ID corresponding to $rev
35 # $docdir = option -d DOCDIR
36 # $label = option -l LABEL
37 # $opt = option letter being parsed, or '?' on error
38 # $outdir = option -o OUTDIR
39 # $rev = option -r REVISION
40 # $snap = option -s
41 # $tarbasename = name of the tar file without .tar.* extensions
42 # $tartopdir = name of the top directory within the tar file
43 # $tmpdir = temporary directory created by this script
45 rev=
46 label=
47 snap=
48 docdir=
49 outdir=.
50 while getopts "g:r:l:sd:o:" opt
52 case "$opt" in
53 (g) GIT_DIR=$OPTARG ;;
54 (r) rev=$OPTARG ;;
55 (l) label=$OPTARG ;;
56 (s) snap=1 ;;
57 (d) docdir=$OPTARG ;;
58 (o) outdir=$OPTARG ;;
59 ("?") exit 1 ;;
60 (*) printf >&2 "%s:%d: bug found\n" "$0" "$LINENO"
61 exit 1 ;;
62 esac
63 done
65 if [ $OPTIND -le $# ]
66 then
67 printf >&2 "%s: too many non-option arguments\n" "$0"
68 exit 1
71 if [ -z "$GIT_DIR" ]
72 then
73 printf >&2 "%s: Must specify -g GIT_DIR option\n" "$0"
74 exit 1
76 if [ -z "$outdir" ]
77 then
78 printf >&2 "%s: Must specify -o OUTDIR option\n" "$0"
79 exit 1
81 if [ -z "$rev" ]
82 then
83 printf >&2 "%s: Must specify -r REVISION option\n" "$0"
84 exit 1
86 if [ -z "$label" ]
87 then
88 label=$rev
91 commit=$(git --git-dir="$GIT_DIR" rev-parse --verify "$rev^{commit}") || exit 1
93 if [ "$snap" ]
94 then
95 tartopdir=elinks-$label-$(date +%Y%m%d)
96 tarbasename=elinks-current-$label
97 else
98 tartopdir=elinks-$label
99 tarbasename=elinks-$label
102 tmpdir=$(mktemp -d -t elinks-dist-XXXXXXXX) || exit 1
104 # To make it easier to compare build logs, put the source first in an
105 # "elinks" directory, and only move to "$tartopdir" when finished.
107 git --git-dir="$GIT_DIR" archive --format=tar --prefix="elinks/" "$rev" |
108 (cd -- "$tmpdir" && tar -xf -)
109 mkdir -- "$tmpdir/elinks/.git"
110 printf "%s\n" "$commit" > "$tmpdir/elinks/git-commit-id"
112 (set -e
113 cd -- "$tmpdir/elinks"
114 ./autogen.sh
115 mkdir build
116 cd build
117 # Enable lots of features so that their options will appear in elinks
118 # --config-help and doc/html/elinks.conf.5.html.
119 ../configure --enable-bittorrent --enable-cgi --enable-fsp --enable-nntp
120 make -C po
121 mv po/*.gmo ../po/
122 mv contrib/elinks.spec ../contrib/
123 ) || exit 1
125 if [ -n "$docdir" ]; then
126 mkdir -- "$tmpdir/elinks/doc/html"
127 cp -r -- "$docdir"/*.html* "$tmpdir/elinks/doc/html/"
128 # mkdir doc/pdf
129 # cp "$docdir"/*.pdf doc/pdf
130 else
131 make -C "$tmpdir/elinks/build"
132 make -C "$tmpdir/elinks/build/doc" html
133 mkdir -- "$tmpdir/elinks/doc/html"
134 mv -- "$tmpdir/elinks/build/doc"/*.html* "$tmpdir/elinks/doc/html/"
137 rm -rf -- "$tmpdir/elinks/build"
138 mv -- "$tmpdir/elinks" "$tmpdir/$tartopdir"
140 (set -e
141 cd -- "$tmpdir"
142 tar cf "$tarbasename.tar" "$tartopdir"
143 bzip2 --keep -- "$tarbasename.tar"
144 gzip -9 -- "$tarbasename.tar"
145 md5sum --binary -- "$tarbasename.tar.gz" > "$tarbasename.tar.gz.md5"
146 md5sum --binary -- "$tarbasename.tar.bz2" > "$tarbasename.tar.bz2.md5"
147 ) || exit 1
149 mv -- "$tmpdir/$tarbasename.tar.gz" "$outdir"
150 mv -- "$tmpdir/$tarbasename.tar.bz2" "$outdir"
151 mv -- "$tmpdir/$tarbasename.tar.gz.md5" "$outdir"
152 mv -- "$tmpdir/$tarbasename.tar.bz2.md5" "$outdir"
153 rm -rf -- "$tmpdir"