]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blob - qcsrc/tools/qcc.sh
qcc.sh: require bash, not sh
[xonotic/xonotic-data.pk3dir.git] / qcsrc / tools / qcc.sh
1 #!/bin/bash
2 set -eu
3
4 WORKDIR=${WORKDIR}
5 CPP=${CPP}
6 QCC=${QCC}
7 QCCIDENT="-DGMQCC"
8 QCCDEFS=${QCCDEFS}
9 QCCFLAGS=${QCCFLAGS}
10
11 function qpp() {
12     IN=$1
13     OUT=$2
14     >&2 echo + ${CPP} ${@:3} ${IN}
15     # additional information
16     ${CPP} ${@:3} \
17         -dM 1>${WORKDIR}/${MODE}_macros.txt \
18         -H 2>${WORKDIR}/${MODE}_includes.txt \
19         ${IN}
20     # main step
21     ${CPP} ${@:3} -MMD -MP -MT ${OUT} -Wall -Wundef -Werror ${IN} -o ${WORKDIR}/${MODE}.txt
22     sed 's/^#\(line\)\? \([[:digit:]]\+\) "\(.*\)".*/\n#pragma file(\3)\n#pragma line(\2)/g' ${WORKDIR}/${MODE}.txt
23 }
24
25 function qcc() {
26     >&2 echo + $(basename ${QCC}) $@
27     # FIXME: relative compiler path is too deep
28     (cd tools && ${QCC} $@)
29 }
30
31 $(return >/dev/null 2>&1) || {
32     MODE=$1
33     OUT=$2
34     IN=$3
35
36     case ${MODE} in
37         client) PROG=CSQC
38         ;;
39         menu) PROG=MENUQC
40         ;;
41         server) PROG=SVQC
42         ;;
43     esac
44
45     qpp ${IN} ${OUT} -I. ${QCCIDENT} ${QCCDEFS} -D${PROG} > ${WORKDIR}/${MODE}.qc
46     qcc ${QCCFLAGS} -o ${OUT} ../${WORKDIR}/${MODE}.qc
47 }