#!/bin/sh
#   Copyright 2011-2016 Free Software Foundation, Inc.
#
#   This is free software: you can redistribute it and/or modify it
#   under the terms of the GNU General Public License as published by
#   the Free Software Foundation, either version 3 of the License, or
#   (at your option) any later version.
#
#   This program is distributed in the hope that it will be useful, but
#   WITHOUT ANY WARRANTY; without even the implied warranty of
#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
#   General Public License for more details.
#
#   You should have received a copy of the GNU General Public License
#   along with this program.  If not, see
#   <http://www.gnu.org/licenses/>.

# You must set PYTHON_PLUGIN in the environment.
# It should be the directory holding the "python.so" file.
# Usage: gcc-with-excheck [-Xx|-Xc] [--] ARGS
# -Xx means to invoke the exception checker.
# -Xc means to invoke the cleanup checker.
# -- means stop processing -X options.
# ARGS are passed to gcc.

GCC=${GCC:-gcc}
exdir=`dirname $0`

pargs=
while true; do
    case "$1" in
	-Xc)
	    pargs="$pargs -fplugin-arg-python-script=$exdir/cleanup_check.py"
	    ;;
	-Xx)
	    pargs="$pargs -fplugin-arg-python-script=$exdir/excheck.py"
	    ;;
	-X*)
	    echo "unrecognized argument $1" 1>&2
	    exit 1
	    ;;
	--)
	    shift
	    break
	    ;;
	*)
	    break
	    ;;
    esac
    shift
done

# Recent versions of the Python plugin build two .so files in
# different directories, so we have to set this.  This will be fixed
# upstream at some point.
export LD_LIBRARY_PATH=$PYTHON_PLUGIN:$PYTHON_PLUGIN/gcc-c-api

gcc -fplugin=$PYTHON_PLUGIN/python.so $pargs "$@"
