Hello Patrick,

* Patrick Welche wrote on Fri, Oct 27, 2006 at 06:35:31PM CEST:
> 
> (Spent the afternoon teaching reciprocal space in hexagonal crystals, so
> I'm quite sure sin(pi/2) = 1 :-) )

LOL.  The test was written to prove you wrong.  :->

I've checked in the patch below, to hopefully fix all the glitches I put
in that test.  Now it should really do what I intended it to do.
However, I do not know how portable such setup is that depends upon
library ordering in both static and non-static case: the test is to find
out.  Could you try it (and report the system you tried)?

Thanks,
Ralf

2006-10-28  Ralf Wildenhues  <[EMAIL PROTECTED]>

        * tests/link-order2.at: Add missing $bindir setting.  Prevent
        compiler optimization of sqrt call.  Fix logic inversion and
        add some comments about this stunt.  Add a test with reversed
        library link order that should fail if the system has a libm.
        Report by Patrick Welche.

Index: tests/link-order2.at
===================================================================
RCS file: /cvsroot/libtool/libtool/tests/link-order2.at,v
retrieving revision 1.1
diff -u -r1.1 link-order2.at
--- tests/link-order2.at        24 Oct 2006 20:30:05 -0000      1.1
+++ tests/link-order2.at        27 Oct 2006 22:40:55 -0000
@@ -26,6 +26,7 @@
 AT_KEYWORDS([libtool])
 LDFLAGS="$LDFLAGS -no-undefined"
 libdir=`pwd`/inst/lib
+bindir=`pwd`/inst/bin
 mkdir inst inst/bin inst/lib
 
 cat >a.c <<\EOF
@@ -41,9 +42,17 @@
 cat >main.c <<\EOF
 #include <math.h>
 extern double b (double);
+extern double four;
+double four = 4.0;
 int main (void)
 {
-  return fabs (b (3.1415 / 2.)) < 0.01 && fabs (sqrt (4.) - 2.) < 0.01;
+  /* The ! is to invert C true to shell true
+   * The function b should call our sin (that returns 0) and not libm's
+   * (in the latter case, b returns approximately 1)
+   * the sqrt is to force linking against libm
+   * the variable four is to prevent most compiler optimizations
+   */
+  return !( fabs (b (3.1415 / 2.)) < 0.01 && fabs (sqrt (four) - 2.) < 0.01 );
 }
 EOF
 
@@ -55,6 +64,14 @@
   $LIBTOOL --mode=link $CC $CFLAGS $LDFLAGS $static -o libb.la b.lo liba.la 
-rpath $libdir
   $LIBTOOL --mode=link $CC $CFLAGS $LDFLAGS -o main main.$OBJEXT libb.la -lm
   LT_AT_EXEC_CHECK([./main])
+  # Now test that if we reverse the link order, the program fails.
+  # The execution failure can only work on systems that actually have a libm.
+  $LIBTOOL --mode=link $CC $CFLAGS $LDFLAGS -o wrong main.$OBJEXT -lm libb.la
+  case $host_os in
+  cygwin* | mingw* | pw32* | beos* ) ;;
+  *) LT_AT_EXEC_CHECK([./wrong], [1]) ;;
+  esac
+
   $LIBTOOL --mode=install cp liba.la $libdir/liba.la
   $LIBTOOL --mode=install cp libb.la $libdir/libb.la
   $LIBTOOL --mode=install cp main $bindir/main


_______________________________________________
http://lists.gnu.org/mailman/listinfo/libtool

Reply via email to