* fix hyprutils to find pixman includes
[t2sde.git] / scripts / Create-CopyPatch
bloba73ae42bb0ac8d76b548762d3f22c953a55242b3
1 #!/usr/bin/env bash
2 # t2/scripts/Create-CopyPatch
3 # Copyright (C) 2004 - 2025 The T2 SDE Project
4 # Copyright (C) 1998 - 2003 ROCK Linux Project
5 # SPDX-License-Identifier: GPL-2.0
6 # --- T2-COPYRIGHT-END ---
8 tmpfile=`mktemp`
9 copynote=$tmpfile.note
10 copynotepatch=$tmpfile.patch
11 rocknote=$tmpfile.rock
12 oldfile=$tmpfile.old
13 newfile=$tmpfile.new
15 cat << EOT > $copynote
16 t2/@@FILENAME@@
17 @@COPYRIGHT@@
18 EOT
20 cp $copynote $copynotepatch
22 cat << EOT >> $copynote
23 SPDX-License-Identifier: GPL-2.0
24 EOT
26 cat << EOT >> $copynotepatch
27 SPDX-License-Identifier: GPL-2.0 or patched project license
28 EOT
30 echo "Creating copy.patch ..." >&2
32 usesvn=
33 if [ "$1" = "-svn" ]; then
34 usesvn=1; shift
37 if [ $# = 0 ]; then
38 set architecture/. misc/. package/. scripts/. target/.
39 else
40 # check if file or package name was given
41 files=
42 for i; do
43 if [ -f $i -o -d $i ]; then
44 files="$files ${i#./}"
45 elif [ -d package/*/$i ]; then
46 for each in `echo package/*/$i`; do
47 [[ $each = *~ ]] && continue
48 files="$files $each/."
49 done
50 else
51 echo Cannot find \'$i\', ignoring. 1>&2
53 done
54 set -- $files
55 [ $# = 0 ] && exit
58 bash scripts/xfind.sh $* -type f ! -name "*~" ! -name Create-CopyPatch | sed 's,/\./,/,g' |
59 while read filename; do
60 # determine the comment mode first
61 mode=none
62 case "$filename" in
63 *.cache) mode=skip ;;
64 */Makefile|*.sh|*.pl|*.in|*.hlp|*.conf) mode=sh ;;
65 *.cron|*.postinstall|*.init) mode=sh ;;
66 *.h|*.c|*.cc|*.cpp|*.lex|*.y|*.spec|*.tcx|*.tmpl|*.tcc) mode=c ;;
67 *.lua) mode=lua ;;
68 *.desc) mode=asci ;;
69 *scripts/[A-Z][a-z-]*|*/parse-config*) mode=sh ;;
70 *patch|*diff|*patch.*) mode=sh ;;
71 *m4) mode=m4 ;;
72 esac
74 #echo "Mode type: $mode"
76 grep -q -- '--- NO-\(T2\|ROCK\)-COPYRIGHT.* ---' "$filename" && continue
78 case "$mode" in
79 skip) continue ;;
80 none)
81 if head -n 1 "$filename" | grep -q '^#!'; then
82 mode=sh
83 else
84 case "`sed -n 's/^ *\([^ ]\+\) .*COPYRIGHT-.*BEGIN .*/\1/p' "$filename"`" in
85 "#") mode=sh ;;
86 "*") mode=c ;;
87 esac
90 if [ "$mode" == none ]; then
91 echo "Unknown type for $filename" 1>&2
92 continue
94 esac
96 # make a copy in the case we have no matching conditional below
97 sed 's,\(ROCK\|T2\)-COPYRIGHT-NOTE,T2-COPYRIGHT,g' "$filename" > "$oldfile"
99 tag=$(sed -n -e '/^\(.*\)--- T2-COPYRIGHT-.*BEGIN ---.*/{s//\1/;p;q;}' "$oldfile")
100 thisyear=`date +%Y`
102 if [ -n "$tag" ]; then
103 # has a note, catch copyrights
104 oldcopyright=`sed -e '/--- T2-COPYRIGHT-.*BEGIN ---/,/--- T2-COPYRIGHT-.*END ---/!d' \
105 -e '/.*\(Copyright (C) .*\)/!d;s//\1/;' \
106 -e 's/Clifford Wolf/ROCK Linux Project/' \
107 $oldfile`
108 else
109 oldcopyright=
112 if echo "$oldcopyright" | grep -q 'T2 SDE'; then
113 # if has T2 copyright, renew if necesary
114 since=$(echo "$oldcopyright" | sed -n -e 's,.* (C) \([^ ]*\) .*T2 SDE.*,\1,p')
116 if [ $since -lt $thisyear ]; then
117 copyright=`echo "$oldcopyright" | sed -e \
118 "s,.*T2 SDE.*,Copyright (C) $since - $thisyear The T2 SDE Project,"`
119 else
120 copyright="$oldcopyright"
122 else
123 # else, add one...
124 if [ "$usesvn" = 1 ]; then
125 since=`TZ=UTC svn log -q "$filename" 2> /dev/null |
126 grep -a '^r' | tail -n 1 | cut -d'|' -f3 | cut -c2-5`
128 # but until 2003 we were ROCK Linux, so
129 if [ ${since:-2004} -lt 2004 ]; then
130 oldcopyright="Copyright (C) $since - 2003 ROCK Linux Project"
131 since=2004
133 else
134 since=$thisyear
137 # prepare a copyright tag
138 if [ ${since:-1} -lt $thisyear ]; then
139 copyright="Copyright (C) ${since:-ESVNTO} - $thisyear The T2 SDE Project"
140 else
141 copyright="Copyright (C) $thisyear The T2 SDE Project"
143 copyright="$copyright${oldcopyright:+\\n$oldcopyright}"
146 action='i'
147 pretag= posttag=
148 if [ -z "$tag" ]; then
149 # doesn't have a note
150 if head -n 1 "$filename" | grep -a -q '^#!'; then
151 action='a'
153 case "$mode" in
155 tag="# "
157 asci)
158 tag="[COPY] "
161 pretag='/*' posttag=' */'
162 tag=' * '
165 tag="dnl "
167 lua)
168 tag="-- "
170 esac
172 # insert one
173 sed -i "1 $action\\
174 ${pretag:+$pretag\\
175 }$tag--- T2-COPYRIGHT-BEGIN ---\\
176 $tag--- T2-COPYRIGHT-END ---\\
177 ${posttag:+$posttag\\
178 }" $oldfile
181 mangled_filename=`echo "$filename" |
182 sed 's,package/\([^/]*\)/\(.*\),package/*/\2,'`
184 #echo BEFORE
185 #cat $oldfile
187 if [ "$tag" ]; then
188 # implant T2 copy note
190 grep -a -B 1000000 -- '--- T2-COPYRIGHT-.*BEGIN ---' $oldfile
192 if [ "$filename" != "${filename%/*.diff}" -o \
193 "$filename" != "${filename%/*.patch}" -o \
194 "$filename" != "${filename%/*.patch.*}" ]; then
195 sed -e "s,@@FILENAME@@,$mangled_filename,; \
196 s,@@COPYRIGHT@@,${copyright//
197 /\\n},;" $copynotepatch
198 else
199 sed -e "s,@@FILENAME@@,$mangled_filename,; \
200 s,@@COPYRIGHT@@,${copyright//
201 /\\n},;" $copynote
203 # we need a separated sed call because $rockcopyright adds a new line
204 } | sed -e "s,^,$tag,"
206 grep -a -A 1000000 -- '--- T2-COPYRIGHT-.*END ---' $oldfile
207 } > $newfile
209 # create the difference
210 if ! cmp -s $oldfile $newfile; then
211 echo "Creating patch for $filename." >&2
212 diff -ua "./$filename" $newfile |
213 sed -e "2 s,$newfile,./$filename,"
215 else
216 echo "WARNING: No Copyright tags in $filename found!" >&2
218 done
220 rm -f $tmpfile{,.note,.patch,.rock,.old,.new}