X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=scripts%2Fshader-cpp.sh;h=95568f6f7c4a4515440de4b93af4633552791896;hb=d7505b463267b4541cb10c1c9ef62ef1e706f9c5;hp=202987adb914e9a79ca8ed07dad5b45495eb1bc1;hpb=1e3886b872c286e385013a8878e34c09f6da23fd;p=xonotic%2Fxonotic-maps.pk3dir.git diff --git a/scripts/shader-cpp.sh b/scripts/shader-cpp.sh old mode 100644 new mode 100755 index 202987ad..95568f6f --- a/scripts/shader-cpp.sh +++ b/scripts/shader-cpp.sh @@ -7,6 +7,13 @@ case "$0" in esac . ./shader-parser.subr +set -e + +err() +{ + echo >&2 "(EE) $*" + exit 1 +} LF=" " @@ -71,47 +78,58 @@ shaderkill() } preprocess() { - condstack= - echo "$shadertext" | while IFS= read -r L; do - [ -n "$L" ] || continue - set -- $L - k=$1 - shift - case "$k" in - '#if') - case "$LF$conds$LF" in - *"$LF$*$LF"*) - condstack=0$condstack - ;; - *) - condstack=1$condstack - ;; - esac - ;; - '#else') - case "$condstack" in - 0) - condstack=1${condstack#0} - ;; - 1) - condstack=0${condstack#1} - ;; - esac - ;; - '#endif') - condstack=${condstack#?} - ;; - *) - case "$condstack" in - *0*) - ;; - *) - echo "$L" - ;; - esac - ;; - esac - done + echo "$shadertext" | { + condstack= + while IFS= read -r L; do + [ -n "$L" ] || continue + set -- $L + k=$1 + shift + case "$k" in + '#if') + case "$LF$conds$LF" in + *"$LF$*$LF"*) + condstack=0$condstack + ;; + *) + condstack=1$condstack + ;; + esac + ;; + '#else') + if [ -z "$condstack" ]; then + err "unmatched #else" + fi + case "$condstack" in + 0*) + condstack=1${condstack#0} + ;; + 1*) + condstack=0${condstack#1} + ;; + esac + ;; + '#endif') + if [ -z "$condstack" ]; then + err "unmatched #endif" + fi + condstack=${condstack#?} + ;; + *) + case "$condstack" in + *0*) + ;; + *) + echo "${L% }" + ;; + esac + ;; + esac + done + if [ -n "$condstack" ]; then + err "unmatched #if" + fi + } } conditionalize() { @@ -156,7 +174,7 @@ conditionalize() } parse_shader_post() { - allconds=`echo "$shaderconds" | sort -u | grep .` + allconds=`echo "$shaderconds" | sort -u | grep . || true` conds= conditionalize "$allconds" }