configure.ac 11.2 KB
Newer Older
1 2
dnl ** This is a configure script template for BIRD
dnl ** Process it with autoconf to get ./configure
3
dnl ** (c) 1999--2000 Martin Mares <mj@ucw.cz>
4

5 6
AC_INIT
AC_CONFIG_SRCDIR([conf/confbase.Y])
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 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
AC_CONFIG_AUX_DIR([tools])

AC_ARG_ENABLE([client],
  [AS_HELP_STRING([--enable-client], [enable building of BIRD client @<:@yes@:>@])],
  [],
  [enable_client=yes]
)

AC_ARG_ENABLE([debug],
  [AS_HELP_STRING([--enable-debug], [enable internal debugging routines @<:@no@:>@])],
  [],
  [enable_debug=no]
)

AC_ARG_ENABLE([ipv6],
  [AS_HELP_STRING([--enable-ipv6], [enable building of IPv6 version @<:@no@:>@])],
  [],
  [enable_ipv6=no]
)

AC_ARG_ENABLE([memcheck],
  [AS_HELP_STRING([--enable-memcheck], [check memory allocations when debugging @<:@yes@:>@])],
  [],
  [enable_memcheck=yes]
)

AC_ARG_ENABLE([pthreads],
  [AS_HELP_STRING([--enable-pthreads], [enable POSIX threads support @<:@try@:>@])],
  [],
  [enable_pthreads=try]
)

AC_ARG_WITH([protocols],
  [AS_HELP_STRING([--with-protocols=LIST], [include specified routing protocols @<:@all@:>@])],
  [],
  [with_protocols="all"]
)

AC_ARG_WITH([suffix],
  [AS_HELP_STRING([--with-suffix=STRING], [use specified suffix for BIRD files @<:@6 for IPv6@:>@])],
  [given_suffix="yes"]
)

AC_ARG_WITH([sysconfig],
  [AS_HELP_STRING([--with-sysconfig=FILE], [use specified BIRD system configuration file])],
  []
)

AC_ARG_WITH([runtimedir],
  [AS_HELP_STRING([--with-runtimedir=PATH], [path for runtime files @<:@LOCALSTATEDIR/run@:>@])],
  [runtimedir="$with_runtimedir"],
  [runtimedir="\$(localstatedir)/run"]
)

AC_ARG_WITH([iproutedir],
  [AS_HELP_STRING([--with-iproutedir=PATH], [path to iproute2 config files @<:@/etc/iproute2@:>@])],
  [given_iproutedir="yes"]
)

66 67 68 69
AC_ARG_VAR([FLEX], [location of the Flex program])
AC_ARG_VAR([BISON], [location of the Bison program])
AC_ARG_VAR([M4], [location of the M4 program])

70

71
if test "$srcdir" = . ; then
72 73 74 75 76 77
  # Building in current directory => create obj directory holding all objects
  objdir=obj
  mkdir -p obj
  srcdir_rel=..
  makefiles="Makefile:tools/Makefile-top.in obj/Makefile:tools/Makefile.in obj/Rules:tools/Rules.in"
  exedir=..
78
else
79 80 81 82 83
  # Building in separate directory
  objdir=.
  srcdir_rel=$srcdir
  makefiles="Makefile:tools/Makefile.in Rules:tools/Rules.in"
  exedir=.
84
fi
85

