163 lines
3.3 KiB
Bash
Executable File
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
|