summaryrefslogtreecommitdiffstats
path: root/bin/chkcopyright
diff options
context:
space:
mode:
Diffstat (limited to 'bin/chkcopyright')
-rwxr-xr-xbin/chkcopyright150
1 files changed, 138 insertions, 12 deletions
diff --git a/bin/chkcopyright b/bin/chkcopyright
index 0db1df4..928b9ec 100755
--- a/bin/chkcopyright
+++ b/bin/chkcopyright
@@ -33,16 +33,22 @@ tmpfile=/tmp/h5chkright_tmp.$$
EXCEPTIONDIRS="-name CVS -o -name .svn" # at least skip CVS directories.
EXTRACTEDFILE=/tmp/h5chkright.extracted.$$
VERBOSE= # default no
+FIXIT= # default no
DIRS=. # default current directory
NFAILEDFILES=0 # Number of failed files found.
-NPASSEDFILES=0 # Number of failed files found.
+NPASSEDFILES=0 # Number of passed files found.
+NFIXEDFILES=0 # Number of files fixed.
+NFIXFAILEDFILES=0 # Number of files fix failed.
NUMBEGINLINES=60 # Copyright notice should be located within the
# this number of lines at the beginning of the file.
-COPYRIGHTSTR="Copyright by the Board of Trustees of the University of Illinois"
+UICOPYRIGHTSTR="Copyright by the Board of Trustees of the University of Illinois"
+THGCOPYRIGHTSTR="Copyright by The HDF Group."
PASSEDLOG=/tmp/h5chkright_passed.$$
SKIPPEDLOG=/tmp/h5chkright_skipped.$$
FAILEDLOG=/tmp/h5chkright_failed.$$
+FIXEDLOG=/tmp/h5chkright_fixed.$$
+FIXFAILEDLOG=/tmp/h5chkright_fixfailed.$$
C_COPYRIGHT=/tmp/h5chkright_C.$$ # C style copyright
FTN_COPYRIGHT=/tmp/h5chkright_FTN.$$ # Fortran style copyright
@@ -51,6 +57,8 @@ SH_COPYRIGHT=/tmp/h5chkright_SH.$$ # SHELL style copyright
SH_COPYRIGHT2=/tmp/h5chkright_SH2.$$ # SHELL style copyright, 2nd style.
WINBAT_COPYRIGHT=/tmp/h5chkright_WINBAT.$$ # Windows Batch file Copyright notice
+tmpfixfile=/tmp/h5chkright_fix.$$ # Temporary fixed copy of file
+
# Help page
#
@@ -68,6 +76,8 @@ Usage: $PROGNAME [-h | -help] [-fname name-patter] [-v | -v9] [dir1 dir2 ...]
verbose mode
-v9
highly verbose
+ -fix
+ fix failed files if possible
EOF
}
@@ -195,7 +205,7 @@ EOF
INITIALIZATION()
{
# clean up log files
- rm -f $PASSEDLOG $SKIPPEDLOG $FAILEDLOG
+ rm -f $PASSEDLOG $SKIPPEDLOG $FAILEDLOG $FIXEDLOG $FIXFAILEDLOG
# Generate various styles of copyright notice.
BUILDCOPYRIGHT
@@ -251,6 +261,9 @@ PARSE_OPTION()
shift
FNAME="$1"
;;
+ -fix )
+ FIXIT=yes
+ ;;
-v* )
VERBOSE=yes
if test X$1 = X-v9; then
@@ -284,12 +297,36 @@ RINSE()
dos2unix < $tmpfile | expand | sed -e 's/ *$//' > $rf
}
+# Locate a line in the file and print the line number.
+# Print 0 if not found; -1 if error.
+# $1 The line.
+# $2 The file.
+#
+FindLineInFile()
+{
+ if [ $# -ne 2 ]; then
+ # expect two arguments
+ echo -1
+ return
+ fi
+ xline=$1
+ xf=$2
+ xpos=`grep -n "${xline}" $xf`
+ if [ "$?" -ne 0 ] ; then
+ # Not found, return 0
+ xpos=0
+ else
+ xpos=`echo $xpos | cut -f1 -d:`
+ fi
+ echo $xpos
+}
+
# Match Copyright notice.
# $1 file which contains the expected copyright notice.
# $2 file in which to look for the copyright notice.
# Copyright notice must be found within the beginning $NUMBEGINLINES of lines.
-# Hunt for the particular string $COPYRIGHTSTR which signifies the beginning
+# Hunt for the particular string $UICOPYRIGHTSTR which signifies the beginning
# of the copyright notice.
#
MATCH_COPYRIGHT()
@@ -301,17 +338,15 @@ MATCH_COPYRIGHT()
fi
COPYRIGHTFILE=$1
f=$2
- # Must use stdin for wc to prevent filename from popping up.
+ nlines=`wc -l ${COPYRIGHTFILE} | cut -f1 -d' '`
# Find a line that contains the copyright string and its line number in
# the file.
- nlines=`wc -l < ${COPYRIGHTFILE}| tr -d ' '`
- begin=`grep -n "${COPYRIGHTSTR}" $f`
- if [ "$?" -ne 0 ] ; then
+ begin=`FindLineInFile "${UICOPYRIGHTSTR}" $f`
+ if [ "$begin" -le 0 ] ; then
# Not found, generate an empty dummy file
cp /dev/null ${EXTRACTEDFILE}
false
else
- begin=`echo $begin | cut -f1 -d:`
if [ $begin -gt 1 ]; then
begin=`expr $begin - 1`
fi
@@ -327,6 +362,64 @@ MATCH_COPYRIGHT()
fi
}
+# Fix Copyright notice.
+# $1 file which contains the expected copyright notice.
+# $2 file in which to look for the copyright notice.
+# Copyright notice must be found within the beginning $NUMBEGINLINES of lines.
+# Hunt for the particular string $UICOPYRIGHTSTR which signifies the beginning
+# of the copyright notice.
+#
+FIX_COPYRIGHT()
+{
+ if [ $# -ne 2 ]; then
+ # expect two arguments
+ echo FAILED
+ return
+ fi
+ COPYRIGHTFILE=$1
+ f=$2
+ nlines=`wc -l ${COPYRIGHTFILE} | cut -f1 -d' '`
+ # If the file has UICOPYRIGHTSTR but not THGCOPYRIGHTSTR, then replace the lines
+ # starting at UICOPYRIGHTSTR and down.
+ # If the file has THGCOPYRIGHTSTR, then replace the lines starting at the
+ # THGCOPYRIGHTSTR and down.
+ # If neither found, abort it.
+
+ # Find a line that contains the THG copyright string and its line number in
+ # the file.
+ insertbegin=`FindLineInFile "${THGCOPYRIGHTSTR}" $f`
+ if [ $insertbegin -gt 0 ]; then
+ insertend=`expr $insertbegin + $nlines` # no need to -1. See below.
+ else
+ insertbegin=`FindLineInFile "${UICOPYRIGHTSTR}" $f`
+ if [ $insertbegin -gt 0 ]; then
+ insertend=`expr $insertbegin + $nlines - 1` # no need to -2. See below.
+ else
+ FIXFAILED
+ return
+ fi
+ fi
+
+ # Copy line 1 up to insertbegin from original file
+ xbegin=`expr $insertbegin - 1`
+ if [ $xbegin -gt 0 ]; then
+ sed -n -e "1,${xbegin}p" $f > $tmpfixfile
+ else
+ cp /dev/null $tmpfixfile # make it empty.
+ fi
+
+ # now the correct copyright file
+ cat $COPYRIGHTFILE >> $tmpfixfile
+
+ # the rest of the original file
+ sed -n -e "${insertend},"'$p' $f >> $tmpfixfile
+
+ # copy them all back to the original file
+ cp $tmpfixfile $f
+ FIXED
+ rm -f $tmpfixfile
+}
+
# Check C and C++ source files
#
C_SOURCE()
@@ -341,6 +434,9 @@ C_SOURCE()
# show the difference
FAILED $f
$DIFF ${EXTRACTEDFILE} ${C_COPYRIGHT}
+ if [ -n "$FIXIT" ]; then
+ FIX_COPYRIGHT $C_COPYRIGHT $f
+ fi
;;
esac
}
@@ -432,7 +528,7 @@ BATCH_FILE()
UNKNOWN_FILE()
{
f=$1
- if head -$NUMBEGINLINES < $f | grep "${COPYRIGHTSTR}" > /dev/null; then
+ if head -$NUMBEGINLINES < $f | grep "${UICOPYRIGHTSTR}" > /dev/null; then
# Now guess the file type and try match it.
head -5 < $f > $tmpfile
if head -1 < $tmpfile | grep '^#!' > /dev/null; then
@@ -507,6 +603,28 @@ FAILED()
}
+# Copyright fixed.
+# $1 file that has been fixed.
+#
+FIXED()
+{
+ if test X-$VERBOSE = X-yes; then
+ echo " FIXED"
+ fi
+ echo $1 >> $FIXEDLOG
+}
+
+
+# Copyright fix failed.
+# $1 file that has failed.
+#
+FIXFAILED()
+{
+ echo "FIX FAILED: $1"
+ echo $1 >> $FIXFAILEDLOG
+}
+
+
#
# Main body
@@ -578,14 +696,20 @@ fi
if [ -f $FAILEDLOG ]; then
NFAILEDFILES=`wc -l < $FAILEDLOG`
fi
+if [ -f $FIXEDLOG ]; then
+ NFIXEDFILES=`wc -l < $FIXEDLOG`
+fi
+if [ -f $FIXFAILEDLOG ]; then
+ NFIXFAILEDFILES=`wc -l < $FIXFAILEDLOG`
+fi
# Cleanup
rm -f $C_COPYRIGHT $FTN_COPYRIGHT $HTM_COPYRIGHT $SH_COPYRIGHT $SH_COPYRIGHT2
rm -f $EXCEPTIONS $EXTRACTEDFILE
-rm -f $PASSEDLOG $SKIPPEDLOG $FAILEDLOG
+rm -f $PASSEDLOG $SKIPPEDLOG $FAILEDLOG $FIXEDLOG $FIXFAILEDLOG
# Report Results
-# Results are not total accurate--e.g., Passed are not counted, thus not
+# Results are not total accurate--e.g., Skipped are not counted, thus not
# reported.
#
echo "*******************"
@@ -593,6 +717,8 @@ echo " REPORT"
echo "*******************"
echo Number of passed files = $NPASSEDFILES
echo Number of failed files = $NFAILEDFILES
+echo Number of fixed files = $NFIXEDFILES
+echo Number of fix failed files = $NFIXFAILEDFILES
if [ $NFAILEDFILES -gt 0 ]; then
exitcode=1