Annotation of ports/license-check, Revision 1.2
1.1 marc 1: #! /bin/sh
2: #
1.2 ! marc 3: # $OpenBSD: license-check,v 1.1 1998/04/13 05:12:55 marc Exp $
1.1 marc 4: #
5: # This script verifies that all files in a given directory are
6: # mentioned in the ports LICENSE file as Distribution allowed.
7: # Output is three lists:
8: #
9: # Missing files: files that should be in the directory (if the
10: # intent is to obtain all files that can be
11: # re-distributed) but are not.
12: #
13: # Bad files: files that must NOT be in a distribution
14: # directory. These are listed in the form
15: # of a shell `rm -f xxx' command so they can
16: # be fed to the shell after manual verification.
17: #
18: # Extra files: Files that are in the given directory that are
19: # not mentioned in the ports LICENSE file.
20: #
21:
22: # The ports base directory. Note: this may be supplied from the environment
23: # using the standard bsd.port.mkl name of PORTSDIR
24: #
25: LICENCE=${PORTSDIR:-/usr/ports}/LICENSE
26:
27: # Our name and a function to spit out the usage. Exit.
28: #
29: prog=`basename $0`
30: usage () {
31: if [ ! -z "$1" ]; then
32: echo "$prog: $1"
33: fi
34: echo "usage: $prog distribution-directory"
35: exit 1
36: }
37:
38: # Verify we have one param and that it is the name of a directory.
39: # If not spit out our usage and exit
40: #
41: if [ $# -eq 1 ]; then
42: if [ -d $1 ]; then
43: DIST=$1
44: else
45: usage "$1 is not a directory"
46: fi
47: else
48: usage
49: fi
50:
51: # This awk script matches the licence file agains an `ls' of of the given
52: # distribution directory and spits instructions out to stdout.
53: #
54: /bin/ls $DIST |
55: awk -v L=$LICENCE '
56: BEGIN {
57: # Process license file
58: #
59: while ( getline <L ) {
60: if ( NF == 4 ) {
61: if ( $1 == "Y" ) {
62: good_files[ $3 ] = 0
63: } else if ( $1 == "N" ) {
64: bad_files[ $3 ] = 0
65: }
66: }
67: }
68: unk_count = 0
69: }
70:
71: $1 in good_files {
72: good_files[ $1 ] = 1
73: next
74: }
75: $1 in bad_files {
76: bad_files[ $1 ] = 1
77: next
78: }
79: {
80: unk_files[ unk_count++ ] = $1
81: }
82:
83: END {
84: header = 0
85: for ( f in good_files ) {
86: if ( good_files[ f ] == 0 ) {
87: if ( ! header ) {
88: print "You are missing the following files:"
89: print
90: header = 1
91: }
92: print f
93: }
94: }
95: if ( header ) {
96: print
97: header = 0
98: }
99: for ( f in bad_files ) {
100: if ( bad_files[ f ] == 1 ) {
101: if ( ! header ) {
1.2 ! marc 102: print "You MUST remove the following files/directories:"
1.1 marc 103: print
104: header = 1
105: }
1.2 ! marc 106: print "/bin/rm -rf", f
1.1 marc 107: }
108: }
109: if ( header ) {
110: print
111: header = 0
112: }
113: if ( unk_count > 0 ) {
1.2 ! marc 114: print "The following files/dirs are extra and " \
! 115: "should probably be removed:"
1.1 marc 116: print
117: for ( i = 0; i < unk_count; i += 1 ) {
1.2 ! marc 118: print "/bin/rm -rf", unk_files[ i ]
1.1 marc 119: }
120: print
121: }
122: }
123: '
124: exit 0