sac-su2.m4 16.9 KB
Newer Older
Pekka Pessi's avatar
Pekka Pessi committed
1 2 3 4 5 6 7
dnl ======================================================================
dnl su module
dnl ======================================================================

dnl This is in a separate file because otherwise AM_CONFIG_HEADER in
dnl SAC_SOFIA_SU confuses autoheader. If SAC_SOFIA_SU is included to a
dnl aclocal.m4 of another package, autoheader returns a spurious error and
8 9
dnl automake complains about missing
dnl libsofia-sip-ua/su/sofia-sip/su_configure.h.
Pekka Pessi's avatar
Pekka Pessi committed
10 11 12 13 14 15 16 17 18

AC_DEFUN([SAC_SOFIA_SU], [
# Beginning of SAC_SOFIA_SU

AC_REQUIRE([SAC_WITH_RT])

# ======================================================================
# Check for features used by su

19
dnl Define compilation options for su_configure.h
Pekka Pessi's avatar
Pekka Pessi committed
20 21 22

case "$target" in 
*-*-solaris?.* )
23
  SAC_SU_DEFINE(__EXTENSIONS__, 1, [Define to 1 in Solaris in order to get POSIX extensions.])
Pekka Pessi's avatar
Pekka Pessi committed
24 25 26 27 28 29
;;
esac

# Check includes used by su includes
AC_CHECK_HEADER(sys/types.h, 
	SAC_SU_DEFINE([SU_HAVE_SYS_TYPES], 1, 
30
		     [Define to 1 if Sofia uses sys/types.h]))
Pekka Pessi's avatar
Pekka Pessi committed
31 32 33 34 35

ax_inttypes=false
AC_CHECK_HEADER(stdint.h, [
	ax_inttypes=true
	SAC_SU_DEFINE([SU_HAVE_STDINT], 1, 
36
		     [Define to 1 if Sofia uses stdint.h])])
Pekka Pessi's avatar
Pekka Pessi committed
37 38 39
AC_CHECK_HEADER(inttypes.h,[
	ax_inttypes=true
	SAC_SU_DEFINE([SU_HAVE_INTTYPES], 1, 
40
		     [Define to 1 if Sofia uses inttypes.h])])
Pekka Pessi's avatar
Pekka Pessi committed
41 42 43 44 45

if $ax_inttypes; then : ; else 
	AC_MSG_ERROR("No <stdint.h> or <inttypes.h> found.")
fi

Martti Mela's avatar
Martti Mela committed
46
if test "x$MINGW_ENVIRONMENT" != x1 ; then
Martti Mela's avatar
Martti Mela committed
47
  AC_CHECK_HEADER(pthread.h, 
48
        HAVE_PTHREADS=1;
Pekka Pessi's avatar
Pekka Pessi committed
49
	SAC_SU_DEFINE([SU_HAVE_PTHREADS], 1, [Sofia SU uses pthreads]))
Martti Mela's avatar
Martti Mela committed
50
else
51
  HAVE_PTHREADS=1;
Martti Mela's avatar
Martti Mela committed
52 53
  SAC_SU_DEFINE([SU_HAVE_PTHREADS], 1, [Sofia SU uses pthreads])
fi
Pekka Pessi's avatar
Pekka Pessi committed
54 55

dnl ===========================================================================
Pekka Pessi's avatar
Pekka Pessi committed
56
dnl Checks for typedefs, headers, structures, and compiler characteristics.
Pekka Pessi's avatar
Pekka Pessi committed
57 58 59 60 61 62 63 64
dnl ===========================================================================

AC_REQUIRE([AC_C_CONST])
AC_REQUIRE([AC_HEADER_TIME])
AC_REQUIRE([AC_TYPE_SIZE_T])
AC_REQUIRE([AC_C_VAR_FUNC])
AC_REQUIRE([AC_C_MACRO_FUNCTION])

Pekka Pessi's avatar
Pekka Pessi committed
65
AC_REQUIRE([AC_C_INLINE])
Pekka Pessi's avatar
Pekka Pessi committed
66 67 68

case "$ac_cv_c_inline" in
  yes) SAC_SU_DEFINE(su_inline, static inline, [
69
		Define to declarator for static inline functions.
Pekka Pessi's avatar
Pekka Pessi committed
70 71
	])dnl
       SAC_SU_DEFINE(SU_INLINE, inline, [
72
		Define to declarator for inline functions.
Pekka Pessi's avatar
Pekka Pessi committed
73 74
	])dnl
       SAC_SU_DEFINE(SU_HAVE_INLINE, 1, [
75
		Define to 1 if you have inline functions.
Pekka Pessi's avatar
Pekka Pessi committed
76 77 78 79 80 81 82 83 84 85 86 87
	])dnl
  ;;
  no)  SAC_SU_DEFINE(su_inline, static)dnl
       SAC_SU_DEFINE(SU_INLINE)dnl
       SAC_SU_DEFINE(SU_HAVE_INLINE)dnl
  ;;
  *)   SAC_SU_DEFINE_UNQUOTED(su_inline, static $ac_cv_c_inline)dnl
       SAC_SU_DEFINE_UNQUOTED(SU_INLINE, $ac_cv_c_inline)dnl
       SAC_SU_DEFINE(SU_HAVE_INLINE, 1)dnl
  ;;
