#!/bin/bash
#
# livepatch build script
#
# Copyright (C) 2015 Ross Lagerwall <ross.lagerwall@citrix.com>
#
# This program 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 2
# 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/>.
#
# Based on kpatch's kpatch-gcc script.

TOOLCHAINCMD="$1"
shift

declare -a args=("$@")
keep=no

if [[ "$TOOLCHAINCMD" = "gcc" ]] ; then
    while [ "$#" -gt 0 ]; do
        if [ "$1" = "-o" ]; then
            obj=$2
            [[ $2 = */.tmp_*.o ]] && obj=${2/.tmp_/}
            case "$obj" in
            version.o|\
            debug.o|\
            *.xen-syms.*.o|\
            .*.o)
                break
                ;;
            *.o)
                path="$(pwd)/$(dirname $obj)"
                dir="${path#$LIVEPATCH_BUILD_DIR}"
                if [ -n "$LIVEPATCH_CAPTURE_DIR" -a -d "$LIVEPATCH_CAPTURE_DIR" ]; then
                    echo "$dir/$obj" >> "${LIVEPATCH_CAPTURE_DIR}/changed_objs"
                    keep=yes
                fi
                break
                ;;
            *)
                break
                ;;
        esac
    fi
    shift
done
fi

"$TOOLCHAINCMD" "${args[@]}"
ret="$?"

if [[ "$keep" = "yes" ]] ; then
    mkdir -p "$(dirname $LIVEPATCH_CAPTURE_DIR/$dir/$obj)"
    cp "$obj" "$LIVEPATCH_CAPTURE_DIR/$dir/$obj"
fi

exit "$ret"
