1# Copyright (C) 2001 David Johnson 2# This file is free software; the author gives unlimited permission to copy 3# and/or distribute it, with or without modifications, as long as this notice 4# is preserved. 5 6# FUN_TYPE BOOL 7# check for a built-in bool type 8# HAVE_BOOL will be defined in the config header 9 10AC_DEFUN([FUN_TYPE_BOOL], 11[ 12 AC_REQUIRE([AC_PROG_CXX]) 13 14 AC_LANG_PUSH(C++) 15 AC_CHECK_TYPE(bool, ac_check_bool=yes, ac_check_bool=no) 16 AC_LANG_POP(C++) 17 if test "x$ac_check_bool" = "xyes" ; then 18 AC_DEFINE(HAVE_BOOL,,[define if bool is a built-in type]) 19 fi 20 21 AH_BOTTOM([#ifndef HAVE_BOOL]) 22 AH_BOTTOM([enum booltyp { false, true }; typedef enum booltyp bool;]) 23 AH_BOTTOM([#endif]) 24])# FUN_TYPE_BOOL 25 26# FUN_HEADER_STDCXX 27# check for standard ISO C++ headers 28 29AC_DEFUN([FUN_HEADER_STDCXX], 30[ 31 AC_REQUIRE([AC_PROG_CXX]) 32 33 AC_LANG_PUSH(C++) 34 35 ac_check_headers=no 36 AC_CHECK_HEADER(cstdlib, 37 ac_check_headers=yes, 38 ac_check_headers=no) 39 AC_CHECK_HEADER(cstring, 40 ac_check_headers=$ac_check_headers, 41 ac_check_headers=no) 42 AC_CHECK_HEADER(iostream, 43 ac_check_headers=$ac_check_headers, 44 ac_check_headers=no) 45 46 AC_LANG_POP(C++) 47 48 if test "x$ac_check_headers" = "xno" ; then 49 AC_MSG_ERROR(standard ISO C++ headers not found!) 50 fi 51])#FUN_HEADER_STDCXX 52 53# FUN_CHECK_PTHREAD 54# check for posix pthreads 55# sets PTHREAD_LIBS and PTHREAD_CFLAGS 56# sets HAVE_PTHREADS in the configuration header 57 58AC_DEFUN([FUN_CHECK_PTHREAD], 59[ 60 AC_REQUIRE([AC_CANONICAL_HOST]) 61 AC_REQUIRE([AC_PROG_CC]) 62 63 PTHREAD_LIBS="" 64 PTHREAD_CFLAGS="" 65 66 AC_ARG_ENABLE(threads, AC_HELP_STRING([--enable-threads], 67 [enable the use of the threads [[default=no]]]), 68 ac_use_threads=$enableval, ac_use_threads=no) 69 70 if test "x$ac_use_threads" = "xyes" ; then 71 72 AC_CHECK_HEADER(pthread.h, ac_posix_threads=yes, ac_posix_threads=no) 73 74 if test "x$ac_posix_threads" = "xyes" ; then 75 76 AC_MSG_CHECKING([whether ${CC} accepts -pthread]) 77 ac_cflags_save="$CFLAGS" 78 CFLAGS="$CFLAGS -pthread" 79 AC_TRY_COMPILE([#include <pthread.h>], [pthread_attr_init(0)], 80 ac_cc_pthread=yes, ac_cc_pthread=no) 81 CFLAGS="$ac_cflags_save" 82 83 if test "x$ac_cc_pthread" = "xyes" ; then 84 AC_MSG_RESULT([yes]) 85 PTHREAD_CFLAGS="-pthread" 86 else 87 AC_MSG_RESULT([no]) 88 ac_thread_library=none 89 90 if test "x$ac_thread_library" = "xnone" ; then 91 AC_CHECK_LIB(c_r, pthread_self, ac_thread_library=c_r) 92 fi 93 if test "x$ac_thread_library" = "xnone" ; then 94 AC_CHECK_LIB(pthread, pthread_self, ac_thread_library=pthread) 95 fi 96 if test "x$ac_thread_library" = "xnone" ; then 97 AC_CHECK_LIB(pthreads, pthread_self, ac_thread_library=pthreads) 98 fi 99 if test "x$ac_thread_library" = "xnone" ; then 100 AC_CHECK_LIB(thread, pthread_self, ac_thread_library=thread) 101 fi 102 if test "x$ac_thread_library" = "xnone" ; then 103 AC_CHECK_LIB(gthreads, pthread_self, ac_thread_library=gthreads) 104 fi 105 if test "x$ac_thread_library" = "xnone" ; then 106 AC_CHECK_LIB(c, pthread_self, ac_thread_library=c) 107 fi 108 if test "x$ac_thread_library" = "xnone" ; then 109 ac_use_threads=no 110 else 111 PTHREAD_LIBS="-l$ac_thread_library" 112 fi 113 fi 114 else 115 ac_use_threads=no 116 fi 117 fi 118 119 if test "x$ac_use_threads" = "xyes" ; then 120 AC_DEFINE(HAVE_PTHREAD, 1, [Define if you have POSIX threads]) 121 case $host_os in 122 aix* | freebsd*) 123 PTHREAD_CFLAGS="$PTHREAD_CFLAGS -D_THREAD_SAFE" 124 ;; 125 linux* | solaris*) 126 PTHREAD_CFLAGS="$PTHREAD_CFLAGS -D_REENTRANT" 127 ;; 128 *) 129 ;; 130 esac 131 fi 132])#FUN_CHECK_PTHREAD 133 134# FUN_CHECK_QT([qt_min_version],[qt_max_version]) 135# check for qt headers, libs, progs and compilation 136# substs QT_CXXFLAGS, QT_LDFLAGS, and QT_LIBS 137# substs QTVERSION, MOC and UIC 138# LIBQT, MOC and UIC 'precious' variables 139 140AC_DEFUN([FUN_CHECK_QT], 141[ 142 AC_REQUIRE([AC_PROG_CXX]) 143 AC_REQUIRE([AC_PATH_X]) 144 AC_REQUIRE([AC_PATH_XTRA]) 145 AC_REQUIRE([FUN_CHECK_PTHREAD]) 146 147 # some 'precious' variables for configure --help 148 AC_ARG_VAR(QTMIN, minimum version of Qt to search for e.g. 220) 149 AC_ARG_VAR(QTMAX, maximum version of Qt to search for e.g. 399) 150 AC_ARG_VAR(LIBQT, library flag for the Qt libary e.g. -lqt) 151 AC_ARG_VAR(MOC, QT meta object compiler command) 152 AC_ARG_VAR(UIC, Qt UI compiler command) 153 154 AC_CACHE_SAVE 155 156 AC_MSG_NOTICE([checking for Qt]) 157 158 # process our args 159 if test -z "$1" ; then 160 qt_min_version=0 161 else 162 qt_min_version=$1 163 fi 164 if test -z "$2" ; then 165 qt_max_version=9999 166 else 167 qt_max_version=$2 168 fi 169 # adjust for user preferences 170 if test "x$QTMIN" != "x" ; then 171 if expr $QTMIN '>' $qt_min_version > /dev/null ; then 172 qt_min_version=$QTMIN; 173 fi 174 fi 175 if test "x$QTMAX" != "x" ; then 176 if expr $QTMAX '<' $qt_max_version > /dev/null ; then 177 qt_max_version=$QTMAX; 178 fi 179 fi 180 181 # set up our configuration options 182 qt_dir="" 183 qt_includes="" 184 qt_libraries="" 185 qt_programs="" 186 AC_ARG_WITH([qt_dir], AC_HELP_STRING([--with-qt-dir=DIR], 187 [where the Qt package is installed]), 188 [ qt_dir="$withval" 189 qt_includes="$withval"/include 190 qt_libraries="$withval"/lib 191 qt_programs="$withval"/bin 192 ]) 193 AC_ARG_WITH([qt_includes], AC_HELP_STRING([--with-qt-includes=DIR], 194 [where the Qt includes are installed]), 195 [qt_includes="$withval"]) 196 AC_ARG_WITH([qt_libraries], AC_HELP_STRING([--with-qt-libraries=DIR], 197 [where the Qt libraries are installed]), 198 [qt_libraries="$withval"]) 199 AC_ARG_WITH([qt_programs], AC_HELP_STRING([--with-qt-programs=DIR], 200 [where the Qt programs are installed]), 201 [qt_programs="$withval"]) 202 203 QTVERSION="000" 204 205 FUN_QT_HEADERS 206 207 # check for a traditional qt installation tree 208 if ls $qt_includes/../lib/libqt* > /dev/null 2> /dev/null; then 209 qt_dir="`echo $qt_includes | sed s,'/include',,`" 210 qt_libraries="$qt_dir/lib" 211 qt_programs="$qt_dir/bin" 212 fi 213 214 FUN_QT_LIBRARIES 215 FUN_QT_PROGRAMS 216 FUN_QT_COMPILE 217 218 AC_MSG_NOTICE([Found Qt version $QTVERSION]) 219 220 AC_SUBST(QTVERSION) 221 AC_SUBST(MOC) 222 AC_SUBST(UIC) 223 QT_CXXFLAGS="-I$qt_includes" 224 AC_SUBST(QT_CXXFLAGS) 225 QT_LDFLAGS="-L$qt_libraries" 226 AC_SUBST(QT_LDFLAGS) 227 QT_LIBS="$LIBQT" 228 AC_SUBST(QT_LIBS) 229])#FUN_CHECK_QT 230 231# FUN_QT_HEADERS 232# helper function for FUN_CHECK_QT 233# check for qt headers in standard locations 234 235AC_DEFUN([FUN_QT_HEADERS], 236[ 237 AC_MSG_CHECKING([for Qt headers]) 238 239 if test "x$qt_includes" = "x" ; then 240 # look in standard locations 241 qt_found_dirs="" 242 qt_include_dirs=" 243 $QTDIR 244 /usr/include 245 /usr/local/include 246 /usr/X11R6/include 247 `ls -dr /usr/include/qt* 2>/dev/null` 248 `ls -dr /usr/local/include/qt* 2>/dev/null` 249 `ls -dr /usr/X11R6/include/qt* 2>/dev/null` 250 `ls -dr /usr/lib/qt*/include 2>/dev/null` 251 `ls -dr /usr/local/lib/qt*/include 2>/dev/null` 252 `ls -dr /usr/X11R6/lib/qt*/include 2>/dev/null` 253 `ls -dr /usr/local/qt*/include 2>/dev/null` 254 `ls -dr /opt/qt*/include 2>/dev/null` " 255 for n in $qt_include_dirs ; do 256 if test -r "$n/qglobal.h"; then 257 qt_found_dirs="$qt_found_dirs $n" 258 fi 259 done 260 261 # find the latest version between min_version and max_version 262 qt_prev_version=$qt_min_version 263 qt_found_version="" 264 for n in $qt_found_dirs ; do 265 qt_current_version=`grep -w '#define QT_VERSION' $n/qglobal.h | 266 sed s/'#define QT_VERSION'//` 267 if expr $qt_current_version '>=' $qt_prev_version > /dev/null ; then 268 if expr $qt_current_version '<=' $qt_max_version > /dev/null ; then 269 qt_includes=$n 270 qt_prev_version=$qt_current_version 271 fi 272 fi 273 done 274 fi 275 276 if test "x$qt_includes" = "x" ; then 277 AC_MSG_RESULT([no]) 278 AC_MSG_ERROR([cannot find correct Qt headers!]) 279 else 280 dnl TODO need to strip out white space 281 QTVERSION=$qt_prev_version; 282 AC_MSG_RESULT([$qt_includes]) 283 fi 284])#FUN_QT_HEADERS 285 286# FUN_QT_LIBRARIES 287# helper function for FUN_CHECK_QT 288# check for qt libs in standard locations 289 290AC_DEFUN([FUN_QT_LIBRARIES], 291[ 292 AC_REQUIRE([FUN_QT_HEADERS]) 293 294 AC_MSG_CHECKING([for Qt libraries]) 295 296 # check which library to look for 297 if test -z "$LIBQT" ; then 298 if test "x$ac_use_threads" = "xyes" ; then 299 LIBQT="-lqt-mt" 300 else 301 LIBQT="-lqt" 302 fi 303 fi 304 305 lib_qt=`echo $LIBQT | sed s/'-l'//` 306 307 if test "x$qt_libraries" = "x" ; then 308 # see if it is relative to the includes 309 qt_tree="$qt_includes" 310 while test "x$qt_tree" != "x" ; do 311 # first go around will fail... 312 if ls $qt_tree/lib/libqt* > /dev/null 2> /dev/null ; then 313 qt_libraries=$qt_tree/lib 314 break 315 else 316 # lop off tail of path 317 dnl not as portable as it should be... 318 qt_tree="`dirname $qt_tree`" 319 fi 320 done 321 fi 322 323 if test "x$qt_libraries" = "x" ; then 324 AC_MSG_RESULT([no]) 325 AC_MSG_ERROR([cannot find Qt libraries!]) 326 else 327 # check that we're looking at the right library 328 if ls $qt_libraries/lib$lib_qt.* > /dev/null 2> /dev/null ; then 329 AC_MSG_RESULT([$qt_libraries]) 330 else 331 AC_MSG_RESULT([no]) 332 if test "x$ac_use_threads" = "xyes" ; then 333 AC_MSG_ERROR([cannot find the threaded Qt library in $qt_libraries!]) 334 else 335 AC_MSG_ERROR([cannot find the non-threaded Qt library in $qt_libraries!]) 336 fi 337 fi 338 fi 339])#FUN_QT_LIBRARIES 340 341# FUN_QT_PROGRAMS 342# helper function for FUN_CHECK_QT 343# searches for moc and uic 344 345AC_DEFUN([FUN_QT_PROGRAMS], 346[ 347 AC_REQUIRE([FUN_QT_LIBRARIES]) 348 349 AC_MSG_CHECKING([for Qt utilities]) 350 351 if test "x$q_programs" = "x" ; then 352 # see if it is relative to the libraries 353 qt_tree="$qt_libraries" 354 while test "x$qt_tree" != "x" ; do 355 # first go around will fail 356 if ls $qt_tree/bin/moc* > /dev/null 2> /dev/null ; then 357 qt_programs=$qt_tree/bin 358 break 359 else 360 # lop off tail of path 361 dnl not as portable as it should be... 362 qt_tree="`dirname $qt_tree`" 363 fi 364 done 365 # if we haven't found the progs, there's not much more we can do 366 fi 367 368 if test "x$qt_programs" = "x" ; then 369 AC_MSG_RESULT([no]) 370 AC_MSG_ERROR([cannot find Qt utilities!]) 371 else 372 AC_MSG_RESULT([$qt_programs]) 373 # find the right moc 374 if test -z "$MOC" ; then 375 AC_CHECK_PROG(MOC, moc, moc) 376 if test "x$MOC" = "x" ; then 377 # could be renamed to avoid clashes 378 if ls $qt_programs/moc > /dev/null 2> /dev/null ; then 379 MOC="$qt_programs/moc" 380 else 381 if expr "$QTVERSION" '>=' "200" > /dev/null ; then 382 if ls $qt_programs/moc2 > /dev/null 2> /dev/null ; then 383 MOC="$qt_programs/moc2" 384 fi 385 else 386 if expr "$QTVERSION" '>=' "300" > /dev/null ; then 387 if $qt_programs/moc3 > /dev/null 2> /dev/null ; then 388 MOC="$qt_programs/moc3" 389 fi 390 fi 391 fi 392 fi 393 fi 394 if test "x$MOC" = "x" ; then 395 AC_MSG_RESULT([no]) 396 AC_MSG_ERROR([cannot find Qt meta object compiler!]) 397 fi 398 fi 399 400 # find the right uic 401 if expr "$QTVERSION" '>=' "220" > /dev/null ; then 402 if test -z "$UIC" ; then 403 AC_CHECK_PROG(UIC, uic, uic) 404 if test "x$UIC" = "x" ; then 405 # could be renamed to avoid clashes 406 if ls $qt_programs/uic > /dev/null 2> /dev/null ; then 407 UIC="$qt_programs/uic" 408 else 409 if expr "$QTVERSION" '>=' "300" > /dev/null ; then 410 if ls $qt_programs/uic3 > /dev/null 2> /dev/null ; then 411 UIC="$qt_programs/uic3" 412 fi 413 fi 414 fi 415 fi 416 fi 417 else 418 # if uic is important to the build, change this 419 UIC="" 420 fi 421 fi 422])#FUN_QT_PROGRAMS 423 424# FUN_QT_COMPILE 425# helper function for FUN_CHECK_QT 426# compile a simple qt program 427 428AC_DEFUN([FUN_QT_COMPILE], 429[ 430 AC_REQUIRE([FUN_QT_HEADERS]) 431 AC_REQUIRE([FUN_QT_LIBRARIES]) 432 AC_REQUIRE([FUN_QT_PROGRAMS]) 433 434 AC_MSG_CHECKING([whether a simple Qt program compiles]) 435 436 AC_LANG_PUSH(C++) 437 438 ac_cxxflags_save="$CXXFLAGS" 439 ac_ldflags_save="$LDFLAGS" 440 ac_libs_save="$LIBS" 441 CXXFLAGS="$CXXFLAGS $PTHREAD_CFLAGS -I$qt_includes $X_CFLAGS $all_includes" 442 LDFLAGS="$LDFLAGS -L$qt_libraries $X_LIBS " 443 LIBS="$LIBS $PTHREAD_LIBS $X_PRE_LIBS $X_EXTRA_LIBS -lXext -lX11 $LIBQT" 444 445 AC_TRY_LINK([ 446 #include <qglobal.h> 447 #include <qmessagebox.h> 448 #include <qstring.h>], 449 [QString s = "hello world"; 450 QMessageBox::information(0, s, "no he is not"); 451 return 0;], 452 qt_compile=yes, qt_compile=no) 453 454 CXXFLAGS="$ac_cxxflags_save" 455 LDFLAGS="$ac_ldflags_save" 456 LIBS="$ac_libs_save" 457 458 AC_LANG_POP(C++) 459 460 if test "x$qt_compile" = "xyes" ; then 461 AC_MSG_RESULT([yes]) 462 else 463 AC_MSG_RESULT([no]) 464 AC_MSG_ERROR([cannot compile a Qt program!]) 465 fi 466])#FUN_QT_COMPILE 467