# Copyright (C) 2014-2017 Free Software Foundation, Inc.
#
# This file is part of the GNU Binutils.
#
# 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 that scripts using the "=" sysroot-prefix work, for both
# toolchains with and without --sysroot support.

# We test this by emitting archives into a subdirectory and expect
# constructs such as GROUP and AS_NEEDED (the only two constructs
# actually tested) to find them (or not); both quoted and unquoted
# paths, with different prefixes on the path and with --sysroot
# present or not, with different arguments.

# Find out if the linker supports sysroot; if it was configured
# "--with-sysroot X" where X is a non-empty string.
set with_sysroot [check_sysroot_available]
verbose -log "Has (non-empty) sysroot support: $with_sysroot; \"$ld_sysroot\""

# We also need to know if the sysroot is "/" (a common use) as some of
# the tests prepend sysroot to the current directory and on most
# common systems "//dir/path" is handled as "/dir/path".
if {$ld_sysroot == "/"} {
    # Use a modified test-subset for testing.
    set with_sysroot 3
}

# The linker on Windows expects Windows style paths.
# MSYS2 runtime converts paths in the command line automatically.
# However, for our test linker scripts, we have to prepare
# the correct paths manually.
proc get_base_dir_for_scripts {} {
    global base_dir
    global get_base_dir_for_scripts_saved

    if { ![info exists get_base_dir_for_scripts_saved] } {
	set get_base_dir_for_scripts_saved $base_dir
	if { ([ishost *-*-cygwin] || [ishost *-*-mingw*] )
	     && ![catch "exec cygpath -m $base_dir" base_dir_converted] } {
	    set get_base_dir_for_scripts_saved $base_dir_converted
	}
    }
    return $get_base_dir_for_scripts_saved
}

# Entries in the array-tables:
# 0: Testtype; an inclusive bitmask indicating that the test should run on a
# build configured for: 1: non-sysroot, 2: sysroot != "/", 4: sysroot == "/".
# 1: Description, forming part of the dejagnu test-name.
# 2: Replacement for @p@.
# 3: Option to pass to linker (usually something with --sysroot).
# 4: Message substring; a substring to match against the error message
# if an error is expected, or empty if no error is expected.
#
# If the replacement or option contains @cwd@, that'll be replaced by
# "$base_dir/tmpdir", the full path to the location of the script
# (with the actual files in the "sysroot" subdirectory).  If the
# description contains @cwd@, that will be replaced by "<CWD>".

set sysroot_prefix_tests {
    {7 "plain -Lpath" "sysroot/" {} ""}
    {7 "root-anchored but -Lpath" "/sysroot/" {} "cannot find"}
    {7 "full-path" "@cwd@/sysroot/" {} ""}
    {7 "root-anchored =-prefixed -Lpath" "=/sysroot/" {} "cannot find"}
    {7 "root-anchored $SYSROOT-prefixed -Lpath" "$SYSROOT/sysroot/" {} "cannot find"}
    {7 "plain =-prefixed with empty" "=sysroot/" "--sysroot=" ""}
    {7 "plain $SYSROOT-prefixed with empty" "$SYSROOTsysroot/" "--sysroot=" ""}
    {6 "root-anchored but script outside sysroot" "/" "--sysroot=@cwd@/sysroot" "cannot find"}
    {6 "root-anchored and script inside sysroot" "/sysroot/" "--sysroot=@cwd@" ""}
    {6 "root-anchored =-prefixed script outside" "=/" "--sysroot=@cwd@/sysroot" ""}
    {6 "root-anchored $SYSROOT-prefixed script outside" "$SYSROOT/" "--sysroot=@cwd@/sysroot" ""}
    {6 "root-anchored =-prefixed script inside" "=/sysroot/" "--sysroot=@cwd@" ""}
    {6 "root-anchored $SYSROOT-prefixed script inside" "$SYSROOT/sysroot/" "--sysroot=@cwd@" ""}
    {2 "plain =-prefixed without but -Lpath" "=sysroot/" {} "cannot find"}
    {2 "plain $SYSROOT-prefixed without but -Lpath" "$SYSROOTsysroot/" {} "cannot find"}
    {2 "full-path =-prefixed without" "=@cwd@/sysroot/" {} "cannot find"}
    {2 "full-path $SYSROOT-prefixed without" "$SYSROOT@cwd@/sysroot/" {} "cannot find"}
    {1 "plain =-prefixed -Lpath" "=sysroot/" {} ""}
    {1 "plain $SYSROOT-prefixed -Lpath" "$SYSROOTsysroot/" {} ""}
    {1 "full-path =-prefixed without" "=@cwd@/sysroot/" {} ""}
    {1 "full-path $SYSROOT-prefixed without" "$SYSROOT@cwd@/sysroot/" {} ""}
}

