OpenSDE Framework (without history before r20070)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

245 lines
6.2 KiB

#!/bin/sh
# --- SDE-COPYRIGHT-NOTE-BEGIN ---
# This copyright note is auto-generated by ./scripts/Create-CopyPatch.
#
# Filename: lib/sde-package/patch-copyright.sh
# Copyright (C) 2006 - 2008 The OpenSDE Project
# Copyright (C) 2004 - 2005 The T2 SDE Project
# Copyright (C) 1998 - 2003 Clifford Wolf
#
# More information can be found in the files COPYING and README.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; version 2 of the License. A copy of the
# GNU General Public License can be found in the file COPYING.
# --- SDE-COPYRIGHT-NOTE-END ---
# must match [^-]*-COPYRIGHT-NOTE
NOTEMARKER=SDE-COPYRIGHT-NOTE
PROJECTNAME="The OpenSDE Project"
copynote=`mktemp`
copynotepatch=`mktemp`
rocknote=`mktemp`
oldfile=`mktemp`
newfile=`mktemp`
tmpfile=`mktemp`
thisyear=`date +%Y`
cat << EOT > $copynote
This copyright note is auto-generated by ./scripts/Create-CopyPatch.
Filename: @@FILENAME@@
@@COPYRIGHT@@
More information can be found in the files COPYING and README.
EOT
cp $copynote $copynotepatch
cat << EOT >> $copynote
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; version 2 of the License. A copy of the
GNU General Public License can be found in the file COPYING.
EOT
cat << EOT >> $copynotepatch
This patch file is dual-licensed. It is available under the license the
patched project is licensed under, as long as it is an OpenSource license
as defined at http://www.opensource.org/ (e.g. BSD, X11) or under the terms
of the GNU General Public License as published by the Free Software
Foundation; either version 2 of the License, or (at your option) any later
version.
EOT
if [ $# = 0 ]; then
set lib/. architecture/. package/. scripts/. bin/. target/.
else
# check if file or package name was given
files=
for i; do
if [ -f $i -o -d $i ]; then
files="$files ${i#./}"
elif [ -d package/*/$i ]; then
for each in `echo package/*/$i`; do
[[ $each = *~ ]] && continue
files="$files $each/."
done
else
echo "Cannot find '$i', ignoring." 1>&2
fi
done
set -- $files
[ $# = 0 ] && exit
fi
bin/find $* -type f ! -name "*~" \
| sed 's,/\./,/,g' |
while read filename ; do
grep -q -e '--- NO-[^-]*-COPYRIGHT-NOTE ---' "$filename" &&
continue
# detect current copyright note tag
tag=$( sed -n -e "/^\(.*\)--- \([^-]*\)-COPYRIGHT-NOTE-BEGIN ---.*/{s//\1/;p;q;}" "$filename" )
pretag= posttag=
has_copyright_note=1
if [ "$tag" = "# " ]; then
mode=sh
elif [ "$tag" = "[COPY] " ]; then
mode=asci
elif [ "$tag" = " * " ]; then
pretag='/*' posttag=' */'
mode=c
elif [ "$tag" = "dnl " ]; then
mode=m4
elif [ "$tag" = "-- " ]; then
mode=lua
elif [ -z "$tag" ]; then
has_copyright_note=0
# determine the comment mode by extension
mode=none
case "$filename" in
*.cache) continue ;;
*/Makefile|*.sh|*.pl|*.in|*.hlp|*.conf) mode=sh ;;
*.cron|*.postinstall|*.init) mode=sh ;;
*.h|*.c|*.lex|*.y|*.spec|*.tcx|*.tmpl|*.tcc) mode=c ;;
*.lua) mode=lua ;;
*.desc) mode=asci ;;
*scripts/[A-Z][a-z-]*|*/parse-config*) mode=sh ;;
*.patch|*.diff|*.patch.*|*.patch-*) mode=sh ;;
*.txt) mode=sh ;;
*m4) mode=m4 ;;
*.awk) mode=sh ;;
*.all|*.ask|*.choice) mode=sh ;;
esac
#echo "Mode type: $mode"
case "$mode" in
none) if head -n 1 "$filename" | grep -q '^#!'; then
mode=sh
tag="# "
else
echo "Unknown type of $filename" >&2
continue
fi
;;
sh) tag="# "
;;
asci) tag="[COPY] "
;;
m4) tag="dnl "
;;
lua) tag="-- "
;;
c) pretag='/*' posttag=' */'
tag=' * '
;;
*) echo "Unknown mode '$mode' of $filename" >&2
continue
;;
esac
else
echo "Unknown tag '$tag' on $filename" >&2
continue
fi
# make a copy in the case we have no matching conditional below
sed -e "s,--- \([^-]*\)-COPYRIGHT-NOTE-\(BEGIN\|END\) ---,--- $NOTEMARKER-\2 ---,g" \
"$filename" > $oldfile
if [ $has_copyright_note -eq 1 ]; then
# has a note, catch copyrights
oldcopyright=`sed -e "/--- $NOTEMARKER-BEGIN ---/,/--- $NOTEMARKER-END ---/!d" \
-e '/.*\(Copyright (C) .*\)/!d;s//\1/;' \
$oldfile`
else
oldcopyright=
fi
if echo "$oldcopyright" | grep -q "$PROJECTNAME"; then
# A copyright note from our project was found, renew if necesary
since=$( echo "$oldcopyright" | sed -n -e "s,.* (C) \([^ ]*\) .*$PROJECTNAME.*,\1,p" )
if [ $since -lt $thisyear ]; then
copyright=`echo "$oldcopyright" | sed -e \
"s,.*$PROJECTNAME.*,Copyright (C) $since - $thisyear $PROJECTNAME,"`
else
copyright=`echo "$oldcopyright" | sed -e \
"s,.*$PROJECTNAME.*,Copyright (C) $thisyear $PROJECTNAME,"`
fi
else
# else, add one...
copyright="Copyright (C) $thisyear $PROJECTNAME"
copyright="$copyright${oldcopyright:+\\n$oldcopyright}"
fi
if [ $has_copyright_note -ne 1 ]; then
# doesn't have a note
if head -n 1 "$filename" | grep -q '^#!'; then
action='a'
else
action='i'
fi
# insert one
sed -i "1 $action\\
${pretag:+$pretag\\
}$tag--- $NOTEMARKER-BEGIN ---\\
$tag--- $NOTEMARKER-END ---\\
${posttag:+$posttag\\
}" $oldfile
fi
mangled_filename=`echo "$filename" | \
sed 's,package/\([^/]*\)/\(.*\),package/.../\2,'`
#echo BEFORE
#cat $oldfile
if [ "$tag" ] ; then
# implant our copy note
{
grep -B 100000 -- "--- $NOTEMARKER-BEGIN ---" $oldfile
{
# what template to use
case "$filename" in
*.diff|*.patch|*.patch.*|*.patch-*)
copyright_template="$copynotepatch"
;;
*)
copyright_template="$copynote"
;;
esac
copyright_n="$( echo "$copyright" | tr '\n' '|' | sed -e 's/|$//' | sed -e 's/|/\\n/g' )"
sed -e "s|@@FILENAME@@|$mangled_filename|" \
-e "s|@@COPYRIGHT@@|$copyright_n|" \
"$copyright_template"
} | sed -e "s,^,$tag," -e 's,[ \t]\+$,,'
grep -A 100000 -- "--- $NOTEMARKER-END ---" $oldfile
} > $newfile
# create the difference
if ! cmp -s $oldfile $newfile ; then
echo "Creating patch for $filename." >&2
diff -u "./$filename" $newfile |
sed -e "2 s,$newfile,./$filename,"
fi
else
echo "WARNING: No Copyright tags in $filename found!" >&2
fi
done
rm -f $copynote $copynotepatch $newfile