# APPLE LOCAL file testsuite
#   Copyright (C) 2002 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, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  


# Load support procs.
load_lib gcc-dg.exp

# Initialize `dg'.
dg-init

set timeout 30

set prms_id 0
set bug_id 0

set testfile "longcall-prog"
set binfile ${objdir}/${subdir}/${testfile}
set srcfile ${srcdir}/${subdir}/${testfile}.c

set libfilestem "longcall"
set libfile "lib${libfilestem}"
set libbinfile ${objdir}/${subdir}/${libfile}.dylib
set libsrcfile ${srcdir}/${subdir}/${libfile}.c

file mkdir ${objdir}/${subdir}

set test "longcall/dylib"

proc note_result {success diagnostic} {
    set verb [expr {($success) ? "pass" : "fail"}]
    eval {$verb $diagnostic}
}

set whine "building $test library"
set additional_flags "additional_flags=-dynamiclib -mlongcall"
set result [expr {[gcc_target_compile "${libsrcfile}" "${libbinfile}" executable [list debug $additional_flags]] == ""}]
note_result $result $whine

set whine "building $test test program" 
set additional_flags "additional_flags=-L${objdir}/${subdir} -l${libfilestem}"
set result [expr {[gcc_target_compile "${srcfile}" "${binfile}" executable [list debug $additional_flags]] == ""}]
note_result $result $whine

set result [gcc_load "$binfile" "" ""]
set status [lindex $result 0]
set output [lindex $result 1];
if {$status == "pass" } {
    pass $test
    file delete $libbinfile $binfile
} else {
    fail $test
}

# All done.
dg-finish
