* Makefile.am (TESTSUITE_AT): Add tests/sysroot.at. * tests/sysroot.at: New.
Signed-off-by: Paolo Bonzini <bonz...@gnu.org> Signed-off-by: Charles Wilson <libt...@cwilson.fastmail.fm> --- Makefile.am | 3 +- tests/sysroot.at | 201 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 203 insertions(+), 1 deletions(-) create mode 100644 tests/sysroot.at diff --git a/Makefile.am b/Makefile.am index ef3c984..c2928a5 100644 --- a/Makefile.am +++ b/Makefile.am @@ -513,7 +513,8 @@ TESTSUITE_AT = tests/testsuite.at \ tests/cmdline_wrap.at \ tests/pic_flag.at \ tests/darwin.at \ - tests/deplibs-mingw.at + tests/deplibs-mingw.at \ + tests/sysroot.at EXTRA_DIST += $(srcdir)/$(TESTSUITE) $(TESTSUITE_AT) $(srcdir)/tests/package.m4 diff --git a/tests/sysroot.at b/tests/sysroot.at new file mode 100644 index 0000000..be9fa58 --- /dev/null +++ b/tests/sysroot.at @@ -0,0 +1,201 @@ +# static.at -- test flags for sysrooting -*- Autotest -*- +# +# Copyright (C) 2009 Free Software Foundation, Inc. +# Written by Paolo Bonzini, 2009 +# +# 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. +#### + +m4_define([SYSROOT_TEST], [ +AT_SETUP([$1]) +AT_KEYWORDS([libtool sysroot]) + +gcc_sysroot=`$CC --print-sysroot 2> /dev/null` +if test $? != 0; then + gcc_sysroot= +fi +AT_CHECK([test -n "$gcc_sysroot" || exit 77]) + +# Detect installation prefix for the compiler +prefix= +for i in crt1.o crt2.o crti.o; do + j=`$CC --print-file-name $i 2> /dev/null` + test $? = 0 || continue + case "$j" in + $gcc_sysroot*/lib/$i) + prefix=`echo "$j" | sed "s,^$gcc_sysroot\\(.*\\)/lib/$i\$,\\1,"` + break ;; + esac +done +AT_CHECK([test -n "$prefix" || exit 77]) + +sysroot=`pwd`/sys-root + +# difficult to use AS_DIRNAME inside the AT_CHECK macro, so +# encapsulate as a shell function. +local_dirname() { + AS_DIRNAME(["$[]1"]) +} + +AT_CHECK([ +(cd "$gcc_sysroot" && find ".$prefix/bin" ".$prefix/lib" \! -type d) | \ +while read file; do + dir=`local_dirname "$sysroot/$file"` + test -d "$dir" || mkdir -p "$dir" + ln -sf "$gcc_sysroot/$file" "$sysroot/$file" +done]) + +LDFLAGS="$LDFLAGS --sysroot=$sysroot -no-undefined" +configure_options="$configure_options --with-sysroot=$sysroot --prefix=$prefix" + +#??? +if test "$shlibpath_var" = PATH; then + configure_options="$configure_options --libdir=/$prefix/bin" +fi + +AT_CHECK([mkdir lib1 lib2 prog]) + +# Build and install package 1. +AT_DATA([lib1/configure.ac], +[[AC_INIT([lib1], [1.0]) +AM_INIT_AUTOMAKE([foreign]) +AC_PROG_CC +AC_CONFIG_SRCDIR([lib1.c]) +LT_INIT +AC_OUTPUT(Makefile) +]]) + +AT_DATA([lib1/Makefile.am], +[[lib_LTLIBRARIES = lib1.la +lib1_la_SOURCES = lib1.c +lib1_la_LDFLAGS = -rpath $(libdir) +]]) + +AT_DATA([lib1/lib1.c], +[[#include <string.h> +#include <stdlib.h> +char *f(const char *s) +{ + return strdup (s); +} +]]) + +cd lib1 +LT_AT_BOOTSTRAP([], [-I $abs_top_srcdir/libltdl/m4], [ignore], + [--add-missing], [], [], [all]) + +AT_CHECK([$MAKE install DESTDIR=$sysroot], [0], [ignore], [ignore]) +AT_CHECK([test -f "$sysroot/$prefix/lib/lib1.la"]) +AT_CHECK([grep -F "$sysroot" "$sysroot/$prefix/lib/lib1.la"], [1]) +cd .. + +# Build and install package 2. +AT_DATA([lib2/configure.ac], +[[AC_INIT([lib2], [1.0]) +AM_INIT_AUTOMAKE([foreign]) +AC_PROG_CC +AC_CONFIG_SRCDIR([lib2.c]) +LT_INIT +sysroot=$with_sysroot +AC_SUBST([sysroot]) +AC_OUTPUT(Makefile) +]]) + +AT_DATA([lib2/Makefile.am], +[[lib_LTLIBRARIES = lib2.la +lib2_la_SOURCES = lib2.c +lib2_la_LDFLAGS = -rpath $(libdir) +lib2_la_LIBADD = $2]1[$3 +]]) + +AT_DATA([lib2/lib2.c], +[[#include <stdio.h> +#include <string.h> +#include <stdlib.h> +char *g(const char *s) +{ + char *q = f(s); + puts (q); + return q; +} +]]) + +cd lib2 +LT_AT_BOOTSTRAP([], [-I $abs_top_srcdir/libltdl/m4], [ignore], + [--add-missing], [], [], [all]) + +AT_CHECK([$MAKE install DESTDIR=$sysroot], [0], [ignore], [ignore]) +AT_CHECK([test -f $sysroot/$prefix/lib/lib2.la]) +AT_CHECK([grep -F "$sysroot" "$sysroot/$prefix/lib/lib2.la"], [1]) +cd .. + +# Build and install a program. +AT_DATA([prog/configure.ac], +[[AC_INIT([prog], [1.0]) +AM_INIT_AUTOMAKE([foreign]) +AC_PROG_CC +AC_CONFIG_SRCDIR([prog.c]) +LT_INIT +sysroot=$with_sysroot +AC_SUBST([sysroot]) +AC_OUTPUT(Makefile) +]]) + +AT_DATA([prog/Makefile.am], +[[bin_PROGRAMS = prog +prog_SOURCES = prog.c +prog_LDADD = $2]2[$3 +]]) + +AT_DATA([prog/prog.c], +[[#include <stdio.h> +#include <string.h> +#include <stdlib.h> +int main() +{ + char *q = g("hello world"); + free (q); + return 0; +} +]]) + +cd prog +LT_AT_BOOTSTRAP([], [-I $abs_top_srcdir/libltdl/m4], [ignore], + [--add-missing], [], [], [all]) + +AT_CHECK([$MAKE install DESTDIR=$sysroot], [0], [ignore], [ignore]) +AT_CHECK([test -f $sysroot/$prefix/bin/prog$EXEEXT]) +AT_CHECK([grep -F "$sysroot" "$sysroot/$prefix/bin/prog$EXEEXT"], [1]) + +# missing tests +# 1) pass absolute .la files +# 2) pass absolute -L +# 2) pass relative .la files + +cd .. +AT_CLEANUP +]) + +AT_BANNER([sysroot tests]) +SYSROOT_TEST([-L=.../lib -l], [-L=$(libdir) -l], []) +SYSROOT_TEST([-L SYSROOT/.../lib -l], [-L$(sysroot)$(libdir) -l], []) +SYSROOT_TEST([SYSROOT/.../*.la], [$(sysroot)$(libdir)/lib], [.la]) + +dnl This one does not make sense. +dnl SYSROOT_TEST([=.../*.la], [=$(libdir)/lib], [.la]) -- 1.7.1