105 lines
2.1 KiB
Plaintext
105 lines
2.1 KiB
Plaintext
|
#!/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
|
||
|
|