#!/bin/sh

# incremental_test.sh -- test that incremental linking information is correct.

# Copyright (C) 2009-2016 Free Software Foundation, Inc.
# Written by Rafael Avila de Espindola <espindola@google.com>
# and Cary Coutant <ccoutant@google.com>

# This file is part of gold.

# 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 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, write to the Free Software
# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
# MA 02110-1301, USA.

check_cmp()
{
    if ! cmp -s "$1" "$2"
    then
	echo "Actual output differs from expected:"
	echo "diff $1 $2"
	diff $1 $2
	exit 1
    fi
}

check()
{
    if ! grep -q "$2" "$1"
    then
	echo "Did not find expected output in $1:"
	echo "   $2"
	echo ""
	echo "Actual output below:"
	cat "$1"
	exit 1
    fi
}

# Extract actual command line from linker's -v output.
cat incremental_test.cmdline |
  grep "gcctestdir/ld " |
  sed "s/--incremental[-a-z]* //g" |
  cut -d ' ' -f 2- > actual

# Extract recorded command line from dump of the output file.
cat incremental_test.stdout |
  grep "Link command line" |
  cut -d : -f 2- |
  cut -d ' ' -f 3- |
  sed "s/'//g" > recorded

# Verify that the command line was recorded correctly.
check_cmp actual recorded

rm -f actual recorded

# Filter the incremental-dump output into a format that can be grepped
# more easily.

awk '
    /^[A-Za-z][A-Za-z ]+:$/ { section = $0; }
    /^[[]/ { subsection = $0; }
    /^ / { print section, subsection, $0; }
' < incremental_test.stdout > incremental_test.dump

check incremental_test.dump "Input sections: .* incremental_test_1.o  *1 "
check incremental_test.dump "Input sections: .* incremental_test_2.o  *1 "
check incremental_test.dump "Global symbol table: .* main  .* relocation type "
check incremental_test.dump "Global symbol table: .* a  *incremental_test_1.o "
check incremental_test.dump "Global symbol table: .* a .* relocation type "
check incremental_test.dump "Global symbol table: .* b  *incremental_test_2.o "
check incremental_test.dump "Global symbol table: .* b .* relocation type "
check incremental_test.dump "Global symbol table: .* t1  *incremental_test_2.o "
check incremental_test.dump "Global symbol table: .* t1 .* relocation type "

rm -f incremental_test.dump

exit 0
