[BACK]Return to license-check CVS log [TXT][DIR] Up to [local] / ports

File: [local] / ports / Attic / license-check (download)

Revision 1.4, Fri Sep 25 02:34:31 1998 UTC (25 years, 8 months ago) by marc
Branch: MAIN
CVS Tags: OPENBSD_2_6_BASE, OPENBSD_2_6, OPENBSD_2_5_BASE, OPENBSD_2_5, OPENBSD_2_4_BASE, OPENBSD_2_4
Changes since 1.3: +11 -1 lines

checkpoint more licence check changes

#! /bin/sh
#
# $OpenBSD: license-check,v 1.4 1998/09/25 02:34:31 marc Exp $
#
# 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 agains an `ls' of 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