]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blob - qcsrc/tools/headerstyle.sh
e40fb392a86265091052077549fcc7e61d3cb122
[xonotic/xonotic-data.pk3dir.git] / qcsrc / tools / headerstyle.sh
1 #!/usr/bin/env bash
2 set -eu
3 cd ${0%/*}
4 cd ..
5
6 function startswith() {
7     declare -l file="${1}"
8     declare -l prelude="${2}"
9     declare -l line=$(head -n1 "$file")
10     if [ "$line" != "$prelude" ]; then
11         echo "$prelude" | cat - "$file" > "$file.tmp" && mv "$file.tmp" "$file"
12     fi
13 }
14
15 function check() {
16     declare -l base="${1}"
17     find "$base" -type f -name '*.qc' -print0 | sort -z | while read -r -d '' file; do
18         echo "$file"
19         declare -l file_h="${file%.qc}.qh"
20         if [ ! -f "$file_h" ]; then echo "#pragma once" > "$file_h"; fi
21
22         include=$(basename "$file")
23         include="${include%.qc}.qh"
24         include="#include \"${include}\""
25         startswith "$file" "$include"
26     done
27     find "$base" -type f -name '*.qh' -a \! -name '_mod.qh' -print0 | sort -z | while read -r -d '' file; do
28         echo "$file"
29         startswith "$file" "#pragma once"
30     done
31     find "$base" -type f -name '_mod.inc' -print0 | sort -z | while read -r -d '' file; do
32         echo "$file"
33         declare -l file_inc="${file%_mod.inc}_all.inc"
34         if [ ! -f "$file_inc" ]; then
35             echo '#include "_all.qh"' > "$file_inc"
36             echo '#include "_mod.inc"' >> "$file_inc"
37         fi
38         declare -l file_qh="${file%_mod.inc}_all.qh"
39         if [ ! -f "$file_qh" ]; then
40             echo '#pragma once' > "$file_qh"
41             echo '#include "_mod.qh"' >> "$file_qh"
42         fi
43     done
44 }
45
46 check client
47 check server
48 check menu
49
50 # TODO: check that "_mod.(qc|inc)" is not included except by "_all.(qc|inc)"