# Define gas callbacks for dg.exp.
# Copyright (C) 2012-2021 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, write to the Free Software
# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.  

load_lib dg.exp

# The use of this function is still in a bit of flux.
# It should be theoretically possible to assemble, link, and run a file
# but we currently don't support that.  Assembler testcases aren't usually
# that elaborate anyway.  :-)

proc gas-dg-test { prog do_what tool_flags } {
    # FIXME: the gas testsuite doesn't define tmpdir.  Use outdir?
    set output_file "./a.out"

    switch $do_what {
	"preprocess" {
	}
	"assemble" {
	}
	"link" {
	}
	"run" {
	    # 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 host delete "$output_file"
	}
	default {
	    perror "$do_what: not a valid dg-do keyword"
	    return ""
	}
    }

    # gas_start prepends $srcdir/$subdir so we must remove it from PROG
    # if present.  First remove extraneous //'s.
    global srcdir subdir
    set dir "$srcdir/$subdir"
    regsub -all "//" $dir "/" dir
    regsub -all "//" $prog "/" prog
    if [string match "$dir/*" $prog] {
	# We use (?q) to treat $dir as a literal.
	regsub "(?q)$dir" $prog "" prog
    }

    # FIXME: This should be gas_start but it doesn't set comp_output.
    return [gas_run $prog $tool_flags ""]
}

proc gas-dg-prune { system text } {
    #send_user "Before:$text\n"
    regsub -all "(^|\n)\[^\n\]*: Assembler messages:\[^\n\]*" $text "" text
    regsub -all "(^|\n)\[^\n\]*: End of file not at end\[^\n\]*Newline inserted." $text "" text
    #send_user "After:$text\n"

    return $text
}
