openbsd-ports/infrastructure/fetch/check-license
2003-06-12 22:30:28 +00:00

163 lines
3.3 KiB
Bash
Executable File

#! /bin/sh
#
# $OpenBSD: check-license,v 1.5 2003/06/12 22:30:28 marc Exp $
#
# PUBLIC DOMAIN -- Marco S Hyman -- <marc@snafu.org>
#
# This script verifies that all files in a given directory are
# mentioned in the ports LICENSE file as Distribution allowed.
# Output is three lists:
#
# Missing files: files that should be in the directory (if the
# intent is to obtain all files that can be
# re-distributed) but are not.
#
# Bad files: files that must NOT be in a distribution
# directory. These are listed in the form
# of a shell `mv -f xxx ../licensed' command so
# they can be fed to the shell (after manual
# verification) to move them into a directory
# that will not be copied to any CD-ROM.
#
# Unknown files: files that are noted in the LICENSE file but
# do not have a distribution flag of either Y or N.
#
# Extra files: Files that are in the given directory that are
# not mentioned in the ports LICENSE file.
#
# The ports base directory. Note: this may be supplied from the environment
# using the standard bsd.port.mk name of PORTSDIR
#
LICENCE=${PORTSDIR:-/usr/ports}/LICENSE
# Our name and a function to spit out the usage. Exit.
#
prog=`basename $0`
usage () {
if [ ! -z "$1" ]; then
echo "$prog: $1"
fi
echo "usage: $prog distribution-directory"
exit 1
}
# Verify we have one param and that it is the name of a directory.
# If not spit out our usage and exit
#
if [ $# -eq 1 ]; then
if [ -d $1 ]; then
DIST=$1
else
usage "$1 is not a directory"
fi
else
usage
fi
# This awk script matches the license file against an `ls' of the given
# distribution directory and spits instructions out to stdout.
#
/bin/ls $DIST |
awk -v L=$LICENCE '
BEGIN {
# Process license file
#
while ( getline <L ) {
if ( NF == 4 ) {
if ( $1 == "Y" ) {
good_files[ $3 ] = 0
} else if ( $1 == "N" ) {
bad_files[ $3 ] = 0
} else {
unk_files[ $3 ] = 0
}
}
}
extra_count = 0
}
$1 in good_files {
good_files[ $1 ] = 1
next
}
$1 in bad_files {
bad_files[ $1 ] = 1
next
}
$1 in unk_files {
unk_files[ $1 ] = 1
next
}
{
extra_files[ extra_count++ ] = $1
}
END {
header = 0
for ( f in good_files ) {
if ( good_files[ f ] == 0 ) {
if ( ! header ) {
print "You are missing the following files:"
print
header = 1
}
print f
}
}
for ( f in unk_files ) {
if ( unk_files[ f ] == 0 ) {
if ( ! header ) {
print "You are missing the following files:"
print
header = 1
}
print f
}
}
if ( header ) {
print
header = 0
}
for ( f in bad_files ) {
if ( bad_files[ f ] == 1 ) {
if ( ! header ) {
print "You MUST move the following files/directories:"
print
header = 1
}
print "/bin/mv -f", f, "../licensed"
}
}
if ( header ) {
print
header = 0
}
for ( f in unk_files ) {
if ( unk_files[ f ] == 1 ) {
if ( ! header ) {
print "The status of the following files is unknown:"
print
header = 1
}
print f
}
}
if ( header ) {
print
header = 0
}
if ( extra_count > 0 ) {
print "The following files/dirs are extra and " \
"should probably be removed:"
print
for ( i = 0; i < extra_count; i += 1 ) {
print "/bin/rm -rf", extra_files[ i ]
}
print
}
}
'
exit 0