configure.ac 11.9 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

Ondřej Zajíček's avatar
Ondřej Zajíček committed
5 6
AC_INIT
AC_CONFIG_SRCDIR([conf/confbase.Y])
Ondřej Zajíček's avatar
Ondřej Zajíček committed
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
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],
Ondřej Zajíček's avatar
Ondřej Zajíček committed
51
  [AS_HELP_STRING([--with-sysconfig=FILE], [use specified BIRD system configuration file])]
Ondřej Zajíček's avatar
Ondřej Zajíček committed
52 53 54
)

AC_ARG_WITH([runtimedir],
55
  [AS_HELP_STRING([--with-runtimedir=PATH], [run-state data, obsolete variant of --runstatedir])],
Ondřej Zajíček's avatar
Ondřej Zajíček committed
56
  [runstatedir="$with_runtimedir"]
Ondřej Zajíček's avatar
Ondřej Zajíček committed
57 58 59 60 61 62 63
)

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

64 65 66 67
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])

68

69
if test "$srcdir" = . ; then
Ondřej Zajíček's avatar
Ondřej Zajíček committed
70 71 72 73 74 75
  # 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=..
76
else
Ondřej Zajíček's avatar
Ondřej Zajíček committed
77 78 79 80 81
  # Building in separate directory
  objdir=.
  srcdir_rel=$srcdir
  makefiles="Makefile:tools/Makefile.in Rules:tools/Rules.in"
  exedir=.
82
fi
Ondřej Zajíček's avatar
Ondřej Zajíček committed
83