esac

88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107
AC_ARG_ENABLE(size-compat,
[  --disable-size-compat            use compatibility size_t types (enabled)],
 , enable_size_compat=yes)

if test X$enable_size_compat != Xyes; then
       SAC_SU_DEFINE(SOFIA_ISIZE_T, size_t)dnl
       SAC_SU_DEFINE(ISIZE_MAX, SIZE_MAX)dnl
       SAC_SU_DEFINE(SOFIA_ISSIZE_T, ssize_t)dnl
       SAC_SU_DEFINE(ISSIZE_MAX, SSIZE_MAX)dnl
       SAC_SU_DEFINE(SOFIA_USIZE_T, size_t)dnl
       SAC_SU_DEFINE(USIZE_MAX, SIZE_MAX)dnl
else
       SAC_SU_DEFINE(SOFIA_ISIZE_T, int)dnl
       SAC_SU_DEFINE(ISIZE_MAX, INT_MAX)dnl
       SAC_SU_DEFINE(SOFIA_ISSIZE_T, int)dnl
       SAC_SU_DEFINE(ISSIZE_MAX, INT_MAX)dnl
       SAC_SU_DEFINE(SOFIA_USIZE_T, unsigned)dnl
       SAC_SU_DEFINE(USIZE_MAX, UINT_MAX)dnl
fi

108

109 110 111 112 113 114 115 116 117 118 119 120 121 122 123
dnl ======================================================================
dnl SAC_ENABLE_COREFOUNDATION
dnl ======================================================================
AC_ARG_ENABLE(corefoundation,
[  --enable-corefoundation     compile with OSX COREFOUNDATION (disabled)],
 , enable_corefoundation=no)
AM_CONDITIONAL(COREFOUNDATION, test $enable_corefoundation = yes)

if test $enable_corefoundation = yes ; then
   SAC_SU_DEFINE([SU_HAVE_OSX_CF_API], 1, [
Define as 1 if you have OSX CoreFoundation interface])
   LIBS="-framework CoreFoundation -framework SystemConfiguration $LIBS"
fi


124 125 126
### ======================================================================
### Test if we have stack suitable for handling tags directly
###
127 128 129 130 131 132 133

test -z "$ac_cv_tagstack" && 
case "$target" in 
i?86-*-* ) ac_cv_tagstack=yes ;;
esac

