| # Copyright (C) 2001 David Johnson |
| # This file is free software; the author gives unlimited permission to copy |
| # and/or distribute it, with or without modifications, as long as this notice |
| # is preserved. |
| |
| # FUN_TYPE BOOL |
| # check for a built-in bool type |
| # HAVE_BOOL will be defined in the config header |
| |
| AC_DEFUN([FUN_TYPE_BOOL], |
| [ |
| AC_REQUIRE([AC_PROG_CXX]) |
| |
| AC_LANG_PUSH(C++) |
| AC_CHECK_TYPE(bool, ac_check_bool=yes, ac_check_bool=no) |
| AC_LANG_POP(C++) |
| if test "x$ac_check_bool" = "xyes" ; then |
| AC_DEFINE(HAVE_BOOL,,[define if bool is a built-in type]) |
| fi |
| |
| AH_BOTTOM([#ifndef HAVE_BOOL]) |
| AH_BOTTOM([enum booltyp { false, true }; typedef enum booltyp bool;]) |
| AH_BOTTOM([#endif]) |
| ])# FUN_TYPE_BOOL |
| |
| # FUN_HEADER_STDCXX |
| # check for standard ISO C++ headers |
| |
| AC_DEFUN([FUN_HEADER_STDCXX], |
| [ |
| AC_REQUIRE([AC_PROG_CXX]) |
| |
| AC_LANG_PUSH(C++) |
| |
| ac_check_headers=no |
| AC_CHECK_HEADER(cstdlib, |
| ac_check_headers=yes, |
| ac_check_headers=no) |
| AC_CHECK_HEADER(cstring, |
| ac_check_headers=$ac_check_headers, |
| ac_check_headers=no) |
| AC_CHECK_HEADER(iostream, |
| ac_check_headers=$ac_check_headers, |
| ac_check_headers=no) |
| |
| AC_LANG_POP(C++) |
| |
| if test "x$ac_check_headers" = "xno" ; then |
| AC_MSG_ERROR(standard ISO C++ headers not found!) |
| fi |
| ])#FUN_HEADER_STDCXX |
| |
| # FUN_CHECK_PTHREAD |
| # check for posix pthreads |
| # sets PTHREAD_LIBS and PTHREAD_CFLAGS |
| # sets HAVE_PTHREADS in the configuration header |
| |
| AC_DEFUN([FUN_CHECK_PTHREAD], |
| [ |
| AC_REQUIRE([AC_CANONICAL_HOST]) |
| AC_REQUIRE([AC_PROG_CC]) |
| |
| PTHREAD_LIBS="" |
| PTHREAD_CFLAGS="" |
| |
| AC_ARG_ENABLE(threads, AC_HELP_STRING([--enable-threads], |
| [enable the use of the threads [[default=no]]]), |
| ac_use_threads=$enableval, ac_use_threads=no) |
| |
| if test "x$ac_use_threads" = "xyes" ; then |
| |
| AC_CHECK_HEADER(pthread.h, ac_posix_threads=yes, ac_posix_threads=no) |
| |
| if test "x$ac_posix_threads" = "xyes" ; then |
| |
| AC_MSG_CHECKING([whether ${CC} accepts -pthread]) |
| ac_cflags_save="$CFLAGS" |
| CFLAGS="$CFLAGS -pthread" |
| AC_TRY_COMPILE([#include <pthread.h>], [pthread_attr_init(0)], |
| ac_cc_pthread=yes, ac_cc_pthread=no) |
| CFLAGS="$ac_cflags_save" |
| |
| if test "x$ac_cc_pthread" = "xyes" ; then |
| AC_MSG_RESULT([yes]) |
| PTHREAD_CFLAGS="-pthread" |
| else |
| AC_MSG_RESULT([no]) |
| ac_thread_library=none |
| |
| if test "x$ac_thread_library" = "xnone" ; then |
| AC_CHECK_LIB(c_r, pthread_self, ac_thread_library=c_r) |
| fi |
| if test "x$ac_thread_library" = "xnone" ; then |
| AC_CHECK_LIB(pthread, pthread_self, ac_thread_library=pthread) |
| fi |
| if test "x$ac_thread_library" = "xnone" ; then |
| AC_CHECK_LIB(pthreads, pthread_self, ac_thread_library=pthreads) |
| fi |
| if test "x$ac_thread_library" = "xnone" ; then |
| AC_CHECK_LIB(thread, pthread_self, ac_thread_library=thread) |
| fi |
| if test "x$ac_thread_library" = "xnone" ; then |
| AC_CHECK_LIB(gthreads, pthread_self, ac_thread_library=gthreads) |
| fi |
| if test "x$ac_thread_library" = "xnone" ; then |
| AC_CHECK_LIB(c, pthread_self, ac_thread_library=c) |
| fi |
| if test "x$ac_thread_library" = "xnone" ; then |
| ac_use_threads=no |
| else |
| PTHREAD_LIBS="-l$ac_thread_library" |
| fi |
| fi |
| else |
| ac_use_threads=no |
| fi |
| fi |
| |
| if test "x$ac_use_threads" = "xyes" ; then |
| AC_DEFINE(HAVE_PTHREAD, 1, [Define if you have POSIX threads]) |
| case $host_os in |
| aix* | freebsd*) |
| PTHREAD_CFLAGS="$PTHREAD_CFLAGS -D_THREAD_SAFE" |
| ;; |
| linux* | solaris*) |
| PTHREAD_CFLAGS="$PTHREAD_CFLAGS -D_REENTRANT" |
| ;; |
| *) |
| ;; |
| esac |
| fi |
| ])#FUN_CHECK_PTHREAD |
| |
| # FUN_CHECK_QT([qt_min_version],[qt_max_version]) |
| # check for qt headers, libs, progs and compilation |
| # substs QT_CXXFLAGS, QT_LDFLAGS, and QT_LIBS |
| # substs QTVERSION, MOC and UIC |
| # LIBQT, MOC and UIC 'precious' variables |
| |
| AC_DEFUN([FUN_CHECK_QT], |
| [ |
| AC_REQUIRE([AC_PROG_CXX]) |
| AC_REQUIRE([AC_PATH_X]) |
| AC_REQUIRE([AC_PATH_XTRA]) |
| AC_REQUIRE([FUN_CHECK_PTHREAD]) |
| |
| # some 'precious' variables for configure --help |
| AC_ARG_VAR(QTMIN, minimum version of Qt to search for e.g. 220) |
| AC_ARG_VAR(QTMAX, maximum version of Qt to search for e.g. 399) |
| AC_ARG_VAR(LIBQT, library flag for the Qt libary e.g. -lqt) |
| AC_ARG_VAR(MOC, QT meta object compiler command) |
| AC_ARG_VAR(UIC, Qt UI compiler command) |
| |
| AC_CACHE_SAVE |
| |
| AC_MSG_NOTICE([checking for Qt]) |
| |
| # process our args |
| if test -z "$1" ; then |
| qt_min_version=0 |
| else |
| qt_min_version=$1 |
| fi |
| if test -z "$2" ; then |
| qt_max_version=9999 |
| else |
| qt_max_version=$2 |
| fi |
| # adjust for user preferences |
| if test "x$QTMIN" != "x" ; then |
| if expr $QTMIN '>' $qt_min_version > /dev/null ; then |
| qt_min_version=$QTMIN; |
| fi |
| fi |
| if test "x$QTMAX" != "x" ; then |
| if expr $QTMAX '<' $qt_max_version > /dev/null ; then |
| qt_max_version=$QTMAX; |
| fi |
| fi |
| |
| # set up our configuration options |
| qt_dir="" |
| qt_includes="" |
| qt_libraries="" |
| qt_programs="" |
| AC_ARG_WITH([qt_dir], AC_HELP_STRING([--with-qt-dir=DIR], |
| [where the Qt package is installed]), |
| [ qt_dir="$withval" |
| qt_includes="$withval"/include |
| qt_libraries="$withval"/lib |
| qt_programs="$withval"/bin |
| ]) |
| AC_ARG_WITH([qt_includes], AC_HELP_STRING([--with-qt-includes=DIR], |
| [where the Qt includes are installed]), |
| [qt_includes="$withval"]) |
| AC_ARG_WITH([qt_libraries], AC_HELP_STRING([--with-qt-libraries=DIR], |
| [where the Qt libraries are installed]), |
| [qt_libraries="$withval"]) |
| AC_ARG_WITH([qt_programs], AC_HELP_STRING([--with-qt-programs=DIR], |
| [where the Qt programs are installed]), |
| [qt_programs="$withval"]) |
| |
| QTVERSION="000" |
| |
| FUN_QT_HEADERS |
| |
| # check for a traditional qt installation tree |
| if ls $qt_includes/../lib/libqt* > /dev/null 2> /dev/null; then |
| qt_dir="`echo $qt_includes | sed s,'/include',,`" |
| qt_libraries="$qt_dir/lib" |
| qt_programs="$qt_dir/bin" |
| fi |
| |
| FUN_QT_LIBRARIES |
| FUN_QT_PROGRAMS |
| FUN_QT_COMPILE |
| |
| AC_MSG_NOTICE([Found Qt version $QTVERSION]) |
| |
| AC_SUBST(QTVERSION) |
| AC_SUBST(MOC) |
| AC_SUBST(UIC) |
| QT_CXXFLAGS="-I$qt_includes" |
| AC_SUBST(QT_CXXFLAGS) |
| QT_LDFLAGS="-L$qt_libraries" |
| AC_SUBST(QT_LDFLAGS) |
| QT_LIBS="$LIBQT" |
| AC_SUBST(QT_LIBS) |
| ])#FUN_CHECK_QT |
| |
| # FUN_QT_HEADERS |
| # helper function for FUN_CHECK_QT |
| # check for qt headers in standard locations |
| |
| AC_DEFUN([FUN_QT_HEADERS], |
| [ |
| AC_MSG_CHECKING([for Qt headers]) |
| |
| if test "x$qt_includes" = "x" ; then |
| # look in standard locations |
| qt_found_dirs="" |
| qt_include_dirs=" |
| $QTDIR |
| /usr/include |
| /usr/local/include |
| /usr/X11R6/include |
| `ls -dr /usr/include/qt* 2>/dev/null` |
| `ls -dr /usr/local/include/qt* 2>/dev/null` |
| `ls -dr /usr/X11R6/include/qt* 2>/dev/null` |
| `ls -dr /usr/lib/qt*/include 2>/dev/null` |
| `ls -dr /usr/local/lib/qt*/include 2>/dev/null` |
| `ls -dr /usr/X11R6/lib/qt*/include 2>/dev/null` |
| `ls -dr /usr/local/qt*/include 2>/dev/null` |
| `ls -dr /opt/qt*/include 2>/dev/null` " |
| for n in $qt_include_dirs ; do |
| if test -r "$n/qglobal.h"; then |
| qt_found_dirs="$qt_found_dirs $n" |
| fi |
| done |
| |
| # find the latest version between min_version and max_version |
| qt_prev_version=$qt_min_version |
| qt_found_version="" |
| for n in $qt_found_dirs ; do |
| qt_current_version=`grep -w '#define QT_VERSION' $n/qglobal.h | |
| sed s/'#define QT_VERSION'//` |
| if expr $qt_current_version '>=' $qt_prev_version > /dev/null ; then |
| if expr $qt_current_version '<=' $qt_max_version > /dev/null ; then |
| qt_includes=$n |
| qt_prev_version=$qt_current_version |
| fi |
| fi |
| done |
| fi |
| |
| if test "x$qt_includes" = "x" ; then |
| AC_MSG_RESULT([no]) |
| AC_MSG_ERROR([cannot find correct Qt headers!]) |
| else |
| dnl TODO need to strip out white space |
| QTVERSION=$qt_prev_version; |
| AC_MSG_RESULT([$qt_includes]) |
| fi |
| ])#FUN_QT_HEADERS |
| |
| # FUN_QT_LIBRARIES |
| # helper function for FUN_CHECK_QT |
| # check for qt libs in standard locations |
| |
| AC_DEFUN([FUN_QT_LIBRARIES], |
| [ |
| AC_REQUIRE([FUN_QT_HEADERS]) |
| |
| AC_MSG_CHECKING([for Qt libraries]) |
| |
| # check which library to look for |
| if test -z "$LIBQT" ; then |
| if test "x$ac_use_threads" = "xyes" ; then |
| LIBQT="-lqt-mt" |
| else |
| LIBQT="-lqt" |
| fi |
| fi |
| |
| lib_qt=`echo $LIBQT | sed s/'-l'//` |
| |
| if test "x$qt_libraries" = "x" ; then |
| # see if it is relative to the includes |
| qt_tree="$qt_includes" |
| while test "x$qt_tree" != "x" ; do |
| # first go around will fail... |
| if ls $qt_tree/lib/libqt* > /dev/null 2> /dev/null ; then |
| qt_libraries=$qt_tree/lib |
| break |
| else |
| # lop off tail of path |
| dnl not as portable as it should be... |
| qt_tree="`dirname $qt_tree`" |
| fi |
| done |
| fi |
| |
| if test "x$qt_libraries" = "x" ; then |
| AC_MSG_RESULT([no]) |
| AC_MSG_ERROR([cannot find Qt libraries!]) |
| else |
| # check that we're looking at the right library |
| if ls $qt_libraries/lib$lib_qt.* > /dev/null 2> /dev/null ; then |
| AC_MSG_RESULT([$qt_libraries]) |
| else |
| AC_MSG_RESULT([no]) |
| if test "x$ac_use_threads" = "xyes" ; then |
| AC_MSG_ERROR([cannot find the threaded Qt library in $qt_libraries!]) |
| else |
| AC_MSG_ERROR([cannot find the non-threaded Qt library in $qt_libraries!]) |
| fi |
| fi |
| fi |
| ])#FUN_QT_LIBRARIES |
| |
| # FUN_QT_PROGRAMS |
| # helper function for FUN_CHECK_QT |
| # searches for moc and uic |
| |
| AC_DEFUN([FUN_QT_PROGRAMS], |
| [ |
| AC_REQUIRE([FUN_QT_LIBRARIES]) |
| |
| AC_MSG_CHECKING([for Qt utilities]) |
| |
| if test "x$q_programs" = "x" ; then |
| # see if it is relative to the libraries |
| qt_tree="$qt_libraries" |
| while test "x$qt_tree" != "x" ; do |
| # first go around will fail |
| if ls $qt_tree/bin/moc* > /dev/null 2> /dev/null ; then |
| qt_programs=$qt_tree/bin |
| break |
| else |
| # lop off tail of path |
| dnl not as portable as it should be... |
| qt_tree="`dirname $qt_tree`" |
| fi |
| done |
| # if we haven't found the progs, there's not much more we can do |
| fi |
| |
| if test "x$qt_programs" = "x" ; then |
| AC_MSG_RESULT([no]) |
| AC_MSG_ERROR([cannot find Qt utilities!]) |
| else |
| AC_MSG_RESULT([$qt_programs]) |
| # find the right moc |
| if test -z "$MOC" ; then |
| AC_CHECK_PROG(MOC, moc, moc) |
| if test "x$MOC" = "x" ; then |
| # could be renamed to avoid clashes |
| if ls $qt_programs/moc > /dev/null 2> /dev/null ; then |
| MOC="$qt_programs/moc" |
| else |
| if expr "$QTVERSION" '>=' "200" > /dev/null ; then |
| if ls $qt_programs/moc2 > /dev/null 2> /dev/null ; then |
| MOC="$qt_programs/moc2" |
| fi |
| else |
| if expr "$QTVERSION" '>=' "300" > /dev/null ; then |
| if $qt_programs/moc3 > /dev/null 2> /dev/null ; then |
| MOC="$qt_programs/moc3" |
| fi |
| fi |
| fi |
| fi |
| fi |
| if test "x$MOC" = "x" ; then |
| AC_MSG_RESULT([no]) |
| AC_MSG_ERROR([cannot find Qt meta object compiler!]) |
| fi |
| fi |
| |
| # find the right uic |
| if expr "$QTVERSION" '>=' "220" > /dev/null ; then |
| if test -z "$UIC" ; then |
| AC_CHECK_PROG(UIC, uic, uic) |
| if test "x$UIC" = "x" ; then |
| # could be renamed to avoid clashes |
| if ls $qt_programs/uic > /dev/null 2> /dev/null ; then |
| UIC="$qt_programs/uic" |
| else |
| if expr "$QTVERSION" '>=' "300" > /dev/null ; then |
| if ls $qt_programs/uic3 > /dev/null 2> /dev/null ; then |
| UIC="$qt_programs/uic3" |
| fi |
| fi |
| fi |
| fi |
| fi |
| else |
| # if uic is important to the build, change this |
| UIC="" |
| fi |
| fi |
| ])#FUN_QT_PROGRAMS |
| |
| # FUN_QT_COMPILE |
| # helper function for FUN_CHECK_QT |
| # compile a simple qt program |
| |
| AC_DEFUN([FUN_QT_COMPILE], |
| [ |
| AC_REQUIRE([FUN_QT_HEADERS]) |
| AC_REQUIRE([FUN_QT_LIBRARIES]) |
| AC_REQUIRE([FUN_QT_PROGRAMS]) |
| |
| AC_MSG_CHECKING([whether a simple Qt program compiles]) |
| |
| AC_LANG_PUSH(C++) |
| |
| ac_cxxflags_save="$CXXFLAGS" |
| ac_ldflags_save="$LDFLAGS" |
| ac_libs_save="$LIBS" |
| CXXFLAGS="$CXXFLAGS $PTHREAD_CFLAGS -I$qt_includes $X_CFLAGS $all_includes" |
| LDFLAGS="$LDFLAGS -L$qt_libraries $X_LIBS " |
| LIBS="$LIBS $PTHREAD_LIBS $X_PRE_LIBS $X_EXTRA_LIBS -lXext -lX11 $LIBQT" |
| |
| AC_TRY_LINK([ |
| #include <qglobal.h> |
| #include <qmessagebox.h> |
| #include <qstring.h>], |
| [QString s = "hello world"; |
| QMessageBox::information(0, s, "no he is not"); |
| return 0;], |
| qt_compile=yes, qt_compile=no) |
| |
| CXXFLAGS="$ac_cxxflags_save" |
| LDFLAGS="$ac_ldflags_save" |
| LIBS="$ac_libs_save" |
| |
| AC_LANG_POP(C++) |
| |
| if test "x$qt_compile" = "xyes" ; then |
| AC_MSG_RESULT([yes]) |
| else |
| AC_MSG_RESULT([no]) |
| AC_MSG_ERROR([cannot compile a Qt program!]) |
| fi |
| ])#FUN_QT_COMPILE |