From: Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
To: Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
Cc: gcc-patches@gcc.gnu.org, java-patches@gcc.gnu.org,
Hans Boehm <hans_boehm@hp.com>,
Paolo Bonzini <bonzini@gnu.org>,
Janis Johnson <janis.marie.johnson@gmail.com>,
Ben Elliston <bje@gnu.org>
Subject: Re: [testsuite, build] Convert boehm-gc testsuite to DejaGnu (PR boehm-gc/11412)
Date: Mon, 17 Jan 2011 13:31:00 -0000 [thread overview]
Message-ID: <yddvd1nybjy.fsf@manam.CeBiTec.Uni-Bielefeld.DE> (raw)
In-Reply-To: <20110106211734.GG17791@gmx.de> (Ralf Wildenhues's message of "Thu, 6 Jan 2011 22:17:35 +0100")
Hi Ralf,
I've now got a patch I'm reasonably happy with. It incorporates all the
review comments. Tested on i386-pc-solaris2.10, i386-pc-solaris2.10 and
sparc-sun-solaris2.11.
Since I'm performing a call to dg-test from within another dg-test
invocation (dg-test -> dg-add-shlib -> dg-test), I have to work around
the fact that this doesn't work in DejaGnu 1.4.4. I'll submit a DejaGnu
patch shortly, but ${tool}-build-shlib works without and with this patch.
The patch below omits all but two of the renamed files (the exceptions
being trace_test.c, which aquired a dg-skip-if, and staticsroottest.c,
which got a dg-add-shlib).
Ok for mainline (either now, or, more likely, after 4.6 branches?
Rainer
2010-12-31 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
PR boehm-gc/11412
* Makefile.am (AUTOMAKE_OPTIONS): Use foreign instead of cygnus.
(SUBDIRS): Add testsuite.
(libgcjgc_la_LIBADD): Remove $(UNWINDLIBS).
Remove TESTS related variables.
(AM_MAKEFLAGS): Don't pass RUNTEST.
* configure.ac: Add testsuite/Makefile to AC_CONFIG_FILES.
* Makefile.in: Regenerate.
* configure: Regenerate.
* testsuite/Makefile.am: New file.
* testsuite/Makefile.in: New file.
* testsuite/lib/boehm-gc.exp: New file.
* testsuite/config/default.exp: New file.
* testsuite/boehm-gc.c/c.exp: New file.
* testsuite/boehm-gc.lib/lib.exp: New file.
* tests/test.c: Move ...
* testsuite/boehm-gc.c/gctest.c: ... here.
* tests/leak_test.c, tests/middle.c, tests/thread_leak_test.c,
tests/trace_test.c: Move ...
* testsuite/boehm-gc.c: ... here.
* testsuite/boehm-gc.c/trace_test.c: Skip everywhere.
* tests/staticrootslib.c, tests/staticrootstest.c: Move ...
* testsuite/boehm-gc.lib: ... here.
* testsuite/boehm-gc.lib/staticrootstest.c: Use dg-add-shlib
staticrootslib.c.
* tests/test_cpp.cc: Move ...
* testsuite/boehm-gc.c++: ... here.
diff -r b725b6092024 boehm-gc/Makefile.am
--- a/boehm-gc/Makefile.am Fri Jan 14 21:53:19 2011 +0100
+++ b/boehm-gc/Makefile.am Sat Jan 15 16:53:57 2011 +0100
@@ -4,10 +4,10 @@
## files that should be in the distribution are not mentioned in this
## Makefile.am.
-AUTOMAKE_OPTIONS = cygnus subdir-objects
+AUTOMAKE_OPTIONS = foreign subdir-objects
ACLOCAL_AMFLAGS = -I .. -I ../config
-SUBDIRS = include
+SUBDIRS = include testsuite
noinst_LTLIBRARIES = libgcjgc.la libgcjgc_convenience.la
@@ -35,7 +35,7 @@
# Include THREADLIBS here to ensure that the correct versions of
# linuxthread semaphore functions get linked:
-libgcjgc_la_LIBADD = $(addobjs) $(THREADLIBS) $(UNWINDLIBS)
+libgcjgc_la_LIBADD = $(addobjs) $(THREADLIBS)
libgcjgc_la_DEPENDENCIES = $(addobjs)
libgcjgc_la_LDFLAGS = $(extra_ldflags_libgc) -version-info 1:2:0 -rpath $(toolexeclibdir)
libgcjgc_la_LINK = $(LINK) $(libgcjgc_la_LDFLAGS)
@@ -48,43 +48,6 @@
AM_LDFLAGS = $(shell $(top_srcdir)/../libtool-ldflags $(LDFLAGS))
override CFLAGS := $(filter-out $(O0_CFLAGS), $(CFLAGS)) $(O0_CFLAGS)
-test_ldadd = libgcjgc.la $(THREADLIBS) $(UNWINDLIBS) $(EXTRA_TEST_LIBS)
-
-check_PROGRAMS = gctest
-gctest_SOURCES = tests/test.c
-gctest_LDADD = $(test_ldadd)
-gctest_LDFLAGS = -shared-libgcc
-gctest_LINK = $(LINK) $(gctest_LDFLAGS)
-TESTS_ENVIRONMENT = LD_LIBRARY_PATH=../../$(MULTIBUILDTOP)gcc
-TESTS = gctest
-
-TESTS += leaktest$(EXEEXT)
-check_PROGRAMS += leaktest
-leaktest_SOURCES = tests/leak_test.c
-leaktest_LDADD = $(test_ldadd)
-leaktest_LDFLAGS = -shared-libgcc
-leaktest_LINK = $(LINK) $(leaktest_LDFLAGS)
-
-TESTS += middletest$(EXEEXT)
-check_PROGRAMS += middletest
-middletest_SOURCES = tests/middle.c
-middletest_LDADD = $(test_ldadd)
-middletest_LDFLAGS = -shared-libgcc
-middletest_LINK = $(LINK) $(middletest_LDFLAGS)
-
-TESTS += staticrootstest$(EXEEXT)
-check_PROGRAMS += staticrootstest
-staticrootstest_SOURCES = tests/staticrootstest.c
-staticrootstest_LDADD = $(test_ldadd) libstaticrootslib.la
-staticrootstest_LDFLAGS = -shared-libgcc
-staticrootstest_LINK = $(LINK) $(staticrootstest_LDFLAGS)
-check_LTLIBRARIES = libstaticrootslib.la
-libstaticrootslib_la_SOURCES = tests/staticrootslib.c
-libstaticrootslib_la_LIBADD = libgcjgc_convenience.la
-libstaticrootslib_la_LDFLAGS = -version-info 1:2:0 -no-undefined \
- -rpath /nowhere -shared-libgcc
-libstaticrootslib_la_DEPENDENCIES = libgcjgc_convenience.la
-
## FIXME: we shouldn't have to do this, but automake forces us to.
.s.lo:
## We use -Wp,-P to strip #line directives. Irix `as' chokes on
@@ -116,7 +79,6 @@
"PICFLAG_FOR_TARGET=$(PICFLAG_FOR_TARGET)" \
"SHELL=$(SHELL)" \
"EXPECT=$(EXPECT)" \
- "RUNTEST=$(RUNTEST)" \
"RUNTESTFLAGS=$(RUNTESTFLAGS)" \
"exec_prefix=$(exec_prefix)" \
"infodir=$(infodir)" \
diff -r b725b6092024 boehm-gc/configure.ac
--- a/boehm-gc/configure.ac Fri Jan 14 21:53:19 2011 +0100
+++ b/boehm-gc/configure.ac Sat Jan 15 16:53:57 2011 +0100
@@ -1,4 +1,4 @@
-# Copyright (c) 1999, 2000, 2001, 2002, 2003, 2006, 2010 by Red Hat, Inc.
+# Copyright (c) 1999, 2000, 2001, 2002, 2003, 2006, 2010, 2011 by Red Hat, Inc.
# All rights reserved.
# Copyright 2004 Nathanael Nerode
#
@@ -544,5 +544,5 @@
AC_CONFIG_HEADERS([include/gc_config.h include/gc_ext_config.h])
-AC_CONFIG_FILES(Makefile include/Makefile threads.mk)
+AC_CONFIG_FILES(Makefile include/Makefile testsuite/Makefile threads.mk)
AC_OUTPUT
diff -r b725b6092024 boehm-gc/testsuite/Makefile.am
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/boehm-gc/testsuite/Makefile.am Sat Jan 15 16:53:57 2011 +0100
@@ -0,0 +1,43 @@
+## Process this file with automake to produce Makefile.in.
+
+AUTOMAKE_OPTIONS = foreign dejagnu
+
+# Setup the testing framework, if you have one
+EXPECT = `if [ -f $(top_builddir)/../expect/expect ] ; then \
+ echo $(top_builddir)/../expect/expect ; \
+ else echo expect ; fi`
+
+RUNTEST = `if [ -f $(top_srcdir)/../dejagnu/runtest ] ; then \
+ echo $(top_srcdir)/../dejagnu/runtest ; \
+ else echo runtest; fi`
+
+# Override default.
+DEJATOOL = boehm-gc
+
+CLEANFILES = *.exe core* *.log *.sum
+
+# We need more things in site.exp, but automake completely controls the
+# creation of that file; there's no way to append to it without messing up
+# the dependancy chains. So we overrule automake. This rule is exactly
+# what it would have generated, plus our own additions.
+site.exp: Makefile
+ @echo 'Making a new site.exp file...'
+ @echo '## these variables are automatically generated by make ##' >site.tmp
+ @echo '# Do not edit here. If you wish to override these values' >>site.tmp
+ @echo '# edit the last section' >>site.tmp
+ @echo 'set srcdir $(srcdir)' >>site.tmp
+ @echo "set objdir `pwd`" >>site.tmp
+ @echo 'set build_alias "$(build_alias)"' >>site.tmp
+ @echo 'set build_triplet $(build_triplet)' >>site.tmp
+ @echo 'set host_alias "$(host_alias)"' >>site.tmp
+ @echo 'set host_triplet $(host_triplet)' >>site.tmp
+ @echo 'set target_alias "$(target_alias)"' >>site.tmp
+ @echo 'set target_triplet $(target_triplet)' >>site.tmp
+ @echo 'set threadlibs "$(THREADLIBS)"' >>site.tmp
+ @echo 'set extra_test_libs "$(EXTRA_TEST_LIBS)"' >>site.tmp
+ @echo '## All variables above are generated by configure. Do Not Edit ##' >>site.tmp
+ @test ! -f site.exp || \
+ sed '1,/^## All variables above are.*##/ d' site.exp >> site.tmp
+ @-rm -f site.bak
+ @test ! -f site.exp || mv site.exp site.bak
+ @mv site.tmp site.exp
diff -r b725b6092024 boehm-gc/testsuite/boehm-gc.c/c.exp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/boehm-gc/testsuite/boehm-gc.c/c.exp Sat Jan 15 16:53:57 2011 +0100
@@ -0,0 +1,25 @@
+# Copyright (C) 2011 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; see the file COPYING3. If not see
+# <http://www.gnu.org/licenses/>.
+
+dg-init
+${tool}-init
+
+${tool}-dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.c]] "-O2" ""
+dg-finish
+
+# Local Variables:
+# tcl-indent-level:4
+# End:
diff -r b725b6092024 boehm-gc/testsuite/boehm-gc.c/trace_test.c
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/boehm-gc/testsuite/boehm-gc.c/trace_test.c Sat Jan 15 16:53:57 2011 +0100
@@ -0,0 +1,32 @@
+/* { dg-skip-if "requires --enable-gc-debug" *-*-* } */
+
+#include <stdio.h>
+#define GC_DEBUG
+#include "gc.h"
+
+struct treenode {
+ struct treenode *x;
+ struct treenode *y;
+} * root[10];
+
+struct treenode * mktree(int i) {
+ struct treenode * r = GC_MALLOC(sizeof(struct treenode));
+ if (0 == i) return 0;
+ if (1 == i) r = GC_MALLOC_ATOMIC(sizeof(struct treenode));
+ r -> x = mktree(i-1);
+ r -> y = mktree(i-1);
+ return r;
+}
+
+int main()
+{
+ int i;
+ for (i = 0; i < 10; ++i) {
+ root[i] = mktree(12);
+ }
+ GC_generate_random_backtrace();
+ GC_generate_random_backtrace();
+ GC_generate_random_backtrace();
+ GC_generate_random_backtrace();
+ return 0;
+}
diff -r b725b6092024 boehm-gc/testsuite/boehm-gc.lib/lib.exp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/boehm-gc/testsuite/boehm-gc.lib/lib.exp Sat Jan 15 16:53:57 2011 +0100
@@ -0,0 +1,30 @@
+# Copyright (C) 2011 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; see the file COPYING3. If not see
+# <http://www.gnu.org/licenses/>.
+
+dg-init
+${tool}-init
+
+# Gather list of tests, skipping library source files.
+# FIXME: How does this happen for dg-additional-sources?
+set tests [lsort [glob -nocomplain $srcdir/$subdir/*.c]]
+set tests [prune $tests $srcdir/$subdir/*lib.c]
+
+${tool}-dg-runtest $tests "-O2" ""
+dg-finish
+
+# Local Variables:
+# tcl-indent-level:4
+# End:
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/boehm-gc/testsuite/boehm-gc.lib/staticrootstest.c Sat Jan 15 16:53:57 2011 +0100
@@ -0,0 +1,48 @@
+/* { dg-add-shlib "staticrootslib.c" } */
+
+#include <stdio.h>
+
+#ifndef GC_DEBUG
+# define GC_DEBUG
+#endif
+
+#include "gc.h"
+#include "gc_backptr.h"
+
+struct treenode {
+ struct treenode *x;
+ struct treenode *y;
+} * root[10];
+
+static char *staticroot = 0;
+
+extern struct treenode * libsrl_mktree(int i);
+extern void * libsrl_init(void);
+extern void * libsrl_collect (void);
+
+int main(void)
+{
+ int i;
+ staticroot = libsrl_init();
+ for (i = 0; i < sizeof(struct treenode); ++i) {
+ staticroot[i] = 0x42;
+ }
+ libsrl_collect();
+ for (i = 0; i < 10; ++i) {
+ root[i] = libsrl_mktree(12);
+ libsrl_collect();
+ }
+ for (i = 0; i < sizeof(struct treenode); ++i) {
+ if (staticroot[i] != 0x42)
+ return -1;
+ }
+ for (i = 0; i < 10; ++i) {
+ root[i] = libsrl_mktree(12);
+ libsrl_collect();
+ }
+ for (i = 0; i < sizeof(struct treenode); ++i) {
+ if (staticroot[i] != 0x42)
+ return -1;
+ }
+ return 0;
+}
diff -r b725b6092024 boehm-gc/testsuite/config/default.exp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/boehm-gc/testsuite/config/default.exp Sat Jan 15 16:53:57 2011 +0100
@@ -0,0 +1,1 @@
+load_lib "standard.exp"
diff -r b725b6092024 boehm-gc/testsuite/lib/boehm-gc.exp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/boehm-gc/testsuite/lib/boehm-gc.exp Sat Jan 15 16:53:57 2011 +0100
@@ -0,0 +1,322 @@
+# Copyright (C) 2011 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; see the file COPYING3. If not see
+# <http://www.gnu.org/licenses/>.
+
+proc load_gcc_lib { filename } {
+ global srcdir loaded_libs
+ load_file $srcdir/../../gcc/testsuite/lib/$filename
+ set loaded_libs($filename) ""
+}
+
+load_lib dg.exp
+load_gcc_lib target-libpath.exp
+load_gcc_lib wrapper.exp
+# Required by target-supports-dg.exp.
+load_gcc_lib target-supports.exp
+# For dg-skip-if.
+load_gcc_lib target-supports-dg.exp
+# For ${tool}_exit.
+load_gcc_lib gcc-defs.exp
+
+set dg-do-what-default run
+
+# Define boehm-gc callbacks for dg.exp.
+
+# FIXME: The next two are independent of boehm-gc; move to some library.
+proc ${tool}-dg-test-1 { target_compile prog do_what extra_tool_flags } {
+
+ # Set up the compiler flags, based on what we're going to do.
+
+ set options [list]
+ switch $do_what {
+ "compile" {
+ set compile_type "assembly"
+ set output_file "[file rootname [file tail $prog]].s"
+ }
+ "assemble" {
+ set compile_type "object"
+ set output_file "[file rootname [file tail $prog]].o"
+ }
+ "ltassemble" {
+ # Needs to be different from assemble since we cannot determine
+ # from $prog whether to produce a regular or a libtool object.
+ set compile_type "object"
+ set output_file "[file rootname [file tail $prog]].lo"
+ }
+ "link" {
+ set compile_type "executable"
+ set output_file "[file rootname [file tail $prog]]"
+ # If we're linking a libtool object, produce a libtool library.
+ if { [file extension $prog] == ".lo" } {
+ set output_file "lib$output_file.la"
+ }
+ }
+ "run" {
+ set compile_type "executable"
+ # FIXME: "./" is to cope with "." not being in $PATH.
+ # Should this be handled elsewhere?
+ # YES.
+ set output_file "./[file rootname [file tail $prog]]"
+ # This is the only place where we care if an executable was
+ # created or not. If it was, dg.exp will try to run it.
+ remote_file build delete $output_file
+ }
+ default {
+ perror "$do_what: not a valid dg-do keyword"
+ return ""
+ }
+ }
+
+ if { $extra_tool_flags != "" } {
+ lappend options "additional_flags=$extra_tool_flags"
+ }
+
+ set comp_output [$target_compile "$prog" "$output_file" "$compile_type" $options];
+
+ return [list $comp_output $output_file]
+}
+
+proc ${tool}-dg-test { prog do_what extra_tool_flags } {
+ global tool
+
+ return [${tool}-dg-test-1 ${tool}_target_compile $prog $do_what $extra_tool_flags]
+}
+
+proc ${tool}-init { args } {
+ global gluefile wrap_flags
+ global srcdir
+ global blddirgc
+ global TOOL_EXECUTABLE
+ global GCC_UNDER_TEST
+ global objdir
+ global gc_include
+ global gc_lib
+ global gc_lib_conv
+ global tool
+ global tool_root_dir
+ global ld_library_path
+
+ set blddirgc [lookfor_file [get_multilibs] ${tool}]
+ verbose "blddirgc: $blddirgc"
+
+ if ![info exists GCC_UNDER_TEST] then {
+ if [info exists TOOL_EXECUTABLE] {
+ set GCC_UNDER_TEST $TOOL_EXECUTABLE
+ } else {
+ set GCC_UNDER_TEST "[find_gcc]"
+ }
+ }
+
+ set gccdir [lookfor_file $tool_root_dir gcc/libgcc.a]
+ if {$gccdir != ""} {
+ set gccdir [file dirname $gccdir]
+ }
+ verbose "gccdir: $gccdir"
+
+ set ld_library_path "."
+ append ld_library_path ":${gccdir}"
+
+ set compiler "${gccdir}/xgcc"
+ if { [is_remote host] == 0 && [which $compiler] != 0 } {
+ foreach i "[exec $compiler --print-multi-lib]" {
+ set mldir ""
+ regexp -- "\[a-z0-9=_/\.-\]*;" $i mldir
+ set mldir [string trimright $mldir "\;@"]
+ if { "$mldir" == "." } {
+ continue
+ }
+ if { [llength [glob -nocomplain ${gccdir}/${mldir}/libgcc_s*.so.*]] >= 1 } {
+ append ld_library_path ":${gccdir}/${mldir}"
+ }
+ }
+ }
+ # Add the library path for boehm-gc.
+ append ld_library_path ":${blddirgc}/.libs"
+
+ # Add the library path for boehm-gc.lib libtool libraries.
+ append ld_library_path ":.libs"
+
+ verbose "ld_library_path: $ld_library_path"
+
+ # Point to the headers in boehm-gc.
+ set gc_include "${blddirgc}/include"
+ verbose "gc_include: $gc_include"
+
+ set gc_lib "${blddirgc}/libgcjgc.la"
+ verbose "gc_lib: $gc_lib"
+
+ set gc_lib_conv "${blddirgc}/libgcjgc_convenience.la"
+ verbose "gc_lib_conv: $gc_lib_conv"
+
+ set_ld_library_path_env_vars
+ ${tool}_maybe_build_wrapper "${objdir}/testglue.o"
+}
+
+proc ${tool}_target_compile { source dest type options } {
+ global gluefile wrap_flags;
+ global srcdir
+ global TOOL_OPTIONS
+ global GCC_UNDER_TEST
+ global libtool
+ global gc_include
+ global gc_lib
+ global gc_lib_conv
+ global threadlibs
+ global extra_test_libs
+
+ if { [target_info needs_status_wrapper]!="" && [info exists gluefile] } {
+ lappend options "libs=${gluefile}"
+ lappend options "ldflags=$wrap_flags"
+ }
+
+ # TOOL_OPTIONS must come first, so that it doesn't override testcase
+ # specific options.
+ if [info exists TOOL_OPTIONS] {
+ lappend options [concat "additional_flags=$TOOL_OPTIONS" $options];
+ }
+
+ # Map type to libtool mode.
+ switch $type {
+ "object" {
+ set mode "compile"
+ }
+ "executable" {
+ set mode "link"
+ }
+ default {
+ perror "$type: unhandled type"
+ return ""
+ }
+ }
+
+ # Set this once for reuse in boehm-gc.lib/lib.exp.
+ set libtool "../libtool"
+ # We have to run silently to avoid DejaGnu lossage.
+ lappend options "compiler=$libtool --silent --tag=CC --mode=$mode \
+ $GCC_UNDER_TEST"
+
+ lappend options "additional_flags=-I${gc_include} -I${srcdir}/../include"
+
+ lappend options "libs= -Wc,-shared-libgcc"
+ lappend options "libs= ${gc_lib} ${threadlibs} ${extra_test_libs}"
+
+ verbose "options: $options"
+ return [target_compile $source $dest $type $options]
+}
+
+# Build shared library from LIB.
+proc ${tool}-build-shlib { lib flags extra-flags } {
+ global subdir
+ global dg-do-what-default
+ global libtool
+ global gc_lib_conv
+
+ # Determine basename.
+ set basename "[file rootname [file tail $lib]]"
+ verbose "basename: $basename"
+
+ # DejaGnu 1.4.4 doesn't support nested calls to dg-test. Restore
+ # original state before calling it again.
+ if { [info procs dg-save-unknown] != [list] } {
+ rename unknown ""
+ rename dg-save-unknown unknown
+ }
+
+ set saved-dg-do-what ${dg-do-what-default}
+
+ # Compile $lib into libtool object.
+ set dg-do-what-default ltassemble
+ dg-test -keep-output $lib $flags ${extra-flags}
+
+ # FIXME: Explain options.
+ set shopt "-version-info 1:2:0 -no-undefined -rpath /nowhere"
+ # Prefix -shared-libgcc with -Wc, to get it through libtool.
+ lappend shopt -Wc,-shared-libgcc
+ # Link with libgcjgc convenience library.
+ lappend shopt $gc_lib_conv
+
+ # There's no way to get output_file out of dg-test, only
+ # ${tool}-dg-test returns it, so hardcode that here.
+ set dg-do-what-default link
+ dg-test -keep-output $basename.lo $flags "${extra-flags} $shopt"
+
+ set dg-do-what-default ${saved-dg-do-what}
+
+ # Restore unknown, dg-save-unknown as DejaGnu 1.4.4 dg-test expects them.
+ if { [info procs dg-save-unknown] == [list] } {
+ rename unknown dg-save-unknown
+ proc unknown {} {
+ }
+ }
+
+ catch { exec $libtool --mode=clean rm -f $basename.lo }
+
+ return lib$basename.la
+}
+
+# Handle dg-add-shlib.
+proc dg-add-shlib { args } {
+ global tool
+ global srcdir subdir
+ global shlib
+
+ if { [llength $args] > 2 } {
+ error "[lindex $args 0]: too many arguments"
+ return
+ }
+
+ set lib [lindex $args 1]
+ set lib "$srcdir/$subdir/$lib"
+ verbose -log "dg-add-shlib $lib"
+
+ upvar tool_flags flags
+ upvar default_extra_tool_flags extra-flags
+ # Build support library.
+ set shlib [${tool}-build-shlib $lib $flags ${extra-flags}]
+
+ uplevel lappend tool_flags $shlib
+}
+
+# Run boehm-gc testcases.
+proc ${tool}-dg-runtest { testcases flags extra-flags } {
+ global runtests
+ global libtool
+ global shlib
+
+ set shlib ""
+
+ foreach testcase $testcases {
+ # If we're only testing specific files and this isn't one of them,
+ # skip it.
+ if ![runtest_file_p $runtests $testcase] {
+ return
+ }
+
+ # Run testcase.
+ # Keep output, otherwise libtool below won't remove the corresponding
+ # file in .libs.
+ dg-test -keep-output $testcase $flags ${extra-flags}
+
+ # Remove $execname and eventually $shlib.
+ # FIXME: Is $execname right e.g. on Windows?
+ # FIXME: Better way to get at $shlib?
+ verbose -log "$libtool --mode=clean rm -f [file rootname [file tail $testcase]] $shlib"
+ catch { exec $libtool --mode=clean rm -f [file rootname [file tail $testcase]] $shlib }
+ }
+}
+
+# Local Variables:
+# tcl-indent-level:4
+# End:
--
-----------------------------------------------------------------------------
Rainer Orth, Center for Biotechnology, Bielefeld University
next prev parent reply other threads:[~2011-01-17 12:12 UTC|newest]
Thread overview: 38+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-01-05 18:15 Rainer Orth
2011-01-05 20:24 ` Dave Korn
2011-01-05 20:43 ` Joseph S. Myers
2011-01-05 20:58 ` Dave Korn
2011-01-10 10:50 ` Rainer Orth
2011-02-18 8:02 ` Mike Stump
2011-01-05 20:25 ` Dave Korn
2011-01-10 10:55 ` Rainer Orth
2011-01-10 12:02 ` IainS
2011-02-18 8:18 ` Mike Stump
2011-02-22 17:10 ` Rainer Orth
2011-01-06 21:49 ` Ralf Wildenhues
2011-01-10 10:44 ` Rainer Orth
2011-02-18 8:21 ` Mike Stump
2011-01-17 13:31 ` Rainer Orth [this message]
2011-01-17 14:04 ` IainS
2011-01-17 14:34 ` Rainer Orth
2011-01-24 15:05 ` Rainer Orth
2011-01-24 16:31 ` IainS
2011-01-24 16:43 ` Rainer Orth
2011-02-18 9:50 ` Mike Stump
2011-02-22 17:40 ` Rainer Orth
2011-03-21 13:00 ` Rainer Orth
2011-03-21 18:28 ` Mike Stump
2011-03-21 18:33 ` Rainer Orth
2011-03-21 18:33 ` Paolo Bonzini
2011-03-21 18:54 ` Mike Stump
2011-03-23 9:01 ` Rainer Orth
2011-03-25 10:39 ` Paolo Bonzini
2011-03-25 10:59 ` Paolo Bonzini
2011-03-25 17:10 ` Rainer Orth
2011-03-25 17:17 ` Rainer Orth
2011-03-27 16:35 ` H.J. Lu
2011-01-18 20:51 ` Ralf Wildenhues
2011-01-20 18:03 ` Rainer Orth
2011-02-18 8:34 ` Mike Stump
2011-02-22 17:37 ` Rainer Orth
2011-02-22 22:07 ` Mike Stump
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=yddvd1nybjy.fsf@manam.CeBiTec.Uni-Bielefeld.DE \
--to=ro@cebitec.uni-bielefeld.de \
--cc=Ralf.Wildenhues@gmx.de \
--cc=bje@gnu.org \
--cc=bonzini@gnu.org \
--cc=gcc-patches@gcc.gnu.org \
--cc=hans_boehm@hp.com \
--cc=janis.marie.johnson@gmail.com \
--cc=java-patches@gcc.gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).