X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=blobdiff_plain;f=qcsrc%2Ftools%2Fqcc.sh;h=865e6e592ca48c037932fa643ec80e9dd1b20f83;hp=40223c113a85281b1a641aa0b0bffa82b1bbb40f;hb=3ac61b98c83be079c61cf525491d2028b2a889dc;hpb=37cf62041a76248472ef6a78feaaed33e35a2260 diff --git a/qcsrc/tools/qcc.sh b/qcsrc/tools/qcc.sh index 40223c113a..865e6e592c 100755 --- a/qcsrc/tools/qcc.sh +++ b/qcsrc/tools/qcc.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash set -euo pipefail IFS=$' \n\t' @@ -12,41 +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 + ${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 's/^#\(line\)\? \([[:digit:]]\+\) "\(.*\)".*/\n#pragma file(\3)\n#pragma line(\2)/g' ${WORKDIR}/${MODE}.txt + sed -E 's/^#(line)? ([[:digit:]]+) "(.*)".*/'$'\\\n''#pragma file(\3)'$'\\\n''#pragma line(\2)/g' "${WORKDIR}/${MODE}.txt" } function 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" }