84
case $srcdir_rel in
Ondřej Zajíček's avatar
Ondřej Zajíček committed
85 86
  /*)	srcdir_rel_mf=$srcdir_rel ;;
  *)	srcdir_rel_mf="\$(root-rel)$srcdir_rel" ;;
87
esac
Ondřej Zajíček's avatar
Ondřej Zajíček committed
88 89 90 91

AC_SUBST([objdir])
AC_SUBST([exedir])
AC_SUBST([srcdir_rel_mf])
92 93 94 95 96

# Workaround for older Autoconfs that do not define runstatedir
AS_IF([test -z "${runstatedir}"], [runstatedir='${localstatedir}/run'])
AC_SUBST([runstatedir])

97

98
if test "$enable_ipv6" = yes ; then
Ondřej Zajíček's avatar
Ondřej Zajíček committed
99 100 101
  ip=ipv6
  SUFFIX=6
  proto_radv=radv
102
else
Ondřej Zajíček's avatar
Ondřej Zajíček committed
103 104
  ip=ipv4
  SUFFIX=""
105 106
fi

107
if test "$given_suffix" = yes ; then
Ondřej Zajíček's avatar
Ondřej Zajíček committed
108
  SUFFIX="$with_suffix"
109
fi
Ondřej Zajíček's avatar
Ondřej Zajíček committed
110
AC_SUBST([SUFFIX])
111 112

if test "$enable_debug" = yes ; then
Ondřej Zajíček's avatar
Ondřej Zajíček committed
113 114
  CONFIG_FILE="bird$SUFFIX.conf"
  CONTROL_SOCKET="bird$SUFFIX.ctl"
115
else
Ondřej Zajíček's avatar
Ondřej Zajíček committed
116
  CONFIG_FILE="\$(sysconfdir)/bird$SUFFIX.conf"
117
  CONTROL_SOCKET="\$(runstatedir)/bird.ctl"
118
fi
Ondřej Zajíček's avatar
Ondřej Zajíček committed
119 120
AC_SUBST([CONFIG_FILE])
AC_SUBST([CONTROL_SOCKET])
121

Ondřej Zajíček's avatar
Ondřej Zajíček committed
122 123 124 125
AC_SEARCH_LIBS([clock_gettime], [rt posix4],
  [],
  [AC_MSG_ERROR([Function clock_gettime not available.])]
)
126

127
AC_CANONICAL_HOST
128

129
# Store this value because ac_test_CFLAGS is overwritten by AC_PROG_CC
130
if test "$ac_test_CFLAGS" != set ; then
Ondřej Zajíček's avatar
Ondřej Zajíček committed
131
  bird_cflags_default=yes
132 133
fi

134 135
AC_PROG_CC
if test -z "$GCC" ; then
Ondřej Zajíček's avatar
Ondřej Zajíček committed
136
  AC_MSG_ERROR([This program requires the GNU C Compiler.])
137 138
fi

139
if test "$enable_pthreads" != no ; then
Ondřej Zajíček's avatar
Ondřej Zajíček committed
140 141 142 143 144 145 146 147 148 149 150 151 152 153
  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
154 155
fi

156
if test "$bird_cflags_default" = yes ; then
Ondřej Zajíček's avatar
Ondřej Zajíček committed
157 158 159 160 161 162 163 164 165 166
  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])
167
fi
168
AC_MSG_CHECKING([CFLAGS])
Ondřej Zajíček's avatar
Ondřej Zajíček committed
169
AC_MSG_RESULT([$CFLAGS])
170 171


172 173 174
AC_PROG_CPP
AC_PROG_INSTALL
AC_PROG_RANLIB
Ondřej Zajíček's avatar
Ondřej Zajíček committed
175 176 177
AC_CHECK_PROG([FLEX], [flex], [flex])
AC_CHECK_PROG([BISON], [bison], [bison])
AC_CHECK_PROGS([M4], [gm4 m4])
178 179 180 181

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.])
Ondřej Zajíček's avatar
Ondřej Zajíček committed
182 183 184 185 186

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

188
if test -n "$with_sysconfig" -a "$with_sysconfig" != no ; then
Ondřej Zajíček's avatar
Ondřej Zajíček committed
189 190 191 192 193 194 195 196
  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
197
elif test -f sysconfig.h ; then
Ondřej Zajíček's avatar
Ondřej Zajíček committed
198
  sysdesc=sysconfig
199
else
Ondřej Zajíček's avatar
Ondřej Zajíček committed
200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220
  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
221 222
      CPPFLAGS="$CPPFLAGS -I/usr/local/include"
      LDFLAGS="$LDFLAGS -L/usr/local/lib"
Ondřej Zajíček's avatar
Ondřej Zajíček committed
223 224 225
      ;;
    ipv4:freebsd*)
      sysdesc=bsd
226 227
      CPPFLAGS="$CPPFLAGS -I/usr/local/include"
      LDFLAGS="$LDFLAGS -L/usr/local/lib"
Ondřej Zajíček's avatar
Ondřej Zajíček committed
228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251
      ;;
    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
252
fi
253
AC_MSG_CHECKING([which OS configuration should we use])
Ondřej Zajíček's avatar
Ondřej Zajíček committed
254
AC_MSG_RESULT([$sysdesc])
255
if ! test -f $sysdesc ; then
Ondřej Zajíček's avatar
Ondřej Zajíček committed
256
  AC_MSG_ERROR([The system configuration file is missing.])
257
fi
258
sysname=`echo $sysdesc | sed 's/\.h$//'`
Ondřej Zajíček's avatar
Ondřej Zajíček committed
259
AC_DEFINE_UNQUOTED([SYSCONF_INCLUDE], ["$sysdesc"], [Which sysdep header to include])
260 261 262

AC_MSG_CHECKING([system-dependent directories])
sysdep_dirs="`sed <$sysdesc '/^Link: /!d;s/^Link: \(.*\)$/\1/' | tr '\012' ' '` lib"
Ondřej Zajíček's avatar
Ondřej Zajíček committed
263 264
AC_MSG_RESULT([$sysdep_dirs])
AC_SUBST([sysdep_dirs])
265

266 267 268 269 270 271 272
if test "$with_iproutedir" = no ; then with_iproutedir= ; fi

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

Ondřej Zajíček's avatar
Ondřej Zajíček committed
273
AC_SUBST([iproutedir])
274

Ondřej Zajíček's avatar
Ondřej Zajíček committed
275
all_protocols="$proto_bfd bgp mrt ospf pipe $proto_radv rip static"
276 277 278
if test "$ip" = ipv6 ; then
   all_protocols="$all_protocols babel"
fi
279 280 281
all_protocols=`echo $all_protocols | sed 's/ /,/g'`

if test "$with_protocols" = all ; then
Ondřej Zajíček's avatar
Ondřej Zajíček committed
282
  with_protocols="$all_protocols"
283 284
fi

Ondřej Zajíček's avatar
Ondřej Zajíček committed
285 286 287
AH_TEMPLATE([CONFIG_BABEL], 	[Babel protocol])
AH_TEMPLATE([CONFIG_BFD],	[BFD protocol])
AH_TEMPLATE([CONFIG_BGP],	[BGP protocol])
Ondřej Zajíček's avatar
Ondřej Zajíček committed
288
AH_TEMPLATE([CONFIG_MRT],	[MRT protocol])
Ondřej Zajíček's avatar
Ondřej Zajíček committed
289 290 291 292 293 294
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])

295 296
AC_MSG_CHECKING([protocols])
protocols=`echo "$with_protocols" | sed 's/,/ /g'`
Martin Mareš's avatar
Martin Mareš committed
297
if test "$protocols" = no ; then protocols= ; fi
298
for a in $protocols ; do
Ondřej Zajíček's avatar
Ondřej Zajíček committed
299 300 301 302 303 304 305 306
  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])
307

308
case $sysdesc in
Ondřej Zajíček's avatar
Ondřej Zajíček committed
309 310 311 312
  */linux*|*/linux-v6*)
    AC_CHECK_HEADER([linux/rtnetlink.h],
      [],
      [AC_MSG_ERROR([Appropriate version of Linux kernel headers not found.])],
313 314 315 316 317
      [
	dnl Some older versions of Linux kernel headers require these includes
	#include <asm/types.h>
	#include <sys/socket.h>
      ]
Ondřej Zajíček's avatar
Ondřej Zajíček committed
318 319
    )
    ;;
