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
 | |
| 
 |