yann@1: Without this patch, the command yann@1: yann@1: RUNTESTFLAGS=--target=powerpc-750-linux-gnu -v -v -v -v make check-target-libstdc++-v3 yann@1: yann@1: fails in two ways: yann@1: 1. the -L option meant to locate the testsuite directory is incorrect, and yann@1: 2. the wrong compiler is invoked, causing all sorts of havoc, not least of which yann@1: is the native compiler is invoked when we really wanted to invoke the cross-compiler yann@1: we just built. yann@1: yann@1: Here's an example log of the problem in action. Every testcase fails, this shows just one: yann@1: ------------- yann@1: Invoking the compiler as g++ -ggdb3 -DDEBUG_ASSERT -I/home3/dank/wk/ixos/dap_interim/linux/3rdParty/crosstool/crosstool-0.12/build/powerpc-750-linux-gnu/gcc-3.3-glibc-2.2.5/gcc-3.3/libstdc++-v3/testsuite /home3/dank/wk/ixos/dap_interim/linux/3rdParty/crosstool/crosstool-0.12/build/powerpc-750-linux-gnu/gcc-3.3-glibc-2.2.5/gcc-3.3/libstdc++-v3/testsuite/20_util/binders.cc -g -O2 -DDEBUG_ASSERT -L/testsuite -lv3test -lm -o ./binders.exe yann@1: compiler exited with status 1 yann@1: output is: yann@1: /usr/lib/gcc-lib/i386-linux/2.95.4/../../../../include/g++-3/stl_function.h: In method `void binder2nd >::operator ()(const Elem &) const':^M yann@1: /usr/lib/gcc-lib/i386-linux/2.95.4/../../../../include/g++-3/stl_algo.h:83: instantiated from `for_each > >(Elem *, Elem *, binder2nd >)'^M yann@1: /home3/dank/wk/ixos/dap_interim/linux/3rdParty/crosstool/crosstool-0.12/build/powerpc-750-linux-gnu/gcc-3.3-glibc-2.2.5/gcc-3.3/libstdc++-v3/testsuite/20_util/binders.cc:43: instantiated from here^M yann@1: /usr/lib/gcc-lib/i386-linux/2.95.4/../../../../include/g++-3/stl_function.h:224: conversion from `const Elem' to `Elem &' discards qualifiers^M yann@1: /usr/lib/gcc-lib/i386-linux/2.95.4/../../../../include/g++-3/stl_function.h:622: in passing argument 1 of `mem_fun1_ref_t::operator ()(Elem &, int) const'^M yann@1: ... yann@1: FAIL: 20_util/binders.cc (test for excess errors) yann@1: WARNING: 20_util/binders.cc compilation failed to produce executable yann@1: ------------- yann@1: yann@1: And here's the patch. I'm not happy with it, and it probably gets some cases wrong, yann@1: but it seems to work for the common native case and for my cross-compiler case. yann@1: yann@1: --- gcc-3.3/libstdc++-v3/testsuite/lib/libstdc++-v3-dg.exp.old Sun Jul 13 10:42:01 2003 yann@1: +++ gcc-3.3/libstdc++-v3/testsuite/lib/libstdc++-v3-dg.exp Sun Jul 13 11:39:54 2003 yann@1: @@ -46,8 +46,23 @@ yann@1: global gluefile wrap_flags yann@1: global ld_library_path yann@1: global tool_root_dir yann@1: + global target_triplet yann@1: yann@1: set blddir [lookfor_file [get_multilibs] libstdc++-v3] yann@1: + if { $blddir == "" } { yann@1: + set multilibs [get_multilibs] yann@1: + # FIXME: assume multilib only one level deep yann@1: + set multisub [file tail $multilibs] yann@1: + verbose "libstdc++-v3-init: couldn't find libstdc++-v3 in $multilibs, trying $objdir" yann@1: + set blddir [lookfor_file ${objdir} "$target_triplet/$multisub/libstdc++-v3"] yann@1: + } yann@1: + if { $blddir == "" } { yann@1: + verbose "libstdc++-v3-init: couldn't find libstdc++-v3, trying $objdir without multilibs" yann@1: + set blddir [lookfor_file ${objdir} "$target_triplet/libstdc++-v3"] yann@1: + } yann@1: + if { $blddir == "" } { yann@1: + error "Can't find libstdc++-v3" yann@1: + } yann@1: yann@1: # By default, we assume we want to run program images. yann@1: global dg-do-what-default