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