# Copyright 2011-2012 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/>.

load_lib mi-support.exp
set MIFLAGS "-i=mi2"

if {[skip_shlib_tests]} {
    untested mi-solib.exp
    return -1
}

gdb_exit
if [mi_gdb_start] {
    continue
}

set libname "solib-lib"
set srcfile_lib ${srcdir}/${subdir}/${libname}.c
set binfile_lib ${objdir}/${subdir}/${libname}.so
set lib_flags [list debug]

set testfile "solib-main"
set srcfile ${srcdir}/${subdir}/${testfile}.c
set binfile ${objdir}/${subdir}/${testfile}
set bin_flags [list debug shlib=${binfile_lib}]

if [get_compiler_info ${binfile}] {
    return -1
}

if { [gdb_compile_shlib ${srcfile_lib} ${binfile_lib} $lib_flags] != ""
     || [gdb_compile ${srcfile} ${binfile} executable $bin_flags] != "" } {
  untested "Could not compile $binfile_lib or $binfile."
  return -1
}

mi_delete_breakpoints
mi_gdb_reinitialize_dir $srcdir/$subdir
mi_gdb_reinitialize_dir $srcdir/$subdir
mi_gdb_load ${binfile}

mi_load_shlibs $binfile_lib

mi_gdb_test "777-gdb-set stop-on-solib-events 1" "777\\^done" \
    "set stop-on-solib-events"

# We use "run" rather than "-exec-run" here in order to test that CLI
# commands still cause the correct MI output to be generated.
mi_run_with_cli
mi_expect_stop solib-event .* .* .* .* .* "check for solib event"