# May have to provide a target-specific assembler option for some targets.
set gasopt ""

# Intentionally similar to the ubiquitous glibc libc.so script.
set template "GROUP ( @q@@p@tmp/ldtest-xyzzy/libx.a@q@ AS_NEEDED ( @q@@p@tmp/ldtest-xyzzy/liby.a@q@ ) )"

# Set up everything from the variables above.
proc sysroot_prefix_test_setup { } {
    global as gasopt srcdir subdir ar

    if {![ld_assemble_flags $as $gasopt $srcdir/$subdir/pr14962a.s tmpdir/main.o]} {
	perror "Error assembling a trivial file for sysroot-prefix tests framework"
	return 0
    }

    # We need somewhere under tmpdir to point the sysroot, a subdirectory
    # that is benevolent if it escapes into "/".
    remote_exec host "mkdir -p tmpdir/sysroot/tmp/ldtest-xyzzy"

    # 0: a "main" object that needs a symbol (x) (most portably by
    # using a pre-existing file).  1: a library with an object that
    # provides that symbol and needs another one (y).  2: another
    # library with a third object providing that other symbol.
    set sysroot_prefix_tests_framework_objects  {
	{"pr14962a.s" "main" ""}
	{"sysroot-prefix-x.s" "x" "x"}
	{"sysroot-prefix-y.s" "y"  "y"}
    }

    foreach test_object $sysroot_prefix_tests_framework_objects {
	set sname [lindex $test_object 0]
	set onamebase [lindex $test_object 1]
	set oname "tmpdir/$onamebase.o"
	set libnamebase [lindex $test_object 2]

	if ![ld_assemble_flags $as $gasopt $srcdir/$subdir/$sname $oname] {
	    perror "Error assembling trivial file $sname for sysroot-prefix tests framework"
	    return 0
	}

	if { [string length $libnamebase] != 0 &&
	     ![ar_simple_create $ar "" tmpdir/sysroot/tmp/ldtest-xyzzy/lib$libnamebase.a $oname] } {
	    perror "Error creating archive $libnamebase for sysroot-prefix tests framework"
	    return 0
	}
    }

    return 1
}

# Run a single linker test.
proc single_sysroot_prefix_test { type xtestname finalscript ldopt errstr } {
    global ld exec_output with_sysroot
    set scriptname "tmpdir/libsysroottest.a"
    set testname "sysroot-prefix $xtestname"

    if { ($type & ($with_sysroot + 1)) == 0 } {
	unsupported $testname
	return
    }

    if [catch { set ofd [open $scriptname w] } x] {
	perror "$x"
	unresolved $testname
	return
    }

    puts $ofd "$finalscript"
    close $ofd
    verbose -log "script: $finalscript"

    set res [ld_link $ld tmpdir/output "$ldopt tmpdir/main.o -Ltmpdir -lsysroottest"]
    set ld_output "$exec_output"
    set expect_success [expr [string length $errstr] == 0]

    if { $res == $expect_success &&
         ($expect_success || [regexp "$errstr" $ld_output]) } {
	pass $testname
	catch "exec rm -f $scriptname"
    } {
	fail $testname
    }
}

# Run all interesting variants from an option-and-path combination.
proc run_sysroot_prefix_test { type name templ p ldopt errstr } {
    global base_dir
    set qlist { { "quoted" "\"" } { "unquoted" {} } }

    regsub -all "@p@" $templ $p templ
    regsub -all "@cwd@" $templ "[get_base_dir_for_scripts]/tmpdir" templ
    regsub -all "@cwd@" $ldopt "$base_dir/tmpdir" ldopt
    regsub -all "@cwd@" $name "<CWD>" name

    foreach qitems $qlist {
	regsub -all "@q@" $templ [lindex $qitems 1] finalscript
	single_sysroot_prefix_test $type "$name, [lindex $qitems 0]" \
		$finalscript $ldopt $errstr
    }
}

# Run a list of option-and-path test-combinations.
proc run_sysroot_prefix_tests { descr templ items } {
    foreach item $items {
	set type [lindex $item 0]
	set name [lindex $item 1]
	set p [lindex $item 2]
	set ldopt [lindex $item 3]
	set errstr [lindex $item 4]
	run_sysroot_prefix_test $type "$descr $name" $templ "$p" "$ldopt" "$errstr"
    }
}

if ![sysroot_prefix_test_setup] {
    return
}

run_sysroot_prefix_tests "common" $template $sysroot_prefix_tests
