This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH] [RFC] Automatically append 'gdb/testsuite/boards' to DejaGnu's boards dir list.


I wonder what people think of this...

This makes it possible to just do

  'make check RUNTESTFLAGS="native-gdbserver.exp"'

without having to setup a DEJAGNU environment, (set
$DEJAGNU=...site.exp, copy/symlink the boards dir, etc.).

It'll Just Work.

Care is taken to not override any boards dir the user may have set.

Even if DejaGnu is patched to support this without contortions (e.g.,
with a new $extra_boards_dir variable), I'm thinking that it's worth
it to make this work with current DejaGnu's.

Anyone see a simpler way to do this?

DejaGnu (runtest.exp) does, at global scope:

if {[info exists env(DEJAGNU)]} {
    if { [load_file -- $env(DEJAGNU)] == 0 } {
	# It may seem odd to only issue a warning if there isn't a global
	# config file, but issue an error if $DEJAGNU is erroneously defined.
	# Since $DEJAGNU is set there is *supposed* to be a global config file,
	# so the current behaviour seems reasonable.
	send_error "WARNING: global config file $env(DEJAGNU) not found.\n"
    }
    if {![info exists boards_dir]} {
	set boards_dir "[file dirname $env(DEJAGNU)]/boards"
    }
}

if {![info exists boards_dir]} {
    set boards_dir ""
}

So we can't just "lappend boards_dir ..." unconditionally from
testsuite/site.exp, as DejaGnu would skip the '[file dirname
$env(DEJAGNU)]/boards' bit.  Even if we could, that'd make our boards
dir first in the list, while I think it should be last.

testsuite/
2012-03-31  Pedro Alves  <palves@redhat.com>

	* Makefile.in (site.exp): Make site.exp source
	$srcdir/append_gdb_boards_dir.
	* append_gdb_boards_dir: New file.
---
 gdb/testsuite/Makefile.in           |    2 ++
 gdb/testsuite/append_gdb_boards_dir |   45 +++++++++++++++++++++++++++++++++++
 2 files changed, 47 insertions(+), 0 deletions(-)
 create mode 100644 gdb/testsuite/append_gdb_boards_dir

diff --git a/gdb/testsuite/Makefile.in b/gdb/testsuite/Makefile.in
index b06c382..55fede3 100644
--- a/gdb/testsuite/Makefile.in
+++ b/gdb/testsuite/Makefile.in
@@ -120,6 +120,8 @@ $(abs_builddir)/site.exp site.exp: ./config.status Makefile
 	@echo "set build_triplet ${build_canonical}" >> ./tmp0
 	@echo "set srcdir ${srcdir}" >> ./tmp0
 	@echo "set tool gdb" >> ./tmp0
+	@echo 'source $${srcdir}/append_gdb_boards_dir' >> ./tmp0
+
 	@echo "## All variables above are generated by configure. Do Not Edit ##" >> ./tmp0
 		@cat ./tmp0 > site.exp
 	@cat site.bak | sed \
diff --git a/gdb/testsuite/append_gdb_boards_dir b/gdb/testsuite/append_gdb_boards_dir
new file mode 100644
index 0000000..d595fd6
--- /dev/null
+++ b/gdb/testsuite/append_gdb_boards_dir
@@ -0,0 +1,45 @@
+# Copyright 2012 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, see <http://www.gnu.org/licenses/>.
+
+# Make the boards under testsuite/boards automatically available to
+# DejaGnu.  This is sourced by the site.exp file generated in the
+# build/gdb/testsuite/ directory.
+
+# Append GDB's boards dir to DejaGnu's board dir list, making sure
+# that that is the last boards dir in the list, so that boards found
+# in directories appended to the list by either the global config
+# site.exp, or in `$(dirname $DEJAGNU)/boards' override GDB's boards.
+# Unfortunatelly, there's no standard way to get that behavior.  To
+# make it happen, we trace all writes to the $boards_dirs global, and
+# make sure our dir is always the last in the list.  This relies on
+# the fact that DejaGnu always writes to this variable, even if just
+# to set it to the empty list, which it does.
+#
+proc append_gdb_boards_dir { name1 name2 op } {
+    global srcdir
+    global boards_dir
+
+    # The "boards/../boards" contortion accounts for the odd chance of
+    # someone wanting to point at GDB's boards dir in the global
+    # config before some other board dir, in which case we should not
+    # push it to the end of the list.
+    set gdb_boards_dir "${srcdir}/boards/../boards"
+
+    # Keep our board dir last in the list.
+    set idx [lsearch $boards_dir "$gdb_boards_dir"]
+    set boards_dir [lreplace $boards_dir $idx $idx]
+    lappend boards_dir "${gdb_boards_dir}"
+}
+trace add variable "boards_dir" write append_gdb_boards_dir


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]