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