-# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 2000, 2001, 2002, 2003
-# Free Software Foundation, Inc.
+# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 2000, 2001, 2002, 2003,
+# 2004, 2005 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 2 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
# This file was written by Rob Savoye (rob@cygnus.com)
# Many modifications by Jeffrey Wheat (cassidy@cygnus.com)
#
load_lib prune.exp
load_lib gcc-defs.exp
+load_lib target-libpath.exp
#
# GXX_UNDER_TEST is the compiler under test.
# verify that the compiler exists
if { [is_remote host] || [which $compiler] != 0 } then {
set tmp [remote_exec host "$compiler -v"]
- set status [lindex $tmp 0];
- set output [lindex $tmp 1];
+ set status [lindex $tmp 0]
+ set output [lindex $tmp 1]
regexp " version \[^\n\r\]*" $output version
if { $status == 0 && [info exists version] } then {
if [is_remote host] {
#
proc g++_link_flags { paths } {
- global rootme
global srcdir
global ld_library_path
global GXX_UNDER_TEST
+ global shlib_ext
set gccpath ${paths}
set libio_dir ""
set flags ""
set ld_library_path "."
+ set shlib_ext [get_shlib_extension]
+ verbose "shared lib extension: $shlib_ext"
+
if { $gccpath != "" } {
if [file exists "${gccpath}/lib/libstdc++.a"] {
append ld_library_path ":${gccpath}/lib"
append flags " -L${gccpath}/libstdc++-v3/src/.libs "
append ld_library_path ":${gccpath}/libstdc++-v3/src/.libs"
}
+ # Look for libstdc++.${shlib_ext}.
+ if [file exists "${gccpath}/libstdc++-v3/src/.libs/libstdc++.${shlib_ext}"] {
+ append flags " -L${gccpath}/libstdc++-v3/src/.libs "
+ append ld_library_path ":${gccpath}/libstdc++-v3/src/.libs"
+ }
+
if [file exists "${gccpath}/libiberty/libiberty.a"] {
append flags "-L${gccpath}/libiberty "
}
if [file exists "${gccpath}/librx/librx.a"] {
append flags "-L${gccpath}/librx "
}
- append ld_library_path ":${rootme}"
- set compiler [lindex $GXX_UNDER_TEST 0]
- if { [is_remote host] == 0 && [which $compiler] != 0 } {
- foreach i "[exec $compiler --print-multi-lib]" {
- set mldir ""
- regexp -- "\[a-z0-9=/\.-\]*;" $i mldir
- set mldir [string trimright $mldir "\;@"]
- if { "$mldir" == "." } {
- continue
- }
- if { [llength [glob -nocomplain ${rootme}/${mldir}/libgcc_s*.so.*]] == 1 } {
- append ld_library_path ":${rootme}/${mldir}"
- }
- }
- }
+ append ld_library_path [gcc-set-multilib-library-path $GXX_UNDER_TEST]
} else {
- global tool_root_dir;
+ global tool_root_dir
- set libgpp [lookfor_file ${tool_root_dir} libg++];
+ set libgpp [lookfor_file ${tool_root_dir} libg++]
if { $libgpp != "" } {
- append flags "-L${libgpp} ";
+ append flags "-L${libgpp} "
append ld_library_path ":${libgpp}"
}
- set libstdcpp [lookfor_file ${tool_root_dir} libstdc++];
+ set libstdcpp [lookfor_file ${tool_root_dir} libstdc++]
if { $libstdcpp != "" } {
- append flags "-L${libstdcpp} ";
+ append flags "-L${libstdcpp} "
append ld_library_path ":${libstdcpp}"
}
- set libiberty [lookfor_file ${tool_root_dir} libiberty];
+ set libiberty [lookfor_file ${tool_root_dir} libiberty]
if { $libiberty != "" } {
- append flags "-L${libiberty} ";
+ append flags "-L${libiberty} "
}
- set librx [lookfor_file ${tool_root_dir} librx];
+ set librx [lookfor_file ${tool_root_dir} librx]
if { $librx != "" } {
- append flags "-L${librx} ";
+ append flags "-L${librx} "
}
}
- # On IRIX 6, we have to set variables akin to LD_LIBRARY_PATH, but
- # called LD_LIBRARYN32_PATH (for the N32 ABI) and LD_LIBRARY64_PATH
- # (for the 64-bit ABI). The right way to do this would be to modify
- # unix.exp -- but that's not an option since it's part of DejaGNU
- # proper, so we do it here.
- # The same applies to Darwin (DYLD_LIBRARY_PATH), Solaris 32 bit
- # (LD_LIBRARY_PATH_32), Solaris 64 bit (LD_LIBRARY_PATH_64), and HP-UX
- # (SHLIB_PATH).
- # Doing this does cause trouble when testing cross-compilers.
- if {![is_remote target]} {
- global env;
- if [info exists env(LD_LIBRARY_PATH)] {
- # If we've already added these directories once, keep the
- # existing path.
- if {$ld_library_path == $env(LD_LIBRARY_PATH)
- || [string first $ld_library_path: \
- $env(LD_LIBRARY_PATH)] == 0} {
- set ld_library_path $env(LD_LIBRARY_PATH)
- } elseif { $env(LD_LIBRARY_PATH) != "" } {
- append ld_library_path ":$env(LD_LIBRARY_PATH)"
- }
- }
- setenv LD_LIBRARY_PATH $ld_library_path
- setenv SHLIB_PATH $ld_library_path
- setenv LD_LIBRARYN32_PATH $ld_library_path
- setenv LD_LIBRARY64_PATH $ld_library_path
- setenv LD_LIBRARY_PATH_32 $ld_library_path
- setenv LD_LIBRARY_PATH_64 $ld_library_path
- setenv DYLD_LIBRARY_PATH $ld_library_path
- }
+ set_ld_library_path_env_vars
return "$flags"
}
global base_dir
global tmpdir
global libdir
- global gluefile wrap_flags;
+ global gluefile wrap_flags
global objdir srcdir
global ALWAYS_CXXFLAGS
+ global CXXFLAGS
global TOOL_EXECUTABLE TOOL_OPTIONS
global GXX_UNDER_TEST
global TESTING_IN_BUILD_TREE
global target_triplet
+ # We set LC_ALL and LANG to C so that we get the same error messages as expected.
+ setenv LC_ALL C
+ setenv LANG C
+
if ![info exists GXX_UNDER_TEST] then {
if [info exists TOOL_EXECUTABLE] {
- set GXX_UNDER_TEST $TOOL_EXECUTABLE;
+ set GXX_UNDER_TEST $TOOL_EXECUTABLE
} else {
if { [is_remote host] || ! [info exists TESTING_IN_BUILD_TREE] } {
set GXX_UNDER_TEST [transform c++]
unset gluefile
}
- if { [target_info needs_status_wrapper] != "" } {
- set gluefile ${tmpdir}/g++-testglue.o;
- set result [build_wrapper $gluefile];
- if { $result != "" } {
- set gluefile [lindex $result 0];
- set wrap_flags [lindex $result 1];
- } else {
- unset gluefile
- }
+ g++_maybe_build_wrapper "${tmpdir}/g++-testglue.o"
+
+ if {![info exists CXXFLAGS]} {
+ set CXXFLAGS ""
}
set ALWAYS_CXXFLAGS ""
if ![is_remote host] {
if [info exists TOOL_OPTIONS] {
- lappend ALWAYS_CXXFLAGS "additional_flags=[g++_include_flags [get_multilibs ${TOOL_OPTIONS}] ]";
- lappend ALWAYS_CXXFLAGS "ldflags=[g++_link_flags [get_multilibs ${TOOL_OPTIONS}] ]";
+ lappend ALWAYS_CXXFLAGS "additional_flags=[g++_include_flags [get_multilibs ${TOOL_OPTIONS}] ]"
+ lappend ALWAYS_CXXFLAGS "ldflags=[g++_link_flags [get_multilibs ${TOOL_OPTIONS}] ]"
} else {
- lappend ALWAYS_CXXFLAGS "additional_flags=[g++_include_flags [get_multilibs] ]";
- lappend ALWAYS_CXXFLAGS "ldflags=[g++_link_flags [get_multilibs] ]";
+ lappend ALWAYS_CXXFLAGS "additional_flags=[g++_include_flags [get_multilibs] ]"
+ lappend ALWAYS_CXXFLAGS "ldflags=[g++_link_flags [get_multilibs] ]"
}
}
if [info exists TOOL_OPTIONS] {
- lappend ALWAYS_CXXFLAGS "additional_flags=$TOOL_OPTIONS";
+ lappend ALWAYS_CXXFLAGS "additional_flags=$TOOL_OPTIONS"
}
# Make sure that lines are not wrapped. That can confuse the
#
proc g++_target_compile { source dest type options } {
- global tmpdir;
+ global tmpdir
global gpp_compile_options
global gluefile wrap_flags
- global ALWAYS_CXXFLAGS;
- global GXX_UNDER_TEST;
+ global ALWAYS_CXXFLAGS
+ global GXX_UNDER_TEST
if { [target_info needs_status_wrapper] != "" && [info exists gluefile] } {
lappend options "libs=${gluefile}"
}
lappend options "additional_flags=[libio_include_flags]"
- lappend options "compiler=$GXX_UNDER_TEST";
+ lappend options "compiler=$GXX_UNDER_TEST"
set options [concat $gpp_compile_options $options]
- set options [concat "$ALWAYS_CXXFLAGS" $options];
+ set options [concat "$ALWAYS_CXXFLAGS" $options]
if { [regexp "(^| )-frepo( |$)" $options] && \
[regexp "\.o(|bj)$" $dest] } then {
foreach x [split $option ","] {
lappend gpp_compile_options "additional_flags=$x"
}
- return 1;
+ return 1
} else {
return 0
}