320 321
esac

322
AC_CHECK_HEADERS_ONCE([alloca.h syslog.h])
323
AC_CHECK_MEMBERS([struct sockaddr.sa_len], [], [], [#include <sys/socket.h>])
Ondřej Zajíček's avatar
Ondřej Zajíček committed
324 325 326 327 328 329

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.])]
)
330

331 332 333 334 335 336 337 338 339 340 341 342 343 344
BIRD_CHECK_ANDROID_GLOB
if test "$bird_cv_lib_glob" = no ; then
  AC_MSG_ERROR([glob.h not found.])
elif test "$bird_cv_lib_glob" != yes ; then
  LIBS="$LIBS $bird_cv_lib_glob"
fi

BIRD_CHECK_ANDROID_LOG
if test "$bird_cv_lib_log" = no ; then
  AC_MSG_ERROR([don't know how to link syslog.])
elif test "$bird_cv_lib_log" != yes ; then
  LIBS="$LIBS $bird_cv_lib_log"
fi

345
if test "$enable_debug" = yes ; then
Ondřej Zajíček's avatar
Ondřej Zajíček committed
346 347 348 349 350 351 352
  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
353 354
fi

355 356
CLIENT=
CLIENT_LIBS=
357
if test "$enable_client" = yes ; then
Ondřej Zajíček's avatar
Ondřej Zajíček committed
358
  CLIENT=birdc
359 360 361 362 363 364
  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.])],
365
    [AC_INCLUDES_DEFAULT]
Ondřej Zajíček's avatar
Ondřej Zajíček committed
366 367
  )

368 369 370 371 372 373 374 375
  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.])],
376
    [AC_INCLUDES_DEFAULT]
377 378 379 380 381 382
  )

  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]
Ondřej Zajíček's avatar
Ondřej Zajíček committed
383 384 385 386 387
  )

  AC_CHECK_LIB([readline], [rl_crlf],
    [AC_DEFINE([HAVE_RL_CRLF], [1], [Define to 1 if you have rl_crlf()])],
    [],
388
    [$TINFO_LIBS]
Ondřej Zajíček's avatar
Ondřej Zajíček committed
389 390 391 392 393
  )

  AC_CHECK_LIB([readline], [rl_ding],
    [AC_DEFINE([HAVE_RL_DING], [1], [Define to 1 if you have rl_ding()])],
    [],
394
    [$TINFO_LIBS]
Ondřej Zajíček's avatar
Ondřej Zajíček committed
395
  )
396 397

  LIBS="$BASE_LIBS"
Ondřej Zajíček's avatar
Ondřej Zajíček committed
398
  CLIENT_LIBS="$READLINE_LIBS $TINFO_LIBS"
399
fi
Ondřej Zajíček's avatar
Ondřej Zajíček committed
400 401
AC_SUBST([CLIENT])
AC_SUBST([CLIENT_LIBS])
402

403
mkdir -p $objdir/sysdep
404
AC_CONFIG_HEADERS([$objdir/sysdep/autoconf.h:sysdep/autoconf.h.in])
Ondřej Zajíček's avatar
Ondřej Zajíček committed
405
AC_CONFIG_COMMANDS([merge],
406
  [ export CPP="$CPP"; sh $srcdir/tools/mergedirs $srcdir $srcdir_rel $objdir $sysdep_dirs ],
Ondřej Zajíček's avatar
Ondřej Zajíček committed
407 408 409 410 411 412 413 414
  [
    srcdir=$srcdir
    srcdir_rel=$srcdir_rel
    objdir=$objdir
    sysdep_dirs="$sysdep_dirs"
  ]
)
AC_CONFIG_FILES([$makefiles])
415
AC_OUTPUT
416

417 418
rm -f $objdir/sysdep/paths.h

Ondřej Zajíček's avatar
Ondřej Zajíček committed
419 420 421 422 423 424 425 426 427 428
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])
429 430

rm -f $objdir/.*-stamp