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

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

AT_SETUP([compiling softlinked libltdl])

LT_AT_CHECK_LIBTOOLIZE([--ltdl=.], [], [ignore])
LT_AT_CONFIGURE
LT_AT_MAKE([all $tst_dist])

AT_CHECK([test -f libltdlc.la])

AT_CLEANUP


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

AT_SETUP([compiling copied libltdl])

LT_AT_CHECK_LIBTOOLIZE([--copy --ltdl=.], [], [ignore])
LT_AT_CONFIGURE
LT_AT_MAKE([all $tst_dist])

AT_CHECK([test -f libltdlc.la])

AT_CLEANUP


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

AT_SETUP([installable libltdl])

prefix=`pwd`/_inst

LT_AT_CHECK_LIBTOOLIZE([--copy --ltdl=.], [], [ignore])
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


## ----------------------------------------------- ##
## libltdl is usable without Autoconf or Automake. ##
## ----------------------------------------------- ##

AT_SETUP([linking libltdl without autotools])

_LTDL_PROJECT_FILES([libltdl])
LT_AT_CHECK_LIBTOOLIZE([--copy --ltdl], [], [ignore])
LT_AT_MAKE([], [CC="$CC" LIBTOOLFLAGS="$LIBTOOLFLAGS" CPPFLAGS="$CPPFLAGS" \
        CFLAGS="$CFLAGS" LDFLAGS="$LDFLAGS" \
	CONFIGURE_OPTIONS="$configure_options"])

LT_AT_EXEC_CHECK([./ltdldemo], 0, [ignore])

AT_CLEANUP
