#!/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