| # darwin.at - tests specific to Mac OS X |
| # |
| # Copyright (C) 2008, 2009 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 |