X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Ftools%2Fqcc.sh;h=dfc375bb5a984fab52d12b4720c62b2e7e70c225;hb=c6e1864a0d1bbe7a5bfe721edb92318216195463;hp=6295828f443587daa487f458e5b20919cd62d484;hpb=91396bb7a7d3f0707dd21abc251af615484d9cd9;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/tools/qcc.sh b/qcsrc/tools/qcc.sh index 6295828f4..dfc375bb5 100755 --- a/qcsrc/tools/qcc.sh +++ b/qcsrc/tools/qcc.sh @@ -1,5 +1,6 @@ -#!/bin/sh -set -eu +#!/usr/bin/env bash +set -euo pipefail +IFS=$' \n\t' WORKDIR=${WORKDIR} CPP=${CPP} @@ -11,37 +12,48 @@ QCCFLAGS=${QCCFLAGS} function qpp() { IN=$1 OUT=$2 - >&2 echo + ${CPP} ${@:3} ${IN} + case ${MODE} in + client) DEFS="-DGAMEQC -DCSQC" + ;; + menu) DEFS="-DMENUQC" + ;; + server) DEFS="-DGAMEQC -DSVQC" + ;; + esac + #>&2 echo + ${CPP} "${@:3}" ${DEFS} "${IN}" + set +e # additional information - ${CPP} ${@:3} \ - -dM 1>${WORKDIR}/${MODE}_macros.txt \ - -H 2>${WORKDIR}/${MODE}_includes.txt \ - ${IN} + ${CPP} "${@:3}" ${DEFS} \ + -dM 1>"${WORKDIR}/${MODE}_macros.txt" \ + -H 2>"${WORKDIR}/${MODE}_includes.txt" \ + "${IN}" # main step - ${CPP} ${@:3} -MMD -MP -MT ${OUT} -Wall -Wundef -Werror ${IN} -o ${WORKDIR}/${MODE}.txt - sed 's/^#\(line\)\? \([[:digit:]]\+\) "\(.*\)".*/\n#pragma file(\3)\n#pragma line(\2)/g' ${WORKDIR}/${MODE}.txt + ${CPP} "${@:3}" ${DEFS} -MMD -MP -MT "${OUT}" -Wall -Wundef -Werror "${IN}" -o "${WORKDIR}/${MODE}.txt" + err=$? + set -e + if [ ${err} -ne 0 ]; then return ${err}; fi + sed -E 's/^#(line)? ([[:digit:]]+) "(.*)".*/'$'\\\n''#pragma file(\3)'$'\\\n''#pragma line(\2)/g' "${WORKDIR}/${MODE}.txt" } function qcc() { - >&2 echo + $(basename ${QCC}) $@ + #>&2 echo + $(basename ${QCC}) $@ # FIXME: relative compiler path is too deep - (cd tools && ${QCC} $@) + (cd tools && ${QCC} "$@") } $(return >/dev/null 2>&1) || { MODE=$1 OUT=$2 IN=$3 - - case ${MODE} in - client) PROG=CSQC + case "${OUT}" in + /*) + OUT_ABSOLUTE=${OUT} ;; - menu) PROG=MENUQC - ;; - server) PROG=SVQC + *) + OUT_ABSOLUTE=${PWD}/${OUT} ;; esac - - qpp ${IN} ${OUT} -I. ${QCCIDENT} ${QCCDEFS} -D${PROG} > ${WORKDIR}/${MODE}.qc - qcc ${QCCFLAGS} -o ${OUT} ../${WORKDIR}/${MODE}.qc + set -x + qpp "${IN}" "${OUT}" -I. ${QCCIDENT} ${QCCDEFS} > "${WORKDIR}/${MODE}.qc" + qcc ${QCCFLAGS} -o "${OUT_ABSOLUTE}" "../${WORKDIR}/${MODE}.qc" }