#   Copyright (C) 2011-2023 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; see the file COPYING3.  If not see
# <http://www.gnu.org/licenses/>.

load_lib gdb-test.exp
load_lib target-supports.exp

dg-init
v3-build_support

global GDB
if ![info exists ::env(GUALITY_GDB_NAME)] {
    if [info exists GDB] {
	set guality_gdb_name "$GDB"
    } else {
	set guality_gdb_name "[transform gdb]"
    }
    setenv GUALITY_GDB_NAME "$guality_gdb_name"
}

if {! [gdb_version_check]} {
    dg-finish
    # Only print unsupported message in one instance.
    if ![gcc_parallel_test_run_p prettyprinters] {
	return
    }
    gcc_parallel_test_enable 0
    unsupported "prettyprinters.exp"
    gcc_parallel_test_enable 1
    return
}

global DEFAULT_CXXFLAGS
global PCH_CXXFLAGS
gdb-dg-runtest [lsort [glob $srcdir/$subdir/*.cc]] \
  "" "$DEFAULT_CXXFLAGS $PCH_CXXFLAGS"

if { [check_effective_target_lto] } {
  append cxxflags " -flto"
  # Work around linker bug https://sourceware.org/PR20882
  regsub {^(.*)-Wl,--gc-sections(.*)$} $cxxldflags {\1\2} cxxldflags
  gdb-dg-runtest [lsort [glob $srcdir/$subdir/*.cc]] \
    "" "$DEFAULT_CXXFLAGS -flto $PCH_CXXFLAGS"
}

if [info exists guality_gdb_name] {
    unsetenv GUALITY_GDB_NAME
}

dg-finish
