| Back to the Main Page. | Download the M4 Source. |
BNV_HAVE_QT [--with-Qt-includes=DIR] [--with-Qt-dir=DIR]
1.1 (2001/07/26) Installed_Packages @ ac-archive-0.5.32
Bastiaan N. Veelo <Bastiaan.N.Veelo@immtek.ntnu.no>
Search for Trolltech's Qt GUI framework.
Searches common directories for Qt include files, libraries and the meta object compiler. If one of the options is given, the search is started in the given directory. If both options are given, no checks are performed and the cache is not consulted nor altered.
The following shell variable is set to either "yes" or "no":
have_qt
Additionally, the following variables are exported:
QT_CXXFLAGS
QT_LIBS
QT_MOC
QT_DIR
which contain an "-I" flag pointing to the Qt include directory, link flags necessary to link with Qt and X, the name of the meta object compiler with full path, and the variable QTDIR as Trolltech likes to see it defined, respectively.
Example lines for Makefile.in:
CXXFLAGS = @QT_CXXFLAGS@
MOC = @QT_MOC@
After the variables have been set, a trial compile and link is performed to check the correct functioning of the meta object compiler. If this test fails, a warning appears in the output of configure, but the variables remain defined.
No common variables such as $LIBS or $CFLAGS are polluted.
Options:
--with-Qt-includes=DIR: DIR should point to where the Qt includes can be found, as in -IDIR.
--with-Qt-dir=DIR: DIR should point to the "QTDIR", i.e., libraries are in DIR/lib/.
If at least one of the options "=no" or, equivalently, --without-Qt-includes and/or --without-Qt-dir is given, "have_qt" is set to "no" and the other variables are set to the empty string.
Calls BNV_PATH_QT_DIRECT as a subroutine.
AC_DEFUN([BNV_HAVE_QT],
[
AC_REQUIRE([AC_PROG_CXX])
AC_REQUIRE([AC_PATH_X])
AC_REQUIRE([AC_PATH_XTRA])
AC_MSG_CHECKING(for Qt)
AC_ARG_WITH([Qt-includes],
[ --with-Qt-includes=DIR Qt include files are in DIR])
AC_ARG_WITH([Qt-dir],
[ --with-Qt-dir=DIR Qt library file is in DIR/lib/])
if test x"$with_Qt_includes" = x"no" || test x"$with_Qt_dir" = x"no"; then
# user disabled Qt. Leave cache alone.
have_qt="User disabled Qt."
else
# "yes" is a bogus option
if test "x$with_Qt_includes" = xyes; then
with_Qt_includes=
fi
if test "x$with_Qt_dir" = xyes; then
with_Qt_dir=
fi
if test "x$with_Qt_includes" != x && test "x$with_Qt_dir" != x; then
# Both values are set, no need to search
have_qt=yes
bnv_qt_includes="$with_Qt_includes"
bnv_qt_dir="$with_Qt_dir"
bnv_qt_LIBS="-lqt $X_PRE_LIBS $X_LIBS -lX11 -lXext -lXmu -lXt -lXi $X_EXTRA_LIBS"
if test x"$with_Qt_dir" != x; then
bnv_qt_LIBS="-L$with_Qt_dir/lib $bnv_qt_LIBS"
fi
else
# Use cached value or do search, starting with suggestions from
# the command line
AC_CACHE_VAL(bnv_cv_have_qt,
[
# One or both of the vars are not set, and there is no cached value.
bnv_qt_includes=NO bnv_qt_dir=NO
BNV_PATH_QT_DIRECT
if test "$bnv_qt_includes" = NO || test "$bnv_qt_dir" = NO; then
# Didn't find Qt anywhere. Cache the known absence of Qt.
bnv_cv_have_qt="have_qt=no"
else
# Record where we found Qt for the cache.
bnv_cv_have_qt="have_qt=yes \
bnv_qt_includes=$bnv_qt_includes \
bnv_qt_dir=$bnv_qt_dir \
bnv_qt_LIBS=\"$bnv_qt_LIBS\""
fi
])dnl
eval "$bnv_cv_have_qt"
fi # all $bnv_qt_* are set
fi # $have_qt reflects the system status
if test x"$have_qt" = xyes; then
QT_CXXFLAGS="-I$bnv_qt_includes"
QT_DIR="$bnv_qt_dir"
QT_LIBS="$bnv_qt_LIBS"
QT_MOC="$bnv_qt_dir/bin/moc"
AC_MSG_RESULT([$have_qt:
QT_CXXFLAGS=$QT_CXXFLAGS
QT_LIBS=$QT_LIBS
QT_MOC=$QT_MOC])
else
QT_CXXFLAGS=
QT_DIR=
QT_LIBS=
QT_MOC=
AC_MSG_RESULT($have_qt)
fi
AC_SUBST(QT_CXXFLAGS) AC_SUBST(QT_DIR) AC_SUBST(QT_LIBS) AC_SUBST(QT_MOC)
#### Being paranoid:
AC_MSG_CHECKING(the Qt meta object compiler)
AC_CACHE_VAL(bnv_cv_qt_test_result,
[
cat > bnv_qt_test.h << EOF
#include <qobject.h>
class Test : public QObject
{
Q_OBJECT
public:
Test() {}
~Test() {}
public slots:
void receive() {}
signals:
void send();
};
EOF
cat > bnv_qt_main.$ac_ext << EOF
#include "bnv_qt_test.h"
#include <qapplication.h>
int main( int argc, char **argv )
{
QApplication app( argc, argv );
Test t;
QObject::connect( &t, SIGNAL(send()), &t, SLOT(receive()) );
}
EOF
bnv_cv_qt_test_result="failure"
bnv_try_1="$QT_MOC bnv_qt_test.h -o moc_bnv_qt_test.$ac_ext >/dev/null 2>bnv_qt_test_1.out"
AC_TRY_EVAL(bnv_try_1)
bnv_err_1=`grep -v '^ *+' bnv_qt_test_1.out | grep -v "^bnv_qt_test.h\$"`
if test -n "$bnv_err_1"; then
echo "$bnv_err_1" >&AC_FD_CC
echo "configure: could not run $QT_MOC on:" >&AC_FD_CC
cat bnv_qt_test.h >&AC_FD_CC
else
bnv_try_2="$CXX $QT_CXXFLAGS -c $CXXFLAGS -o moc_bnv_qt_test.o moc_bnv_qt_test.$ac_ext >/dev/null 2>bnv_qt_test_2.out"
AC_TRY_EVAL(bnv_try_2)
bnv_err_2=`grep -v '^ *+' bnv_qt_test_2.out | grep -v "^bnv_qt_test.{$ac_ext}\$"`
if test -n "$bnv_err_2"; then
echo "$bnv_err_2" >&AC_FD_CC
echo "configure: could not compile:" >&AC_FD_CC
cat bnv_qt_test.$ac_ext >&AC_FD_CC
else
bnv_try_3="$CXX $QT_CXXFLAGS -c $CXXFLAGS -o bnv_qt_main.o bnv_qt_main.$ac_ext >/dev/null 2>bnv_qt_test_3.out"
AC_TRY_EVAL(bnv_try_3)
bnv_err_3=`grep -v '^ *+' bnv_qt_test_3.out | grep -v "^bnv_qt_main.{$ac_ext}\$"`
if test -n "$bnv_err_3"; then
echo "$bnv_err_3" >&AC_FD_CC
echo "configure: could not compile:" >&AC_FD_CC
cat bnv_qt_main.$ac_ext >&AC_FD_CC
else
bnv_try_4="$CXX $QT_LIBS $LIBS -o bnv_qt_main bnv_qt_main.o moc_bnv_qt_test.o >/dev/null 2>bnv_qt_test_4.out"
AC_TRY_EVAL(bnv_try_4)
bnv_err_4=`grep -v '^ *+' bnv_qt_test_4.out`
if test -n "$bnv_err_4"; then
echo "$bnv_err_4" >&AC_FD_CC
else
bnv_cv_qt_test_result="succes"
fi
fi
fi
fi
])dnl AC_CACHE_VAL bnv_cv_qt_test_result
AC_MSG_RESULT([$bnv_cv_qt_test_result]);
if test x"$bnv_cv_qt_test_result" = "xfailure"; then
AC_MSG_WARN([Your Qt installation seems to be broken!])
fi
rm -f bnv_qt_test.h moc_bnv_qt_test.$ac_ext moc_bnv_qt_test.o \
bnv_qt_main.$ac_ext bnv_qt_main.o bnv_qt_main \
bnv_qt_test_1.out bnv_qt_test_2.out bnv_qt_test_3.out bnv_qt_test_4.out
])
dnl Internal subroutine of BNV_HAVE_QT
dnl Set bnv_qt_includes bnv_qt_dir.
dnl Copyright 2001 Bastiaan N. Veelo <Bastiaan.N.Veelo@immtek.ntnu.no>
AC_DEFUN(BNV_PATH_QT_DIRECT,
[
## Look for include files ##
qt_direct_test_header=qapplication.h
# First, try using that file with no special directory specified.
AC_TRY_CPP([#include <$qt_direct_test_header>],
[
# Success.
# We can compile using Qt headers with no special include directory.
bnv_qt_includes=
], [
# That did not work.
echo "Non-critical error, please neglect the above." >&AC_FD_CC
# Look for the header file in a standard set of common directories.
bnv_include_path_list="
$with_Qt_include
/usr/include/qt
/usr/lib/qt2/include
/usr/lib/qt1g/include
`ls -d /usr/local/qt*/include 2>/dev/null`
"
for bnv_dir in $bnv_include_path_list; do
if test -r "$bnv_dir/$qt_direct_test_header"; then
bnv_qt_includes=$bnv_dir
break
fi
done
])
## Look for Qt directory ##
qt_direct_test_library=qt
qt_direct_test_main="
int argc;
char ** argv;
QApplication app(argc,argv);
"
# See if we find the library without any special options.
# Don't add top $LIBS permanently yet
bnv_save_LIBS="$LIBS"
LIBS="-l$qt_direct_test_library $X_PRE_LIBS $X_LIBS -lX11 -lXext -lXmu -lXt -lXi $X_EXTRA_LIBS"
bnv_qt_LIBS="$LIBS"
AC_TRY_LINK([#include <$qt_direct_test_header>],
$qt_direct_test_main,
[
# Succes.
# We can link with no special library directory.
bnv_qt_dir=
], [
# That did not work.
echo "Non-critical error, please neglect the above." >&AC_FD_CC
# Look for the Qt dir in a standard set of common directories.
bnv_dir_list="
$with_Qt_dir
/usr
/usr/lib/qt
/usr/lib/qt2
/usr/lib/qt1g
`ls -d /usr/local/qt* 2>/dev/null`
"
for bnv_dir in $bnv_dir_list; do
for bnv_ext in a so sl; do
if test -r $bnv_dir/lib/lib${qt_direct_test_library}.$bnv_ext; then
bnv_qt_dir=$bnv_dir
break 2
fi
done
done
])
QT_DIR=$bnv_qt_dir
if test -z $bnv_qt_dir; then
QT_LIBS=$LIBS
# when the library is in $LD_PATH then moc can be assumed to be in $PATH:
QT_MOC=moc
else
QT_LIBS="-L$bnv_qt_dir/lib $LIBS"
QT_MOC="$bnv_qt_dir/moc"
fi
LIBS="$bnv_save_LIBS"
])