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

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"