AC_CACHE_CHECK([for stack suitable for tags],[ac_cv_tagstack],[
134 135
ac_cv_tagstack=no

136
AC_RUN_IFELSE([
137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177
#if HAVE_INTTYPES_H
#include <inttypes.h>
#endif
#if HAVE_STDINT_H
#include <stdint.h>
#endif
#include <stdarg.h>

typedef void *tp;
typedef intptr_t tv;

int test1(tv l, tv h, ...)
{
  va_list ap;
  tv i, *p = &l;

  va_start(ap, h);

  if (*p++ != l || *p++ != h) return 1;

  for (i = l; i <= h; i++) {
    if (*p++ != i)
      return 1;
  }

  for (i = l; i <= h; i++) {
    if (va_arg(ap, tv) != i)
      return 1;
  }

  va_end(ap);

  return 0;
}

int main(int avc, char **av)
{
  return test1((tv)1, (tv)10,
	       (tv)1, (tv)2, (tv)3, (tv)4, (tv)5,
	       (tv)6, (tv)7, (tv)8, (tv)9, (tv)10);
}
178
],[ac_cv_tagstack=yes],[ac_cv_tagstack=no],[ac_cv_tagstack=no])])
179 180 181 182 183 184 185 186 187

if test $ac_cv_tagstack = yes ; then
SAC_SU_DEFINE([SU_HAVE_TAGSTACK], 1, [
Define this as 1 if your compiler puts the variable argument list nicely in memory])
fi

dnl ======================================================================
dnl Socket features

Pekka Pessi's avatar
Pekka Pessi committed
188 189 190
AC_REQUIRE([AC_SYS_SA_LEN])
if test "$ac_cv_sa_len" = yes ;then
  SAC_SU_DEFINE([SU_HAVE_SOCKADDR_SA_LEN], 1, 
191
	        [Define to 1 if you have sa_len in struct sockaddr])
Pekka Pessi's avatar
Pekka Pessi committed
192 193 194
fi

AC_REQUIRE([AC_STRUCT_SIN6])
Pekka Pessi's avatar
Pekka Pessi committed
195 196
case $ac_cv_sin6 in 
yes) SAC_SU_DEFINE(SU_HAVE_IN6, 1, [
197
	Define to 1 if you have struct sockaddr_in6]) ;;
198 199
 no) ;;
  *) AC_MSG_ERROR([Inconsistent struct sockaddr_sin6 test]) ;;
Pekka Pessi's avatar
Pekka Pessi committed
200 201
esac

Pekka Pessi's avatar
Pekka Pessi committed
202
AC_CHECK_HEADERS([unistd.h sys/time.h])
203

204
AC_CHECK_HEADERS([fcntl.h dirent.h])
205

