]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/tools/genmod.sh
Optimize vehicle impact code by only calling vlen() if damage would be taken
[xonotic/xonotic-data.pk3dir.git] / qcsrc / tools / genmod.sh
index 269c631f7800987dd3ab30357de1340082b3f058..a8ac4a0e85a7533dbc78ff08ba450e8935322d9e 100755 (executable)
@@ -1,24 +1,69 @@
-#!/bin/bash
+#!/usr/bin/env bash
 set -eu
-cd "$(dirname "$0")"
+cd ${0%/*}
 cd ..
+ROOT=$PWD/
 
-MOD=_mod.inc
+MOD=_mod
+
+function hash() {
+    git hash-object $1
+}
 
 function genmod() {
-    echo '// generated file; do not modify' > ${MOD}
+    # use context to work around cmake issue #12619
+    CTX="${PWD#$ROOT}/"
+    if [ -f ${MOD}.inc ]; then
+        oldHashC=$(hash ${MOD}.inc)
+        oldTimeC=$(stat -c "%Y" ${MOD}.inc)
+    fi
+    if [ -f ${MOD}.qh ]; then
+        oldHashH=$(hash ${MOD}.qh)
+        oldTimeH=$(stat -c "%Y" ${MOD}.qh)
+    fi
+    echo '// generated file; do not modify' > ${MOD}.inc
+    echo '// generated file; do not modify' > ${MOD}.qh
     for f in $(ls | sort -k 1,1 -t .); do
-        if [[ "$f" == *.qc ]]; then echo "#include \"$f\"" >> ${MOD}; fi
+          if [[ "$f" == cl_* ]]; then f="${f#cl_}"; if [[ -f "$f" ]]; then continue; fi
+        elif [[ "$f" == sv_* ]]; then f="${f#sv_}"; if [[ -f "$f" ]]; then continue; fi
+        elif [[ "$f" == ui_* ]]; then f="${f#ui_}"; if [[ -f "$f" ]]; then continue; fi
+        fi
+        if [[ "$f" == *.qc ]]; then
+            if [[ -f "$f" ]]; then echo -e "#include <${CTX}$f>" >> ${MOD}.inc; fi
+            if [[ -f "${f%.qc}.qh" ]]; then echo -e "#include <${CTX}${f%.qc}.qh>" >> ${MOD}.qh; fi
+            if [[ -f "cl_$f" ]]; then echo -e "#ifdef CSQC\n    #include <${CTX}cl_$f>\n#endif" >> ${MOD}.inc; fi
+            if [[ -f "cl_${f%.qc}.qh" ]]; then echo -e "#ifdef CSQC\n    #include <${CTX}cl_${f%.qc}.qh>\n#endif" >> ${MOD}.qh; fi
+            if [[ -f "sv_$f" ]]; then echo -e "#ifdef SVQC\n    #include <${CTX}sv_$f>\n#endif" >> ${MOD}.inc; fi
+            if [[ -f "sv_${f%.qc}.qh" ]]; then echo -e "#ifdef SVQC\n    #include <${CTX}sv_${f%.qc}.qh>\n#endif" >> ${MOD}.qh; fi
+            if [[ -f "ui_$f" ]]; then echo -e "#ifdef MENUQC\n    #include <${CTX}ui_$f>\n#endif" >> ${MOD}.inc; fi
+            if [[ -f "ui_${f%.qc}.qh" ]]; then echo -e "#ifdef MENUQC\n    #include <${CTX}ui_${f%.qc}.qh>\n#endif" >> ${MOD}.qh; fi
+        fi
     done
-    # echo >> ${MOD}
+    declare -l rec=1
+    if [[ -f "_all.inc" ]]; then rec=0; fi
     for f in *; do if [ -d "$f" ]; then
         (cd -- "$f" && genmod)
-        # echo "#include \"$f/MOD\"" >> ${MOD}
+        if [[ $rec == 1 ]]; then
+            rec=2
+            echo >> ${MOD}.inc
+            echo >> ${MOD}.qh
+        fi
+        if [[ $rec != 0 ]]; then
+            declare -l mod=_mod
+            if [[ -f "$f/_all.inc" ]]; then mod=_all; fi
+            echo "#include <${CTX}$f/${mod}.inc>" >> ${MOD}.inc
+            echo "#include <${CTX}$f/${mod}.qh>" >> ${MOD}.qh
+        fi
     fi; done
+    newHashC=$(hash ${MOD}.inc)
+    if [[ $newHashC == $oldHashC ]]; then touch -d @$oldTimeC ${MOD}.inc; fi
+    newHashH=$(hash ${MOD}.qh)
+    if [[ $newHashH == $oldHashH ]]; then touch -d @$oldTimeH ${MOD}.qh; fi
 }
 
 (cd lib; genmod)
 (cd common; genmod)
+(cd ecs; genmod)
 (cd client; genmod)
 (cd server; genmod)
 (cd menu; genmod)