# recursive.at -- test recursive Automake libltdl build       -*- Autotest -*-
#
#   Copyright (C) 2005, 2008 Free Software Foundation, Inc.
#   Written by Gary V. Vaughan, 2005
#
#   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([Recursive Automake Libltdl.])

# _LT_AT_LTDL_SETUP
# -----------------
m4_pushdef([_LT_AT_LTDL_SETUP],
[AT_DATA([configure.ac],
[[AC_INIT([subdirectory-demo], ]AT_PACKAGE_VERSION[, ]AT_PACKAGE_BUGREPORT[)
LT_CONFIG_LTDL_DIR([ltdl])
AC_CONFIG_AUX_DIR([ltdl/config])
AC_CONFIG_MACRO_DIR([ltdl/m4])
AC_CONFIG_LIBOBJ_DIR([ltdl])
AC_CONFIG_HEADERS([config.h:config.hin])
AM_INIT_AUTOMAKE([foreign])
LT_INIT
LTDL_INIT([recursive])
AC_CONFIG_FILES([Makefile ltdl/Makefile])
AC_OUTPUT
]])

AT_DATA([Makefile.am],
[[ACLOCAL_AMFLAGS = -I ltdl/m4
AUTOMAKE_OPTIONS = 1.7
SUBDIRS = ltdl
lib_LTLIBRARIES = foo.la
foo_la_LDFLAGS = -module -avoid-version -no-undefined
foo_la_SOURCES = foo.c
]])

echo 'int dummy = 0;' > foo.c
])# _LT_AT_LTDL_SETUP

## ------------------------ ##
## Softlinked libltdl tree. ##
## ------------------------ ##

AT_SETUP([compiling softlinked libltdl])

_LT_AT_LTDL_SETUP

LT_AT_LIBTOOLIZE([--ltdl])
AT_CHECK([if test -f ltdl/configure.ac; then false; fi])

LT_AT_AUTORECONF([--force --verbose --install])
LT_AT_CONFIGURE
LT_AT_MAKE([all $tst_dist])

AT_CHECK([test -f ltdl/libltdlc.la])

AT_CLEANUP


## -------------------- ##
## Copied libltdl tree. ##
## -------------------- ##

AT_SETUP([compiling copied libltdl])

_LT_AT_LTDL_SETUP

LT_AT_LIBTOOLIZE([--copy --ltdl])
AT_CHECK([if test -f ltdl/configure.ac; then false; fi])

LT_AT_AUTORECONF([--force --verbose --install])
LT_AT_CONFIGURE
LT_AT_MAKE([all $tst_dist])

AT_CHECK([test -f ltdl/libltdlc.la])

AT_CLEANUP


## ------------------------- ##
## Installable libltdl tree. ##
## ------------------------- ##

AT_SETUP([installable libltdl])

_LT_AT_LTDL_SETUP

prefix=`pwd`/_inst

LT_AT_LIBTOOLIZE([--copy --ltdl])
AT_CHECK([if test -f ltdl/configure.ac; then false; fi])

LT_AT_AUTORECONF([--force --verbose --install])
LT_AT_CONFIGURE([--enable-ltdl-install --prefix=$prefix])
LT_AT_MAKE([all install $tst_dist])

AT_CHECK([test -f $prefix/lib/libltdl.la])
AT_CHECK([test -f $prefix/include/ltdl.h])

AT_CLEANUP

dnl Be careful not to let the definition leak into other tests
m4_popdef([_LT_AT_LTDL_SETUP])
