From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 6316 invoked by alias); 31 Mar 2012 10:31:12 -0000 Received: (qmail 6305 invoked by uid 22791); 31 Mar 2012 10:31:11 -0000 X-SWARE-Spam-Status: No, hits=-7.1 required=5.0 tests=AWL,BAYES_00,KHOP_RCVD_UNTRUST,KHOP_THREADED,RCVD_IN_DNSWL_HI,RCVD_IN_HOSTKARMA_W,SPF_HELO_PASS,T_RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Sat, 31 Mar 2012 10:30:51 +0000 Received: from int-mx02.intmail.prod.int.phx2.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id q2VAUoDU015921 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Sat, 31 Mar 2012 06:30:50 -0400 Received: from [127.0.0.1] (ovpn01.gateway.prod.ext.phx2.redhat.com [10.5.9.1]) by int-mx02.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id q2VAUnIx022511; Sat, 31 Mar 2012 06:30:50 -0400 Message-ID: <4F76DCD9.6070105@redhat.com> Date: Sat, 31 Mar 2012 10:31:00 -0000 From: Pedro Alves User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:11.0) Gecko/20120316 Thunderbird/11.0 MIME-Version: 1.0 To: Jan Kratochvil CC: gdb-patches@sourceware.org Subject: Re: [PATCH] [RFC] Automatically append 'gdb/testsuite/boards' to DejaGnu's boards dir list. References: <20120331030221.8207.47982.stgit@brno.lan> <20120331072912.GA15237@host2.jankratochvil.net> In-Reply-To: <20120331072912.GA15237@host2.jankratochvil.net> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2012-03/txt/msg01084.txt.bz2 On 03/31/2012 08:29 AM, Jan Kratochvil wrote: > On Sat, 31 Mar 2012 05:02:21 +0200, Pedro Alves wrote: >> +++ b/gdb/testsuite/append_gdb_boards_dir > > It should be in testsuite/lib/ , shouldn't it? Yeah, a series of different approaches made me miss that. Appended an .exp suffix as well. > > >> +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"] > > lsearch -exact Indeed. > > >> + set boards_dir [lreplace $boards_dir $idx $idx] > > lreplace X -1 -1 seems not to modify X but according to the doc it seems to be > undefined. Suggesting one 'if' conditional, ale for the code documentation > purposes. Done. > > >> + lappend boards_dir "${gdb_boards_dir}" >> +} >> +trace add variable "boards_dir" write append_gdb_boards_dir > > There were some complaints on the list for features not compatible with > tcl-8.3, 'trace add' is not listed in tcl-8.3 doc: > http://www.tcl.tk/man/tcl8.3/TclCmd/trace.htm > Interesting. I knew it wasn't supported on older tcls, but since we're already using "trace add" in gdb.exp I wasn't worrying (it wasn't a new problem). But that url points at alternative (older) syntax we can use to the same effect, so I switched to it. I don't see any "trace add execution" there though; the gdb.exp bits should be perhaps skipped somehow on older tcls. I also updated the comments a bit. Below's the updated patch. Thanks. testsuite/ 2012-03-31 Pedro Alves * Makefile.in (site.exp): Make site.exp source $srcdir/lib/append_gdb_boards_dir.exp. * lib/append_gdb_boards_dir.exp: New file. --- gdb/testsuite/Makefile.in | 1 + gdb/testsuite/lib/append_gdb_boards_dir.exp | 48 +++++++++++++++++++++++++++ 2 files changed, 49 insertions(+), 0 deletions(-) create mode 100644 gdb/testsuite/lib/append_gdb_boards_dir.exp diff --git a/gdb/testsuite/Makefile.in b/gdb/testsuite/Makefile.in index b06c382..6711930 100644 --- a/gdb/testsuite/Makefile.in +++ b/gdb/testsuite/Makefile.in @@ -120,6 +120,7 @@ $(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}/lib/append_gdb_boards_dir.exp' >> ./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/lib/append_gdb_boards_dir.exp b/gdb/testsuite/lib/append_gdb_boards_dir.exp new file mode 100644 index 0000000..4b01f2b --- /dev/null +++ b/gdb/testsuite/lib/append_gdb_boards_dir.exp @@ -0,0 +1,48 @@ +# 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 . + +# Make the boards under testsuite/boards automatically available to +# DejaGnu. This is sourced by the `site.exp' file generated in the +# root of the testsuite's build 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. +# Unfortunately, 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 + + # In case someone wants 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, use an unlikely path to GDB's + # boards, so it compares different to other simpler but equivalent + # paths. + set gdb_boards_dir "${srcdir}/boards/../boards" + + # Keep our board dir last in the list. + set idx [lsearch -exact $boards_dir "$gdb_boards_dir"] + if { $idx >= 0 } { + set boards_dir [lreplace $boards_dir $idx $idx] + } + lappend boards_dir "${gdb_boards_dir}" +} +trace variable "boards_dir" w append_gdb_boards_dir