Newer
Older
#! /bin/sh
# $Id$
# checks for dune-headers and everything they need
# TODO
#
# - use pkg-config if --enable-localdune is not provided
# #export PKG_CONFIG_LIBDIR=$with_dune/dune
# #PKG_CHECK_MODULES(DUNE, dune)
AC_DEFUN([DUNE_CHECK_MODULES],[
AC_REQUIRE([AC_PROG_CXX])
AC_REQUIRE([AC_PROG_CXXCPP])
# ____DUNE_CHECK_MODULES_____ ($1)
AC_DEFUN([_dune_module], [$1])
AC_DEFUN([_dune_header], [$2])
AC_DEFUN([_dune_ldpath], [$3])
AC_DEFUN([_dune_lib], [$4])
AC_DEFUN([_dune_symbol], [$5])
AC_DEFUN([_DUNE_MODULE], [m4_toupper(_dune_module)])
# switch tests to c++
AC_LANG_PUSH([C++])
# the usual option...
AC_ARG_WITH([_dune_module],
AC_HELP_STRING([--with-_dune_module=PATH],[_dune_module directory]))
# backup of flags
ac_save_CPPFLAGS="$CPPFLAGS"
if test x$withval != x ; then
if test -d $withval ; then
_DUNE_MODULE[]ROOT=`cd $withval && pwd`
# expand search path (otherwise empty CPPFLAGS)
_DUNE_MODULE[]_CPPFLAGS="-I$_DUNE_MODULE[]ROOT"
AC_MSG_ERROR([_dune_module-directory $withval does not exist])
fi
CPPFLAGS="$DUNE_CPPFLAGS $_DUNE_MODULE[]_CPPFLAGS"
# test for an arbitrary header
AC_CHECK_HEADER([dune/[]_dune_header],
[HAVE_[]_DUNE_MODULE=1
_DUNE_MODULE[]_CPPFLAGS="$CPPFLAGS"],
_DUNE_MODULE[]_CPPFLAGS=""
AC_MSG_ERROR([$withval does not seem to contain a valid _dune_module (dune/[]_dune_header not found)])]
)
## check for lib (if lib name was provided)
ifelse(_dune_lib,,[echo _dune_module does not provide libs],[
# did we find the headers?
if test x$HAVE[]_DUNE_MODULE = x1 ; then
ac_save_LDFLAGS="$LDFLAGS"
ac_save_LIBS="$LIBS"
## special test for a local installation
if test x$_DUNE_MODULE[]ROOT != x ; then
# have a look into the dune module directory
LDFLAGS="$LDFLAGS -L$_DUNE_MODULE[]ROOT/dune/_dune_ldpath"
# only check for a .la-file
if test -s $_DUNE_MODULE[]ROOT/_dune_ldpath/lib[]_dune_lib[].la ; then
_DUNE_MODULE[]_LDFLAGS="-L$_DUNE_MODULE[]ROOT/_dune_ldpath"
echo found lib[]_dune_lib.la, setting LDFLAGS to _DUNE_MODULE[]_LDFLAGS
# provide arguments like normal lib-check
_DUNE_MODULE[]_LIBS="-l[]_dune_lib"
HAVE_[]_DUNE_MODULE=1
else
AC_MSG_ERROR([$withval does not seem to contain a valid _dune_module (lib[]_dune_lib[].la not found)])
fi
## normal test for a systemwide install
if test x$HAVE[]_DUNE_MODULE = x0 ; then
# !!! should be pkg-config later (which would save the special
# header-check as well)
# Beware! Untested!!!
LIBS="-l[]_dune_lib"
AC_TRY_LINK(,_dune_symbol,
[HAVE_[]_DUNE_MODULE=1
_DUNE_MODULE[]_LIBS="$LIBS"],
[HAVE_[]_DUNE_MODULE=0
AC_MSG_ERROR([failed to link with lib[]_dune_lib[].la])]
)
fi
# reset variables
LDFLAGS="$ac_save_LDFLAGS"
LIBS="$ac_save_LIBS"
# did we succeed?
if test x$HAVE_[]_DUNE_MODULE = x1 ; then
# set variables for our modules
AC_SUBST(_DUNE_MODULE[]_CPPFLAGS, "$_DUNE_MODULE[]_CPPFLAGS")
AC_SUBST(_DUNE_MODULE[]_LDFLAGS, "$_DUNE_MODULE[]_LDFLAGS")
AC_SUBST(_DUNE_MODULE[]_LIBS, "$_DUNE_MODULE[]_LIBS")
AC_SUBST(_DUNE_MODULE[]ROOT, "$_DUNE_MODULE[]ROOT")
AC_DEFINE(HAVE_[]_DUNE_MODULE, 1, [Define to 1 if _dune_module was found])
# set DUNE_* variables
AC_SUBST(DUNE_CPPFLAGS, "$DUNE_CPPFLAGS $_DUNE_MODULE[]_CPPFLAGS")
AC_SUBST(DUNE_LDFLAGS, "$DUNE_LDFLAGS $_DUNE_MODULE[]_LDFLAGS")
AC_SUBST(DUNE_LIBS, "$DUNE_LIBS $_DUNE_MODULE[]_LIBS")
# add to global list
DUNE_PKG_CPPFLAGS="$DUNE_PKG_CPPFLAGS $DUNE_CPPFLAGS"
DUNE_PKG_LIBS="$DUNE_PKG_LIBS $LIBS"
DUNE_PKG_LDFLAGS="$DUNE_PKG_LDFLAGS $DUNE_LDFLAGS"
fi
# reset previous flags
CPPFLAGS="$ac_save_CPPFLAGS"
# restore previous language settings (leave C++)
AC_LANG_POP([C++])
AC_DEFUN([DUNE_CHECK_DISPATCH],[
ifelse([$1], [], [],
[$1], [dunecommon],[
DUNE_CHECK_MODULES([dunecommon], [common/stdstreams.hh], [common], [common], [Dune::derr.active();])],
[$1], [dunegrid],[
DUNE_CHECK_MODULES([dunegrid], [grid/common/grid.hh], [grid], [grid], [Dune::PartitionName])],
[$1], [duneistl],[
DUNE_CHECK_MODULES([duneistl], [istl/allocator.hh],,,)],
[$1], [dunedist],[
DUNE_CHECK_MODULES([dunedisc], [disc/functions/functions.hh], [disc], [disc], [Dune::LagrangeShapeFunctions<double, double, 3>::general])],
[AC_MSG_ERROR([Unknown module $1])])
])
AC_DEFUN([DUNE_DEV_MODE],[
AC_ARG_ENABLE(dunedevel,
AC_HELP_STRING([--enable-dunedevel],[activate Dune-Developer-mode]))
if test x"$enable_dunedevel" = xyes ; then
AC_DEFINE(DUNE_DEVEL_MODE, 1, [Activates developer output])
fi
])
AC_DEFUN([DUNE_MODULE_DEPENDENCIES],[
ifelse($#, 0, , $#, 1, [DUNE_CHECK_DISPATCH($1)], [DUNE_CHECK_DISPATCH($1) DUNE_MODULE_DEPENDENCIES(m4_shift($@))])
])
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
AC_DEFUN([DUNE_SYMLINK],[
# create symlink for consistent paths even when $(top_srcdir) is not
# called dune/ (if filesystem/OS supports symlinks)
AC_PROG_LN_S
if test x"$LN_S" = x"ln -s" ; then
# Symlinks possible!
# Note: we are currently in the build directory which may be != the
# source directory
# does a file already exist?
if test -e dune ; then
# exists: is a symlink?
if test -L dune ; then
if ! test -r dune/$ac_unique_file ; then
AC_MSG_ERROR([Symlink 'dune' exists but appears to be wrong! Please remove it manually])
fi
fi
else
echo Creating dune-symlink...
# set symlink in build directory to sources
ln -s $srcdir dune
# sanity check
if ! test -r dune/$ac_unique_file ; then
AC_MSG_ERROR([Sanity check for symlink failed! Please send a bugreport to dune@hal.iwr.uni-heidelberg.de])
fi
fi
else
# no symlinks possible... check name of directory
AC_MSG_ERROR([No symlinks supported! You have to install dune. No inplace usage possible!])
fi
])