206
AC_CHECK_HEADERS([winsock2.h], [
207 208 209
  AC_DEFINE([HAVE_WIN32], 1, [Define to 1 you have WIN32])
  SAC_SU_DEFINE([SU_HAVE_WINSOCK], 1, [Define to 1 you have WinSock])
  SAC_SU_DEFINE([SU_HAVE_WINSOCK2], 1, [Define to 1 you have WinSock2])
210
  SAC_SU_DEFINE([SU_HAVE_SOCKADDR_STORAGE], 1, 
211
      [Define to 1 if you have struct sockaddr_storage])
Martti Mela's avatar
Martti Mela committed
212
  AC_DEFINE([HAVE_ADDRINFO], 1,
213
      [Define to 1 if you have addrinfo structure.])
Martti Mela's avatar
Martti Mela committed
214
  AC_DEFINE([HAVE_GETADDRINFO], 1,
215
      [Define to 1 if you have addrinfo structure.])
Martti Mela's avatar
Martti Mela committed
216
  AC_DEFINE([HAVE_FREEADDRINFO], 1,
217
      [Define to 1 if you have addrinfo structure.])
Martti Mela's avatar
Martti Mela committed
218
  SAC_SU_DEFINE([SU_HAVE_ADDRINFO], 1,
219
      [Define to 1 if you have addrinfo structure.])
220
  AC_CHECK_HEADERS([windef.h ws2tcpip.h])
Martti Mela's avatar
Martti Mela committed
221 222
  AC_CHECK_HEADERS([iphlpapi.h], [
    AC_DEFINE([HAVE_INTERFACE_INFO_EX], 1, [
223
       Define to 1 if you have WIN32 INTERFACE_INFO_EX type.])
Martti Mela's avatar
Martti Mela committed
224
    AC_DEFINE([HAVE_SIO_ADDRESS_LIST_QUERY], 1, [
225
       Define to 1 if you have WIN32 WSAIoctl SIO_ADDRESS_LIST_QUERY.])
Martti Mela's avatar
Martti Mela committed
226 227 228 229 230
  ], [], [#if HAVE_WINDEF_H
#include <windef.h>
#include <winbase.h>
#endif
  ])
231
  AC_DEFINE([HAVE_FILETIME], 1, [
232
     Define to 1 if you have WIN32 FILETIME type and 
233
     GetSystemTimeAsFileTime().])
234 235
],[
dnl no winsock2
236
SAC_SU_DEFINE([SU_HAVE_BSDSOCK], 1, [Define to 1 if you have BSD socket interface])
237 238
AC_CHECK_HEADERS([sys/socket.h sys/ioctl.h sys/filio.h sys/sockio.h \
		  sys/select.h])
239
AC_CHECK_HEADERS([netinet/in.h arpa/inet.h netdb.h \
240
                  net/if.h net/if_types.h ifaddr.h netpacket/packet.h],,,
241 242 243
		[
#include <sys/types.h>
#include <sys/socket.h>])
244

245 246 247 248 249
AC_CHECK_DECL([MSG_TRUNC],
AC_DEFINE([HAVE_MSG_TRUNC],1,[Define to 1 if you have MSG_TRUNC flag]),,[
#include <sys/types.h>
#include <sys/socket.h>])

250 251 252 253 254 255 256 257 258 259 260 261
AC_CACHE_CHECK([for struct addrinfo],
[ac_cv_struct_addrinfo],[
ac_cv_struct_addrinfo=no
if test "$ac_cv_header_sys_socket_h" = yes; then
  AC_EGREP_HEADER([struct.+addrinfo], [netdb.h], [
  ac_cv_struct_addrinfo=yes])
else
  ac_cv_struct_addrinfo='sys/socket.h missing'
fi])

if test "$ac_cv_struct_addrinfo" = yes; then
  SAC_SU_DEFINE([SU_HAVE_ADDRINFO], 1, 
262
    [Define to 1 if you have struct addrinfo.])
263
fi
264

Pekka Pessi's avatar
Pekka Pessi committed
265 266 267 268 269 270 271 272 273 274 275
AC_CACHE_CHECK([for struct sockaddr_storage],
[ac_cv_struct_sockaddr_storage],[
ac_cv_struct_sockaddr_storage=no
if test "$ac_cv_header_sys_socket_h" = yes; then
  AC_EGREP_HEADER([struct.+sockaddr_storage], [sys/socket.h], [
  ac_cv_struct_sockaddr_storage=yes])
else
  ac_cv_struct_sockaddr_storage='sys/socket.h missing'
fi])
if test "$ac_cv_struct_sockaddr_storage" = yes; then
  SAC_SU_DEFINE(SU_HAVE_SOCKADDR_STORAGE, 1, 
276
    [Define to 1 if you have struct sockaddr_storage])
Pekka Pessi's avatar
Pekka Pessi committed
277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295
fi

AC_CACHE_CHECK([for field ifr_index in struct ifreq],
[ac_cv_struct_ifreq_ifr_index],[
ac_cv_struct_ifreq_ifr_index=no
if test "1${ac_cv_header_arpa_inet_h}2${ac_cv_header_netdb_h}3${ac_cv_header_sys_socket_h}4${ac_cv_header_net_if_h}" = 1yes2yes3yes4yes; then
AC_TRY_COMPILE([#include <sys/types.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <sys/socket.h>
#include <net/if.h>], [
struct ifreq ifreq; int index; index = ifreq.ifr_index;
], [ac_cv_struct_ifreq_ifr_index=yes])
else
  ac_cv_struct_ifreq_ifr_index='net/if.h missing'
fi # arpa/inet.h && netdb.h && sys/socket.h && net/if.h
])
if test "$ac_cv_struct_ifreq_ifr_index" = yes ; then
  :
296
  AC_DEFINE(HAVE_IFR_INDEX, 1, [Define to 1 if you have ifr_index in <net/if.h>])
Pekka Pessi's avatar
Pekka Pessi committed
297 298 299 300 301 302 303 304 305 306 307 308 309 310 311
else
AC_CACHE_CHECK([for field ifr_ifindex in struct ifreq],
[ac_cv_struct_ifreq_ifr_ifindex],[
ac_cv_struct_ifreq_ifr_ifindex=no
if test "1${ac_cv_header_arpa_inet_h}2${ac_cv_header_netdb_h}3${ac_cv_header_sys_socket_h}4${ac_cv_header_net_if_h}" = 1yes2yes3yes4yes; then
AC_TRY_COMPILE([#include <sys/types.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <sys/socket.h>
#include <net/if.h>], [
struct ifreq ifreq; int index; index = ifreq.ifr_ifindex;
], ac_cv_struct_ifreq_ifr_ifindex=yes)
else
  ac_cv_struct_ifreq_ifr_ifindex='net/if.h missing'
fi # arpa/inet.h && netdb.h && sys/socket.h && net/if.h
312
])
Pekka Pessi's avatar
Pekka Pessi committed
313 314
if test "$ac_cv_struct_ifreq_ifr_ifindex" = yes; then
  :
315
  AC_DEFINE(HAVE_IFR_IFINDEX, 1, [Define to 1 if you have ifr_ifindex in <net/if.h>])
Pekka Pessi's avatar
Pekka Pessi committed
316 317 318
fi

fi # ifr_index in struct ifreq
319

Pekka Pessi's avatar
Pekka Pessi committed
320
dnl SIOGCIFCONF & struct ifconf
Pekka Pessi's avatar
Pekka Pessi committed
321 322 323 324 325 326 327 328 329
AC_CACHE_CHECK([for struct ifconf],
[ac_cv_struct_ifconf],[
ac_cv_struct_ifconf=no
if test "$ac_cv_header_net_if_h" = yes; then
  AC_EGREP_HEADER(struct.+ifconf, net/if.h, ac_cv_struct_ifconf=yes)
else
  ac_cv_struct_ifconf='net/if.h missing'
fi])
if test "$ac_cv_struct_ifconf" = yes; then
330
  AC_DEFINE(HAVE_IFCONF, 1, [Define to 1 if you have SIOCGIFCONF])
Pekka Pessi's avatar
Pekka Pessi committed
331
fi
Pekka Pessi's avatar
Pekka Pessi committed
332

Pekka Pessi's avatar
Pekka Pessi committed
333 334 335 336
AC_CACHE_CHECK([for ioctl SIOCGIFNUM],
[ac_cv_ioctl_siocgifnum],[
ac_cv_ioctl_siocgifnum=no
if test "$ac_cv_header_sys_sockio_h" = yes; then
Pekka Pessi's avatar
Pekka Pessi committed
337 338 339 340 341
AC_EGREP_CPP(yes, [
#include <sys/sockio.h>
#ifdef SIOCGIFNUM
  yes
#endif
Pekka Pessi's avatar
Pekka Pessi committed
342 343 344 345 346 347
], [ac_cv_ioctl_siocgifnum=yes])
else
  ac_cv_ioctl_siocgifnum='sys/sockio.h missing'
fi])
if test "$ac_cv_ioctl_siocgifnum" = yes; then
  HAVE_IFNUM=1
348
  AC_DEFINE(HAVE_IFNUM, 1, [Define to 1 if you have SIOCGIFNUM ioctl])
Pekka Pessi's avatar
Pekka Pessi committed
349 350 351 352
else
  HAVE_IFNUM=0
fi

353 354
]) dnl AC_CHECK_HEADERS([winsock2.h ... ])

355

356 357 358 359
# ===========================================================================
# Checks for libraries
# ===========================================================================

Pekka Pessi's avatar
Pekka Pessi committed
360 361
SAC_CHECK_SU_LIBS

362 363 364 365 366 367 368 369
# No GLib path explicitly defined, use pkg-config
AC_ARG_WITH(glib,
[  --with-glib=version     use GLib (default=2.0)], [
case "$with_glib" in 
yes | "" ) with_glib=2.0 ;;
esac
], [with_glib=2.0])

Martti Mela's avatar
Martti Mela committed
370
AC_ARG_WITH(glib-dir,
371 372
[  --with-glib-dir=PREFIX  explicitly define GLib path],, 
 with_glib_dir="pkg-config")
Martti Mela's avatar
Martti Mela committed
373

374
if test "$with_glib" = no || test "$with_glib_dir" = "no" ; then
Martti Mela's avatar
Martti Mela committed
375

376
  : # No glib (also disable gobject)
Martti Mela's avatar
Martti Mela committed
377

378
elif test "$with_glib_dir" = "pkg-config" ; then 
Martti Mela's avatar
Martti Mela committed
379

380 381
  PKG_CHECK_MODULES(GLIB, glib-$with_glib, [HAVE_GLIB=yes], [HAVE_GLIB=no])
  PKG_CHECK_MODULES(GOBJECT, gobject-$with_glib >= 2.4, [HAVE_GOBJECT=yes], [HAVE_GOBJECT=no])
Martti Mela's avatar
Martti Mela committed
382

383
else # GLib path is explicitly defined 
Martti Mela's avatar
Martti Mela committed
384

385 386 387
  gprefix=$with_glib_dir
  GLIB_VERSION="$with_glib"
  GLIBXXX=glib-$with_glib
Martti Mela's avatar
Martti Mela committed
388

389 390 391
  # XXX: add non-pkgconfig checks for gobject
  HAVE_GOBJECT=no

392 393 394 395 396 397
  if test "$gprefix" = "yes" ; then 
    for gprefix in /usr /usr/local /opt/$GLIBXXX
    do
  	test -d $gprefix/include/$GLIBXXX && break
    done
  fi
Martti Mela's avatar
Martti Mela committed
398

399 400 401 402 403 404
  if ! test -d $gprefix/include/$GLIBXXX ; then
    AC_MSG_ERROR("No $GLIBXXX in --with-glib=$with_glib_dir")
  else
    exec_gprefix=${gprefix}
    glibdir=${exec_gprefix}/lib
    gincludedir=${gprefix}/include
Martti Mela's avatar
Martti Mela committed
405

406 407 408
    # glib_genmarshal=glib-genmarshal
    # gobject_query=gobject-query
    # glib_mkenums=glib-mkenums
409

410 411 412 413 414 415 416 417 418
    HAVE_GLIB=yes
    
    if test "x$MINGW_ENVIRONMENT" = x1 ; then
      GLIB_LIBS="${glibdir}/lib$GLIBXXX.dll.a ${glibdir}/libintl.a ${glibdir}/libiconv.a"
    else
      GLIB_LIBS="-L${glibdir} -l$GLIBXXX -lintl -liconv"
    fi
    GLIB_CFLAGS="-I${gincludedir}/$GLIBXXX -I${glibdir}/$GLIBXXX/include"
  fi
419

420
fi # GLib path is explicitly defined 
421

422 423 424


if test "x$HAVE_GLIB" = xyes ; then
425
  SAC_COMMA_APPEND([SOFIA_GLIB_PKG_REQUIRES],[glib-2.0])
426 427
fi
if test "x$HAVE_GLIB" = xyes ; then
428
  SAC_COMMA_APPEND([SOFIA_GLIB_PKG_REQUIRES],[gobject-2.0 >= 2.4])
429 430
fi

431 432
AM_CONDITIONAL([HAVE_GLIB], [test "x$HAVE_GLIB" = xyes])
AM_CONDITIONAL([HAVE_GOBJECT], [test "x$HAVE_GOBJECT" = xyes])
433 434 435 436 437 438
AC_SUBST([GLIB_LIBS])
AC_SUBST([GLIB_CFLAGS])
AC_SUBST([GLIB_VERSION])
AC_SUBST([GOBJECT_LIBS])
AC_SUBST([GOBJECT_CFLAGS])
AC_SUBST([GOBJECT_VERSION])
439
AC_SUBST([SOFIA_GLIB_PKG_REQUIRES])
Martti Mela's avatar
Martti Mela committed
440

Pekka Pessi's avatar
Pekka Pessi committed
441 442 443 444
# ===========================================================================
# Checks for library functions.
# ===========================================================================

445 446 447 448 449 450 451 452 453
AC_SEARCH_LIBS(socket, xnet socket)
AC_SEARCH_LIBS(inet_ntop, socket nsl)
dnl AC_SEARCH_LIBS(inet_pton, socket nsl)
AC_SEARCH_LIBS(getipnodebyname, xnet socket nsl)
AC_SEARCH_LIBS(gethostbyname, xnet nsl)
AC_SEARCH_LIBS(getaddrinfo, xnet socket nsl)

AC_CHECK_FUNCS([gettimeofday strerror random initstate tcsetattr flock alarm \
                socketpair gethostname gethostbyname getipnodebyname \
454
                poll epoll_create select if_nameindex \
455 456 457
	        getaddrinfo getnameinfo freeaddrinfo gai_strerror getifaddrs \
                getline getdelim getpass])
# getline getdelim getpass are _GNU_SOURCE stuff
458

459
if test $ac_cv_func_poll = yes ; then
460
  SAC_SU_DEFINE([SU_HAVE_POLL], 1, [Define to 1 if you have poll().])
461
fi
Pekka Pessi's avatar
Pekka Pessi committed
462

463 464 465 466
if test $ac_cv_func_epoll_create = yes ; then
  AC_DEFINE([HAVE_EPOLL], 1, [Define to 1 if you have epoll interface.])
fi

467 468
if test $ac_cv_func_if_nameindex = yes ; then
  SAC_SU_DEFINE([SU_HAVE_IF_NAMEINDEX], 1, 
469
    [Define to 1 if you have if_nameindex().])
470
fi
Pekka Pessi's avatar
Pekka Pessi committed
471 472 473

AC_REQUIRE([SAC_WITH_RT])
if test "${with_rt}" != no; then
474
    AC_CHECK_FUNCS([clock_gettime clock_getcpuclockid])
Pekka Pessi's avatar
Pekka Pessi committed
475 476
fi

477 478
SAC_REPLACE_FUNCS([memmem memccpy memspn memcspn strcasestr strtoull \
		   inet_ntop inet_pton])
Pekka Pessi's avatar
Pekka Pessi committed
479 480


481 482 483 484 485 486
# ===========================================================================
# Check pthread_rwlock_unlock()
# ===========================================================================

AC_DEFUN([AC_DEFINE_HAVE_PTHREAD_RWLOCK],[dnl
AC_DEFINE([HAVE_PTHREAD_RWLOCK], 1,[
487
Define to 1 if you have working pthread_rwlock_t implementation.
488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506

   A  thread  may hold multiple concurrent read locks on rwlock - that is,
   successfully call the pthread_rwlock_rdlock() function  n  times.  If
   so,  the  application  shall  ensure that the thread performs matching
   unlocks - that is, it  calls  the  pthread_rwlock_unlock()  function  n
   times.
])])

if test x$HAVE_PTHREADS = x1 ; then

AC_RUN_IFELSE([
#define _XOPEN_SOURCE (500)

#include <pthread.h>

pthread_rwlock_t rw;

int main()
{
507
  pthread_rwlock_init(&rw, NULL);
508 509 510
  pthread_rwlock_rdlock(&rw);
  pthread_rwlock_rdlock(&rw);
  pthread_rwlock_unlock(&rw);
511 512
  /* pthread_rwlock_trywrlock() should fail (not return 0) */
  return pthread_rwlock_trywrlock(&rw) != 0 ? 0  : 1;
513 514 515 516 517 518 519
}
],[AC_DEFINE_HAVE_PTHREAD_RWLOCK],[
AC_MSG_WARN([Recursive pthread_rwlock_rdlock() does not work!!! ])
],[AC_DEFINE_HAVE_PTHREAD_RWLOCK])

fi

Pekka Pessi's avatar
Pekka Pessi committed
520 521 522 523 524
# ===========================================================================
# Check IPv6 addresss configuration
# ===========================================================================
case "$target" in
 *-*-linux*) AC_DEFINE([HAVE_PROC_NET_IF_INET6], 1, 
525
	[Define to 1 if you have /proc/net/if_inet6 control file]) ;;
Pekka Pessi's avatar
Pekka Pessi committed
526 527
esac

528
AM_CONFIG_HEADER([libsofia-sip-ua/su/sofia-sip/su_configure.h])
529 530

# End of SAC_SOFIA_SU
Pekka Pessi's avatar
Pekka Pessi committed
531 532
])