86
case $srcdir_rel in
87 88
  /*)	srcdir_rel_mf=$srcdir_rel ;;
  *)	srcdir_rel_mf="\$(root-rel)$srcdir_rel" ;;
89
esac
90 91 92 93 94

AC_SUBST([objdir])
AC_SUBST([exedir])
AC_SUBST([srcdir_rel_mf])
AC_SUBST([runtimedir])
95

96
if test "$enable_ipv6" = yes ; then
97 98 99
  ip=ipv6
  SUFFIX=6
  proto_radv=radv
100
else
101 102
  ip=ipv4
  SUFFIX=""
103 104
fi

105
if test "$given_suffix" = yes ; then
106
  SUFFIX="$with_suffix"
107
fi
108
AC_SUBST([SUFFIX])
109 110

if test "$enable_debug" = yes ; then
111 112
  CONFIG_FILE="bird$SUFFIX.conf"
  CONTROL_SOCKET="bird$SUFFIX.ctl"
113
else
114 115
  CONFIG_FILE="\$(sysconfdir)/bird$SUFFIX.conf"
  CONTROL_SOCKET="$runtimedir/bird$SUFFIX.ctl"
116
fi
117 118
AC_SUBST([CONFIG_FILE])
AC_SUBST([CONTROL_SOCKET])
119

120 121 122 123
AC_SEARCH_LIBS([clock_gettime], [rt posix4],
  [],
  [AC_MSG_ERROR([Function clock_gettime not available.])]
)
124

125
AC_CANONICAL_HOST
126

127
# Store this value because ac_test_CFLAGS is overwritten by AC_PROG_CC
128
if test "$ac_test_CFLAGS" != set ; then
129
  bird_cflags_default=yes
130 131
fi

132 133
AC_PROG_CC
if test -z "$GCC" ; then
134
  AC_MSG_ERROR([This program requires the GNU C Compiler.])
135 136
fi

137
if test "$enable_pthreads" != no ; then
138 139 140 141 142 143 144 145 146 147 148 149 150 151
  BIRD_CHECK_PTHREADS

  if test "$bird_cv_lib_pthreads" = yes ; then
    AC_DEFINE([USE_PTHREADS], [1], [Define to 1 if pthreads are enabled])
    CFLAGS="$CFLAGS -pthread"
    LDFLAGS="$LDFLAGS -pthread"
    proto_bfd=bfd
  elif test "$enable_pthreads" = yes ; then
    AC_MSG_ERROR([POSIX threads not available.])
  fi

  if test "$enable_pthreads" = try ; then
    enable_pthreads="$bird_cv_lib_pthreads"
  fi
152 153
fi

154
if test "$bird_cflags_default" = yes ; then
155 156 157 158 159 160 161 162 163 164
  BIRD_CHECK_GCC_OPTION([bird_cv_c_option_wno_pointer_sign], [-Wno-pointer-sign], [-Wall])
  BIRD_CHECK_GCC_OPTION([bird_cv_c_option_wno_missing_init], [-Wno-missing-field-initializers], [-Wall -Wextra])
  BIRD_CHECK_GCC_OPTION([bird_cv_c_option_fno_strict_aliasing], [-fno-strict-aliasing])
  BIRD_CHECK_GCC_OPTION([bird_cv_c_option_fno_strict_overflow], [-fno-strict-overflow])

  CFLAGS="$CFLAGS -Wall -Wextra -Wstrict-prototypes -Wno-parentheses"
  BIRD_ADD_GCC_OPTION([bird_cv_c_option_wno_pointer_sign], [-Wno-pointer-sign])
  BIRD_ADD_GCC_OPTION([bird_cv_c_option_wno_missing_init], [-Wno-missing-field-initializers])
  BIRD_ADD_GCC_OPTION([bird_cv_c_option_fno_strict_aliasing], [-fno-strict-aliasing])
  BIRD_ADD_GCC_OPTION([bird_cv_c_option_fno_strict_overflow], [-fno-strict-overflow])
165
fi
166
AC_MSG_CHECKING([CFLAGS])
167
AC_MSG_RESULT([$CFLAGS])
168 169


170 171 172
AC_PROG_CPP
AC_PROG_INSTALL
AC_PROG_RANLIB
173 174 175
AC_CHECK_PROG([FLEX], [flex], [flex])
AC_CHECK_PROG([BISON], [bison], [bison])
AC_CHECK_PROGS([M4], [gm4 m4])
176 177 178 179

test -z "$FLEX"	 && AC_MSG_ERROR([Flex is missing.])
test -z "$BISON" && AC_MSG_ERROR([Bison is missing.])
test -z "$M4"	 && AC_MSG_ERROR([M4 is missing.])
180 181 182 183 184

BIRD_CHECK_PROG_FLAVOR_GNU([$M4],
  [],
  [AC_MSG_ERROR([Provided M4 is not GNU M4.])]
)
185

186
if test -n "$with_sysconfig" -a "$with_sysconfig" != no ; then
187 188 189 190 191 192 193 194
  if test -f $with_sysconfig ; then
    sysdesc=$with_sysconfig
  else
    sysdesc=$srcdir/sysdep/cf/$with_sysconfig
    if ! test -f $sysdesc ; then
      sysdesc=$sysdesc.h
    fi
  fi
195
elif test -f sysconfig.h ; then
196
  sysdesc=sysconfig
197
else
198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245
  case "$ip:$host_os" in
    ipv6:linux*)
      sysdesc=linux-v6
      default_iproutedir="/etc/iproute2"
      ;;
    ipv4:linux*)
      sysdesc=linux
      default_iproutedir="/etc/iproute2"
      ;;
    ipv6:netbsd*)
      sysdesc=bsd-v6
      CPPFLAGS="$CPPFLAGS -I/usr/pkg/include"
      LDFLAGS="$LDFLAGS -L/usr/pkg/lib -R/usr/pkg/lib"
      ;;
    ipv4:netbsd*)
      sysdesc=bsd
      CPPFLAGS="$CPPFLAGS -I/usr/pkg/include"
      LDFLAGS="$LDFLAGS -L/usr/pkg/lib -R/usr/pkg/lib"
      ;;
    ipv6:freebsd*)
      sysdesc=bsd-v6
      ;;
    ipv4:freebsd*)
      sysdesc=bsd
      ;;
    ipv6:dragonfly*)
      sysdesc=bsd-v6
      ;;
    ipv4:dragonfly*)
      sysdesc=bsd
      ;;
    ipv6:kfreebsd*)
      sysdesc=bsd-v6
      ;;
    ipv4:kfreebsd*)
      sysdesc=bsd
      ;;
    ipv6:openbsd*)
      sysdesc=bsd-v6
      ;;
    ipv4:openbsd*)
      sysdesc=bsd
      ;;
    *)
      AC_MSG_ERROR([Cannot determine correct system configuration. Please use --with-sysconfig to set it manually.])
      ;;
  esac
  sysdesc=$srcdir/sysdep/cf/$sysdesc.h
246
fi
247
AC_MSG_CHECKING([which OS configuration should we use])
248
AC_MSG_RESULT([$sysdesc])
249
if ! test -f $sysdesc ; then
250
  AC_MSG_ERROR([The system configuration file is missing.])
251
fi
252
sysname=`echo $sysdesc | sed 's/\.h$//'`
253
AC_DEFINE_UNQUOTED([SYSCONF_INCLUDE], ["$sysdesc"], [Which sysdep header to include])
254 255 256

AC_MSG_CHECKING([system-dependent directories])
sysdep_dirs="`sed <$sysdesc '/^Link: /!d;s/^Link: \(.*\)$/\1/' | tr '\012' ' '` lib"
257 258
AC_MSG_RESULT([$sysdep_dirs])
AC_SUBST([sysdep_dirs])
259

260 261 262 263 264 265 266
if test "$with_iproutedir" = no ; then with_iproutedir= ; fi

if test -n "$given_iproutedir"
then iproutedir=$with_iproutedir
else iproutedir=$default_iproutedir
fi

267
AC_SUBST([iproutedir])
268

269
all_protocols="$proto_bfd bgp ospf pipe $proto_radv rip static"
270 271 272
if test "$ip" = ipv6 ; then
   all_protocols="$all_protocols babel"
fi
273 274 275
all_protocols=`echo $all_protocols | sed 's/ /,/g'`

if test "$with_protocols" = all ; then
276
  with_protocols="$all_protocols"
277 278
fi

279 280 281 282 283 284 285 286 287
AH_TEMPLATE([CONFIG_BABEL], 	[Babel protocol])
AH_TEMPLATE([CONFIG_BFD],	[BFD protocol])
AH_TEMPLATE([CONFIG_BGP],	[BGP protocol])
AH_TEMPLATE([CONFIG_OSPF],	[OSPF protocol])
AH_TEMPLATE([CONFIG_PIPE],	[Pipe protocol])
AH_TEMPLATE([CONFIG_RADV],	[RAdv protocol])
AH_TEMPLATE([CONFIG_RIP],	[RIP protocol])
AH_TEMPLATE([CONFIG_STATIC],	[Static protocol])

288 289
AC_MSG_CHECKING([protocols])
protocols=`echo "$with_protocols" | sed 's/,/ /g'`
290
if test "$protocols" = no ; then protocols= ; fi
291
for a in $protocols ; do
292 293 294 295 296 297 298 299
  if ! test -f $srcdir/proto/$a/Makefile ; then
    AC_MSG_RESULT([failed])
    AC_MSG_ERROR([Requested protocol $a not found])
  fi
  AC_DEFINE_UNQUOTED([CONFIG_`echo $a | tr 'a-z' 'A-Z'`])
done
AC_MSG_RESULT([ok])
AC_SUBST([protocols])
300

301
case $sysdesc in
302 303 304 305
  */linux*|*/linux-v6*)
    AC_CHECK_HEADER([linux/rtnetlink.h],
      [],
      [AC_MSG_ERROR([Appropriate version of Linux kernel headers not found.])],
306 307 308 309 310
      [
	dnl Some older versions of Linux kernel headers require these includes
	#include <asm/types.h>
	#include <sys/socket.h>
      ]
311 312
    )
    ;;
