aboutsummaryrefslogtreecommitdiff
path: root/scripts/buildsystems/make_wrapper
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/buildsystems/make_wrapper')
-rw-r--r--scripts/buildsystems/make_wrapper/cl_cpp_wrapper104
1 files changed, 104 insertions, 0 deletions
diff --git a/scripts/buildsystems/make_wrapper/cl_cpp_wrapper b/scripts/buildsystems/make_wrapper/cl_cpp_wrapper
new file mode 100644
index 000000000..32fde518f
--- /dev/null
+++ b/scripts/buildsystems/make_wrapper/cl_cpp_wrapper
@@ -0,0 +1,104 @@
+#!/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
+