libtool-commit
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[SCM] GNU Libtool branch, master, updated. v2.2.6-129-g2772d14


From: Ralf Wildenhues
Subject: [SCM] GNU Libtool branch, master, updated. v2.2.6-129-g2772d14
Date: Sun, 14 Jun 2009 10:11:42 +0000

This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU Libtool".

The branch, master has been updated
       via  2772d14559c584d142e44fdea69124ce62285b40 (commit)
      from  6769a76d6bbcc55b70b1c7279b7226aaa33d65b5 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit 2772d14559c584d142e44fdea69124ce62285b40
Author: Ralf Wildenhues <address@hidden>
Date:   Sun Jun 14 12:03:31 2009 +0200

    Add versioning tests.
    
    * tests/versioning.at (versioning): New file, new test.
    * Makefile.am (TESTSUITE_AT): Adjust.
    Prompted by bug report from Mike Gorchak.
    
    Signed-off-by: Ralf Wildenhues <address@hidden>

-----------------------------------------------------------------------

Summary of changes:
 ChangeLog           |    7 ++
 Makefile.am         |    1 +
 tests/versioning.at |  239 +++++++++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 247 insertions(+), 0 deletions(-)
 create mode 100644 tests/versioning.at

diff --git a/ChangeLog b/ChangeLog
index d898619..4d12190 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2009-06-14  Ralf Wildenhues  <address@hidden>
+
+       Add versioning tests.
+       * tests/versioning.at (versioning): New file, new test.
+       * Makefile.am (TESTSUITE_AT): Adjust.
+       Prompted by bug report from Mike Gorchak.
+
 2009-06-14  Mike Gorchak  <address@hidden>  (tiny change)
            Ralf Wildenhues  <address@hidden>
 
diff --git a/Makefile.am b/Makefile.am
index c49f749..a18955e 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -472,6 +472,7 @@ TESTSUITE_AT        = tests/testsuite.at \
                  tests/infer-tag.at \
                  tests/localization.at \
                  tests/install.at \
+                 tests/versioning.at \
                  tests/destdir.at \
                  tests/old-m4-iface.at \
                  tests/am-subdir.at \
