[2749] | 1 | dnl synergy -- mouse and keyboard sharing utility
|
---|
| 2 | dnl Copyright (C) 2002 Chris Schoeneman
|
---|
| 3 | dnl
|
---|
| 4 | dnl This package is free software; you can redistribute it and/or
|
---|
| 5 | dnl modify it under the terms of the GNU General Public License
|
---|
| 6 | dnl found in the file COPYING that should have accompanied this file.
|
---|
| 7 | dnl
|
---|
| 8 | dnl This package is distributed in the hope that it will be useful,
|
---|
| 9 | dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
|
---|
| 10 | dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
---|
| 11 | dnl GNU General Public License for more details.
|
---|
| 12 |
|
---|
| 13 | AC_DEFUN([ACX_CHECK_SOCKLEN_T], [
|
---|
| 14 | AC_MSG_CHECKING([for socklen_t])
|
---|
| 15 | AC_TRY_COMPILE([
|
---|
| 16 | #include <unistd.h>
|
---|
| 17 | #include <sys/socket.h>
|
---|
| 18 | ],
|
---|
| 19 | [socklen_t len;],[acx_socklen_t_ok=yes],[acx_socklen_t_ok=no])
|
---|
| 20 | AC_MSG_RESULT($acx_socklen_t_ok)
|
---|
| 21 | if test x"$acx_socklen_t_ok" = xyes; then
|
---|
| 22 | ifelse([$1],,AC_DEFINE(HAVE_SOCKLEN_T,1,[Define if your compiler defines socklen_t.]),[$1])
|
---|
| 23 | :
|
---|
| 24 | else
|
---|
| 25 | acx_socklen_t_ok=no
|
---|
| 26 | $2
|
---|
| 27 | fi
|
---|
| 28 | ])dnl ACX_CHECK_SOCKLEN_T
|
---|
| 29 |
|
---|
| 30 | AC_DEFUN([ACX_CHECK_CXX], [
|
---|
| 31 | AC_MSG_CHECKING([if g++ defines correct C++ macro])
|
---|
| 32 | AC_TRY_COMPILE(, [
|
---|
| 33 | #if defined(_LANGUAGE_C) && !defined(_LANGUAGE_C_PLUS_PLUS)
|
---|
| 34 | #error wrong macro
|
---|
| 35 | #endif],[acx_cxx_macro_ok=yes],[acx_cxx_macro_ok=no])
|
---|
| 36 | AC_MSG_RESULT($acx_cxx_macro_ok)
|
---|
| 37 | if test x"$acx_cxx_macro_ok" = xyes; then
|
---|
| 38 | SYNERGY_CXXFLAGS=""
|
---|
| 39 | else
|
---|
| 40 | SYNERGY_CXXFLAGS="-U_LANGUAGE_C -D_LANGUAGE_C_PLUS_PLUS"
|
---|
| 41 | fi
|
---|
| 42 | ])dnl ACX_CHECK_CXX
|
---|
| 43 |
|
---|
| 44 | AC_DEFUN([ACX_CHECK_CXX_BOOL], [
|
---|
| 45 | AC_MSG_CHECKING([for bool support])
|
---|
| 46 | AC_TRY_COMPILE(, [bool t = true, f = false;],
|
---|
| 47 | [acx_cxx_bool_ok=yes],[acx_cxx_bool_ok=no])
|
---|
| 48 | AC_MSG_RESULT($acx_cxx_bool_ok)
|
---|
| 49 | if test x"$acx_cxx_bool_ok" = xyes; then
|
---|
| 50 | ifelse([$1],,AC_DEFINE(HAVE_CXX_BOOL,1,[Define if your compiler has bool support.]),[$1])
|
---|
| 51 | :
|
---|
| 52 | else
|
---|
| 53 | acx_cxx_bool_ok=no
|
---|
| 54 | $2
|
---|
| 55 | fi
|
---|
| 56 | ])dnl ACX_CHECK_CXX_BOOL
|
---|
| 57 |
|
---|
| 58 | AC_DEFUN([ACX_CHECK_CXX_EXCEPTIONS], [
|
---|
| 59 | AC_MSG_CHECKING([for exception support])
|
---|
| 60 | AC_TRY_COMPILE(, [try{throw int(4);}catch(int){throw;}catch(...){}],
|
---|
| 61 | [acx_cxx_exception_ok=yes],[acx_cxx_exception_ok=no])
|
---|
| 62 | AC_MSG_RESULT($acx_cxx_exception_ok)
|
---|
| 63 | if test x"$acx_cxx_exception_ok" = xyes; then
|
---|
| 64 | ifelse([$1],,AC_DEFINE(HAVE_CXX_EXCEPTIONS,1,[Define if your compiler has exceptions support.]),[$1])
|
---|
| 65 | :
|
---|
| 66 | else
|
---|
| 67 | acx_cxx_exception_ok=no
|
---|
| 68 | $2
|
---|
| 69 | fi
|
---|
| 70 | ])dnl ACX_CHECK_CXX_EXCEPTIONS
|
---|
| 71 |
|
---|
| 72 | AC_DEFUN([ACX_CHECK_CXX_CASTS], [
|
---|
| 73 | AC_MSG_CHECKING([for C++ cast support])
|
---|
| 74 | AC_TRY_COMPILE(, [const char* f="a";const_cast<char*>(f);
|
---|
| 75 | reinterpret_cast<const int*>(f);static_cast<int>(4.5);],
|
---|
| 76 | [acx_cxx_cast_ok=yes],[acx_cxx_cast_ok=no])
|
---|
| 77 | AC_MSG_RESULT($acx_cxx_cast_ok)
|
---|
| 78 | if test x"$acx_cxx_cast_ok" = xyes; then
|
---|
| 79 | ifelse([$1],,AC_DEFINE(HAVE_CXX_CASTS,1,[Define if your compiler has C++ cast support.]),[$1])
|
---|
| 80 | :
|
---|
| 81 | else
|
---|
| 82 | acx_cxx_cast_ok=no
|
---|
| 83 | $2
|
---|
| 84 | fi
|
---|
| 85 | ])dnl ACX_CHECK_CXX_CASTS
|
---|
| 86 |
|
---|
| 87 | AC_DEFUN([ACX_CHECK_CXX_MUTABLE], [
|
---|
| 88 | AC_MSG_CHECKING([for mutable support])
|
---|
| 89 | AC_TRY_COMPILE(, [struct A{mutable int b;void f() const {b=0;}};
|
---|
| 90 | A a;a.f();],[acx_cxx_mutable_ok=yes],[acx_cxx_mutable_ok=no])
|
---|
| 91 | AC_MSG_RESULT($acx_cxx_mutable_ok)
|
---|
| 92 | if test x"$acx_cxx_mutable_ok" = xyes; then
|
---|
| 93 | ifelse([$1],,AC_DEFINE(HAVE_CXX_MUTABLE,1,[Define if your compiler has mutable support.]),[$1])
|
---|
| 94 | :
|
---|
| 95 | else
|
---|
| 96 | acx_cxx_mutable_ok=no
|
---|
| 97 | $2
|
---|
| 98 | fi
|
---|
| 99 | ])dnl ACX_CHECK_CXX_MUTABLE
|
---|
| 100 |
|
---|
| 101 | AC_DEFUN([ACX_CHECK_CXX_STDLIB], [
|
---|
| 102 | AC_MSG_CHECKING([for C++ standard library])
|
---|
| 103 | AC_TRY_LINK([#include <set>], [std::set<int> a; a.insert(3);],
|
---|
| 104 | [acx_cxx_stdlib_ok=yes],[acx_cxx_stdlib_ok=no])
|
---|
| 105 | AC_MSG_RESULT($acx_cxx_stdlib_ok)
|
---|
| 106 | if test x"$acx_cxx_stdlib_ok" = xyes; then
|
---|
| 107 | ifelse([$1],,AC_DEFINE(HAVE_CXX_STDLIB,1,[Define if your compiler has standard C++ library support.]),[$1])
|
---|
| 108 | :
|
---|
| 109 | else
|
---|
| 110 | acx_cxx_stdlib_ok=no
|
---|
| 111 | $2
|
---|
| 112 | fi
|
---|
| 113 | ])dnl ACX_CHECK_CXX_STDLIB
|
---|
| 114 |
|
---|
| 115 | AC_DEFUN([ACX_CHECK_GETPWUID_R], [
|
---|
| 116 | AC_MSG_CHECKING([for working getpwuid_r])
|
---|
| 117 | AC_TRY_LINK([#include <pwd.h>],
|
---|
| 118 | [char buffer[4096]; struct passwd pwd, *pwdp;
|
---|
| 119 | getpwuid_r(0, &pwd, buffer, sizeof(buffer), &pwdp);],
|
---|
| 120 | acx_getpwuid_r_ok=yes, acx_getpwuid_r_ok=no)
|
---|
| 121 | AC_MSG_RESULT($acx_getpwuid_r_ok)
|
---|
| 122 | if test x"$acx_getpwuid_r_ok" = xyes; then
|
---|
| 123 | ifelse([$1],,AC_DEFINE(HAVE_GETPWUID_R,1,[Define if you have a working \`getpwuid_r\' function.]),[$1])
|
---|
| 124 | :
|
---|
| 125 | else
|
---|
| 126 | acx_getpwuid_r_ok=no
|
---|
| 127 | $2
|
---|
| 128 | fi
|
---|
| 129 | ])dnl ACX_CHECK_GETPWUID_R
|
---|
| 130 |
|
---|
| 131 | AC_DEFUN([ACX_CHECK_POLL], [
|
---|
| 132 | AC_MSG_CHECKING([for poll])
|
---|
| 133 | AC_TRY_LINK([#include <poll.h>],
|
---|
| 134 | [#if defined(_POLL_EMUL_H_)
|
---|
| 135 | #error emulated poll
|
---|
| 136 | #endif
|
---|
| 137 | struct pollfd ufds[] = { 0, POLLIN, 0 }; poll(ufds, 1, 10);],
|
---|
| 138 | acx_poll_ok=yes, acx_poll_ok=no)
|
---|
| 139 | AC_MSG_RESULT($acx_poll_ok)
|
---|
| 140 | if test x"$acx_poll_ok" = xyes; then
|
---|
| 141 | ifelse([$1],,AC_DEFINE(HAVE_POLL,1,[Define if you have the \`poll\' function.]),[$1])
|
---|
| 142 | :
|
---|
| 143 | else
|
---|
| 144 | acx_poll_ok=no
|
---|
| 145 | $2
|
---|
| 146 | fi
|
---|
| 147 | ])dnl ACX_CHECK_POLL
|
---|
| 148 |
|
---|
| 149 | dnl See if we need extra libraries for nanosleep
|
---|
| 150 | AC_DEFUN([ACX_CHECK_NANOSLEEP], [
|
---|
| 151 | acx_nanosleep_ok=no
|
---|
| 152 | acx_nanosleep_list=""
|
---|
| 153 |
|
---|
| 154 | dnl check if user has set NANOSLEEP_LIBS
|
---|
| 155 | save_user_NANOSLEEP_LIBS="$NANOSLEEP_LIBS"
|
---|
| 156 | if test x"$NANOSLEEP_LIBS" != x; then
|
---|
| 157 | acx_nanosleep_list=user
|
---|
| 158 | fi
|
---|
| 159 |
|
---|
| 160 | dnl check various libraries (including no extra libraries) for
|
---|
| 161 | dnl nanosleep. `none' should appear first.
|
---|
| 162 | acx_nanosleep_list="none $acx_nanosleep_list rt"
|
---|
| 163 | for flag in $acx_nanosleep_list; do
|
---|
| 164 | case $flag in
|
---|
| 165 | none)
|
---|
| 166 | AC_MSG_CHECKING([for nanosleep])
|
---|
| 167 | NANOSLEEP_LIBS=""
|
---|
| 168 | ;;
|
---|
| 169 |
|
---|
| 170 | user)
|
---|
| 171 | AC_MSG_CHECKING([for nanosleep in $save_user_NANOSLEEP_LIBS])
|
---|
| 172 | NANOSLEEP_LIBS="$save_user_NANOSLEEP_LIBS"
|
---|
| 173 | ;;
|
---|
| 174 |
|
---|
| 175 | *)
|
---|
| 176 | AC_MSG_CHECKING([for nanosleep in -l$flag])
|
---|
| 177 | NANOSLEEP_LIBS="-l$flag"
|
---|
| 178 | ;;
|
---|
| 179 | esac
|
---|
| 180 |
|
---|
| 181 | save_LIBS="$LIBS"
|
---|
| 182 | LIBS="$NANOSLEEP_LIBS $LIBS"
|
---|
| 183 | AC_TRY_LINK([#include <time.h>],
|
---|
| 184 | [struct timespec t = { 1, 1000 }; nanosleep(&t, NULL);],
|
---|
| 185 | acx_nanosleep_ok=yes, acx_nanosleep_ok=no)
|
---|
| 186 | LIBS="$save_LIBS"
|
---|
| 187 | AC_MSG_RESULT($acx_nanosleep_ok)
|
---|
| 188 | if test x"$acx_nanosleep_ok" = xyes; then
|
---|
| 189 | break;
|
---|
| 190 | fi
|
---|
| 191 | NANOSLEEP_LIBS=""
|
---|
| 192 | done
|
---|
| 193 |
|
---|
| 194 | AC_SUBST(NANOSLEEP_LIBS)
|
---|
| 195 |
|
---|
| 196 | # execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND:
|
---|
| 197 | if test x"$acx_nanosleep_ok" = xyes; then
|
---|
| 198 | ifelse([$1],,AC_DEFINE(HAVE_NANOSLEEP,1,[Define if you have the \`nanosleep\' function.]),[$1])
|
---|
| 199 | :
|
---|
| 200 | else
|
---|
| 201 | acx_nanosleep_ok=no
|
---|
| 202 | $2
|
---|
| 203 | fi
|
---|
| 204 | ])dnl ACX_CHECK_NANOSLEEP
|
---|
| 205 |
|
---|
| 206 | dnl See if we need extra libraries for inet_aton
|
---|
| 207 | AC_DEFUN([ACX_CHECK_INET_ATON], [
|
---|
| 208 | acx_inet_aton_ok=no
|
---|
| 209 | acx_inet_aton_list=""
|
---|
| 210 |
|
---|
| 211 | dnl check if user has set INET_ATON_LIBS
|
---|
| 212 | save_user_INET_ATON_LIBS="$INET_ATON_LIBS"
|
---|
| 213 | if test x"$INET_ATON_LIBS" != x; then
|
---|
| 214 | acx_inet_aton_list=user
|
---|
| 215 | fi
|
---|
| 216 |
|
---|
| 217 | dnl check various libraries (including no extra libraries) for
|
---|
| 218 | dnl inet_aton. `none' should appear first.
|
---|
| 219 | acx_inet_aton_list="none $acx_inet_aton_list resolv"
|
---|
| 220 | for flag in $acx_inet_aton_list; do
|
---|
| 221 | case $flag in
|
---|
| 222 | none)
|
---|
| 223 | AC_MSG_CHECKING([for inet_aton])
|
---|
| 224 | INET_ATON_LIBS=""
|
---|
| 225 | ;;
|
---|
| 226 |
|
---|
| 227 | user)
|
---|
| 228 | AC_MSG_CHECKING([for inet_aton in $save_user_INET_ATON_LIBS])
|
---|
| 229 | INET_ATON_LIBS="$save_user_INET_ATON_LIBS"
|
---|
| 230 | ;;
|
---|
| 231 |
|
---|
| 232 | *)
|
---|
| 233 | AC_MSG_CHECKING([for inet_aton in -l$flag])
|
---|
| 234 | INET_ATON_LIBS="-l$flag"
|
---|
| 235 | ;;
|
---|
| 236 | esac
|
---|
| 237 |
|
---|
| 238 | save_LIBS="$LIBS"
|
---|
| 239 | LIBS="$INET_ATON_LIBS $LIBS"
|
---|
| 240 | AC_TRY_LINK([#include <sys/types.h>
|
---|
| 241 | #include <sys/socket.h>
|
---|
| 242 | #include <netinet/in.h>
|
---|
| 243 | #include <arpa/inet.h>],
|
---|
| 244 | [struct in_addr addr; inet_aton("foo.bar", &addr);],
|
---|
| 245 | acx_inet_aton_ok=yes, acx_inet_aton_ok=no)
|
---|
| 246 | LIBS="$save_LIBS"
|
---|
| 247 | AC_MSG_RESULT($acx_inet_aton_ok)
|
---|
| 248 | if test x"$acx_inet_aton_ok" = xyes; then
|
---|
| 249 | AC_DEFINE(HAVE_INET_ATON,1,[Define if you have the \`inet_aton\' function.])
|
---|
| 250 | break;
|
---|
| 251 | fi
|
---|
| 252 | INET_ATON_LIBS=""
|
---|
| 253 | done
|
---|
| 254 |
|
---|
| 255 | AC_SUBST(INET_ATON_LIBS)
|
---|
| 256 | ])dnl ACX_CHECK_INET_ATON
|
---|
| 257 |
|
---|
| 258 | dnl The following macros are from http://www.gnu.org/software/ac-archive/
|
---|
| 259 | dnl which distributes them under the following license:
|
---|
| 260 | dnl
|
---|
| 261 | dnl Every Autoconf macro presented on this web site is free software; you can
|
---|
| 262 | dnl redistribute it and/or modify it under the terms of the GNU General
|
---|
| 263 | dnl Public License as published by the Free Software Foundation; either
|
---|
| 264 | dnl version 2, or (at your option) any later version.
|
---|
| 265 | dnl
|
---|
| 266 | dnl They are distributed in the hope that they will be useful, but WITHOUT
|
---|
| 267 | dnl ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
---|
| 268 | dnl FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
---|
| 269 | dnl more details. (You should have received a copy of the GNU General Public
|
---|
| 270 | dnl License along with this program; if not, write to the Free Software
|
---|
| 271 | dnl Foundation, Inc., 59 Temple Place -- Suite 330, Boston, MA 02111-1307,
|
---|
| 272 | dnl USA.)
|
---|
| 273 | dnl
|
---|
| 274 | dnl As a special exception, the Free Software Foundation gives unlimited
|
---|
| 275 | dnl permission to copy, distribute and modify the configure scripts that are
|
---|
| 276 | dnl the output of Autoconf. You need not follow the terms of the GNU General
|
---|
| 277 | dnl Public License when using or distributing such scripts, even though
|
---|
| 278 | dnl portions of the text of Autoconf appear in them. The GNU General Public
|
---|
| 279 | dnl License (GPL) does govern all other use of the material that constitutes
|
---|
| 280 | dnl the Autoconf program.
|
---|
| 281 | dnl
|
---|
| 282 | dnl Certain portions of the Autoconf source text are designed to be copied
|
---|
| 283 | dnl (in certain cases, depending on the input) into the output of Autoconf.
|
---|
| 284 | dnl We call these the "data" portions. The rest of the Autoconf source text
|
---|
| 285 | dnl consists of comments plus executable code that decides which of the data
|
---|
| 286 | dnl portions to output in any given case. We call these comments and
|
---|
| 287 | dnl executable code the "non-data" portions. Autoconf never copies any of the
|
---|
| 288 | dnl non-data portions into its output.
|
---|
| 289 | dnl
|
---|
| 290 | dnl This special exception to the GPL applies to versions of Autoconf
|
---|
| 291 | dnl released by the Free Software Foundation. When you make and distribute a
|
---|
| 292 | dnl modified version of Autoconf, you may extend this special exception to
|
---|
| 293 | dnl the GPL to apply to your modified version as well, *unless* your modified
|
---|
| 294 | dnl version has the potential to copy into its output some of the text that
|
---|
| 295 | dnl was the non-data portion of the version that you started with. (In other
|
---|
| 296 | dnl words, unless your change moves or copies text from the non-data portions
|
---|
| 297 | dnl to the data portions.) If your modification has such potential, you must
|
---|
| 298 | dnl delete any notice of this special exception to the GPL from your modified
|
---|
| 299 | dnl version
|
---|
| 300 |
|
---|
| 301 | AC_DEFUN([ACX_PTHREAD], [
|
---|
| 302 | AC_REQUIRE([AC_CANONICAL_HOST])
|
---|
| 303 | AC_LANG_SAVE
|
---|
| 304 | AC_LANG_C
|
---|
| 305 | acx_pthread_ok=no
|
---|
| 306 |
|
---|
| 307 | # We used to check for pthread.h first, but this fails if pthread.h
|
---|
| 308 | # requires special compiler flags (e.g. on True64 or Sequent).
|
---|
| 309 | # It gets checked for in the link test anyway.
|
---|
| 310 |
|
---|
| 311 | # First of all, check if the user has set any of the PTHREAD_LIBS,
|
---|
| 312 | # etcetera environment variables, and if threads linking works using
|
---|
| 313 | # them:
|
---|
| 314 | if test x"$PTHREAD_LIBS$PTHREAD_CFLAGS" != x; then
|
---|
| 315 | save_CFLAGS="$CFLAGS"
|
---|
| 316 | CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
|
---|
| 317 | save_LIBS="$LIBS"
|
---|
| 318 | LIBS="$PTHREAD_LIBS $LIBS"
|
---|
| 319 | AC_MSG_CHECKING([for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS])
|
---|
| 320 | AC_TRY_LINK_FUNC(pthread_join, acx_pthread_ok=yes)
|
---|
| 321 | AC_MSG_RESULT($acx_pthread_ok)
|
---|
| 322 | if test x"$acx_pthread_ok" = xno; then
|
---|
| 323 | PTHREAD_LIBS=""
|
---|
| 324 | PTHREAD_CFLAGS=""
|
---|
| 325 | fi
|
---|
| 326 | LIBS="$save_LIBS"
|
---|
| 327 | CFLAGS="$save_CFLAGS"
|
---|
| 328 | fi
|
---|
| 329 |
|
---|
| 330 | # We must check for the threads library under a number of different
|
---|
| 331 | # names; the ordering is very important because some systems
|
---|
| 332 | # (e.g. DEC) have both -lpthread and -lpthreads, where one of the
|
---|
| 333 | # libraries is broken (non-POSIX).
|
---|
| 334 |
|
---|
| 335 | # Create a list of thread flags to try. Items starting with a "-" are
|
---|
| 336 | # C compiler flags, and other items are library names, except for "none"
|
---|
| 337 | # which indicates that we try without any flags at all, and "pthread-config"
|
---|
| 338 | # which is a program returning the flags for the Pth emulation library.
|
---|
| 339 |
|
---|
| 340 | acx_pthread_flags="pthreads none -Kthread -kthread lthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config"
|
---|
| 341 |
|
---|
| 342 | # The ordering *is* (sometimes) important. Some notes on the
|
---|
| 343 | # individual items follow:
|
---|
| 344 |
|
---|
| 345 | # pthreads: AIX (must check this before -lpthread)
|
---|
| 346 | # none: in case threads are in libc; should be tried before -Kthread and
|
---|
| 347 | # other compiler flags to prevent continual compiler warnings
|
---|
| 348 | # -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h)
|
---|
| 349 | # -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able)
|
---|
| 350 | # lthread: LinuxThreads port on FreeBSD (also preferred to -pthread)
|
---|
| 351 | # -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads)
|
---|
| 352 | # -pthreads: Solaris/gcc
|
---|
| 353 | # -mthreads: Mingw32/gcc, Lynx/gcc
|
---|
| 354 | # -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it
|
---|
| 355 | # doesn't hurt to check since this sometimes defines pthreads too;
|
---|
| 356 | # also defines -D_REENTRANT)
|
---|
| 357 | # pthread: Linux, etcetera
|
---|
| 358 | # --thread-safe: KAI C++
|
---|
| 359 | # pthread-config: use pthread-config program (for GNU Pth library)
|
---|
| 360 |
|
---|
| 361 | case "${host_cpu}-${host_os}" in
|
---|
| 362 | *solaris*)
|
---|
| 363 |
|
---|
| 364 | # On Solaris (at least, for some versions), libc contains stubbed
|
---|
| 365 | # (non-functional) versions of the pthreads routines, so link-based
|
---|
| 366 | # tests will erroneously succeed. (We need to link with -pthread or
|
---|
| 367 | # -lpthread.) (The stubs are missing pthread_cleanup_push, or rather
|
---|
| 368 | # a function called by this macro, so we could check for that, but
|
---|
| 369 | # who knows whether they'll stub that too in a future libc.) So,
|
---|
| 370 | # we'll just look for -pthreads and -lpthread first:
|
---|
| 371 |
|
---|
| 372 | acx_pthread_flags="-pthread -pthreads pthread -mt $acx_pthread_flags"
|
---|
| 373 | ;;
|
---|
| 374 | esac
|
---|
| 375 |
|
---|
| 376 | if test x"$acx_pthread_ok" = xno; then
|
---|
| 377 | for flag in $acx_pthread_flags; do
|
---|
| 378 |
|
---|
| 379 | case $flag in
|
---|
| 380 | none)
|
---|
| 381 | AC_MSG_CHECKING([whether pthreads work without any flags])
|
---|
| 382 | ;;
|
---|
| 383 |
|
---|
| 384 | -*)
|
---|
| 385 | AC_MSG_CHECKING([whether pthreads work with $flag])
|
---|
| 386 | PTHREAD_CFLAGS="$flag"
|
---|
| 387 | ;;
|
---|
| 388 |
|
---|
| 389 | pthread-config)
|
---|
| 390 | AC_CHECK_PROG(acx_pthread_config, pthread-config, yes, no)
|
---|
| 391 | if test x"$acx_pthread_config" = xno; then continue; fi
|
---|
| 392 | PTHREAD_CFLAGS="`pthread-config --cflags`"
|
---|
| 393 | PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`"
|
---|
| 394 | ;;
|
---|
| 395 |
|
---|
| 396 | *)
|
---|
| 397 | AC_MSG_CHECKING([for the pthreads library -l$flag])
|
---|
| 398 | PTHREAD_LIBS="-l$flag"
|
---|
| 399 | ;;
|
---|
| 400 | esac
|
---|
| 401 |
|
---|
| 402 | save_LIBS="$LIBS"
|
---|
| 403 | save_CFLAGS="$CFLAGS"
|
---|
| 404 | LIBS="$PTHREAD_LIBS $LIBS"
|
---|
| 405 | CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
|
---|
| 406 |
|
---|
| 407 | # Check for various functions. We must include pthread.h,
|
---|
| 408 | # since some functions may be macros. (On the Sequent, we
|
---|
| 409 | # need a special flag -Kthread to make this header compile.)
|
---|
| 410 | # We check for pthread_join because it is in -lpthread on IRIX
|
---|
| 411 | # while pthread_create is in libc. We check for pthread_attr_init
|
---|
| 412 | # due to DEC craziness with -lpthreads. We check for
|
---|
| 413 | # pthread_cleanup_push because it is one of the few pthread
|
---|
| 414 | # functions on Solaris that doesn't have a non-functional libc stub.
|
---|
| 415 | # We try pthread_create on general principles.
|
---|
| 416 | AC_TRY_LINK([#include <pthread.h>],
|
---|
| 417 | [pthread_t th; pthread_join(th, 0);
|
---|
| 418 | pthread_attr_init(0); pthread_cleanup_push(0, 0);
|
---|
| 419 | pthread_create(0,0,0,0); pthread_cleanup_pop(0); ],
|
---|
| 420 | [acx_pthread_ok=yes])
|
---|
| 421 |
|
---|
| 422 | LIBS="$save_LIBS"
|
---|
| 423 | CFLAGS="$save_CFLAGS"
|
---|
| 424 |
|
---|
| 425 | AC_MSG_RESULT($acx_pthread_ok)
|
---|
| 426 | if test "x$acx_pthread_ok" = xyes; then
|
---|
| 427 | break;
|
---|
| 428 | fi
|
---|
| 429 |
|
---|
| 430 | PTHREAD_LIBS=""
|
---|
| 431 | PTHREAD_CFLAGS=""
|
---|
| 432 | done
|
---|
| 433 | fi
|
---|
| 434 |
|
---|
| 435 | # Various other checks:
|
---|
| 436 | if test "x$acx_pthread_ok" = xyes; then
|
---|
| 437 | save_LIBS="$LIBS"
|
---|
| 438 | LIBS="$PTHREAD_LIBS $LIBS"
|
---|
| 439 | save_CFLAGS="$CFLAGS"
|
---|
| 440 | CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
|
---|
| 441 |
|
---|
| 442 | # Detect AIX lossage: JOINABLE attribute is called UNDETACHED.
|
---|
| 443 | AC_MSG_CHECKING([for joinable pthread attribute])
|
---|
| 444 | attr_name=unknown
|
---|
| 445 | for attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do
|
---|
| 446 | AC_TRY_LINK([#include <pthread.h>], [int attr=$attr;],
|
---|
| 447 | [attr_name=$attr; break])
|
---|
| 448 | done
|
---|
| 449 | AC_MSG_RESULT($attr_name)
|
---|
| 450 | if test "$attr_name" != PTHREAD_CREATE_JOINABLE; then
|
---|
| 451 | AC_DEFINE_UNQUOTED(PTHREAD_CREATE_JOINABLE, $attr_name,
|
---|
| 452 | [Define to necessary symbol if this constant
|
---|
| 453 | uses a non-standard name on your system.])
|
---|
| 454 | fi
|
---|
| 455 |
|
---|
| 456 | AC_MSG_CHECKING([if more special flags are required for pthreads])
|
---|
| 457 | flag=no
|
---|
| 458 | case "${host_cpu}-${host_os}" in
|
---|
| 459 | *-aix* | *-freebsd* | *-darwin*) flag="-D_THREAD_SAFE";;
|
---|
| 460 | *solaris* | *-osf* | *-hpux*) flag="-D_REENTRANT";;
|
---|
| 461 | esac
|
---|
| 462 | AC_MSG_RESULT(${flag})
|
---|
| 463 | if test "x$flag" != xno; then
|
---|
| 464 | PTHREAD_CFLAGS="$flag $PTHREAD_CFLAGS"
|
---|
| 465 | fi
|
---|
| 466 |
|
---|
| 467 | # Detect POSIX sigwait()
|
---|
| 468 | AC_MSG_CHECKING([for POSIX sigwait])
|
---|
| 469 | AC_TRY_LINK([#include <pthread.h>
|
---|
| 470 | #include <signal.h>],
|
---|
| 471 | [sigset_t sigset; int signal; sigwait(&sigset, &signal);],
|
---|
| 472 | ok=yes, ok=unknown)
|
---|
| 473 | if test x"$ok" = xunknown; then
|
---|
| 474 | save_CFLAGS2="$CFLAGS"
|
---|
| 475 | CFLAGS="$CFLAGS -D_POSIX_PTHREAD_SEMANTICS"
|
---|
| 476 | AC_TRY_LINK([#include <pthread.h>
|
---|
| 477 | #include <signal.h>],
|
---|
| 478 | [sigset_t sigset; int signal; sigwait(&sigset, &signal);],
|
---|
| 479 | ok=-D_POSIX_PTHREAD_SEMANTICS, ok=no)
|
---|
| 480 | CFLAGS="$save_CFLAGS2"
|
---|
| 481 | fi
|
---|
| 482 | AC_MSG_RESULT(${ok})
|
---|
| 483 | if test x"$ok" != xno; then
|
---|
| 484 | AC_DEFINE(HAVE_POSIX_SIGWAIT,1,[Define if you have a POSIX \`sigwait\' function.])
|
---|
| 485 | if test x"$ok" != xyes; then
|
---|
| 486 | PTHREAD_CFLAGS="$ok $PTHREAD_CFLAGS"
|
---|
| 487 | fi
|
---|
| 488 | fi
|
---|
| 489 |
|
---|
| 490 | # Detect pthread signal functions
|
---|
| 491 | AC_MSG_CHECKING([for pthread signal functions])
|
---|
| 492 | AC_TRY_LINK([#include <pthread.h>
|
---|
| 493 | #include <signal.h>],
|
---|
| 494 | [pthread_kill(pthread_self(), SIGTERM);],
|
---|
| 495 | ok=yes, ok=no)
|
---|
| 496 | AC_MSG_RESULT(${ok})
|
---|
| 497 | if test x"$ok" = xyes; then
|
---|
| 498 | AC_DEFINE(HAVE_PTHREAD_SIGNAL,1,[Define if you have \`pthread_sigmask\' and \`pthread_kill\' functions.])
|
---|
| 499 | fi
|
---|
| 500 |
|
---|
| 501 | LIBS="$save_LIBS"
|
---|
| 502 | CFLAGS="$save_CFLAGS"
|
---|
| 503 |
|
---|
| 504 | # More AIX lossage: must compile with cc_r
|
---|
| 505 | AC_CHECK_PROG(PTHREAD_CC, cc_r, cc_r, ${CC})
|
---|
| 506 | else
|
---|
| 507 | PTHREAD_CC="$CC"
|
---|
| 508 | fi
|
---|
| 509 |
|
---|
| 510 | AC_SUBST(PTHREAD_LIBS)
|
---|
| 511 | AC_SUBST(PTHREAD_CFLAGS)
|
---|
| 512 | AC_SUBST(PTHREAD_CC)
|
---|
| 513 |
|
---|
| 514 | # Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND:
|
---|
| 515 | if test x"$acx_pthread_ok" = xyes; then
|
---|
| 516 | ifelse([$1],,AC_DEFINE(HAVE_PTHREAD,1,[Define if you have POSIX threads libraries and header files.]),[$1])
|
---|
| 517 | :
|
---|
| 518 | else
|
---|
| 519 | acx_pthread_ok=no
|
---|
| 520 | $2
|
---|
| 521 | fi
|
---|
| 522 | AC_LANG_RESTORE
|
---|
| 523 | ])dnl ACX_PTHREAD
|
---|
| 524 |
|
---|
| 525 | dnl enable maximum compiler warnings. must ignore unknown pragmas to
|
---|
| 526 | dnl build on solaris.
|
---|
| 527 | dnl we only know how to do this for g++
|
---|
| 528 | AC_DEFUN([ACX_CXX_WARNINGS], [
|
---|
| 529 | AC_MSG_CHECKING([for C++ compiler warning flags])
|
---|
| 530 | if test "$GXX" = "yes"; then
|
---|
| 531 | acx_cxx_warnings="-Wall -Wno-unknown-pragmas"
|
---|
| 532 | fi
|
---|
| 533 | if test -n "$acx_cxx_warnings"; then
|
---|
| 534 | CXXFLAGS="$CXXFLAGS $acx_cxx_warnings"
|
---|
| 535 | else
|
---|
| 536 | acx_cxx_warnings="unknown"
|
---|
| 537 | fi
|
---|
| 538 | AC_MSG_RESULT($acx_cxx_warnings)
|
---|
| 539 | ])dnl ACX_CXX_WARNINGS
|
---|
| 540 |
|
---|
| 541 | dnl enable compiler warnings are errors
|
---|
| 542 | dnl we only know how to do this for g++
|
---|
| 543 | AC_DEFUN([ACX_CXX_WARNINGS_ARE_ERRORS], [
|
---|
| 544 | AC_MSG_CHECKING([for C++ compiler warning are errors flags])
|
---|
| 545 | if test "$GXX" = "yes"; then
|
---|
| 546 | acx_cxx_warnings_are_errors="-Werror"
|
---|
| 547 | fi
|
---|
| 548 | if test -n "$acx_cxx_warnings_are_errors"; then
|
---|
| 549 | CXXFLAGS="$CXXFLAGS $acx_cxx_warnings_are_errors"
|
---|
| 550 | else
|
---|
| 551 | acx_cxx_warnings_are_errors="unknown"
|
---|
| 552 | fi
|
---|
| 553 | AC_MSG_RESULT($acx_cxx_warnings_are_errors)
|
---|
| 554 | ])dnl ACX_CXX_WARNINGS_ARE_ERRORS
|
---|