]>
Commit | Line | Data |
---|---|---|
2f9bcf97 MM |
1 | dnl ** This is a configure script template for BIRD |
2 | dnl ** Process it with autoconf to get ./configure | |
9fac310d | 3 | dnl ** (c) 1999--2000 Martin Mares <mj@ucw.cz> |
2f9bcf97 | 4 | |
7a855725 OZ |
5 | AC_INIT |
6 | AC_CONFIG_SRCDIR([conf/confbase.Y]) | |
b81a73d1 OZ |
7 | AC_CONFIG_AUX_DIR([tools]) |
8 | ||
9 | AC_ARG_ENABLE([client], | |
10 | [AS_HELP_STRING([--enable-client], [enable building of BIRD client @<:@yes@:>@])], | |
11 | [], | |
12 | [enable_client=yes] | |
13 | ) | |
14 | ||
15 | AC_ARG_ENABLE([debug], | |
16 | [AS_HELP_STRING([--enable-debug], [enable internal debugging routines @<:@no@:>@])], | |
17 | [], | |
18 | [enable_debug=no] | |
19 | ) | |
20 | ||
21 | AC_ARG_ENABLE([ipv6], | |
22 | [AS_HELP_STRING([--enable-ipv6], [enable building of IPv6 version @<:@no@:>@])], | |
23 | [], | |
24 | [enable_ipv6=no] | |
25 | ) | |
26 | ||
27 | AC_ARG_ENABLE([memcheck], | |
28 | [AS_HELP_STRING([--enable-memcheck], [check memory allocations when debugging @<:@yes@:>@])], | |
29 | [], | |
30 | [enable_memcheck=yes] | |
31 | ) | |
32 | ||
33 | AC_ARG_ENABLE([pthreads], | |
34 | [AS_HELP_STRING([--enable-pthreads], [enable POSIX threads support @<:@try@:>@])], | |
35 | [], | |
36 | [enable_pthreads=try] | |
37 | ) | |
38 | ||
39 | AC_ARG_WITH([protocols], | |
40 | [AS_HELP_STRING([--with-protocols=LIST], [include specified routing protocols @<:@all@:>@])], | |
41 | [], | |
42 | [with_protocols="all"] | |
43 | ) | |
44 | ||
45 | AC_ARG_WITH([suffix], | |
46 | [AS_HELP_STRING([--with-suffix=STRING], [use specified suffix for BIRD files @<:@6 for IPv6@:>@])], | |
47 | [given_suffix="yes"] | |
48 | ) | |
49 | ||
50 | AC_ARG_WITH([sysconfig], | |
51 | [AS_HELP_STRING([--with-sysconfig=FILE], [use specified BIRD system configuration file])], | |
52 | [] | |
53 | ) | |
54 | ||
55 | AC_ARG_WITH([runtimedir], | |
56 | [AS_HELP_STRING([--with-runtimedir=PATH], [path for runtime files @<:@LOCALSTATEDIR/run@:>@])], | |
57 | [runtimedir="$with_runtimedir"], | |
58 | [runtimedir="\$(localstatedir)/run"] | |
59 | ) | |
60 | ||
61 | AC_ARG_WITH([iproutedir], | |
62 | [AS_HELP_STRING([--with-iproutedir=PATH], [path to iproute2 config files @<:@/etc/iproute2@:>@])], | |
63 | [given_iproutedir="yes"] | |
64 | ) | |
65 | ||
ab188fb7 OZ |
66 | AC_ARG_VAR([FLEX], [location of the Flex program]) |
67 | AC_ARG_VAR([BISON], [location of the Bison program]) | |
68 | AC_ARG_VAR([M4], [location of the M4 program]) | |
69 | ||
2f9bcf97 | 70 | |
49e7e5ee | 71 | if test "$srcdir" = . ; then |
b81a73d1 OZ |
72 | # Building in current directory => create obj directory holding all objects |
73 | objdir=obj | |
74 | mkdir -p obj | |
75 | srcdir_rel=.. | |
76 | makefiles="Makefile:tools/Makefile-top.in obj/Makefile:tools/Makefile.in obj/Rules:tools/Rules.in" | |
77 | exedir=.. | |
49e7e5ee | 78 | else |
b81a73d1 OZ |
79 | # Building in separate directory |
80 | objdir=. | |
81 | srcdir_rel=$srcdir | |
82 | makefiles="Makefile:tools/Makefile.in Rules:tools/Rules.in" | |
83 | exedir=. | |
49e7e5ee | 84 | fi |
b81a73d1 | 85 | |
49e7e5ee | 86 | case $srcdir_rel in |
b81a73d1 OZ |
87 | /*) srcdir_rel_mf=$srcdir_rel ;; |
88 | *) srcdir_rel_mf="\$(root-rel)$srcdir_rel" ;; | |
49e7e5ee | 89 | esac |
b81a73d1 OZ |
90 | |
91 | AC_SUBST([objdir]) | |
92 | AC_SUBST([exedir]) | |
93 | AC_SUBST([srcdir_rel_mf]) | |
94 | AC_SUBST([runtimedir]) | |
49e7e5ee | 95 | |
c817b991 | 96 | if test "$enable_ipv6" = yes ; then |
b81a73d1 OZ |
97 | ip=ipv6 |
98 | SUFFIX=6 | |
99 | proto_radv=radv | |
c817b991 | 100 | else |
b81a73d1 OZ |
101 | ip=ipv4 |
102 | SUFFIX="" | |
c3226991 OZ |
103 | fi |
104 | ||
ab188fb7 | 105 | if test "$given_suffix" = yes ; then |
b81a73d1 | 106 | SUFFIX="$with_suffix" |
ab188fb7 | 107 | fi |
b81a73d1 | 108 | AC_SUBST([SUFFIX]) |
ab188fb7 | 109 | |
ab188fb7 | 110 | if test "$enable_debug" = yes ; then |
b81a73d1 OZ |
111 | CONFIG_FILE="bird$SUFFIX.conf" |
112 | CONTROL_SOCKET="bird$SUFFIX.ctl" | |
ab188fb7 | 113 | else |
b81a73d1 OZ |
114 | CONFIG_FILE="\$(sysconfdir)/bird$SUFFIX.conf" |
115 | CONTROL_SOCKET="$runtimedir/bird$SUFFIX.ctl" | |
ab188fb7 | 116 | fi |
b81a73d1 OZ |
117 | AC_SUBST([CONFIG_FILE]) |
118 | AC_SUBST([CONTROL_SOCKET]) | |
ab188fb7 | 119 | |
b81a73d1 OZ |
120 | AC_SEARCH_LIBS([clock_gettime], [rt posix4], |
121 | [], | |
122 | [AC_MSG_ERROR([Function clock_gettime not available.])] | |
123 | ) | |
fd91ae33 | 124 | |
2f9bcf97 | 125 | AC_CANONICAL_HOST |
416e3ee4 | 126 | |
b1c030b0 | 127 | # Store this value because ac_test_CFLAGS is overwritten by AC_PROG_CC |
416e3ee4 | 128 | if test "$ac_test_CFLAGS" != set ; then |
b81a73d1 | 129 | bird_cflags_default=yes |
416e3ee4 | 130 | fi |
416e3ee4 | 131 | |
e81b440f OZ |
132 | AC_PROG_CC |
133 | if test -z "$GCC" ; then | |
b81a73d1 | 134 | AC_MSG_ERROR([This program requires the GNU C Compiler.]) |
e81b440f OZ |
135 | fi |
136 | ||
1ec52253 | 137 | if test "$enable_pthreads" != no ; then |
b81a73d1 OZ |
138 | BIRD_CHECK_PTHREADS |
139 | ||
140 | if test "$bird_cv_lib_pthreads" = yes ; then | |
141 | AC_DEFINE([USE_PTHREADS], [1], [Define to 1 if pthreads are enabled]) | |
142 | CFLAGS="$CFLAGS -pthread" | |
143 | LDFLAGS="$LDFLAGS -pthread" | |
144 | proto_bfd=bfd | |
145 | elif test "$enable_pthreads" = yes ; then | |
146 | AC_MSG_ERROR([POSIX threads not available.]) | |
147 | fi | |
148 | ||
149 | if test "$enable_pthreads" = try ; then | |
150 | enable_pthreads="$bird_cv_lib_pthreads" | |
151 | fi | |
1ec52253 OZ |
152 | fi |
153 | ||
bed41728 | 154 | if test "$bird_cflags_default" = yes ; then |
b81a73d1 OZ |
155 | BIRD_CHECK_GCC_OPTION([bird_cv_c_option_wno_pointer_sign], [-Wno-pointer-sign], [-Wall]) |
156 | BIRD_CHECK_GCC_OPTION([bird_cv_c_option_wno_missing_init], [-Wno-missing-field-initializers], [-Wall -Wextra]) | |
157 | BIRD_CHECK_GCC_OPTION([bird_cv_c_option_fno_strict_aliasing], [-fno-strict-aliasing]) | |
158 | BIRD_CHECK_GCC_OPTION([bird_cv_c_option_fno_strict_overflow], [-fno-strict-overflow]) | |
159 | ||
160 | CFLAGS="$CFLAGS -Wall -Wextra -Wstrict-prototypes -Wno-parentheses" | |
161 | BIRD_ADD_GCC_OPTION([bird_cv_c_option_wno_pointer_sign], [-Wno-pointer-sign]) | |
162 | BIRD_ADD_GCC_OPTION([bird_cv_c_option_wno_missing_init], [-Wno-missing-field-initializers]) | |
163 | BIRD_ADD_GCC_OPTION([bird_cv_c_option_fno_strict_aliasing], [-fno-strict-aliasing]) | |
164 | BIRD_ADD_GCC_OPTION([bird_cv_c_option_fno_strict_overflow], [-fno-strict-overflow]) | |
b1c030b0 | 165 | fi |
efd6d12b | 166 | AC_MSG_CHECKING([CFLAGS]) |
b81a73d1 | 167 | AC_MSG_RESULT([$CFLAGS]) |
b1c030b0 OZ |
168 | |
169 | ||
416e3ee4 MM |
170 | AC_PROG_CPP |
171 | AC_PROG_INSTALL | |
172 | AC_PROG_RANLIB | |
b81a73d1 OZ |
173 | AC_CHECK_PROG([FLEX], [flex], [flex]) |
174 | AC_CHECK_PROG([BISON], [bison], [bison]) | |
175 | AC_CHECK_PROGS([M4], [gm4 m4]) | |
8de11deb OZ |
176 | |
177 | test -z "$FLEX" && AC_MSG_ERROR([Flex is missing.]) | |
178 | test -z "$BISON" && AC_MSG_ERROR([Bison is missing.]) | |
179 | test -z "$M4" && AC_MSG_ERROR([M4 is missing.]) | |
b81a73d1 OZ |
180 | |
181 | BIRD_CHECK_PROG_FLAVOR_GNU([$M4], | |
182 | [], | |
183 | [AC_MSG_ERROR([Provided M4 is not GNU M4.])] | |
184 | ) | |
416e3ee4 | 185 | |
2f9bcf97 | 186 | if test -n "$with_sysconfig" -a "$with_sysconfig" != no ; then |
b81a73d1 OZ |
187 | if test -f $with_sysconfig ; then |
188 | sysdesc=$with_sysconfig | |
189 | else | |
190 | sysdesc=$srcdir/sysdep/cf/$with_sysconfig | |
191 | if ! test -f $sysdesc ; then | |
192 | sysdesc=$sysdesc.h | |
193 | fi | |
194 | fi | |
2f9bcf97 | 195 | elif test -f sysconfig.h ; then |
b81a73d1 | 196 | sysdesc=sysconfig |
2f9bcf97 | 197 | else |
b81a73d1 OZ |
198 | case "$ip:$host_os" in |
199 | ipv6:linux*) | |
200 | sysdesc=linux-v6 | |
201 | default_iproutedir="/etc/iproute2" | |
202 | ;; | |
203 | ipv4:linux*) | |
204 | sysdesc=linux | |
205 | default_iproutedir="/etc/iproute2" | |
206 | ;; | |
207 | ipv6:netbsd*) | |
208 | sysdesc=bsd-v6 | |
209 | CPPFLAGS="$CPPFLAGS -I/usr/pkg/include" | |
210 | LDFLAGS="$LDFLAGS -L/usr/pkg/lib -R/usr/pkg/lib" | |
211 | ;; | |
212 | ipv4:netbsd*) | |
213 | sysdesc=bsd | |
214 | CPPFLAGS="$CPPFLAGS -I/usr/pkg/include" | |
215 | LDFLAGS="$LDFLAGS -L/usr/pkg/lib -R/usr/pkg/lib" | |
216 | ;; | |
217 | ipv6:freebsd*) | |
218 | sysdesc=bsd-v6 | |
219 | ;; | |
220 | ipv4:freebsd*) | |
221 | sysdesc=bsd | |
222 | ;; | |
223 | ipv6:dragonfly*) | |
224 | sysdesc=bsd-v6 | |
225 | ;; | |
226 | ipv4:dragonfly*) | |
227 | sysdesc=bsd | |
228 | ;; | |
229 | ipv6:kfreebsd*) | |
230 | sysdesc=bsd-v6 | |
231 | ;; | |
232 | ipv4:kfreebsd*) | |
233 | sysdesc=bsd | |
234 | ;; | |
235 | ipv6:openbsd*) | |
236 | sysdesc=bsd-v6 | |
237 | ;; | |
238 | ipv4:openbsd*) | |
239 | sysdesc=bsd | |
240 | ;; | |
241 | *) | |
242 | AC_MSG_ERROR([Cannot determine correct system configuration. Please use --with-sysconfig to set it manually.]) | |
243 | ;; | |
244 | esac | |
245 | sysdesc=$srcdir/sysdep/cf/$sysdesc.h | |
2f9bcf97 | 246 | fi |
416e3ee4 | 247 | AC_MSG_CHECKING([which OS configuration should we use]) |
b81a73d1 | 248 | AC_MSG_RESULT([$sysdesc]) |
49e7e5ee | 249 | if ! test -f $sysdesc ; then |
b81a73d1 | 250 | AC_MSG_ERROR([The system configuration file is missing.]) |
2f9bcf97 | 251 | fi |
49e7e5ee | 252 | sysname=`echo $sysdesc | sed 's/\.h$//'` |
7a855725 | 253 | AC_DEFINE_UNQUOTED([SYSCONF_INCLUDE], ["$sysdesc"], [Which sysdep header to include]) |
49e7e5ee MM |
254 | |
255 | AC_MSG_CHECKING([system-dependent directories]) | |
256 | sysdep_dirs="`sed <$sysdesc '/^Link: /!d;s/^Link: \(.*\)$/\1/' | tr '\012' ' '` lib" | |
b81a73d1 OZ |
257 | AC_MSG_RESULT([$sysdep_dirs]) |
258 | AC_SUBST([sysdep_dirs]) | |
2f9bcf97 | 259 | |
acc93efd OZ |
260 | if test "$with_iproutedir" = no ; then with_iproutedir= ; fi |
261 | ||
262 | if test -n "$given_iproutedir" | |
263 | then iproutedir=$with_iproutedir | |
264 | else iproutedir=$default_iproutedir | |
265 | fi | |
266 | ||
b81a73d1 | 267 | AC_SUBST([iproutedir]) |
acc93efd | 268 | |
1ec52253 | 269 | all_protocols="$proto_bfd bgp ospf pipe $proto_radv rip static" |
937e75d8 OZ |
270 | if test "$ip" = ipv6 ; then |
271 | all_protocols="$all_protocols babel" | |
272 | fi | |
1ec52253 OZ |
273 | all_protocols=`echo $all_protocols | sed 's/ /,/g'` |
274 | ||
275 | if test "$with_protocols" = all ; then | |
b81a73d1 | 276 | with_protocols="$all_protocols" |
1ec52253 OZ |
277 | fi |
278 | ||
7a855725 OZ |
279 | AH_TEMPLATE([CONFIG_BABEL], [Babel protocol]) |
280 | AH_TEMPLATE([CONFIG_BFD], [BFD protocol]) | |
281 | AH_TEMPLATE([CONFIG_BGP], [BGP protocol]) | |
282 | AH_TEMPLATE([CONFIG_OSPF], [OSPF protocol]) | |
283 | AH_TEMPLATE([CONFIG_PIPE], [Pipe protocol]) | |
284 | AH_TEMPLATE([CONFIG_RADV], [RAdv protocol]) | |
285 | AH_TEMPLATE([CONFIG_RIP], [RIP protocol]) | |
286 | AH_TEMPLATE([CONFIG_STATIC], [Static protocol]) | |
287 | ||
2f9bcf97 MM |
288 | AC_MSG_CHECKING([protocols]) |
289 | protocols=`echo "$with_protocols" | sed 's/,/ /g'` | |
b296730c | 290 | if test "$protocols" = no ; then protocols= ; fi |
2f9bcf97 | 291 | for a in $protocols ; do |
b81a73d1 OZ |
292 | if ! test -f $srcdir/proto/$a/Makefile ; then |
293 | AC_MSG_RESULT([failed]) | |
294 | AC_MSG_ERROR([Requested protocol $a not found]) | |
295 | fi | |
296 | AC_DEFINE_UNQUOTED([CONFIG_`echo $a | tr 'a-z' 'A-Z'`]) | |
297 | done | |
298 | AC_MSG_RESULT([ok]) | |
299 | AC_SUBST([protocols]) | |
2f9bcf97 | 300 | |
a07e9d82 | 301 | case $sysdesc in |
b81a73d1 OZ |
302 | */linux*|*/linux-v6*) |
303 | AC_CHECK_HEADER([linux/rtnetlink.h], | |
304 | [], | |
305 | [AC_MSG_ERROR([Appropriate version of Linux kernel headers not found.])], | |
81edd3b3 OZ |
306 | [ |
307 | dnl Some older versions of Linux kernel headers require these includes | |
308 | #include <asm/types.h> | |
309 | #include <sys/socket.h> | |
310 | ] | |
b81a73d1 OZ |
311 | ) |
312 | ;; | |
a07e9d82 MM |
313 | esac |
314 | ||
c253ec3a | 315 | AC_CHECK_HEADERS_ONCE([alloca.h syslog.h]) |
e40542ef | 316 | AC_CHECK_MEMBERS([struct sockaddr.sa_len], [], [], [#include <sys/socket.h>]) |
7a855725 OZ |
317 | |
318 | AC_C_BIGENDIAN( | |
319 | [AC_DEFINE([CPU_BIG_ENDIAN], [1], [Define to 1 if cpu is big endian])], | |
320 | [AC_DEFINE([CPU_LITTLE_ENDIAN], [1], [Define to 1 if cpu is little endian])], | |
321 | [AC_MSG_ERROR([Cannot determine CPU endianity.])] | |
322 | ) | |
e6ff7a08 | 323 | |
2f9bcf97 | 324 | if test "$enable_debug" = yes ; then |
b81a73d1 OZ |
325 | AC_DEFINE([DEBUGGING], [1], [Define to 1 if debugging is enabled]) |
326 | if test "$enable_memcheck" = yes ; then | |
327 | AC_CHECK_LIB([dmalloc], [dmalloc_debug]) | |
328 | if test $ac_cv_lib_dmalloc_dmalloc_debug != yes ; then | |
329 | AC_CHECK_LIB([efence], [malloc]) | |
330 | fi | |
331 | fi | |
2f9bcf97 MM |
332 | fi |
333 | ||
7211be1c MM |
334 | CLIENT= |
335 | CLIENT_LIBS= | |
9fac310d | 336 | if test "$enable_client" = yes ; then |
b81a73d1 | 337 | CLIENT=birdc |
a01e951d OZ |
338 | BASE_LIBS="$LIBS" |
339 | LIBS="" | |
340 | ||
341 | AC_CHECK_HEADERS([curses.h], | |
342 | [], | |
343 | [AC_MSG_ERROR([The client requires ncurses library. Either install the library or use --disable-client to compile without the client.])], | |
81edd3b3 | 344 | [AC_INCLUDES_DEFAULT] |
b81a73d1 OZ |
345 | ) |
346 | ||
a01e951d OZ |
347 | AC_SEARCH_LIBS([tgetent], [tinfo tinfow ncurses curses termcap], |
348 | [TINFO_LIBS="$LIBS"; LIBS=""], | |
349 | [AC_MSG_ERROR([The client requires ncurses library. Either install the library or use --disable-client to compile without the client.])], | |
350 | ) | |
351 | ||
352 | AC_CHECK_HEADERS([readline/readline.h readline/history.h], | |
353 | [], | |
354 | [AC_MSG_ERROR([The client requires GNU Readline library. Either install the library or use --disable-client to compile without the client.])], | |
81edd3b3 | 355 | [AC_INCLUDES_DEFAULT] |
a01e951d OZ |
356 | ) |
357 | ||
a01e951d OZ |
358 | AC_SEARCH_LIBS([rl_callback_read_char], [readline], |
359 | [READLINE_LIBS="$LIBS"; LIBS=""], | |
360 | [AC_MSG_ERROR([The client requires GNU Readline library. Either install the library or use --disable-client to compile without the client.])], | |
361 | [$TINFO_LIBS] | |
b81a73d1 OZ |
362 | ) |
363 | ||
d6e01ff9 | 364 | AC_SEARCH_LIBS([add_history], [history readline], |
dab6706a OZ |
365 | [HISTORY_LIBS="$LIBS"; LIBS=""], |
366 | [AC_MSG_ERROR([The client requires GNU Readline library. Either install the library or use --disable-client to compile without the client.])], | |
d6e01ff9 | 367 | [$TINFO_LIBS] |
dab6706a OZ |
368 | ) |
369 | ||
b81a73d1 OZ |
370 | AC_CHECK_LIB([readline], [rl_crlf], |
371 | [AC_DEFINE([HAVE_RL_CRLF], [1], [Define to 1 if you have rl_crlf()])], | |
372 | [], | |
a01e951d | 373 | [$TINFO_LIBS] |
b81a73d1 OZ |
374 | ) |
375 | ||
376 | AC_CHECK_LIB([readline], [rl_ding], | |
377 | [AC_DEFINE([HAVE_RL_DING], [1], [Define to 1 if you have rl_ding()])], | |
378 | [], | |
a01e951d | 379 | [$TINFO_LIBS] |
b81a73d1 | 380 | ) |
a01e951d OZ |
381 | |
382 | LIBS="$BASE_LIBS" | |
dab6706a | 383 | CLIENT_LIBS="$HISTORY_LIBS $READLINE_LIBS $TINFO_LIBS" |
9fac310d | 384 | fi |
b81a73d1 OZ |
385 | AC_SUBST([CLIENT]) |
386 | AC_SUBST([CLIENT_LIBS]) | |
9fac310d | 387 | |
54165b13 | 388 | mkdir -p $objdir/sysdep |
7cb37e6f | 389 | AC_CONFIG_HEADERS([$objdir/sysdep/autoconf.h:sysdep/autoconf.h.in]) |
b81a73d1 OZ |
390 | AC_CONFIG_COMMANDS([merge], |
391 | [ export CPP="$CPP"; $srcdir/tools/mergedirs $srcdir $srcdir_rel $objdir $sysdep_dirs ], | |
392 | [ | |
393 | srcdir=$srcdir | |
394 | srcdir_rel=$srcdir_rel | |
395 | objdir=$objdir | |
396 | sysdep_dirs="$sysdep_dirs" | |
397 | ] | |
398 | ) | |
399 | AC_CONFIG_FILES([$makefiles]) | |
22122d4d | 400 | AC_OUTPUT |
2f9bcf97 | 401 | |
acc93efd OZ |
402 | rm -f $objdir/sysdep/paths.h |
403 | ||
7a855725 OZ |
404 | AC_MSG_RESULT() |
405 | AC_MSG_RESULT([BIRD was configured with the following options:]) | |
406 | AC_MSG_RESULT([ Source directory: $srcdir]) | |
407 | AC_MSG_RESULT([ Object directory: $objdir]) | |
408 | AC_MSG_RESULT([ Iproute2 directory: $iproutedir]) | |
409 | AC_MSG_RESULT([ System configuration: $sysdesc]) | |
410 | AC_MSG_RESULT([ Debugging: $enable_debug]) | |
411 | AC_MSG_RESULT([ POSIX threads: $enable_pthreads]) | |
412 | AC_MSG_RESULT([ Routing protocols: $protocols]) | |
413 | AC_MSG_RESULT([ Client: $enable_client]) | |
b296730c | 414 | rm -f $objdir/.*-stamp |