mirror of
git://git.savannah.gnu.org/libtool.git
synced 2024-11-27 06:09:57 +08:00
a85c4f5e40
* 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.
231 lines
6.3 KiB
Plaintext
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
|