diff --git a/tests/versioning.at b/tests/versioning.at
new file mode 100644
index 0000000..136a549
--- /dev/null
+++ b/tests/versioning.at
@@ -0,0 +1,239 @@
+# versioning.at -- test libtool versioning           -*- Autotest -*-
+#
+#   Copyright (C) 2009 Free Software Foundation, Inc.
+#
+#   This file is part of GNU Libtool.
+#
+# GNU Libtool 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 2 of
+# the License, or (at your option) any later version.
+#
+# GNU Libtool 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 GNU Libtool; see the file COPYING.  If not, a copy
+# can be downloaded from  http://www.gnu.org/licenses/gpl.html,
+# or obtained by writing to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+####
+
+AT_SETUP([versioning])
+AT_KEYWORDS([libtool])
+
+eval "`$LIBTOOL --config | $EGREP '^(objdir)='`"
+
+# Setup some library and program sources:
+# a library (a1), a new revision (a2), a compatible update (a3),
+# an incompatible update (a4).
+# Another library (libb) using liba, and a couple of programs,
+# using liba directly and indirectly through libb.
+
+AT_DATA([liba1.c], [[
+int a (void)
+{
+  return 0;
+}
+]])
+
+AT_DATA([liba2.c], [[
+/* The internal detail should be static.  It isn't static in this test,
+   so we can later find out that it's this revision of the library. */
+int internal_detail = 42;
+int a (void)
+{
+  return internal_detail - 42;
+}
+]])
+
+AT_DATA([liba3.c], [[
+int a (void)
+{
+  return 0;
+}
+int aa (void)
+{
+  return 0;
+}
+]])
+
+AT_DATA([liba4.c], [[
+int aa (void)
+{
+  return 0;
+}
+]])
+
+AT_DATA([libb.c], [[
+extern int a (void);
+int b (void)
+{
+  return a ();
+}
+]])
+
+AT_DATA([prog1.c], [[
+extern int a (void);
+int main (void)
+{
+  return a ();
+}
+]])
+
+AT_DATA([prog2.c], [[
+extern int b (void);
+int main (void)
+{
+  return b ();
+}
+]])
+
+AT_DATA([prog3.c], [[
+extern int a (void), internal_detail;
+int main (void)
+{
+  return a () + internal_detail - 42;
+}
+]])
+
+
+inst=`pwd`/inst
+libdir=$inst/lib
+bindir=$inst/bin
+mkdir $inst $libdir $bindir
+
+for file in liba1.c liba2.c liba3.c liba4.c libb.c; do
+  $LIBTOOL --mode=compile $CC $CPPFLAGS $CFLAGS -c $file
+done
+for file in prog1.c prog2.c prog3.c; do
+  $CC $CPPFLAGS $CFLAGS -c $file
+done
+
+# Setup is finished here.
+
+# Hypothesis: -version-info is ignored for convenience archives.
+AT_CHECK([$LIBTOOL --mode=link $CC $CFLAGS $LDFLAGS -o liba.la liba1.lo ]dnl
+        [-version-info 0:0:0], [], [ignore], [stderr])
+AT_CHECK([grep 'version-info.*ignored for convenience' stderr], [], [ignore])
+
+# Hypothesis: the deprecated -version-number works.
+# Be sure not to use zero here, it's not portable.
+for version_number in 1 1:1 2:1 1:1:1 3:2:1; do
+  AT_CHECK([$LIBTOOL --mode=link $CC $CFLAGS $LDFLAGS -o liba.la liba1.lo ]dnl
+          [-version-number $version_number -rpath $libdir], [], [ignore], 
[ignore])
+done
+
+# Hypothesis: -version-info can be passed kinds of values, esp. zero ones
+# and large ones.
+# TODO: check something like 1001:2419:189 after fixing issues
+# for `version_type's of `irix', `nonstopux', or `osf'.
+for version_info in 1 1:2 0:0:0 1:1:1 13:241:7; do
+  AT_CHECK([$LIBTOOL --mode=link $CC $CFLAGS $LDFLAGS -o liba.la liba1.lo ]dnl
+          [-version-info $version_info -rpath $libdir], [], [ignore], [ignore])
+done
+
+# Hypothesis: we diagnose when AGE is higher than CURRENT.
+AT_CHECK([$LIBTOOL --mode=link $CC $CFLAGS $LDFLAGS -o liba.la liba1.lo ]dnl
+        [-version-info 1:3:2 -rpath $libdir], [1], [ignore], [stderr])
+AT_CHECK([grep 'AGE.*is greater than' stderr], [], [ignore])
+
+# Hypothesis: we diagnose invalid values.
+for version_info in 1:2:3:4 -1 0:-1 0:0:-1; do
+  AT_CHECK([$LIBTOOL --mode=link $CC $CFLAGS $LDFLAGS -o liba.la liba1.lo ]dnl
+          [-version-info $version_info -rpath $libdir], [1], [ignore], 
[ignore])
+done
+
+
+# Now, create an original version of the library and associated users.
+# This setup will be reused for further hypotheses below, and these
+# functions will be used to test working programs.
+
+test_uninstalled ()
+{
+  # temporarily move installed libraries out of the way in order to avoid
+  # skewing test results:
+  mv $libdir temp
+  LT_AT_EXEC_CHECK([./prog1])
+  LT_AT_EXEC_CHECK([./prog2])
+  mv temp $libdir
+}
+
+test_installed ()
+{
+  # temporarily move uninstalled libraries out of the way in order to avoid
+  # skewing test results:
+  mv $objdir temp
+  LT_AT_EXEC_CHECK([$bindir/prog1])
+  LT_AT_EXEC_CHECK([$bindir/prog2])
+  mv temp $objdir
+}
+
+AT_CHECK([$LIBTOOL --mode=link $CC $CFLAGS $LDFLAGS -o liba.la liba1.lo ]dnl
+        [-version-info 0:0:0 -rpath $libdir], [], [ignore], [ignore])
+AT_CHECK([$LIBTOOL --mode=link $CC $CFLAGS $LDFLAGS -o libb.la libb.lo liba.la 
]dnl
+        [-version-info 0:0:0 -rpath $libdir], [], [ignore], [ignore])
+AT_CHECK([$LIBTOOL --mode=link $CC $CFLAGS $LDFLAGS -o prog1$EXEEXT 
prog1.$OBJEXT ]dnl
+        [liba.la], [], [ignore], [ignore])
+AT_CHECK([$LIBTOOL --mode=link $CC $CFLAGS $LDFLAGS -o prog2$EXEEXT 
prog2.$OBJEXT ]dnl
+        [libb.la], [], [ignore], [ignore])
+test_uninstalled
+AT_CHECK([$LIBTOOL --mode=install cp liba.la libb.la $libdir],
+        [], [ignore], [ignore])
+AT_CHECK([$LIBTOOL --mode=install cp prog1$EXEEXT prog2$EXEEXT $bindir],
+        [], [ignore], [ignore])
+AT_CHECK([$LIBTOOL --mode=clean rm -f liba.la], [], [ignore], [ignore])
+test_installed
+AT_CHECK([$LIBTOOL --mode=uninstall rm -f $libdir/liba.la], [], [ignore], 
[ignore])
+
+
+# Hypothesis: library revision updates do not require (uninstalled
+# nor installed) programs to be relinked.
+AT_CHECK([$LIBTOOL --mode=link $CC $CFLAGS $LDFLAGS -o liba.la liba2.lo ]dnl
+        [-version-info 0:1:0 -rpath $libdir], [], [ignore], [ignore])
+test_uninstalled
+AT_CHECK([$LIBTOOL --mode=install cp liba.la libb.la $libdir],
+        [], [ignore], [ignore])
+AT_CHECK([$LIBTOOL --mode=clean rm -f liba.la], [], [ignore], [ignore])
+test_installed
+# do not uninstall here: the library may be reused in the next test.
+
+# Hypothesis: backward compatible library updates do not require
+# (uninstalled nor installed) programs to be relinked.
+# This can have one of several reasons:
+# - the soname is the difference between $current and $age, thus
+#   unchanged; in this case, the newly installed library will be used,
+# - the soname is only $current, or we are linking statically, in which case
+#   the old installed library code will be used,
+# - the numbers are not encoded at all, in which case the newly installed
+#   library will be used.
+AT_CHECK([$LIBTOOL --mode=link $CC $CFLAGS $LDFLAGS -o liba.la liba3.lo ]dnl
+        [-version-info 1:0:1 -rpath $libdir], [], [ignore], [ignore])
+# Do not test the uninstalled program, it may be broken (in the second case).
+AT_CHECK([$LIBTOOL --mode=install cp liba.la libb.la $libdir],
+        [], [ignore], [ignore])
+AT_CHECK([$LIBTOOL --mode=clean rm -f liba.la], [], [ignore], [ignore])
+test_installed
+# do not uninstall here: the library may be reused in the next test.
+
+
+# Hypothesis: with shared libraries, incompatible library updates
+# will not cause old installed programs (linked against the old
+# library version) to break.
+# This can have one of several reasons:
+# - the soname has changed, so the old installed library will still be
+#   available,
+# - we are linking statically, so the old library code will still be used.
+AT_CHECK([$LIBTOOL --mode=link $CC $CFLAGS $LDFLAGS -o liba.la liba4.lo ]dnl
+        [-version-info 2:0:0 -rpath $libdir], [], [ignore], [ignore])
+# We do not guarantee that old versions of an uninstalled library are still
+# available, so test_uninstalled will not necessarily work here any more.
+AT_CHECK([$LIBTOOL --mode=install cp liba.la libb.la $libdir],
+        [], [ignore], [ignore])
+AT_CHECK([$LIBTOOL --mode=clean rm -f liba.la], [], [ignore], [ignore])
+test_installed
+
+
+AT_CLEANUP


hooks/post-receive
-- 
GNU Libtool




reply via email to

[Prev in Thread] Current Thread [Next in Thread]