# Copyright (C) 2001, 2002, 2003, 2004 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  

# Define libmudflap callbacks for dg.exp.
# This file is a copy of libstdc++-v3's dejagnu driver, with minor changes.

# Useful hook:  if ${hostname}_init exists, it will be called, almost
# the last thing before testing begins.  This can be defined in, e.g.,
# ~/.dejagnurc or $DEJAGNU.

proc load_gcc_lib { filename } {
    global srcdir
    load_file $srcdir/../../gcc/testsuite/lib/$filename
}

load_lib mfdg.exp
load_lib libgloss.exp
load_gcc_lib target-libpath.exp

proc libmudflap-init { language } {
    global env
    global srcdir outdir blddir objdir tool_root_dir
    global cxx cxxflags
    global includes
    global libs
    global gluefile wrap_flags
    global ld_library_path

    switch $language {
        "c" { set cxx [find_gcc] }
        "c++" { set cxx [find_g++] }
        default { error "bad language code $language"; return }
    }

    verbose -log "libmudflap-init $cxx"

    set blddir [lookfor_file [get_multilibs] libmudflap]
    set cxxblddir [lookfor_file [get_multilibs] libstdc++-v3]
    set cxxflags_file "${cxxblddir}/scripts/testsuite_flags"

    # By default, we assume we want to run program images.
    global dg-do-what-default
    set dg-do-what-default run

    # set LD_LIBRARY_PATH so that libgcc_s, libstdc++ binaries can be found.
    # locate libgcc.a so we don't need to account for different values of
    # SHLIB_EXT on different platforms
    set gccdir [lookfor_file $tool_root_dir gcc/libgcc.a]
    if {$gccdir != ""} {
	set gccdir [file dirname $gccdir]
    }

    set ld_library_path "."
    append ld_library_path ":${gccdir}"
    append ld_library_path ":${cxxblddir}/src/.libs"
    if {[is_remote host] == 0} {
	foreach i "[exec ${gccdir}/xgcc --print-multi-lib]" {
	    set mldir ""
	    regexp -- "\[a-z0-9=_/\.-\]*;" $i mldir
	    set mldir [string trimright $mldir "\;@"]
	    if { "$mldir" == "." } {
		continue
	    }
	    if { [llength [glob -nocomplain ${gccdir}/${mldir}/libgcc_s*.so.*]] >= 1 } {
		append ld_library_path ":${gccdir}/${mldir}"
	    }
	}
    }
    append ld_library_path ":${blddir}/.libs"

    set libs "-L${blddir}/.libs"
    set cxxflags "-ggdb3 -DDEBUG_ASSERT"
    set includes "-I${srcdir} -I${srcdir}/.. -I.."

    if {$language == "c++"} {
        if {[file exists $cxxflags_file]} then {
            set includes "${includes} [exec sh $cxxflags_file --build-includes]"
            set cxxflags "${cxxflags} [exec sh $cxxflags_file --cxxflags]"
            # c++ libs are included by --build-cxx below
            set cxx "[exec sh $cxxflags_file --build-cxx]"
        } else {
            lappend libs "-L${cxxblddir}src/.libs"
            lappend includes "-I../../libstdc++-v3/include"
        }
    }

    global mfconfig_libs
    global add_flags
    append add_flags " $mfconfig_libs"

    set_ld_library_path_env_vars
    if [info exists env(LD_LIBRARY_PATH)] {
	verbose -log "LD_LIBRARY_PATH = $env(LD_LIBRARY_PATH)"
    }

    if { [target_info needs_status_wrapper]!=""} {
      file delete ${objdir}/testglue.o;
      set gluefile ${objdir}/testglue.o;
      set result [build_wrapper $gluefile];
      if { $result != "" } {
          set gluefile [lindex $result 0];
          set wrap_flags [lindex $result 1];
      } else {
          unset gluefile
      }
    }

    # If there is no static library then don't run tests with -static.
    global tool
    set opts "additional_flags=-static"
    lappend opts "additional_flags=-fmudflap"
    lappend opts "additional_flags=-lmudflap"
    set src stlm[pid].c
    set exe stlm[pid].x

    set f [open $src "w"]
    puts $f "int main () { }"
    close $f
    set lines [${tool}_target_compile $src $exe executable "$opts"]
    file delete $src
    remote_file build delete $exe

    if { ![string match "" $lines] } {
	# Compilation failed; assume static library is not available.
	global MUDFLAP_FLAGS
	set i [lsearch $MUDFLAP_FLAGS "*static*"]
	set MUDFLAP_FLAGS [lreplace $MUDFLAP_FLAGS $i $i]
    }
}

