libtool/tests/darwin.at
Peter O'Gorman a85c4f5e40 Don't let verbose linker messages influence test results.
* libltdl/m4/libtool.m4 (_LT_REQUIRED_DARWIN_CHECKS): Ignore
stderr during tests for -flag unless it contains "flag".
* tests/darwin.at: Add test.
Reported by Jeremy Huddleston and also by David Fang.
2011-01-19 12:53:32 -06:00

231 lines
6.3 KiB
Plaintext

# darwin.at - tests specific to Mac OS X
#
# Copyright (C) 2008, 2009, 2011 Free Software Foundation, Inc.
# Written by Peter O'Gorman, 2008
#
# 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_BANNER([Mac OS X tests])
AT_SETUP([darwin fat compile])
noskip=:
case "$host_os" in
darwin*) ;;
*) noskip=false ;;
esac
AT_DATA([simple.c] ,[[
int main() { return 0;}
]])
$noskip && {
$CC $CPPFLAGS $CFLAGS -arch ppc -arch i386 -o simple simple.c 2>&1 > /dev/null || noskip=false
rm -f simple
}
AT_CHECK([$noskip || (exit 77)])
AT_DATA([foo.c],[[
int x=0;
]])
AT_DATA([baz.c],[[
int y=0;
]])
AT_DATA([bar.c],[[
extern int x;
int bar(void);
int bar() { return x;}
]])
AT_DATA([main.c],[[
extern int x;
extern int y;
int main() {
return x+y;
}
]])
mkdir bin
AT_DATA([bin/basename],[[
#! /bin/sh
usage="usage: $0 argument"
if test $# != 1; then
echo $usage >&2
exit 1
fi
echo $1 | sed "s,^.*/,,"
]])
chmod +x bin/basename
save_PATH=$PATH
PATH=`pwd`/bin:$PATH
export PATH
AT_CHECK([$LIBTOOL --mode=compile --tag=CC $CC -c -o foo.lo $CPPFLAGS $CFLAGS -arch ppc -arch i386 foo.c],[0],[ignore],[ignore])
AT_CHECK([$LIBTOOL --mode=compile --tag=CC $CC -c -o baz.lo $CPPFLAGS $CFLAGS -arch ppc -arch i386 baz.c],[0],[ignore],[ignore])
AT_CHECK([$LIBTOOL --mode=link --tag=CC $CC -o libfoo.la $CPPFLAGS $CFLAGS $LDFLAGS -arch ppc -arch i386 foo.lo baz.lo],[0],[ignore],[ignore])
AT_CHECK([$LIBTOOL --mode=compile --tag=CC $CC -c -o bar.lo $CPPFLAGS $CFLAGS -arch ppc -arch i386 bar.c],[0],[ignore],[ignore])
AT_CHECK([$LIBTOOL --mode=link --tag=CC $CC -o libbar.la $CPPFLAGS $CFLAGS $LDFLAGS -arch ppc -arch i386 bar.lo libfoo.la -rpath /nonexistent],[0],[ignore],[ignore])
AT_CHECK([$LIBTOOL --mode=compile --tag=CC $CC -c -o main.lo $CPPFLAGS $CFLAGS -arch ppc -arch i386 main.c],[0],[ignore],[ignore])
AT_CHECK([$LIBTOOL --mode=link --tag=CC $CC -o main$EXEEXT $CPPFLAGS $CFLAGS $LDFLAGS -arch ppc -arch i386 main.lo libbar.la],[0],[ignore],[ignore])
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
AT_SETUP([darwin gdb debug information])
AT_CHECK([gdb --version || (exit 77)],[ignore],[ignore],[ignore])
AT_DATA([foo.c], [[
int foo (void) { return 0; }
]])
AT_DATA([bar.c], [[
extern int foo (void);
int bar (void) { return foo (); }
]])
AT_DATA([main.c], [[
extern int bar(void);
int main() { return bar();}
]])
AT_CHECK([$LIBTOOL --mode=compile $CC $CPPFLAGS $CFLAGS -c bar.c],
[], [ignore], [ignore])
AT_CHECK([$LIBTOOL --mode=compile $CC $CPPFLAGS $CFLAGS -c foo.c],
[], [ignore], [ignore])
AT_CHECK([$LIBTOOL --mode=compile $CC $CPPFLAGS $CFLAGS -c main.c],
[], [ignore], [ignore])
AT_CHECK([$LIBTOOL --mode=link $CC $CFLAGS $LDFLAGS -o libfoo.la foo.lo],
[], [ignore], [ignore])
AT_CHECK([$LIBTOOL --mode=link $CC $CFLAGS $LDFLAGS ]dnl
[ -o libbar.la bar.lo -rpath /foo libfoo.la ],
[], [ignore], [ignore])
AT_CHECK([$LIBTOOL --mode=link $CC $CFLAGS $LDFLAGS ]dnl
[ -o main main.lo libbar.la],[], [ignore], [ignore])
AT_CHECK([echo quit | $LIBTOOL --mode=execute gdb main],
[ignore], [ignore], [stderr])
AT_CHECK([grep 'Could not find object file' stderr],[1],[ignore],[ignore])
AT_XFAIL_IF([
eval "`$LIBTOOL --config | $EGREP '^(whole_archive_flag_spec)='`"
case $whole_archive_flag_spec:$host_os in
:darwin*) : ;;
*) false ;;
esac ])
# Remove any dSYM bundle
rm -rf .libs/*.dSYM
AT_CHECK([echo quit | $LIBTOOL --mode=execute gdb main],
[ignore], [ignore], [stderr])
AT_CHECK([grep 'Could not find object file' stderr],[1],[ignore],[ignore])
AT_CLEANUP
AT_SETUP([darwin ld warnings changing configure results])
AT_DATA([configure.ac],
[[AC_INIT([ld-stderr], ]AT_PACKAGE_VERSION[, ]AT_PACKAGE_BUGREPORT[)
AC_CONFIG_MACRO_DIR([m4])
AM_INIT_AUTOMAKE([foreign])
AC_PROG_CC
LT_INIT
AC_CONFIG_FILES([Makefile])
AC_OUTPUT
]])
AT_DATA([Makefile.am],[
ACLOCAL_AMFLAGS = -I m4
])
LT_AT_LIBTOOLIZE([--copy --force])
LT_AT_AUTORECONF([--force --install])
LT_AT_CONFIGURE
AT_CHECK([./libtool --config],[ignore],[stdout],[ignore])
mv stdout expout
LT_AT_CONFIGURE([LDFLAGS=-L/there/is/no/dir/here])
AT_CHECK([./libtool --config],[ignore],[expout],[ignore])
AT_CLEANUP