# Copyright 2010, 2011 Free Software Foundation, Inc.

# 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, see <http://www.gnu.org/licenses/>.  */

# are we on a target board
if {[is_remote target] || [skip_shlib_tests]} {
    return
}

set testfile "solib-nodir"
# Arbitrary file, possibly not containing main, even an empty one.
set srclibfile foo.c
# Arbitrary file containing main.
set srcfile start.c
set binlibfilebase ${testfile}.so
set binlibfiledir ${objdir}/${subdir}
set binlibfile ${binlibfiledir}/${binlibfilebase}
set executable ${testfile}
set objfile ${objdir}/${subdir}/${executable}.o
set binfile ${objdir}/${subdir}/${executable}

# build the first test case
if { [get_compiler_info unused]
     || [gdb_compile_shlib "${srcdir}/${subdir}/${srclibfile}" "${binlibfile}" [list debug ldflags=-Wl,-soname,${binlibfilebase}]] != ""
     || [gdb_gnu_strip_debug $binlibfile]
     || [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${objfile}" object {debug}] != ""
     || [gdb_compile "${objfile} ${binlibfile}" "${binfile}" executable {}] != "" } {
    untested ${testfile}.exp
    return -1
}

clean_restart $executable
gdb_load_shlibs ${binlibfile}

gdb_test_no_output "set env LD_LIBRARY_PATH=:"
gdb_test "cd ${binlibfiledir}" "Working directory [string_to_regexp ${binlibfiledir}]\\." "cd OBJDIR/${subdir}"

set test "library loaded"
if [runto_main] {
    pass $test
} else {
    fail $test
}
