diff options
author | Ralf Wildenhues <Ralf.Wildenhues@gmx.de> | 2009-06-10 19:47:33 +0200 |
---|---|---|
committer | Ralf Wildenhues <Ralf.Wildenhues@gmx.de> | 2009-06-10 19:47:33 +0200 |
commit | b04fe8e6da2b5bed914911bfd8567ba9e93da40b (patch) | |
tree | ba185a7ea8f9ac4a24e6e159d610d58cfc6630e7 /tests/darwin.at | |
parent | efe1cfec710dbd06987fed02ec4d70d5c6630322 (diff) | |
download | libtool-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.at | 52 |
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 |