aclocal.m4 4.68 KB
Newer Older
1 2 3
dnl ** Additional Autoconf tests for BIRD configure script
dnl ** (c) 1999 Martin Mares <mj@ucw.cz>

4
AC_DEFUN([BIRD_CHECK_INTEGERS],
5 6 7 8
[AC_CHECK_SIZEOF(char, 0)
AC_CHECK_SIZEOF(short int, 0)
AC_CHECK_SIZEOF(int, 0)
AC_CHECK_SIZEOF(long int, 0)
9
AC_CHECK_SIZEOF(long long int, 0)
10 11 12 13 14
AH_TEMPLATE([INTEGER_8],  [8-bit integer type])
AH_TEMPLATE([INTEGER_16], [16-bit integer type])
AH_TEMPLATE([INTEGER_32], [32-bit integer type])
AH_TEMPLATE([INTEGER_64], [64-bit integer type])

15
for size in 1 2 4 8; do
16 17 18 19 20 21 22 23 24 25
	bits=`expr $size "*" 8`
	AC_MSG_CHECKING([for $bits-bit type])
	if test $ac_cv_sizeof_int = $size ; then
		res=int
	elif test $ac_cv_sizeof_char = $size ; then
		res=char
	elif test $ac_cv_sizeof_short_int = $size ; then
		res="short int"
	elif test $ac_cv_sizeof_long_int = $size ; then
		res="long int"
26 27
	elif test $ac_cv_sizeof_long_long_int = $size ; then
		res="long long int"
28 29 30 31 32 33 34 35 36
	else
		AC_MSG_RESULT([not found])
		AC_MSG_ERROR([Cannot find $bits-bit integer type.])
	fi
	AC_MSG_RESULT($res)
	AC_DEFINE_UNQUOTED(INTEGER_$bits, $res)
	done
])

37
dnl BIRD_CHECK_ENDIAN is unused and obsolete
38
AC_DEFUN([BIRD_CHECK_ENDIAN],
39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
[AC_CACHE_CHECK([CPU endianity], bird_cv_c_endian,[
AC_TRY_RUN([
#include <stdio.h>

unsigned int x = 0x12345678;
unsigned char *z = (unsigned char *) &x;

int main(void)
{
  FILE *f = fopen("conftestresult", "w");
  if (!f) return 10;
  fprintf(f, "%02x %02x %02x %02x", *z, *(z+1), *(z+2), *(z+3));
  fclose(f);
  exit(0);
}
],[
	endian=`cat conftestresult`
	if test "$endian" = "12 34 56 78" ; then
		bird_cv_c_endian=big-endian
	elif test "$endian" = "78 56 34 12" ; then
		bird_cv_c_endian=little-endian
	fi
],[endian="test program failed"],[endian="not available, we're cross compiling"])
if test -z "$bird_cv_c_endian" ; then
	AC_MSG_RESULT($endian)
	AC_MSG_ERROR([Cannot determine CPU endianity.])
	fi
])
case $bird_cv_c_endian in
	big-endian)	AC_DEFINE(CPU_BIG_ENDIAN) ;;
	little-endian)	AC_DEFINE(CPU_LITTLE_ENDIAN) ;;
	esac
])

73
AC_DEFUN([BIRD_CHECK_STRUCT_ALIGN],
74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94
[AC_CACHE_CHECK([usual alignment of structures],bird_cv_c_struct_align,[
AC_TRY_RUN([
#include <stdio.h>

struct { char x; long int y; } ary[2];

int main(void)
{
  FILE *f = fopen("conftestresult", "w");
  if (!f) return 10;
  fprintf(f, "%d", sizeof(ary)/2);
  fclose(f);
  exit(0);
}
],[
bird_cv_c_struct_align=`cat conftestresult`
],[
AC_MSG_RESULT([test program failed])
AC_MSG_ERROR([Cannot determine structure alignment])
],[bird_cv_c_struct_align=16])
])
95
AC_DEFINE_UNQUOTED([CPU_STRUCT_ALIGN], [$bird_cv_c_struct_align], [Usual alignment of structures])
96 97
])

98
AC_DEFUN([BIRD_CHECK_TIME_T],
99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120
[AC_CACHE_CHECK([characteristics of time_t], bird_cv_type_time_t, [
AC_TRY_RUN([
#include <stdio.h>
#include <sys/time.h>
#include <limits.h>

int main(void)
{
  FILE *f = fopen("conftestresult", "w");
  if (!f) return 10;
  fprintf(f, "%d-bit ", sizeof(time_t)*CHAR_BIT);
  if ((time_t) -1 > 0) fprintf(f, "un");
  fprintf(f, "signed");
  fclose(f);
  exit(0);
}
],[bird_cv_type_time_t=`cat conftestresult`
],[	AC_MSG_RESULT([test program failed])
	AC_MSG_ERROR([Cannot determine time_t size and signedness.])
],[bird_cv_type_time_t="32-bit signed"])
])
case "$bird_cv_type_time_t" in
121
	*64-bit*)	AC_DEFINE([TIME_T_IS_64BIT], [1], [Define to 1 if time_t is 64 bit]) ;;
122 123 124
	esac
case "$bird_cv_type_time_t" in
	*unsigned*)	;;
125
	*)		AC_DEFINE([TIME_T_IS_SIGNED], [1], [Define to 1 if time_t is signed]) ;;
126 127
	esac
])
128

129
AC_DEFUN([BIRD_CHECK_STRUCT_IP_MREQN],
Martin Mareš's avatar
Martin Mareš committed
130
[AC_CACHE_CHECK([for struct ip_mreqn], bird_cv_struct_ip_mreqn,[
131 132 133 134 135 136
AC_TRY_COMPILE([#include <netinet/in.h>
],[struct ip_mreqn x;
],[bird_cv_struct_ip_mreqn=yes
],[bird_cv_struct_ip_mreqn=no
])])
if test "$bird_cv_struct_ip_mreqn" = yes ; then
137
	AC_DEFINE([HAVE_STRUCT_IP_MREQN], [1], [Define to 1 if you have struct ip_mreqn])
138 139
fi
])
140

141
AC_DEFUN([BIRD_CHECK_PTHREADS],
142 143 144 145 146 147 148 149 150 151 152
[
  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.h>]], [[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"
])

153
AC_DEFUN([BIRD_CHECK_GCC_OPTION],
154 155 156 157 158 159 160 161 162 163
[
  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"
])

164
AC_DEFUN([BIRD_ADD_GCC_OPTION],
165 166 167 168 169
[
  if test "$$1" = yes ; then
    CFLAGS="$CFLAGS $2"
  fi
])
170

171 172 173 174 175 176 177 178 179 180 181 182
# BIRD_CHECK_PROG_FLAVOR_GNU(PROGRAM-PATH, IF-SUCCESS, [IF-FAILURE])
# copied autoconf internal _AC_PATH_PROG_FLAVOR_GNU
m4_define([BIRD_CHECK_PROG_FLAVOR_GNU],
[# Check for GNU $1
case `"$1" --version 2>&1` in
*GNU*)
  $2;;
m4_ifval([$3],
[*)
  $3;;
])esac
])#