xref: /netbsd/distrib/sets/makesums (revision 6550d01e)
1#!/bin/sh
2#
3# $NetBSD: makesums,v 1.16 2009/09/19 07:09:54 snj 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 two
19# output files (MD5 and SHA512) 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 >&2 "${prog}: \${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 \) \
75	\! -name '*SUM' \! -name MD5 \! -name SHA512 2>/dev/null)"
76if [ -n "${lists}" ]; then
77	eval ${CKSUM} -a md5  ${lists} ${append} MD5
78	eval ${CKSUM} -a sha512  ${lists} ${append} SHA512
79fi
80