105 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			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
 | 
						|
 |