dnl ** Additional Autoconf tests for BIRD configure script dnl ** (c) 1999 Martin Mares dnl ** (c) 2021 Maria Matejka AC_DEFUN([BIRD_CHECK_POINTER_ALIGNMENT], [ AC_CACHE_CHECK( [how pointers are aligned], [bird_cv_pointer_alignment], AC_COMPILE_IFELSE([ AC_LANG_PROGRAM( [ _Static_assert(_Alignof(void *) == 8, "bad"); ], [] ) ], [bird_cv_pointer_alignment=8], AC_COMPILE_IFELSE([ AC_LANG_PROGRAM( [ _Static_assert(_Alignof(void *) == 4, "bad"); ], [] ) ], [bird_cv_pointer_alignment=4], [bird_cv_pointer_alignment=unknown] )) ) ]) AC_DEFUN([BIRD_CHECK_THREAD_LOCAL], [ AC_CACHE_CHECK( [whether _Thread_local is known], [bird_cv_thread_local], AC_COMPILE_IFELSE([ AC_LANG_PROGRAM( [ static _Thread_local int x = 42; ], [] ) ], [bird_cv_thread_local=yes], [AC_COMPILE_IFELSE([ AC_LANG_PROGRAM( [ static __thread int x = 42; ], [] ) ], [bird_cv_thread_local=__thread], [bird_cv_thread_local=no] )]) ) ]) AC_DEFUN([BIRD_CHECK_PTHREADS], [ bird_tmp_cflags="$CFLAGS" CFLAGS="$CFLAGS -pthread" AC_CACHE_CHECK( [whether POSIX threads are available], [bird_cv_lib_pthreads], [ AC_LINK_IFELSE( [ AC_LANG_PROGRAM( [ #include ], [ pthread_t pt; pthread_create(&pt, NULL, NULL, NULL); pthread_spinlock_t lock; pthread_spin_lock(&lock); ] ) ], [bird_cv_lib_pthreads=yes], [bird_cv_lib_pthreads=no] ) ] ) CFLAGS="$bird_tmp_cflags" ]) AC_DEFUN([BIRD_CHECK_MALLOPT], [ AC_CACHE_CHECK( [for mallopt], [bird_cv_mallopt], [ AC_COMPILE_IFELSE( [ AC_LANG_PROGRAM( [ #include ], [ mallopt(M_ARENA_MAX, 1); ] ) ], [bird_cv_mallopt=yes], [bird_cv_mallopt=no] ) ] ) ]) AC_DEFUN([BIRD_CHECK_MPLS_KERNEL], [ AC_CACHE_CHECK( [for Linux MPLS headers], [bird_cv_mpls_kernel], [ AC_COMPILE_IFELSE( [ AC_LANG_PROGRAM( [ #include #include #include #include void t(int arg); ], [ t(AF_MPLS); t(RTA_VIA); t(RTA_NEWDST); t(RTA_ENCAP_TYPE); t(RTA_ENCAP); struct rtvia rtvia; t(LWTUNNEL_ENCAP_MPLS); ] ) ], [bird_cv_mpls_kernel=yes], [bird_cv_mpls_kernel=no] ) ] ) ]) AC_DEFUN([BIRD_CHECK_CLOCK], [ AC_CACHE_CHECK( [for $1], [bird_cv_clock_$1], [ AC_COMPILE_IFELSE( [ AC_LANG_PROGRAM( [ #include ], [ struct timespec tv; clock_gettime($1, &tv); ] ) ], [bird_cv_clock_$1=yes], [bird_cv_clock_$1=no] ) ] ) ]) AC_DEFUN([BIRD_CHECK_ANDROID_GLOB], [ AC_CACHE_CHECK( [for glob.h], [bird_cv_lib_glob], AC_LINK_IFELSE([ AC_LANG_PROGRAM( [ #include #include ], [ glob(NULL, 0, NULL, NULL); ] ) ], [bird_cv_lib_glob=yes], [ bird_tmp_libs="$LIBS" LIBS="$LIBS -landroid-glob" AC_LINK_IFELSE([ AC_LANG_PROGRAM( [ #include #include ], [ glob(NULL, 0, NULL, NULL); ] ) ], [bird_cv_lib_glob=-landroid-glob], [bird_cv_lib_glob=no] ) LIBS="$bird_tmp_libs" ] ) ) ]) AC_DEFUN([BIRD_CHECK_ANDROID_LOG], [ AC_CACHE_CHECK( [for syslog lib flags], [bird_cv_lib_log], AC_LINK_IFELSE([ AC_LANG_PROGRAM( [ #include ], [ syslog(0, ""); ] ) ], [bird_cv_lib_log=yes], [ bird_tmp_libs="$LIBS" LIBS="$LIBS -llog" AC_LINK_IFELSE([ AC_LANG_PROGRAM( [ #include ], [ syslog(0, ""); ] ) ], [bird_cv_lib_log=-llog], [bird_cv_lib_log=no] ) LIBS="$bird_tmp_libs" ] ) ) ]) AC_DEFUN([BIRD_CHECK_LTO], [ bird_tmp_cflags="$CFLAGS" bird_tmp_ldflags="$LDFLAGS" CFLAGS="-flto" LDFLAGS="-flto=4" AC_CACHE_CHECK( [whether link time optimizer is available], [bird_cv_c_lto], [ AC_LINK_IFELSE( [AC_LANG_PROGRAM()], [bird_cv_c_lto=yes], [bird_cv_c_lto=no] ) ] ) CFLAGS="$bird_tmp_cflags" LDFLAGS="$bird_tmp_ldflags" ]) AC_DEFUN([BIRD_CHECK_GCC_OPTION], [ bird_tmp_cflags="$CFLAGS" CFLAGS="$3 $2" AC_CACHE_CHECK( [whether CC supports $2], [$1], [ AC_COMPILE_IFELSE( [AC_LANG_PROGRAM()], [$1=yes], [$1=no] ) ] ) CFLAGS="$bird_tmp_cflags" ]) AC_DEFUN([BIRD_ADD_GCC_OPTION], [ if test "$$1" = yes ; then CFLAGS="$CFLAGS $2" fi ]) AC_DEFUN([BIRD_CHECK_AND_ADD_GCC_OPTION], [ BIRD_CHECK_GCC_OPTION($@) BIRD_ADD_GCC_OPTION($1,$2) ]) # BIRD_CHECK_PROG_FLAVOR_GNU(PROGRAM-PATH, IF-SUCCESS, [IF-FAILURE]) # copied from autoconf internal _AC_PATH_PROG_FLAVOR_GNU AC_DEFUN([BIRD_CHECK_PROG_FLAVOR_GNU], [ # Check for GNU $1 case `"$1" --version 2>&1` in *GNU*) $2 ;; m4_ifval([$3], [*) $3 ;; ] ) esac ]) AC_DEFUN([BIRD_CHECK_BISON_VERSION], [ $1=`bison --version | ( read line; echo ${line##* } )` case "$$1" in 1.* | 2.0* | 2.1* | 2.2* | 2.3*) AC_MSG_ERROR([Provided Bison version $$1 is too old, need at least 2.4]) ;; 2.*) bird_bison_synclines=no bird_bison_enhanced_error=no ;; 3.* | 4.* | 5.* | 6.* | 7.* | 8.* | 9.*) bird_bison_synclines=yes bird_bison_enhanced_error=yes ;; *) AC_MSG_ERROR([Couldn't parse Bison version $$1. Call the developers for help.]) ;; esac ])