#
# site.tmpl -- Sample template for a global config file.
#           NOTE: This file contains mostly site specific
#                 configuration data that is custom to Cygnus
#                 Support. You'll have to change most of the
#                 values to work at your site.
#           Written by manson@cygnus.com
#

#
# transform -- transform a tool name to get the installed name. We only define
#              this if there wasn't one. This was the global config file can
#              override how the tool names are calculated.
#

#
# uncomment this if you wish to redefine the transform procedure
#

#if ![string match "transform" [info procs transform]] then {
#        proc transform { name } {
#	global target_triplet
#	
#	if [string match "" $target_triplet] then {
#	    return $name
#	} else {
#	    return ${target_triplet}-$name
#	}
#    }
#}

#
# Set a default target list for various target triplets.
#
case "$target_triplet" in {
    { "hppa*-*-proelf*" } {
	set target_list { winbond }
    }
    { "i386-*-aout" } {
	set target_list { i386-aout }
    }
    { "m68k-mvme135-*" } {     # Motorola MVME135 board running Bug monitor
	set target_list  { "mvme135-bug" }
     }
    { "m68k-idp-*" "m68k-rom68k-*" } {      # Motorola IDP board running rom68k monitor
	set target_list "bozo"
     }
}