proc libmudflap-dg-test { prog do_what extra_tool_flags } {
    # Set up the compiler flags, based on what we're going to do.

    switch $do_what {
	"preprocess" {
	    set compile_type "preprocess"
	    set output_file "[file rootname [file tail $prog]].i"
	}
	"compile" {
	    set compile_type "assembly"
	    set output_file "[file rootname [file tail $prog]].s"
	}
	"assemble" {
	    set compile_type "object"
	    set output_file "[file rootname [file tail $prog]].o"
	}
	"link" {
	    set compile_type "executable"
	    set output_file "./[file rootname [file tail $prog]].exe"
	}
	"run" {
	    set compile_type "executable"
	    # FIXME: "./" is to cope with "." not being in $PATH.
	    # Should this be handled elsewhere?
	    # YES.
	    set output_file "./[file rootname [file tail $prog]].exe"
	    # This is the only place where we care if an executable was
	    # created or not.  If it was, dg.exp will try to run it.
	    remote_file build delete $output_file;
	}
	default {
	    perror "$do_what: not a valid dg-do keyword"
	    return ""
	}
    }
    set options ""
    if { $extra_tool_flags != "" } {
	lappend options "additional_flags=$extra_tool_flags"
    }

    global mfconfig_libs
    lappend options "libs=$mfconfig_libs"

    set comp_output [libmudflap_target_compile "$prog" "$output_file" "$compile_type" $options];
    set comp_output [prune_gcc_output $comp_output ];

    return [list $comp_output $output_file]
}


proc libmudflap_target_compile { source dest type options } {
    global gluefile 
    global wrap_flags
    global cxx
    global cxxflags
    global includes
    global libs
    global blddir

    if { [target_info needs_status_wrapper] != "" && [info exists gluefile] } {
	lappend options "libs=${gluefile}"
	lappend options "ldflags=${wrap_flags}"
    }

    set cxx_final $cxx
    set cxxlibglossflags  [libgloss_link_flags]
    set cxx_final [concat $cxx_final $cxxlibglossflags]
    set cxx_final [concat $cxx_final $cxxflags]
    set cxx_final [concat $cxx_final $includes]
    set cxx_final [concat $cxx_final $libs]

    lappend options "compiler=$cxx_final"

    # Picks up the freshly-built testsuite library corresponding to the
    # multilib under test.
    lappend options "ldflags=-L${blddir}/testsuite"

    return [target_compile $source $dest $type $options]
}


# A bit sloppy...  Returns a list of source files (full pathnames) to
# compile.  We mimic the mkcheck script in that the first time this is run,
# all existing files are listed in "testsuite_files" in the output
# directory.  Subsequent runs pull the list from that file, allowing users
# to trim the list down to problematic tests.
### This is supposed to be done via RUNTESTFLAGS, but that doesn't work.
proc libmudflap-list-sourcefiles { } {
    global srcdir
    global outdir

    set files_file "${outdir}/testsuite_files"
    set sfiles ""
    if { [file exists $files_file] } {
	set f [open $files_file]
	while { ! [eof $f] } {
	    set t [gets $f]
	    if { [string length "$t"] != 0 } {
		lappend sfiles ${srcdir}/${t}
	    }
	}
    } else {
	set f [open $files_file "w"]
	set where_we_were [pwd]
	cd $srcdir
	foreach s [lsort [glob -nocomplain "*/*.cc" "*/*/*.cc" "{,*/}*/*/*/*.cc" ]] {
	    lappend sfiles ${srcdir}/${s}
	    puts $f $s
	}
	cd $where_we_were
    }
    close $f

    # Disable wchar_t tests if library not configured to support
    # wchar_t testing. 
    set wchar_file "${outdir}/testsuite_wchar_t"    
    if { [file exists $wchar_file] } {
	return $sfiles
    } else {
	# Remove wchar_t tests files from list.
	set res {}
	foreach w $sfiles {
	    if [regexp "wchar_t" $w] {
		verbose -log "element out list is $w"
	    } else {
		verbose -log "element in list is $w"
		lappend res $w
	    }
	}
	return $res
    }
}


proc prune_gcc_output { text } {
    regsub -all {(^|\n)[^\n]*ld: warning: libgcc_s[^\n]*not found[^\n]*try using[^\n]*} $text "" text
    regsub -all {(^|\n)[^\n]*In function.*pthread_create[^\n]*} $text "" text
    regsub -all {(^|\n)[^\n]*the use of .pthread.*is deprecated[^\n]*} $text "" text
    regsub -all {(^|\n)[^\n]*Dwarf Error:.*FORM value: 14[^\n]*} $text "" text
    regsub -all {(^|\n)[^\n]*In function[^\n]*} $text "" text
    regsub -all {(^|\n)[^\n]*Using.*in statically linked applications requires[^\n]*} $text "" text

    return $text
}