533 534 535 536 537
dnl
dnl Append a value $2 to a variable, separating values with comma
dnl
AC_DEFUN([SAC_COMMA_APPEND],[$1="`test -n "$$1" && echo "$$1, "`$2"])

Pekka Pessi's avatar
Pekka Pessi committed
538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556
# SAC_SU_DEFINE(VARIABLE, [VALUE], [DESCRIPTION])
# -------------------------------------------
# Set VARIABLE to VALUE, verbatim, or 1.  Remember the value
# and if VARIABLE is affected the same VALUE, do nothing, else
# die.  The third argument is used by autoheader.
m4_define([SAC_SU_DEFINE],[
cat >>confdefs.h <<\_AXEOF
[@%:@define] $1 m4_if($#, 2, [$2], $#, 3, [$2], 1)
_AXEOF
])

# SAC_SU_DEFINE_UNQUOTED(VARIABLE, [VALUE], [DESCRIPTION])
# ----------------------------------------------------
# Similar, but perform shell substitutions $ ` \ once on VALUE.
m4_define([SAC_SU_DEFINE_UNQUOTED],[
cat >>confdefs.h <<_ACEOF
[@%:@define] $1 m4_if($#, 2, [$2], $#, 3, [$2], 1)
_ACEOF
])
557 558

AC_DEFUN([SAC_REPLACE_FUNCS],[dnl
559
AC_CHECK_FUNCS([$1],ifelse([$2], , :,[$2]),[dnl
560 561 562 563 564 565 566 567
case "$REPLACE_LIBADD" in
    "$ac_func.lo"   | \
  *" $ac_func.lo"   | \
    "$ac_func.lo "* | \
  *" $ac_func.lo "* ) ;;
  *) REPLACE_LIBADD="$REPLACE_LIBADD $ac_func.lo" ;;
esac])
AC_SUBST([REPLACE_LIBADD])
568
ifelse([$3], , :, [$3])
569
])