blob: 139d0d7a768d3e80d39c9232e21b5833ef9a87ac [file] [log] [blame]
Zesstra@Morgengrauen38e73d82016-02-02 22:24:24 +01001#!/bin/bash
2
3export CHECKERHOME=`pwd`
4export CODEFILES="${CHECKERHOME}/CODEFILES"
5export HEADERFILES="${CHECKERHOME}/HEADERFILES"
6#export LPCFILES="${HEADERFILES} ${CODEFILES}"
7export LPCFILES="${CHECKERHOME}/LPCFILES"
Bugfixac979c42018-04-09 16:51:42 +02008export MUDLIB="../mudlib"
Zesstra@Morgengrauen38e73d82016-02-02 22:24:24 +01009export LOGS="${CHECKERHOME}/logs"
10
11LEVEL1="change_required"
12LEVEL2="formatting"
13LEVEL5="please_check"
14LEVEL10="cosmetics"
15
16echo -ne "LPC-Source Checker V0.3 (2008-01-09)\n\n"
17
18usage() {
19 echo -ne "usage: ./check <region> <logfile>\n"
20 exit
21}
22
23# Parameter pruefen, ansonsten usage ausgeben
24if [ -z ${1} ] || [ -z ${2} ]
25then
26 usage
27fi
28
29# gucken ob das Logverzeichnis da ist, wenn nein, dann anlegen
30if [ ! -d ${LOGS} ]
31then
32 mkdir -p ${LOGS}
33fi
34
35# rudimentaerer check ob die Mudlib da liegt, wo ${MUDLIB} hinzeigt
36if [ ! -d ${MUDLIB} ]
37then
38 echo -ne "No mudlib found in ${MUDLIB}\n"
39 exit
40fi
41
42# alten Kram entsorgen
43if [ -f ${CODEFILES} ]
44then
45 rm ${CODEFILES}
46fi
47
48if [ -f ${HEADERFILES} ]
49then
50 rm ${HEADERFILES}
51fi
52
53if [ -f ${LPCFILES} ]
54then
55 rm ${LPCFILES}
56fi
57
58echo -ne "Checking the MorgenGrauen Mudlib in ${MUDLIB}\n"
59echo -ne "Checking in ${1} (${MUDLIB}${1})\n"
60
61cd ${MUDLIB}
62
63# Dateiliste erstellen
64echo -ne "Creating file list...\n"
65
66find ./${1} -type f -name "*.c" -print > ${CODEFILES}
67find ./${1} -type f -name "*.h" -print > ${HEADERFILES}
68
69# irgendwie unschoen
70cat ${CODEFILES} ${HEADERFILES} > ${LPCFILES}
71
72# eigentlich haette man das alles in einem abfackeln koennen, aber dann gaebe
73# es keine Ueberschriften ueber den einzelnen Punkten
74
75# LEVEL 1 CHECKS (change required)
76
77# Umlaute
78echo -ne "\n\nPruefe auf Umlaute...\n" | tee -a ${LOGS}/${2}.${LEVEL1}
79while read line
80do
81 grep -Hn '[üöäÜÖÄß]' $line | cut -d : -f 1-2 >> ${LOGS}/${2}.${LEVEL1}
82done < ${LPCFILES}
83
84# lambda()
85echo -ne "\n\nPruefe auf lambda()...\n" | tee -a ${LOGS}/${2}.${LEVEL1}
86while read line
87do
88 grep -Hn 'lambda(' $line| cut -d : -f 1-2 >> ${LOGS}/${2}.${LEVEL1}
89done < ${LPCFILES}
90
91# Pfade in /players/
92echo -ne "\n\nPruefe auf Pfade in /players/...\n" | tee -a ${LOGS}/${2}.${LEVEL1}
93while read line
94do
95 grep -Hn '/players/' $line| cut -d : -f 1-2 >> ${LOGS}/${2}.${LEVEL1}
96done < ${LPCFILES}
97
98# fehlende #pragma strong_types/strict_types
99echo -ne "\n\nFiles ohne #pragma strong_types oder strict_types...\n" | tee -a ${LOGS}/${2}.${LEVEL1}
100while read line
101do
102 grep -L '#pragma.\(strong\|strict\)_types' $line | sort \
103 >> ${LOGS}/${2}.${LEVEL1}
104done < ${CODEFILES}
105
106# direkte Verwendung von do_damage()
107echo -ne "\n\nPruefe auf direkte Verwendung von do_damage()...\n" |\
108 tee -a ${LOGS}/${2}.${LEVEL1}
109while read line
110do
111 grep -Hn 'do_damage(' $line | cut -d : -f 1-2 >> ${LOGS}/${2}.${LEVEL1}
112done < ${LPCFILES}
113
114# Unerwuenschte oder obsolete lfuns
115echo -ne "\n\nPruefe auf unerwuenschte oder obsolete lfuns...\n" |\
116 tee -a ${LOGS}/${2}.${LEVEL1}
117while read line
118do
119 grep -Hn -f ${CHECKERHOME}/bad_lfun.list $line >> ${LOGS}/${2}.${LEVEL1}
120done < ${LPCFILES}
121
122# Unerwuenschte oder obsolete efuns
123echo -ne "\n\nPruefe auf unerwuenschte oder obsolete efuns...\n" |\
124 tee -a ${LOGS}/${2}.${LEVEL1}
125while read line
126do
127 grep -Hn -f ${CHECKERHOME}/bad_efun.list $line >> ${LOGS}/${2}.${LEVEL1}
128done < ${LPCFILES}
129
130# Unerwuenschte oder obsolete Properties
131echo -ne "\n\nPruefe auf unerwuenschte oder obsolete Properties...\n" |\
132 tee -a ${LOGS}/${2}.${LEVEL1}
133while read line
134do
135 grep -Hn -f ${CHECKERHOME}/bad_prop.list $line >> ${LOGS}/${2}.${LEVEL1}
136done < ${LPCFILES}
137
138# Unerwuenschte Events
139echo -ne "\n\nPruefe auf unerwuenschte Eventnamen...\n" | tee -a ${LOGS}/${2}.${LEVEL1}
140while read line
141do
142 grep -Hn -f ${CHECKERHOME}/bad_events.list $line >> ${LOGS}/${2}.${LEVEL1}
143done < ${LPCFILES}
144
145# Keine clones von /std/thing
146echo -ne "\n\nPruefe auf Clones von /std/thing...\n" |\
147 tee -a ${LOGS}/${2}.${LEVEL1}
148while read line
149do
150 grep -Hn 'clone_object(.*/std/thing.*)' $line | cut -d : -f 1-2 \
151 >> ${LOGS}/${2}.${LEVEL1}
152done < ${LPCFILES}
153
154# ueberschriebenes move()
155echo -ne "\n\nPruefe auf ueberschriebenes move() (deprecated)...\n" |\
156 tee -a ${LOGS}/${2}.${LEVEL1}
157while read line
158do
159 grep -Hn 'int.*move(.*mixed.*int.*)' $line | cut -d : -f 1-2 \
160 >> ${LOGS}/${2}.${LEVEL1}
161done < ${LPCFILES}
162
163# wird geerbtes PreventMove gerufen?
164echo -ne "\n\nUeberschriebenes PreventMove() ohne geerbetes zu rufen...\n" |\
165 tee -a ${LOGS}/${2}.${LEVEL1}
166while read line
167do
Bugfix9225de22018-04-09 17:01:57 +0200168 grep 'PreventMove(.*object.*object.*int.*)' $line > ${CHECKERHOME}/check.tmp
Zesstra@Morgengrauen38e73d82016-02-02 22:24:24 +0100169 grep -L '::PreventMove(' $line > ${CHECKERHOME}/check.tmp2
170done < ${LPCFILES}
171# nur Zeilen ausgeben, die nicht im 2. File vorkommen
172grep -v -f ${CHECKERHOME}/check.tmp2 ${CHECKERHOME}/check.tmp | \
173 tee -a ${LOGS}/${2}.${LEVEL1}
174rm ${CHECKERHOME}/check.tmp*
175
Bugfixac979c42018-04-09 16:51:42 +0200176echo -ne "\n\nUeberschriebenes init() ohne geerbtes zu rufen...\n" |\
177 tee -a ${LOGS}/${2}.${LEVEL1}
178while read line
179do
180 grep 'init(\(object.*\)\?)' $line > ${CHECKERHOME}/check.tmp
181 grep -L '::init(' $line > ${CHECKERHOME}/check.tmp2
182done < ${LPCFILES}
183grep -v -f ${CHECKERHOME}/check.tmp2 ${CHECKERHOME}/check.tmp \
184 >> ${LOGS}/${2}.${LEVEL1}
185rm ${CHECKERHOME}/check.tmp*
186
Zesstra@Morgengrauen38e73d82016-02-02 22:24:24 +0100187echo -ne "\n\nUeberschriebenes NotifyMove() ohne geerbetes zu rufen...\n" |\
188 tee -a ${LOGS}/${2}.${LEVEL1}
189while read line
190do
Bugfix9225de22018-04-09 17:01:57 +0200191 grep 'NotifyMove(.*object.*object.*int.*)' $line > ${CHECKERHOME}/check.tmp
Zesstra@Morgengrauen38e73d82016-02-02 22:24:24 +0100192 grep -L '::NotifyMove(' $line > ${CHECKERHOME}/check.tmp2
193done < ${LPCFILES}
194grep -v -f ${CHECKERHOME}/check.tmp2 ${CHECKERHOME}/check.tmp \
195 >> ${LOGS}/${2}.${LEVEL1}
196rm ${CHECKERHOME}/check.tmp*
197
198# call_other(x, "???") ist obsolet
199echo -ne "\n\nPruefe auf call_other(x, "???") (obsolet)...\n" |\
200 tee -a ${LOGS}/${2}.${LEVEL1}
201while read line
202do
203 grep -Hn 'call_other(.*???.*)' $line | cut -d : -f 1-2 \
204 >> ${LOGS}/${2}.${LEVEL1}
205done < ${LPCFILES}
206
207# Alte Syntax der Inline-Closures
208echo -ne "\n\nPruefe auf obsolete Inline-Closures ( (: :) )...\n" | \
209 tee -a ${LOGS}/${2}.${LEVEL1}
210while read line
211do
212 grep -Hn '(: ' $line | cut -d : -f 1-2 \
213 >> ${LOGS}/${2}.${LEVEL1}
214done < ${LPCFILES}
215
216# LEVEL 2 CHECKS
217# Tabulatoren
218echo -ne "\n\nPruefe auf Tabulatoren...\n" | tee -a ${LOGS}/${2}.${LEVEL2}
219while read line
220do
221 grep -Hn $'\t' $line | cut -d : -f 1-2 >> ${LOGS}/${2}.${LEVEL2}
222done < ${LPCFILES}
223
224# Zeilen > 78 Zeichen
225echo -ne "\n\nPruefe auf Zeilen > 78 Zeichen...\n" | tee -a ${LOGS}/${2}.${LEVEL2}
226while read line
227do
228 grep -Hn '.\{79,\}' $line| cut -d : -f 1-2 >> ${LOGS}/${2}.${LEVEL2}
229done < ${LPCFILES}
230
231# LEVEL 5 CHECKS
232# Header mit #pragmas
233echo -ne "\n\nHeader (*.h) mit #pragmas...\n" | tee -a ${LOGS}/${2}.${LEVEL5}
234while read line
235do
236 grep -l '#pragma' $line >> ${LOGS}/${2}.${LEVEL5}
237done < ${HEADERFILES}
238
239# efuns, Verwendung beachten
240echo -ne "\n\nPruefe auf efuns, deren Verwendung beobachtet werden sollte...\n" |\
241 tee -a ${LOGS}/${2}.${LEVEL5}
242while read line
243do
244 grep -Hn -f ${CHECKERHOME}/warn_efun.list $line \
245 >> ${LOGS}/${2}.${LEVEL5}
246done < ${LPCFILES}
247
248# Properties, Verwendung beachten
249echo -ne "\n\nPruefe auf Properties, deren Verwendung beobachtet werden
250sollte...\n" | tee -a ${LOGS}/${2}.${LEVEL5}
251while read line
252do
Bugfix5f6b1512016-08-28 12:12:31 +0200253 grep -EHn -f ${CHECKERHOME}/warn_prop.list $line \
Zesstra@Morgengrauen38e73d82016-02-02 22:24:24 +0100254 >> ${LOGS}/${2}.${LEVEL5}
255done < ${LPCFILES}
256
257# Pruefung auf static -> protected
258echo -ne "\n\nPruefe auf 'static' (-> 'protected')...\n" |\
259 tee -a ${LOGS}/${2}.${LEVEL5}
260while read line
261do
262 grep -Hn 'static' $line >> ${LOGS}/${2}.${LEVEL5}
263done < ${LPCFILES}
264
265
266# LEVEL 10 CHECKS
267# Alte Rechtschreibung rules
268echo -ne "\n\nKleingeschriebenes Du/Dir/Dich...\n" |\
269 tee -a ${LOGS}/${2}.${LEVEL10}
270while read line
271do
272 grep -Hn ' \(du\|dich\|dir\) ' $line | cut -d : -f 1-2 | sort | \
273 uniq >> ${LOGS}/${2}.${LEVEL10}
274done < ${LPCFILES}
275
276# Pfadnamen bereinigen
277sed -i -e 's#.//#/#g' ${LOGS}/${2}.*
278
279echo -ne "\nCheck finished!\n"