yuzu/externals/vcpkg/scripts/buildsystems/make_wrapper/cl_cpp_wrapper
2022-07-23 03:01:36 +02:00

105 lines
2.1 KiB
Bash
Executable File

#!/usr/bin/bash
# cl_cpp_wrapper
# Wrapper around MS's cl.exe to make it act more like Unix cpp
PATH="$PATH:/usr/bin"
case $MACHTYPE in
*-msys)
slash="-"
;;
*)
slash="/"
;;
esac
# prog specifies the program that should be run cl.exe
prog=cl.exe
debug=
cppopt=("${slash}nologo")
cppopt+=("${slash}E")
verbose=
shared_index=-1
processargs()
{
### Run through every option and convert it to the proper MS one
while test $# -gt 0; do
case "$1" in
-D*) optarg= ;;
-*=*) optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
*) optarg= ;;
esac
gotparam=1
case "$1" in
--help)
usage
exit 0
;;
--verbose)
verbose=1
;;
-*)
# Remaining '-' options are passed to the compiler
if test x$optarg != x ; then
cppopt+=("${slash}${1:1}=$optarg")
else
cppopt+=("${slash}${1:1}")
fi
;;
/*)
# All '/' options are assumed to be for cpp and are passed through
cppopt+=("${slash}${1:1}")
;;
*)
file=$1
#cppopt+=("$1")
;;
esac
shift
done
}
# Whitespace in paths is dealt with by setting IFS and using bash arrays
# processargs $CPP_FLAGS
IFS=""
processargs $@
if test x$V = x1 ; then
verbose=1
fi
if test -n "$verbose" ; then
echo -n "$prog"
for opt in "${cppopt[@]}" ; do
echo -n " \"$opt\""
done
echo ""
fi
[ $# -ge 1 -a -f "$1" ] && input="$file" || input="-"
input_file="${file:-/proc/self/fd/0}"
if [ "$input_file" == "/proc/self/fd/0" ]; then
#echo "STDIN"
# CL does not support reading from STDIN so it is wrapped here.
tmpout=cpp_wrapper_$RANDOM.h
/usr/bin/cp $input_file $tmpout
# from https://stackoverflow.com/questions/36313562/how-to-redirect-stdin-to-file-in-bash
#exec 3> cppstdtmp.h
#while IFS= read -r line; do
# printf '%s' "$line"
#done
#exec 3<&-
#echo "$(</dev/stdin)" > cppstdtmp.h
exec $prog ${cppopt[@]} $tmpout
rm -f $tmpout
else
#echo "FILE"
exec $prog ${cppopt[@]} $input_file
fi