#!/bin/bash

set -e

out=$("$1" 'map(select(.["file"] | contains ("cc_cflags_probe.c"))) | first | .["command"]' < compile_commands.json)
out=${out#\"}
out=${out%\"}
args=($out)

idx=0
cc=${args[idx]}
if [ "$cc" = "ccache" -o "$cc" = "sccache" ]; then
    idx=$((idx+1))
    cc="$cc ${args[idx]}"
fi

declare -a cflags=()

for arg in ${args[@]:(idx+1)}; do
    case $arg in
	-I*|-M*|-o|-c) ;;
	-*) cflags+="$arg ";;
    esac
done

extra_args=()
# When using clang, `LLVM=1` needs to be passed as an argument. Otherwise some
# parts of the build system will attempt to invoke GCC.
if cc --version 2>&1 | grep clang; then
    extra_args+="LLVM=1"
fi

cd $3
make_out=$(env CC="$cc" CFLAGS="$cflags" "$2" -j"$4" $extra_args)
exit $?
