diff options
-rw-r--r-- | ChangeLog | 14 | ||||
-rw-r--r-- | NEWS | 8 | ||||
-rw-r--r-- | runtest.exp | 54 |
3 files changed, 70 insertions, 6 deletions
@@ -1,5 +1,19 @@ +2020-06-02 Jacob Bachmeyer <jcb62281+dev@gmail.com> + + PR 41647 + * NEWS: Fix typo. Fix Emacs mode tag. + Document use of Tcl namespace ::dejagnu for internals. + * runtest.exp (dejagnu::command_line): New namespace. + (dejagnu::command_line::save_cmd_var): New procedure. + (dejagnu::command_line::restore_cmd_vars): New procedure. + (dejagnu::command_line::dump_cmd_vars): New procedure. + * runtest.exp: Save internal variables set by command line + arguments during the first pass and restore their values after + loading testsuite init files. + 2020-06-01 Jacob Bachmeyer <jcb62281+dev@gmail.com> + PR 41647 * runtest.exp: Describe search for testsuite at verbose level 3. Print initial working directory at verbose level 1. @@ -1,4 +1,4 @@ --* text -*- +-*- text -*- Changes since 1.6.2: @@ -17,11 +17,15 @@ Changes since 1.6.2: "*dir" variables in test scripts. 7. A shell command "dejagnu" is added as a place to hang various auxiliary commands not directly involved with running tests. The - "runtest" command will remain for that purpose for the forseeable + "runtest" command will remain for that purpose for the foreseeable future. 8. The first auxiliary command is added: "report card". The "dejagnu report card" command reads DejaGnu summary files and produces a compact tabular summary across multiple tools. +9. A Tcl namespace is now used for some internal procedures and variables. + The Tcl namespace ::dejagnu and all child namespaces are entirely + internal and should not be mentioned in testsuite code. Its contents + are subject to change without notice, even on point releases. Changes since 1.6.1: diff --git a/runtest.exp b/runtest.exp index 156b1f4..ba49e73 100644 --- a/runtest.exp +++ b/runtest.exp @@ -410,6 +410,35 @@ proc usage { } { # the arguments three times. # +namespace eval ::dejagnu::command_line { + variable cmd_var_list [list] + + proc save_cmd_var {name} { + variable cmd_var_list + + upvar 1 $name target_var + lappend cmd_var_list $name $target_var + } + + proc restore_cmd_vars {} { + variable cmd_var_list + + foreach {name value} $cmd_var_list { + uplevel 1 set $name $value + } + verbose "Variables set by command line arguments restored." 4 + } + + proc dump_cmd_vars {} { + variable cmd_var_list + + verbose "Variables set by command line arguments:" 4 + foreach {name value} $cmd_var_list { + verbose " $name -> $value" 4 + } + } +} + set arg_host_triplet "" set arg_target_triplet "" set arg_build_triplet "" @@ -461,67 +490,81 @@ for { set i 0 } { $i < $argc } { incr i } { "--bu*" { # (--build) the build host configuration set arg_build_triplet $optarg + ::dejagnu::command_line::save_cmd_var arg_build_triplet continue } "--g*" { # (--global_init) the global init file name set global_init_file $optarg + ::dejagnu::command_line::save_cmd_var global_init_file continue } "--host_bo*" { set host_board $optarg + ::dejagnu::command_line::save_cmd_var host_board continue } "--ho*" { # (--host) the host configuration set arg_host_triplet $optarg + ::dejagnu::command_line::save_cmd_var arg_host_triplet continue } "--loc*" { # (--local_init) the local init file name set local_init_file $optarg + ::dejagnu::command_line::save_cmd_var local_init_file continue } "--ob*" { # (--objdir) where the test case object code lives set objdir $optarg + ::dejagnu::command_line::save_cmd_var objdir continue } "--sr*" { # (--srcdir) where the testsuite source code lives set srcdir $optarg + ::dejagnu::command_line::save_cmd_var srcdir continue } "--target_bo*" { set target_list $optarg + ::dejagnu::command_line::save_cmd_var target_list continue } "--ta*" { # (--target) the target configuration set arg_target_triplet $optarg + ::dejagnu::command_line::save_cmd_var arg_target_triplet continue } "--tool_opt*" { set TOOL_OPTIONS $optarg + ::dejagnu::command_line::save_cmd_var TOOL_OPTIONS continue } "--tool_exec*" { set TOOL_EXECUTABLE $optarg + ::dejagnu::command_line::save_cmd_var TOOL_EXECUTABLE continue } "--to*" { # (--tool) specify tool name set tool $optarg set comm_line_tool $optarg + ::dejagnu::command_line::save_cmd_var tool + ::dejagnu::command_line::save_cmd_var comm_line_tool continue } "--di*" { set cmdline_dir_to_run $optarg + ::dejagnu::command_line::save_cmd_var cmdline_dir_to_run continue } @@ -550,6 +593,8 @@ verbose "Verbose level is $verbose" verbose [concat "Initial working directory is" [pwd]] +::dejagnu::command_line::dump_cmd_vars + # # get the users login name # @@ -638,10 +683,8 @@ proc load_lib { file } { load_file [file join $base_dir $local_init_file] -# From this point until the command line is parsed for the second time, -# some variables are overridden by the local init file. Most notably, -# $srcdir is *not* what was given on the command line if Automake is used. -# Instead, $srcdir is Automake's @srcdir@ for now. +# Ensure that command line parameters override testsuite init files. +::dejagnu::command_line::restore_cmd_vars # # If objdir didn't get set in $base_dir/$local_init_file, set it to @@ -656,6 +699,9 @@ if { $objdir eq "." || $objdir eq $srcdir } { load_file [file join $objdir $local_init_file] } +# Ensure that command line parameters override testsuite init files. +::dejagnu::command_line::restore_cmd_vars + # # Find the testsuite. # |