From mboxrd@z Thu Jan 1 00:00:00 1970 From: Geoff Keating To: gdb-patches@sourceware.cygnus.com, Jimmy Guo Subject: recent dejagnu changes Date: Fri, 04 Aug 2000 20:31:00 -0000 Message-id: <200008050329.UAA09958@localhost.cygnus.com> X-SW-Source: 2000-08/msg00114.html We've tracked it down a bit further. This change: date: 2000/08/02 22:35:10; author: guo; state: Exp; lines: +8 -1 * runtest.exp: Handle multiple directories in TCL variables dir_to_run and cmdline_dir_to_run; limit *.exp find to one directory level to avoid foo/bar/baz.exp getting tested twice (when ${dir} is 'foo', and when ${dir} is 'foo/bar'). * lib/utils.exp (find): Add support for a -maxdepth option to limit find to directories deep. is the one that breaks the GCC testsuite. As far as I can see, it can never be a correct change. It's not possible to change the GCC testsuite to match, because old versions of the testsuite need to work too. I also think that this change: * lib/target.exp (default_target_compile,default_target_assemble, default_link): Remove env() interface for *_FOR_TARGET TCL vars. and this change: * runtest.exp: Cleanup reference to $env(MULTIPASS) and $env(PASS). These were added by HP but unused since. are unwise. I don't know what might depend on this functionality. They also seem to be part of the same patch judging by the ChangeLog entry. So I propose to revert all of the recent changes except for those to lib/framework.exp. I've tested this patch by running the resulting dejagnu against the gcc and gdb testsuites, and running its own testsuite, under powerpc-linux X powerpc-eabisim; the results were very bad for gdb ("gdb-internal-error: legacy_register_name: called"), but the testsuite seemed to be doing the right thing. Any objections? -- - Geoffrey Keating ===File ~/patches/cygnus/dejagnu-revertjimmy.patch========== 2000-08-04 Geoff Keating * runtest.exp: Revert last changes. * lib/target.exp: Likewise. * lib/utils.exp: Likewise. Index: runtest.exp =================================================================== RCS file: /cvs/src/src/dejagnu/runtest.exp,v retrieving revision 1.3 retrieving revision 1.1.1.2 diff -u -p -r1.3 -r1.1.1.2 --- runtest.exp 2000/08/02 22:35:10 1.3 +++ runtest.exp 1999/12/07 04:02:17 1.1.1.2 @@ -1604,16 +1604,20 @@ foreach current_target $target_list { if { [info exists MULTIPASS] } { set multipass $MULTIPASS + } elseif {[info exists env(MULTIPASS)]} { + set multipass $env(MULTIPASS) } if { $multipass == "" } { set multipass { "" } } -# If PASS is specified, we want to run only the tests specified. -# Its value should be a number or a list of numbers that specify -# the passes that we want to run. +# If PASS is specified, either as a TCL variable or in environment, we +# want to run only the tests specified. Its value should be a number +# or a list of numbers that specify the passes that we want to run. if [info exists PASS] { set pass $PASS + } elseif [info exists env(PASS)] { + set pass $env(PASS) } else { set pass "" } @@ -1730,16 +1734,7 @@ foreach current_target $target_list { # value (for example in MULTIPASS) and the test # directory matches that directory. if {[info exists dir_to_run] && $dir_to_run != ""} { - # JYG: dir_to_run might be a space delimited list - # of directories. Look for match on each item. - set found 0 - foreach directory $dir_to_run { - if [string match "*${directory}*" $dir] { - set found 1 - break - } - } - if {!$found} { + if ![string match "*${dir_to_run}*" $dir] { continue } } @@ -1749,30 +1744,12 @@ foreach current_target $target_list { # directory matches that directory if {[info exists cmdline_dir_to_run] \ && $cmdline_dir_to_run != ""} { - # JYG: cmdline_dir_to_run might be a space delimited - # list of directories. Look for match on each item. - set found 0 - foreach directory $cmdline_dir_to_run { - if [string match "*${directory}*" $dir] { - set found 1 - break - } - } - if {!$found} { + if ![string match "*${cmdline_dir_to_run}*" $dir] { continue } } - # JYG: Limit find to one directory level to treat - # each test directory as a base directory. - # test_top_dirs includes all subdirectory paths, - # e.g. for gdb.hp/gdb.base-hp/, test_top_dirs - # has two entries: gdb.hp/, and gdb.base-hp/. - # If we just use '[find ${dir} *.exp]', all - # *.exp files in gdb.hp/gdb.base-hp/ would be - # picked up twice and tested twice, which is - # what we don't need. - foreach test_name [lsort [find -maxdepth 1 ${dir} *.exp]] { + foreach test_name [lsort [find ${dir} *.exp]] { if { ${test_name} == "" } { continue } Index: lib/target.exp =================================================================== RCS file: /cvs/src/src/dejagnu/lib/target.exp,v retrieving revision 1.6 retrieving revision 1.5 diff -u -p -r1.6 -r1.5 --- target.exp 2000/08/02 22:38:52 1.6 +++ target.exp 2000/06/04 03:34:35 1.5 @@ -289,6 +289,7 @@ proc target_compile {source destfile typ proc default_target_compile {source destfile type options} { global target_triplet global tool_root_dir + global env global CFLAGS_FOR_TARGET global compiler_flags @@ -305,6 +306,11 @@ proc default_target_compile {source dest if [info exists CFLAGS_FOR_TARGET] { append add_flags " $CFLAGS_FOR_TARGET" +# The top level Makefile sets (and exports) a *FLAGS_FOR_TARGET +# that may not be applicable to testsuite runs. This conflict +# needs to be resolved. +# } elseif [info exists env(CFLAGS_FOR_TARGET)] { +# append add_flags " $env(CFLAGS_FOR_TARGET)" } if [info exists target_info(host,name)] { @@ -398,18 +404,43 @@ proc default_target_compile {source dest if { $compiler == "" } { set compiler $CC_FOR_TARGET } +# When started from a mid-level directory (eg gdb) +# the Makefile may export a *_FOR_TARGET that isn't +# applicable. +# } elseif [info exists env(CC_FOR_TARGET)] { +# if { $compiler == "" } { +# set compiler $env(CC_FOR_TARGET) +# } + } elseif { [info exists env(CC_FOR_TARGET)] && $env(CC_FOR_TARGET) != "" } { + if { $compiler == "" } { + set compiler $env(CC_FOR_TARGET) + } } if [info exists CXX_FOR_TARGET] { if { $compiler_type == "c++" } { set compiler $CXX_FOR_TARGET } +# When started from a mid-level directory (eg gdb) +# the Makefile may export a *_FOR_TARGET that isn't +# applicable. +# } elseif [info exists env(CXX_FOR_TARGET)] { +# if { $compiler_type == "c++" } { +# set compiler $env(CXX_FOR_TARGET) +# } } if [info exists F77_FOR_TARGET] { if { $compiler_type == "f77" } { set compiler $F77_FOR_TARGET } +# When started from a mid-level directory (eg gdb) +# the Makefile may export a *_FOR_TARGET that isn't +# applicable. +# } elseif [info exists env(F77_FOR_TARGET)] { +# if { $compiler_type == "f77" } { +# set compiler $env(F77_FOR_TARGET) +# } } if { $compiler == "" } { @@ -624,11 +655,14 @@ proc target_assemble { source destfile f } proc default_target_assemble { source destfile flags } { - global AS_FOR_TARGET - global ASFLAGS_FOR_TARGET + global env + global AS_FOR_TARGET; + global ASFLAGS_FOR_TARGET; if [info exists AS_FOR_TARGET] { set AS "$AS_FOR_TARGET"; + } elseif [info exists env(AS_FOR_TARGET)] { + set AS $env(AS_FOR_TARGET) } else { if ![board_info target exists assembler] { set AS [find_gas]; @@ -639,6 +673,11 @@ proc default_target_assemble { source de if [info exists ASFLAGS_FOR_TARGET] { append flags " $ASFLAGS_FOR_TARGET"; +# The top level Makefile sets (and exports) a *FLAGS_FOR_TARGET +# that may not be applicable to testsuite runs. This conflict +# needs to be resolved. +# } elseif [info exists env(ASFLAGS_FOR_TARGET)] { +# append flags " $env(ASFLAGS_FOR_TARGET)" } if [is_remote host] { @@ -672,8 +711,9 @@ proc target_link { objects destfile flag } proc default_link { board objects destfile flags } { - global LD_FOR_TARGET - global LDFLAGS_FOR_TARGET + global env + global LD_FOR_TARGET; + global LDFLAGS_FOR_TARGET; # return -L's in ldflags proc only--Ls { ldflags } { @@ -702,6 +742,8 @@ proc default_link { board objects destfi if [info exists LD_FOR_TARGET] { set LD "$LD_FOR_TARGET"; + } elseif [info exists env(LD_FOR_TARGET)] { + set LD $env(LD_FOR_TARGET) } else { if ![board_info target exists linker] { set LD [find_ld]; @@ -712,6 +754,11 @@ proc default_link { board objects destfi if [info exists LDFLAGS_FOR_TARGET] { append flags " $LDFLAGS_FOR_TARGET"; +# The top level Makefile sets (and exports) a *FLAGS_FOR_TARGET +# that may not be applicable to testsuite runs. This conflict +# needs to be resolved. +# } elseif [info exists env(LDFLAGS_FOR_TARGET)] { +# append flags " $env(LDFLAGS_FOR_TARGET)" } # `ldflags' consists of arguments to gcc (that are then Index: lib/utils.exp =================================================================== RCS file: /cvs/src/src/dejagnu/lib/utils.exp,v retrieving revision 1.2 retrieving revision 1.1.1.1 diff -u -p -r1.2 -r1.1.1.1 --- utils.exp 2000/08/02 22:35:10 1.2 +++ utils.exp 1999/11/09 01:28:42 1.1.1.1 @@ -87,34 +87,18 @@ proc getdirs { args } { # # Finds all the files recursively -# Args: -# [-maxdepth ] -# limit recursive find depth to level; -# default is to recursively find in all subdirectories -# rootdir -# the directory to start the search from. This is and all -# subdirectories are searched for filenames. Directory names -# are not included in the list, but the filenames have path -# information. -# pattern -# the pattern to match. Patterns are csh style globbing rules. -# Returns: -# a list or a NULL. +# rootdir - this is the directory to start the search +# from. This is and all subdirectories are search for +# filenames. Directory names are not included in the +# list, but the filenames have path information. +# pattern - this is the pattern to match. Patterns are csh style +# globbing rules. +# returns: a list or a NULL. # -proc find { args } { - if { [lindex $args 0] == "-maxdepth" } { - set maxdepth [lindex $args 1] - set args [lrange $args 2 end] - } else { - set maxdepth 0 - } - set rootdir [lindex $args 0] - set pattern [lindex $args 1] - +proc find { rootdir pattern } { # first find all the directories set dirs "$rootdir " - set depth 1 - while { $maxdepth == 0 || $depth < $maxdepth } { + while 1 { set tmp $rootdir set rootdir "" if [string match "" $tmp] { @@ -131,7 +115,6 @@ proc find { args } { } } set tmp "" - set depth [expr $depth + 1] } # find all the files that match the pattern ============================================================ >From guo@cup.hp.com Fri Aug 04 22:32:00 2000 From: Jimmy Guo To: Geoff Keating Cc: gdb-patches@sourceware.cygnus.com Subject: Re: recent dejagnu changes Date: Fri, 04 Aug 2000 22:32:00 -0000 Message-id: References: <200008050329.UAA09958@localhost.cygnus.com> X-SW-Source: 2000-08/msg00115.html Content-length: 1819 >is the one that breaks the GCC testsuite. As far as I can see, it can >never be a correct change. It's not possible to change the GCC >testsuite to match, because old versions of the testsuite need to work >too. Why? We've been using it on GDB testsuite for months now. What breaks now for GCC? I'm just curious -- backing it out in the repository is fine, esp. if it breaks in some env ... but some details on why you think so would be helpful ... >I also think that this change: > >* lib/target.exp (default_target_compile,default_target_assemble, >default_link): Remove env() interface for *_FOR_TARGET TCL vars. > >and this change: > >* runtest.exp: Cleanup reference to $env(MULTIPASS) and >$env(PASS). These were added by HP but unused since. > >are unwise. I don't know what might depend on this functionality. These were unfortunately added in by yours truly last year. If you want to back it out it's fine as well. >They also seem to be part of the same patch judging by the ChangeLog >entry. Somehow emacs Ctrl-x 4 a does not create a new date stamp for separate commits in ChangeLog .. these are actually separate. But I can see how it could be confusing. >So I propose to revert all of the recent changes except for those to >lib/framework.exp. I've tested this patch by running the resulting >dejagnu against the gcc and gdb testsuites, and running its own >testsuite, under powerpc-linux X powerpc-eabisim; the results were >very bad for gdb ("gdb-internal-error: legacy_register_name: called"), >but the testsuite seemed to be doing the right thing. Actually the patches work OK in our environment ... but as I said feel free to back it out if we understand how it breaks ... I submitted these, except for the env cleanup one, intending to fix something. - Jimmy Guo, guo@cup.hp.com