# am-subdir.at -- libtool subdir-objects support              -*- Autotest -*-

#   Copyright (C) 2004, 2008 Free Software Foundation, Inc.
#   Written by Gary V. Vaughan, 2004
#
#   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([Libtool subdir-objects support.])


## ----------- ##
## C Language. ##
## ----------- ##

AT_SETUP([C subdir-objects])

AT_DATA([[configure.ac]],
[[AC_INIT([subdir-demo], ]]AT_PACKAGE_VERSION[[, ]]AT_PACKAGE_BUGREPORT[[)
AM_INIT_AUTOMAKE
LT_INIT([win32-dll])
AC_PROG_CC
AM_PROG_CC_C_O
AC_CONFIG_FILES([Makefile])
AC_OUTPUT
]])

AT_DATA([[Makefile.am]],
[[ACLOCAL_AMFLAGS = -I m4
AUTOMAKE_OPTIONS = subdir-objects foreign 1.6
AM_CPPFLAGS	= -I$(top_srcdir)/../..

lib_LTLIBRARIES		= subdir/libsub.la
subdir_libsub_la_SOURCES= subdir/sub.c

bin_PROGRAMS		= subdir/subdemo
subdir_subdemo_SOURCES	= subdir/main.c
subdir_subdemo_LDADD	= subdir/libsub.la
]])

test -d subdir || { rm -f subdir && mkdir subdir; }

AT_DATA([[subdir/main.c]],
[[#include <stdio.h>

extern void sub (void);

int main (void)
{
  printf ("Welcome to GNU Libtool subdir-objects test!\n");
  sub();
  return 0;
}
]])

AT_DATA([[subdir/sub.c]],
[[#include <stdio.h>
void sub (void) { printf ("** This is libsub **\n"); }
]])

LT_AT_BOOTSTRAP([--copy], [-I m4], [ignore], [--add-missing])

LT_AT_EXEC_CHECK([subdir/subdemo], 0, stdout)
AT_CHECK([grep 'Welcome to GNU Libtool subdir-objects test' stdout],
	 [], [ignore])
AT_CHECK([grep 'This is libsub' stdout],
	 [], [ignore])

AT_CLEANUP


## ------------- ##
## C++ Language. ##
## ------------- ##

AT_SETUP([C++ subdir-objects])
LT_AT_TAG([CXX])

AT_DATA([[configure.ac]],
[[AC_INIT([subdir-demo], ]]AT_PACKAGE_VERSION[[, ]]AT_PACKAGE_BUGREPORT[[)
AM_INIT_AUTOMAKE
AC_PROG_CC
AM_PROG_CC_C_O
AC_PROG_CXX
AC_PROG_CXXCPP

AC_LANG([C++])
LT_INIT([win32-dll])

AC_CONFIG_FILES([Makefile])
AC_OUTPUT
]])

AT_DATA([[Makefile.am]],
[[ACLOCAL_AMFLAGS = -I m4
AUTOMAKE_OPTIONS = subdir-objects foreign 1.6
AM_CPPFLAGS	= -I$(top_srcdir)/../..

lib_LTLIBRARIES		= subdir/libsub.la
subdir_libsub_la_SOURCES= subdir/sub.cxx subdir/sub.hxx

bin_PROGRAMS		= subdir/subdemo
subdir_subdemo_SOURCES	= subdir/main.cxx
subdir_subdemo_LDADD	= subdir/libsub.la
]])

test -d subdir || { rm -f subdir && mkdir subdir; }

AT_DATA([[subdir/sub.hxx]],
[[class libsub { public: int sub (void); };
]])

AT_DATA([[subdir/main.cxx]],
[[#include "sub.hxx"

int main (void)
{
  libsub SUB;
  return SUB.sub() != 27;
}
]])

AT_DATA([[subdir/sub.cxx]],
[[#include "sub.hxx"

int libsub::sub (void) { return 27; }
]])

LT_AT_BOOTSTRAP([--copy], [-I m4], [ignore], [--add-missing])

LT_AT_EXEC_CHECK([subdir/subdemo], 0)

AT_CLEANUP