313 314
esac

315
AC_CHECK_HEADERS_ONCE([alloca.h syslog.h])
316
AC_CHECK_MEMBERS([struct sockaddr.sa_len], [], [], [#include <sys/socket.h>])
317 318 319 320 321 322

AC_C_BIGENDIAN(
  [AC_DEFINE([CPU_BIG_ENDIAN], [1], [Define to 1 if cpu is big endian])],
  [AC_DEFINE([CPU_LITTLE_ENDIAN], [1], [Define to 1 if cpu is little endian])],
  [AC_MSG_ERROR([Cannot determine CPU endianity.])]
)
323

324
if test "$enable_debug" = yes ; then
325 326 327 328 329 330 331
  AC_DEFINE([DEBUGGING], [1], [Define to 1 if debugging is enabled])
  if test "$enable_memcheck" = yes ; then
    AC_CHECK_LIB([dmalloc], [dmalloc_debug])
    if test $ac_cv_lib_dmalloc_dmalloc_debug != yes ; then
      AC_CHECK_LIB([efence], [malloc])
    fi
  fi
332 333
fi

334 335
CLIENT=
CLIENT_LIBS=
336
if test "$enable_client" = yes ; then
337
  CLIENT=birdc
338 339 340 341 342 343
  BASE_LIBS="$LIBS"
  LIBS=""

  AC_CHECK_HEADERS([curses.h],
    [],
    [AC_MSG_ERROR([The client requires ncurses library. Either install the library or use --disable-client to compile without the client.])],
344
    [AC_INCLUDES_DEFAULT]
345 346
  )

347 348 349 350 351 352 353 354
  AC_SEARCH_LIBS([tgetent], [tinfo tinfow ncurses curses termcap],
    [TINFO_LIBS="$LIBS"; LIBS=""],
    [AC_MSG_ERROR([The client requires ncurses library. Either install the library or use --disable-client to compile without the client.])],
  )

  AC_CHECK_HEADERS([readline/readline.h readline/history.h],
    [],
    [AC_MSG_ERROR([The client requires GNU Readline library. Either install the library or use --disable-client to compile without the client.])],
355
    [AC_INCLUDES_DEFAULT]
356 357 358 359 360 361
  )

  AC_SEARCH_LIBS([rl_callback_read_char], [readline],
    [READLINE_LIBS="$LIBS"; LIBS=""],
    [AC_MSG_ERROR([The client requires GNU Readline library. Either install the library or use --disable-client to compile without the client.])],
    [$TINFO_LIBS]
362 363 364 365 366
  )

  AC_CHECK_LIB([readline], [rl_crlf],
    [AC_DEFINE([HAVE_RL_CRLF], [1], [Define to 1 if you have rl_crlf()])],
    [],
367
    [$TINFO_LIBS]
368 369 370 371 372
  )

  AC_CHECK_LIB([readline], [rl_ding],
    [AC_DEFINE([HAVE_RL_DING], [1], [Define to 1 if you have rl_ding()])],
    [],
373
    [$TINFO_LIBS]
374
  )
375 376

  LIBS="$BASE_LIBS"
377
  CLIENT_LIBS="$READLINE_LIBS $TINFO_LIBS"
378
fi
379 380
AC_SUBST([CLIENT])
AC_SUBST([CLIENT_LIBS])
381

382
mkdir -p $objdir/sysdep
383
AC_CONFIG_HEADERS([$objdir/sysdep/autoconf.h:sysdep/autoconf.h.in])
384 385 386 387 388 389 390 391 392 393
AC_CONFIG_COMMANDS([merge],
  [ export CPP="$CPP"; $srcdir/tools/mergedirs $srcdir $srcdir_rel $objdir $sysdep_dirs ],
  [
    srcdir=$srcdir
    srcdir_rel=$srcdir_rel
    objdir=$objdir
    sysdep_dirs="$sysdep_dirs"
  ]
)
AC_CONFIG_FILES([$makefiles])
394
AC_OUTPUT
395

396 397
rm -f $objdir/sysdep/paths.h

398 399 400 401 402 403 404 405 406 407
AC_MSG_RESULT()
AC_MSG_RESULT([BIRD was configured with the following options:])
AC_MSG_RESULT([        Source directory:	$srcdir])
AC_MSG_RESULT([        Object directory:	$objdir])
AC_MSG_RESULT([        Iproute2 directory:	$iproutedir])
AC_MSG_RESULT([        System configuration:	$sysdesc])
AC_MSG_RESULT([        Debugging:		$enable_debug])
AC_MSG_RESULT([        POSIX threads:		$enable_pthreads])
AC_MSG_RESULT([        Routing protocols:	$protocols])
AC_MSG_RESULT([        Client:			$enable_client])
408
rm -f $objdir/.*-stamp