]>
Commit | Line | Data |
---|---|---|
1 | dnl ** This is a configure script template for BIRD | |
2 | dnl ** Process it with autoconf to get ./configure | |
3 | dnl ** (c) 1999--2000 Martin Mares <mj@ucw.cz> | |
4 | ||
5 | AC_INIT | |
6 | AC_CONFIG_SRCDIR([conf/confbase.Y]) | |
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([debug-generated], | |
22 | [AS_HELP_STRING([--enable-debug-generated], [enable this to abstain from generating #line @<:@no@:>@])], | |
23 | [], | |
24 | [enable_debug_generated=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_ENABLE([libssh], | |
40 | [AS_HELP_STRING([--enable-libssh], [enable LibSSH support together with RPKI @<:@try@:>@])], | |
41 | [], | |
42 | [enable_libssh=try] | |
43 | ) | |
44 | ||
45 | AC_ARG_ENABLE([mpls-kernel], | |
46 | [AS_HELP_STRING([--enable-mpls-kernel], [enable MPLS support in kernel protocol @<:@try@:>@])], | |
47 | [], | |
48 | [enable_mpls_kernel=try] | |
49 | ) | |
50 | ||
51 | AC_ARG_WITH([protocols], | |
52 | [AS_HELP_STRING([--with-protocols=LIST], [include specified routing protocols @<:@all@:>@])], | |
53 | [], | |
54 | [with_protocols="all"] | |
55 | ) | |
56 | ||
57 | AC_ARG_WITH([sysconfig], | |
58 | [AS_HELP_STRING([--with-sysconfig=FILE], [use specified BIRD system configuration file])] | |
59 | ) | |
60 | ||
61 | AC_ARG_WITH([runtimedir], | |
62 | [AS_HELP_STRING([--with-runtimedir=PATH], [run-state data, obsolete variant of --runstatedir])], | |
63 | [runstatedir="$with_runtimedir"] | |
64 | ) | |
65 | ||
66 | AC_ARG_WITH([iproutedir], | |
67 | [AS_HELP_STRING([--with-iproutedir=PATH], [path to iproute2 config files @<:@/etc/iproute2@:>@])], | |
68 | [given_iproutedir="yes"] | |
69 | ) | |
70 | ||
71 | AC_ARG_VAR([FLEX], [location of the Flex program]) | |
72 | AC_ARG_VAR([BISON], [location of the Bison program]) | |
73 | AC_ARG_VAR([M4], [location of the M4 program]) | |
74 | ||
75 | ||
76 | if test "$srcdir" = . ; then | |
77 | # Building in current directory => create obj directory holding all objects | |
78 | objdir=obj | |
79 | else | |
80 | # Building in separate directory | |
81 | objdir=. | |
82 | fi | |
83 | ||
84 | exedir=. | |
85 | ||
86 | AC_SUBST([objdir]) | |
87 | AC_SUBST([exedir]) | |
88 | AC_SUBST([srcdir]) | |
89 | ||
90 | # Workaround for older Autoconfs that do not define runstatedir | |
91 | AS_IF([test -z "${runstatedir}"], [runstatedir='${localstatedir}/run']) | |
92 | AC_SUBST([runstatedir]) | |
93 | ||
94 | CONFIG_FILE="\$(sysconfdir)/bird.conf" | |
95 | AC_SUBST([CONFIG_FILE]) | |
96 | ||
97 | CONTROL_SOCKET="\$(runstatedir)/bird.ctl" | |
98 | AC_SUBST([CONTROL_SOCKET]) | |
99 | ||
100 | AC_SEARCH_LIBS([clock_gettime], [rt posix4], | |
101 | [], | |
102 | [AC_MSG_ERROR([Function clock_gettime not available.])] | |
103 | ) | |
104 | ||
105 | AC_CANONICAL_HOST | |
106 | ||
107 | # Store this value because ac_test_CFLAGS is overwritten by AC_PROG_CC | |
108 | if test "$ac_test_CFLAGS" != set ; then | |
109 | bird_cflags_default=yes | |
110 | fi | |
111 | ||
112 | AC_PROG_CC | |
113 | AC_PROG_CC_C99 | |
114 | if test -z "$GCC" ; then | |
115 | AC_MSG_ERROR([This program requires the GNU C Compiler.]) | |
116 | fi | |
117 | ||
118 | BIRD_CHECK_THREAD_LOCAL | |
119 | if test "$bird_cv_thread_local" = yes ; then | |
120 | AC_DEFINE([HAVE_THREAD_LOCAL], [1], [Define to 1 if _Thread_local is available]) | |
121 | fi | |
122 | ||
123 | if test "$enable_pthreads" != no ; then | |
124 | BIRD_CHECK_PTHREADS | |
125 | ||
126 | if test "$bird_cv_lib_pthreads" = yes ; then | |
127 | AC_DEFINE([USE_PTHREADS], [1], [Define to 1 if pthreads are enabled]) | |
128 | CFLAGS="$CFLAGS -pthread" | |
129 | LDFLAGS="$LDFLAGS -pthread" | |
130 | proto_bfd=bfd | |
131 | elif test "$enable_pthreads" = yes ; then | |
132 | AC_MSG_ERROR([POSIX threads not available.]) | |
133 | fi | |
134 | ||
135 | if test "$enable_pthreads" = try ; then | |
136 | enable_pthreads="$bird_cv_lib_pthreads" | |
137 | fi | |
138 | fi | |
139 | ||
140 | # This is assumed to be necessary for proper BIRD build | |
141 | CFLAGS="$CFLAGS -fno-strict-aliasing -fno-strict-overflow" | |
142 | ||
143 | if test "$bird_cflags_default" = yes ; then | |
144 | BIRD_CHECK_GCC_OPTION([bird_cv_c_option_wno_pointer_sign], [-Wno-pointer-sign], [-Wall]) | |
145 | BIRD_CHECK_GCC_OPTION([bird_cv_c_option_wno_missing_init], [-Wno-missing-field-initializers], [-Wall -Wextra]) | |
146 | ||
147 | if test "$enable_debug" = no; then | |
148 | BIRD_CHECK_LTO | |
149 | fi | |
150 | ||
151 | if test "$bird_cv_c_lto" = yes; then | |
152 | CFLAGS="$CFLAGS -flto" | |
153 | LDFLAGS="$LDFLAGS -flto=4 -g" | |
154 | else | |
155 | LDFLAGS="$LDFLAGS -g" | |
156 | fi | |
157 | ||
158 | CFLAGS="$CFLAGS -Wall -Wextra -Wstrict-prototypes -Wno-parentheses" | |
159 | BIRD_ADD_GCC_OPTION([bird_cv_c_option_wno_pointer_sign], [-Wno-pointer-sign]) | |
160 | BIRD_ADD_GCC_OPTION([bird_cv_c_option_wno_missing_init], [-Wno-missing-field-initializers]) | |
161 | fi | |
162 | ||
163 | ||
164 | AC_MSG_CHECKING([CFLAGS]) | |
165 | AC_MSG_RESULT([$CFLAGS]) | |
166 | ||
167 | AC_MSG_CHECKING([LDFLAGS]) | |
168 | AC_MSG_RESULT([$LDFLAGS]) | |
169 | ||
170 | AC_PROG_CPP | |
171 | AC_PROG_INSTALL | |
172 | AC_PROG_RANLIB | |
173 | AC_CHECK_PROG([FLEX], [flex], [flex]) | |
174 | AC_CHECK_PROG([BISON], [bison], [bison]) | |
175 | AC_CHECK_PROGS([M4], [gm4 m4]) | |
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.]) | |
180 | ||
181 | AC_MSG_CHECKING([bison version]) | |
182 | BIRD_CHECK_BISON_VERSION(BISON_VERSION) | |
183 | AC_MSG_RESULT([$BISON_VERSION]) | |
184 | if test "$bird_bison_synclines" = yes && test "$enable_debug_generated" = no; then | |
185 | M4FLAGS="$M4FLAGS -s" | |
186 | fi | |
187 | ||
188 | if test "$bird_bison_enhanced_error" = yes; then | |
189 | BISONFLAGS="$BISONFLAGS -Dparse.lac=full -Dparse.error=verbose" | |
190 | fi | |
191 | ||
192 | AC_SUBST([M4FLAGS]) | |
193 | AC_SUBST([BISONFLAGS]) | |
194 | ||
195 | BIRD_CHECK_PROG_FLAVOR_GNU([$M4], | |
196 | [], | |
197 | [AC_MSG_ERROR([Provided M4 is not GNU M4.])] | |
198 | ) | |
199 | ||
200 | if test -n "$with_sysconfig" -a "$with_sysconfig" != no ; then | |
201 | if test -f $with_sysconfig ; then | |
202 | sysdesc=$with_sysconfig | |
203 | else | |
204 | sysdesc=$srcdir/sysdep/cf/$with_sysconfig | |
205 | if ! test -f $sysdesc ; then | |
206 | sysdesc=$sysdesc.h | |
207 | fi | |
208 | fi | |
209 | elif test -f sysconfig.h ; then | |
210 | sysdesc=sysconfig | |
211 | else | |
212 | case "$host_os" in | |
213 | linux*) | |
214 | sysdesc=linux | |
215 | default_iproutedir="/etc/iproute2" | |
216 | ;; | |
217 | freebsd*) | |
218 | sysdesc=bsd | |
219 | CPPFLAGS="$CPPFLAGS -I/usr/local/include" | |
220 | LDFLAGS="$LDFLAGS -L/usr/local/lib" | |
221 | ;; | |
222 | kfreebsd*) | |
223 | sysdesc=bsd | |
224 | ;; | |
225 | netbsd*) | |
226 | sysdesc=bsd | |
227 | CPPFLAGS="$CPPFLAGS -I/usr/pkg/include" | |
228 | LDFLAGS="$LDFLAGS -L/usr/pkg/lib -R/usr/pkg/lib" | |
229 | ;; | |
230 | openbsd*) | |
231 | sysdesc=bsd | |
232 | ;; | |
233 | dragonfly*) | |
234 | sysdesc=bsd | |
235 | ;; | |
236 | *) | |
237 | AC_MSG_ERROR([Cannot determine correct system configuration. Please use --with-sysconfig to set it manually.]) | |
238 | ;; | |
239 | esac | |
240 | sysdesc=$srcdir/sysdep/cf/$sysdesc.h | |
241 | fi | |
242 | AC_MSG_CHECKING([which OS configuration should we use]) | |
243 | AC_MSG_RESULT([$sysdesc]) | |
244 | if ! test -f $sysdesc ; then | |
245 | AC_MSG_ERROR([The system configuration file is missing.]) | |
246 | fi | |
247 | sysname=`echo $sysdesc | sed 's/\.h$//'` | |
248 | AC_DEFINE_UNQUOTED([SYSCONF_INCLUDE], ["$sysdesc"], [Which sysdep header to include]) | |
249 | ||
250 | AC_MSG_CHECKING([system-dependent directories]) | |
251 | sysdep_dirs="`sed <$sysdesc '/^Link: /!d;s/^Link: \(.*\)$/\1/' | tr '\012' ' '`" | |
252 | AC_MSG_RESULT([$sysdep_dirs]) | |
253 | AC_SUBST([sysdep_dirs]) | |
254 | ||
255 | if test "$with_iproutedir" = no ; then with_iproutedir= ; fi | |
256 | ||
257 | if test -n "$given_iproutedir" | |
258 | then iproutedir=$with_iproutedir | |
259 | else iproutedir=$default_iproutedir | |
260 | fi | |
261 | ||
262 | AC_SUBST([iproutedir]) | |
263 | ||
264 | DAEMON_LIBS= | |
265 | AC_SUBST(DAEMON_LIBS) | |
266 | ||
267 | if test "$enable_libssh" != no ; then | |
268 | AC_CHECK_HEADER([libssh/libssh.h], [true], [fail=yes], [ ]) | |
269 | AC_CHECK_LIB([ssh], [ssh_connect], [true], [fail=yes]) | |
270 | ||
271 | if test "$fail" != yes ; then | |
272 | AC_DEFINE([HAVE_LIBSSH], [1], [Define to 1 if you have the `ssh' library (-lssh).]) | |
273 | DAEMON_LIBS="-lssh $DAEMON_LIBS" | |
274 | proto_rpki=rpki | |
275 | enable_libssh=yes | |
276 | else | |
277 | if test "$enable_libssh" = yes ; then | |
278 | AC_MSG_ERROR([LibSSH not available.]) | |
279 | else | |
280 | enable_libssh=no | |
281 | fi | |
282 | fi | |
283 | fi | |
284 | ||
285 | if test "$enable_mpls_kernel" != no ; then | |
286 | BIRD_CHECK_MPLS_KERNEL | |
287 | ||
288 | if test "$bird_cv_mpls_kernel" = yes ; then | |
289 | AC_DEFINE([HAVE_MPLS_KERNEL], [1], [Define to 1 if kernel is MPLS capable]) | |
290 | elif test "$enable_mpls_kernel" = yes ; then | |
291 | AC_MSG_ERROR([Kernel MPLS support not found.]) | |
292 | fi | |
293 | ||
294 | if test "$enable_mpls_kernel" = try ; then | |
295 | enable_mpls_kernel="$bird_cv_mpls_kernel" | |
296 | fi | |
297 | fi | |
298 | ||
299 | all_protocols="$proto_bfd babel bgp mrt ospf perf pipe radv rip $proto_rpki static" | |
300 | ||
301 | all_protocols=`echo $all_protocols | sed 's/ /,/g'` | |
302 | ||
303 | if test "$with_protocols" = all ; then | |
304 | with_protocols="$all_protocols" | |
305 | fi | |
306 | ||
307 | AH_TEMPLATE([CONFIG_BABEL], [Babel protocol]) | |
308 | AH_TEMPLATE([CONFIG_BFD], [BFD protocol]) | |
309 | AH_TEMPLATE([CONFIG_BGP], [BGP protocol]) | |
310 | AH_TEMPLATE([CONFIG_MRT], [MRT protocol]) | |
311 | AH_TEMPLATE([CONFIG_OSPF], [OSPF protocol]) | |
312 | AH_TEMPLATE([CONFIG_PIPE], [Pipe protocol]) | |
313 | AH_TEMPLATE([CONFIG_RADV], [RAdv protocol]) | |
314 | AH_TEMPLATE([CONFIG_RIP], [RIP protocol]) | |
315 | AH_TEMPLATE([CONFIG_RPKI], [RPKI protocol]) | |
316 | AH_TEMPLATE([CONFIG_STATIC], [Static protocol]) | |
317 | ||
318 | AC_MSG_CHECKING([protocols]) | |
319 | protocols=`echo "$with_protocols" | sed 's/,/ /g'` | |
320 | if test "$protocols" = no ; then protocols= ; fi | |
321 | for a in $protocols ; do | |
322 | if ! test -f $srcdir/proto/$a/Makefile ; then | |
323 | AC_MSG_RESULT([failed]) | |
324 | AC_MSG_ERROR([Requested protocol $a not found]) | |
325 | fi | |
326 | AC_DEFINE_UNQUOTED([CONFIG_`echo $a | tr 'a-z' 'A-Z'`]) | |
327 | done | |
328 | AC_MSG_RESULT([ok]) | |
329 | AC_SUBST([protocols]) | |
330 | ||
331 | case $sysdesc in | |
332 | */linux*) | |
333 | AC_CHECK_HEADER([linux/rtnetlink.h], | |
334 | [], | |
335 | [AC_MSG_ERROR([Appropriate version of Linux kernel headers not found.])], | |
336 | [ | |
337 | dnl Some older versions of Linux kernel headers require these includes | |
338 | #include <asm/types.h> | |
339 | #include <sys/socket.h> | |
340 | ] | |
341 | ) | |
342 | ;; | |
343 | esac | |
344 | ||
345 | AC_CHECK_HEADERS_ONCE([alloca.h syslog.h]) | |
346 | AC_CHECK_MEMBERS([struct sockaddr.sa_len], [], [], [#include <sys/socket.h>]) | |
347 | ||
348 | AC_C_BIGENDIAN( | |
349 | [AC_DEFINE([CPU_BIG_ENDIAN], [1], [Define to 1 if cpu is big endian])], | |
350 | [AC_DEFINE([CPU_LITTLE_ENDIAN], [1], [Define to 1 if cpu is little endian])], | |
351 | [AC_MSG_ERROR([Cannot determine CPU endianity.])] | |
352 | ) | |
353 | ||
354 | BIRD_CHECK_ANDROID_GLOB | |
355 | if test "$bird_cv_lib_glob" = no ; then | |
356 | AC_MSG_ERROR([glob.h not found.]) | |
357 | elif test "$bird_cv_lib_glob" != yes ; then | |
358 | LIBS="$LIBS $bird_cv_lib_glob" | |
359 | fi | |
360 | ||
361 | BIRD_CHECK_ANDROID_LOG | |
362 | if test "$bird_cv_lib_log" = no ; then | |
363 | AC_MSG_ERROR([don't know how to link syslog.]) | |
364 | elif test "$bird_cv_lib_log" != yes ; then | |
365 | LIBS="$LIBS $bird_cv_lib_log" | |
366 | fi | |
367 | ||
368 | if test "$enable_debug" = yes ; then | |
369 | AC_DEFINE([DEBUGGING], [1], [Define to 1 if debugging is enabled]) | |
370 | LDFLAGS="$LDFLAGS -rdynamic" | |
371 | CFLAGS="$CFLAGS -O0 -ggdb -g3" | |
372 | ||
373 | BIRD_CHECK_GCC_OPTION([bird_cv_c_option_dwarf4], [-gdwarf-4], []) | |
374 | BIRD_ADD_GCC_OPTION([bird_cv_c_option_dwarf4], [-gdwarf-4]) | |
375 | ||
376 | AC_CHECK_HEADER([execinfo.h], | |
377 | [ | |
378 | AC_DEFINE([HAVE_EXECINFO_H], [1], [Define to 1 if you have the <execinfo.h> header file.]) | |
379 | AC_SEARCH_LIBS([backtrace], [execinfo], | |
380 | [], | |
381 | [AC_MSG_ERROR([Function backtrace not available.])] | |
382 | ) | |
383 | ] | |
384 | ) | |
385 | ||
386 | if test "$enable_memcheck" = yes ; then | |
387 | AC_CHECK_LIB([dmalloc], [dmalloc_debug]) | |
388 | if test $ac_cv_lib_dmalloc_dmalloc_debug != yes ; then | |
389 | AC_CHECK_LIB([efence], [malloc]) | |
390 | fi | |
391 | fi | |
392 | fi | |
393 | ||
394 | CLIENT=birdcl | |
395 | CLIENT_LIBS= | |
396 | if test "$enable_client" = yes ; then | |
397 | CLIENT="$CLIENT birdc" | |
398 | BASE_LIBS="$LIBS" | |
399 | LIBS="" | |
400 | ||
401 | AC_CHECK_HEADERS([curses.h], | |
402 | [], | |
403 | [AC_MSG_ERROR([The client requires ncurses library. Either install the library or use --disable-client to compile without the client.])], | |
404 | [AC_INCLUDES_DEFAULT] | |
405 | ) | |
406 | ||
407 | AC_SEARCH_LIBS([tgetent], [tinfo tinfow ncurses curses termcap], | |
408 | [TINFO_LIBS="$LIBS"; LIBS=""], | |
409 | [AC_MSG_ERROR([The client requires ncurses library. Either install the library or use --disable-client to compile without the client.])], | |
410 | ) | |
411 | ||
412 | AC_CHECK_HEADERS([readline/readline.h readline/history.h], | |
413 | [], | |
414 | [AC_MSG_ERROR([The client requires GNU Readline library. Either install the library or use --disable-client to compile without the client.])], | |
415 | [AC_INCLUDES_DEFAULT] | |
416 | ) | |
417 | ||
418 | AC_SEARCH_LIBS([rl_callback_read_char], [readline], | |
419 | [READLINE_LIBS="$LIBS"; LIBS=""], | |
420 | [AC_MSG_ERROR([The client requires GNU Readline library. Either install the library or use --disable-client to compile without the client.])], | |
421 | [$TINFO_LIBS] | |
422 | ) | |
423 | ||
424 | AC_CHECK_LIB([readline], [rl_crlf], | |
425 | [AC_DEFINE([HAVE_RL_CRLF], [1], [Define to 1 if you have rl_crlf()])], | |
426 | [], | |
427 | [$TINFO_LIBS] | |
428 | ) | |
429 | ||
430 | AC_CHECK_LIB([readline], [rl_ding], | |
431 | [AC_DEFINE([HAVE_RL_DING], [1], [Define to 1 if you have rl_ding()])], | |
432 | [], | |
433 | [$TINFO_LIBS] | |
434 | ) | |
435 | ||
436 | LIBS="$BASE_LIBS" | |
437 | CLIENT_LIBS="$READLINE_LIBS $TINFO_LIBS" | |
438 | fi | |
439 | AC_SUBST([CLIENT]) | |
440 | AC_SUBST([CLIENT_LIBS]) | |
441 | ||
442 | mkdir -p $objdir/sysdep | |
443 | AC_CONFIG_HEADERS([$objdir/sysdep/autoconf.h:sysdep/autoconf.h.in]) | |
444 | AC_CONFIG_FILES([Makefile:Makefile.in]) | |
445 | AC_OUTPUT | |
446 | ||
447 | AC_MSG_RESULT() | |
448 | AC_MSG_RESULT([BIRD was configured with the following options:]) | |
449 | AC_MSG_RESULT([ Source directory: $srcdir]) | |
450 | AC_MSG_RESULT([ Object directory: $objdir]) | |
451 | AC_MSG_RESULT([ Iproute2 directory: $iproutedir]) | |
452 | AC_MSG_RESULT([ System configuration: $sysdesc]) | |
453 | AC_MSG_RESULT([ Debugging: $enable_debug]) | |
454 | AC_MSG_RESULT([ POSIX threads: $enable_pthreads]) | |
455 | AC_MSG_RESULT([ Routing protocols: $protocols]) | |
456 | AC_MSG_RESULT([ Kernel MPLS support: $enable_mpls_kernel]) | |
457 | AC_MSG_RESULT([ Client: $enable_client]) | |
458 | ||
459 | rm -f $objdir/.*-stamp |