makesums revision 1.12
1#!/bin/sh
2#
3# $NetBSD: makesums,v 1.12 2006/01/03 15:42:42 apb Exp $
4#
5# Make checksum files for files in ``tardir''.  Usage:
6# makesums [-a] [-t tardir] [setname [...]]
7#
8# If -t is omitted, RELEASEDIR must be set and not empty.
9# The ``setname'' arguments comprise a list of files to checksum,
10# and may be omitted (in which case ``*.tgz'' is used).
11# If -A is given, then the checksum are appended to possibly existing files.
12# NOTE: Don't use this when running parallel jobs
13# If -a is given, then the list of sets is ignored, and ``*'' is used.
14#
15# After shell glob expansion, the list of sets is filtered to remove known
16# output file names (of the form *SUM, SHA512 and MD5), non-existent files, and
17# subdirectories. If this filtering leaves no files, then no output files are
18# produced. Otherwise the resulting list of files are checksummed and five
19# output files (BSDSUM, CKSUM, MD5, SHA512, SYSVSUM) are produced.
20#
21
22prog=${0##*/}
23rundir="$(dirname "$0")" # ${0%/*} isn't good enough when there's no "/"
24. "${rundir}/sets.subr"
25
26# set defaults
27targetdir=$RELEASEDIR
28dash_all=no
29append=\>
30
31usage()
32{
33	cat 1>&2 <<USAGE
34Usage: ${prog} [-A] [-a] [-t targetdir] [setname [...]]
35	-A		Append to possible existing checksum files 
36	-a		checksum all plain files instead of [setname [...]]
37	-t targetdir	\$RELEASEDIR		[$targetdir]
38	setname [...]	sets to checksum 	[*.tgz]
39USAGE
40	exit 1
41}
42
43# handle args
44while getopts aAt: ch; do
45	case ${ch} in
46	A)
47		append=\>\>
48		;;
49	a)
50		dash_all=yes
51		;;
52	t)	
53		targetdir=${OPTARG}
54		;;
55	*)
56		usage
57		;;
58	esac
59done
60shift $((${OPTIND} - 1))
61
62if [ -z "$targetdir" ]; then
63	echo 1>&2 '$RELEASEDIR must be set or provided with -t'
64	exit 1
65fi
66
67cd $targetdir
68pat="$*"
69if [ $dash_all = yes ]; then
70	pat='*'
71elif [ -z "$pat" ]; then
72	pat='*.tgz'
73fi
74lists=$(find $pat -prune \( -type f -o -type l \) \! -name '*SUM' \! -name MD5 \! -name SHA512 2>/dev/null)
75if [ -n "$lists" ]; then
76	eval ${CKSUM} -o1 $lists $append BSDSUM
77	eval ${CKSUM}     $lists $append CKSUM
78	eval ${CKSUM} -a md5  $lists $append MD5
79	eval ${CKSUM} -o2 $lists $append SYSVSUM
80	eval ${CKSUM} -a sha512  $lists $append SHA512
81fi
82