summaryrefslogtreecommitdiff
path: root/tests/darwin.at
diff options
context:
space:
mode:
authorRalf Wildenhues <Ralf.Wildenhues@gmx.de>2009-06-10 19:47:33 +0200
committerRalf Wildenhues <Ralf.Wildenhues@gmx.de>2009-06-10 19:47:33 +0200
commitb04fe8e6da2b5bed914911bfd8567ba9e93da40b (patch)
treeba185a7ea8f9ac4a24e6e159d610d58cfc6630e7 /tests/darwin.at
parentefe1cfec710dbd06987fed02ec4d70d5c6630322 (diff)
downloadlibtool-b04fe8e6da2b5bed914911bfd8567ba9e93da40b.tar.gz
Fix concurrent extraction of convenience libraries on Darwin.
* libltdl/m4/libtool.m4 (_LT_CMD_OLD_ARCHIVE): New libtool variable `lock_old_archive_extraction', set to `yes' on darwin. * doc/libtool.texi (libtool script contents): Document it. * libltdl/config/ltmain.m4sh (func_extract_an_archive): Lock `ar x' invocation if `lock_old_archive_extraction' is yes. * tests/darwin.at (darwin concurrent library extraction): New test. * NEWS: Update. Report by Akim Demaille. Signed-off-by: Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
Diffstat (limited to 'tests/darwin.at')
-rw-r--r--tests/darwin.at52
1 files changed, 51 insertions, 1 deletions
diff --git a/tests/darwin.at b/tests/darwin.at
index 62841160..8884fd2e 100644
--- a/tests/darwin.at
+++ b/tests/darwin.at
@@ -1,6 +1,6 @@
# darwin.at - tests specific to Mac OS X
#
-# Copyright (C) 2008 Free Software Foundation, Inc.
+# Copyright (C) 2008, 2009 Free Software Foundation, Inc.
# Written by Peter O'Gorman, 2008
#
# This file is part of GNU Libtool.
@@ -98,3 +98,53 @@ AT_CHECK([$LIBTOOL --mode=link --tag=CC $CC -o main$EXEEXT $CPPFLAGS $CFLAGS $L
PATH=$save_PATH
AT_CLEANUP
+
+
+AT_SETUP([darwin concurrent library extraction])
+
+AT_DATA([foo.c], [[
+int foo (void) { return 0; }
+]])
+
+AT_DATA([bar.c], [[
+extern int foo1 (void);
+int bar (void) { return foo1 (); }
+]])
+cp bar.c baz.c
+
+objects=
+for obj in 1 2 3 4 5 6 7 8; do
+ sed "s/foo/foo$obj/" < foo.c > foo$obj.c
+ AT_CHECK([$LIBTOOL --mode=compile $CC $CPPFLAGS $CFLAGS -c foo$obj.c],
+ [], [ignore], [ignore])
+ objects="$objects foo$obj.lo"
+done
+AT_CHECK([$LIBTOOL --mode=compile $CC $CPPFLAGS $CFLAGS -c bar.c],
+ [], [ignore], [ignore])
+AT_CHECK([$LIBTOOL --mode=compile $CC $CPPFLAGS $CFLAGS -c baz.c],
+ [], [ignore], [ignore])
+AT_CHECK([$LIBTOOL --mode=link $CC $CFLAGS $LDFLAGS -o libfoo.la $objects],
+ [], [ignore], [ignore])
+
+# Hypothesis: concurrent convenience archive extraction works.
+for i in 1 2 3 4 5; do
+ rm -f libbar.la libbaz.la
+ AT_CHECK([($LIBTOOL --mode=link $CC $CFLAGS $LDFLAGS ]dnl
+ [ -o libbar.la bar.lo -rpath /foo libfoo.la) & ]dnl
+ [($LIBTOOL --mode=link $CC $CFLAGS $LDFLAGS ]dnl
+ [ -o libbaz.la baz.lo -rpath /foo libfoo.la) & ]dnl
+ [wait; test -f libbar.la && test -f libbaz.la],
+ [], [ignore], [ignore])
+done
+
+# Hypothesis: the lock is not used in dry run mode.
+eval "`$LIBTOOL --config | $EGREP '^(objdir)='`"
+# Next line is internal detail.
+lockfile=$objdir/libfoo.a.lock
+echo stamp > $lockfile
+AT_CHECK([$LIBTOOL --dry-run --mode=link $CC $CFLAGS $LDFLAGS ]dnl
+ [ -o libbar.la bar.lo -rpath /foo libfoo.la],
+ [], [ignore], [ignore])
+AT_CHECK([grep stamp $lockfile], [], [ignore])
+
+AT_CLEANUP