]> arthur.barton.de Git - ngircd-alex.git/blob - configure.ng
Make test suite compatible with Haiku
[ngircd-alex.git] / configure.ng
1 #
2 # ngIRCd -- The Next Generation IRC Daemon
3 # Copyright (c)2001-2014 Alexander Barton (alex@barton.de) and Contributors
4 #
5 # This program is free software; you can redistribute it and/or modify
6 # it under the terms of the GNU General Public License as published by
7 # the Free Software Foundation; either version 2 of the License, or
8 # (at your option) any later version.
9 # Please read the file COPYING, README and AUTHORS for more information.
10 #
11
12 define(VERSION_ID,esyscmd([
13         V=`git describe 2>/dev/null | sed -e 's/rel-//g' | sed -e 's/-/~/'`;
14         [ -z "$V" -a -r configure ] \
15                 && V=`grep "PACKAGE_STRING=" configure | cut -d"'" -f2 | cut -d' ' -f2`
16         ( [ -n "$V" ] && echo "$V" || echo "??" ) | tr -d '\n';
17 ]))
18
19 m4_ifdef([AM_SILENT_RULES],
20         [m4_define([ng_color_tests], [color-tests])],
21         [m4_define([ng_color_tests], [])])
22
23 # -- Initialisation --
24
25 AC_PREREQ([2.61])
26 AC_INIT([ngIRCd],[VERSION_ID],[ngircd-ml@ngircd.barton.de],[ngircd],[http://ngircd.barton.de/])
27
28 AC_CONFIG_SRCDIR([src/ngircd/ngircd.c])
29 AC_CONFIG_HEADER([src/config.h])
30 AC_CANONICAL_HOST
31
32 AM_INIT_AUTOMAKE([-Wall 1.10 ]ng_color_tests)
33
34 m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
35
36 # -- Templates for config.h --
37
38 AH_TEMPLATE([DEBUG], [Define if debug-mode should be enabled])
39 AH_TEMPLATE([HAVE_sockaddr_in_len], [Define if sockaddr_in.sin_len exists])
40 AH_TEMPLATE([HAVE_socklen_t], [Define if socklen_t exists])
41 AH_TEMPLATE([ICONV], [Define if libiconv can be used, e.g. for CHARCONV])
42 AH_TEMPLATE([IDENTAUTH], [Define if the server should do IDENT requests])
43 AH_TEMPLATE([IRCPLUS], [Define if IRC+ protocol should be used])
44 AH_TEMPLATE([PAM], [Define if PAM should be used])
45 AH_TEMPLATE([SNIFFER], [Define if IRC sniffer should be enabled])
46 AH_TEMPLATE([STRICT_RFC], [Define if ngIRCd should behave strict RFC compliant])
47 AH_TEMPLATE([SYSLOG], [Define if syslog should be used for logging])
48 AH_TEMPLATE([TCPWRAP], [Define if TCP wrappers should be used])
49 AH_TEMPLATE([WANT_IPV6], [Define if IPV6 protocol should be enabled])
50 AH_TEMPLATE([ZLIB], [Define if zlib compression should be enabled])
51
52 AH_TEMPLATE([HOST_OS], [Target operating system name])
53 AH_TEMPLATE([HOST_VENDOR], [Target system vendor])
54 AH_TEMPLATE([HOST_CPU], [Target CPU name])
55
56 # -- C Compiler --
57
58 AC_PROG_CC
59 AC_PROG_CC_STDC
60
61 # -- Helper programs --
62
63 m4_ifdef([AM_PROG_AR], [AM_PROG_AR])
64
65 AC_PROG_AWK
66 AC_PROG_INSTALL
67 AC_PROG_LN_S
68 AC_PROG_MAKE_SET
69 AC_PROG_MKDIR_P
70 AC_PROG_RANLIB
71
72 # -- Compiler Features --
73
74 AC_C_CONST
75 AC_C_INLINE
76 __ng_PROTOTYPES__
77
78 # -- Function Definitions --
79
80 AC_DEFUN([GCC_STACK_PROTECT_CC],[
81         ssp_cc=yes
82         # Use -fstack-protector-all for the test to enfoce the use of the
83         # guard variable
84         AC_MSG_CHECKING([whether ${CC} accepts -fstack-protector])
85         ssp_old_cflags="$CFLAGS"
86         CFLAGS="$CFLAGS -fstack-protector-all"
87         AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])],[],[ssp_cc=no])
88         echo $ssp_cc
89         CFLAGS="$ssp_old_cflags"
90         if test "X$ssp_cc" = "Xyes"; then
91                 CFLAGS="$CFLAGS -fstack-protector"
92                 AC_DEFINE([ENABLE_SSP_CC], 1, [Define if SSP C support is enabled.])
93         fi
94 ])
95
96 AC_DEFUN([WORKING_GETADDRINFO],[
97         AC_CHECK_FUNCS([getaddrinfo],[
98                 AC_MSG_CHECKING([whether getaddrinfo() works])
99                 AC_RUN_IFELSE([AC_LANG_SOURCE([[
100 #include <stdio.h>
101 #include <sys/types.h>
102 #include <sys/socket.h>
103 #include <netdb.h>
104 int
105 main(int argc, char **argv)
106 {
107         struct addrinfo hints, *ai;
108         memset(&hints, 0, sizeof(hints));
109         hints.ai_flags = AI_PASSIVE;
110         hints.ai_socktype = SOCK_STREAM;
111         hints.ai_family = PF_UNSPEC;
112         if(getaddrinfo(NULL, "0", &hints, &ai) != 0)
113                 return 1;
114         return 0;
115 }
116                 ]])],[
117                 AC_DEFINE([HAVE_WORKING_GETADDRINFO], 1, [getaddrinfo(0)])
118                 AC_MSG_RESULT(yes)
119                 ],[
120                 AC_MSG_RESULT(no)
121                 ],[
122                 AC_MSG_RESULT(no)
123                 ])
124         ])
125 ])
126
127 # -- Hard coded system and compiler dependencies/features/options ... --
128
129 if test "$GCC" = "yes"; then
130         # We are using the GNU C compiler. Good!
131         CFLAGS="$CFLAGS -pipe -W -Wall -Wpointer-arith -Wstrict-prototypes"
132
133         GCC_STACK_PROTECT_CC
134 fi
135
136 case "$host_os" in
137         hpux*)
138                 # This is HP/UX, we need to define _XOPEN_SOURCE_EXTENDED
139                 # (tested with HP/UX 11.11)
140                 CFLAGS="$CFLAGS -D_XOPEN_SOURCE_EXTENDED"
141                 ;;
142 esac
143
144 # Add additional CFLAGS, eventually specified on the command line:
145 test -n "$CFLAGS_ADD" && CFLAGS="$CFLAGS $CFLAGS_ADD"
146
147 CFLAGS="$CFLAGS -DSYSCONFDIR='\"\$(sysconfdir)\"' -DDOCDIR='\"\$(docdir)\"'"
148
149 # -- Headers --
150
151 AC_HEADER_STDC
152 AC_HEADER_SYS_WAIT
153 AC_HEADER_TIME
154
155 # Required header files
156 AC_CHECK_HEADERS([ \
157                 fcntl.h \
158                 netdb.h \
159                 netinet/in.h \
160                 stdlib.h \
161                 string.h \
162                 strings.h \
163                 sys/socket.h \
164                 sys/time.h \
165                 sys/types.h \
166                 unistd.h \
167         ],,AC_MSG_ERROR([required C header missing!]))
168
169 # Optional header files
170 AC_CHECK_HEADERS_ONCE([ \
171         arpa/inet.h \
172         inttypes.h \
173         malloc.h \
174         netinet/in_systm.h \
175         netinet/ip.h \
176         stdbool.h \
177         stddef.h \
178         stdint.h \
179         varargs.h \
180 ])
181
182 # -- Datatypes --
183
184 AC_MSG_CHECKING(whether socklen_t exists)
185 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
186 #include <sys/types.h>
187 #include <sys/socket.h>
188         ]],[[
189         socklen_t a, b;
190         a = 2; b = 4; a += b;
191         ]])],[
192         AC_DEFINE(HAVE_socklen_t) AC_MSG_RESULT(yes)
193         ],[
194         AC_MSG_RESULT(no)
195 ])
196
197 AC_TYPE_PID_T
198 AC_TYPE_SIZE_T
199 AC_TYPE_SSIZE_T
200 AC_TYPE_UID_T
201 AC_TYPE_UINT16_T
202 AC_TYPE_UINT32_T
203 AC_TYPE_UINT8_T
204
205 AC_CHECK_MEMBER([struct sockaddr_in.sin_len], AC_DEFINE(HAVE_sockaddr_in_len),,
206  [#include <arpa/inet.h>])
207
208 # -- Libraries --
209
210 # memmove: A/UX libUTIL
211 AC_SEARCH_LIBS([memmove], [UTIL], [], [
212         AC_MSG_ERROR([unable to find the memmove() function])
213 ])
214 # gethostbyname: Solaris libnsl
215 AC_SEARCH_LIBS([gethostbyname], [bind nsl network], [], [
216         AC_MSG_ERROR([unable to find the gethostbyname() function])
217 ])
218 # bind: SVR4 libsocket
219 AC_SEARCH_LIBS([bind], [socket network], [], [
220         AC_MSG_ERROR([unable to find the bind() function])
221 ])
222
223 # -- Functions --
224
225 AC_FUNC_FORK
226 AC_FUNC_STRFTIME
227
228 # Required functions
229 AC_CHECK_FUNCS([ \
230                 alarm \
231                 dup2 \
232                 endpwent \
233                 gethostbyaddr \
234                 gethostbyname \
235                 gethostname \
236                 gettimeofday \
237                 inet_ntoa \
238                 memmove \
239                 memset \
240                 setsid \
241                 socket \
242                 strcasecmp \
243                 strchr \
244                 strcspn \
245                 strerror \
246                 strncasecmp \
247                 strrchr \
248                 strspn \
249                 strstr \
250         ],,
251         AC_MSG_ERROR([required function missing!]))
252
253 # Optional functions
254 AC_CHECK_FUNCS_ONCE([
255         arc4random \
256         arc4random_stir \
257         gai_strerror \
258         getnameinfo \
259         inet_aton \
260         setgroups \
261         sigaction \
262         sigprocmask \
263         snprintf \
264         strdup \
265         strlcat \
266         strlcpy \
267         strndup \
268         strtok_r \
269         unsetenv \
270         vsnprintf \
271         waitpid \
272 ])
273
274 WORKING_GETADDRINFO
275
276 # -- Configuration options --
277
278 # use syslog?
279
280 x_syslog_on=no
281 AC_ARG_WITH(syslog,
282         AS_HELP_STRING([--without-syslog],
283                        [disable syslog (autodetected by default)]),
284         [       if test "$withval" != "no"; then
285                         if test "$withval" != "yes"; then
286                                 CFLAGS="-I$withval/include $CFLAGS"
287                                 CPPFLAGS="-I$withval/include $CPPFLAGS"
288                                 LDFLAGS="-L$withval/lib $LDFLAGS"
289                         fi
290                         AC_SEARCH_LIBS([syslog], [be], [x_syslog_on=yes], [
291                                 AC_MSG_ERROR([Can't enable syslog!])
292                         ])
293                 fi
294         ],
295         [       AC_SEARCH_LIBS([syslog], [be], [x_syslog_on=yes])
296         ]
297 )
298 if test "$x_syslog_on" = "yes"; then
299         AC_DEFINE(SYSLOG, 1)
300         AC_CHECK_HEADERS(syslog.h,,AC_MSG_ERROR([required C header missing!]))
301 fi
302
303 # use zlib compression?
304
305 x_zlib_on=no
306 AC_ARG_WITH(zlib,
307         AS_HELP_STRING([--without-zlib],
308                        [disable zlib compression (autodetected by default)]),
309         [       if test "$withval" != "no"; then
310                         if test "$withval" != "yes"; then
311                                 CFLAGS="-I$withval/include $CFLAGS"
312                                 CPPFLAGS="-I$withval/include $CPPFLAGS"
313                                 LDFLAGS="-L$withval/lib $LDFLAGS"
314                         fi
315                         AC_CHECK_LIB(z, deflate)
316                         AC_CHECK_FUNCS(deflate, x_zlib_on=yes,
317                                 AC_MSG_ERROR([Can't enable zlib!])
318                         )
319                 fi
320         ],
321         [       AC_CHECK_LIB(z, deflate)
322                 AC_CHECK_FUNCS(deflate, x_zlib_on=yes)
323         ]
324 )
325 if test "$x_zlib_on" = "yes"; then
326         AC_DEFINE(ZLIB, 1)
327         AC_CHECK_HEADERS(zlib.h,,AC_MSG_ERROR([required C header missing!]))
328 fi
329
330 # detect which IO API to use:
331
332 x_io_backend=none
333
334 AC_ARG_WITH(select,
335         AS_HELP_STRING([--without-select],
336                        [disable select IO support (autodetected by default)]),
337         [       if test "$withval" != "no"; then
338                         if test "$withval" != "yes"; then
339                                 CFLAGS="-I$withval/include $CFLAGS"
340                                 CPPFLAGS="-I$withval/include $CPPFLAGS"
341                                 LDFLAGS="-L$withval/lib $LDFLAGS"
342                         fi
343                         AC_CHECK_FUNCS(select, x_io_select=yes,
344                                 AC_MSG_ERROR([Can't enable select IO support!])
345                         )
346                 fi
347         ],
348         [
349                 AC_CHECK_FUNCS(select, x_io_select=yes)
350         ]
351 )
352
353 AC_ARG_WITH(poll,
354         AS_HELP_STRING([--without-poll],
355                        [disable poll support (autodetected by default)]),
356         [       if test "$withval" != "no"; then
357                         if test "$withval" != "yes"; then
358                                 CFLAGS="-I$withval/include $CFLAGS"
359                                 CPPFLAGS="-I$withval/include $CPPFLAGS"
360                                 LDFLAGS="-L$withval/lib $LDFLAGS"
361                         fi
362                         AC_CHECK_FUNCS(poll, [
363                                 AC_CHECK_HEADERS(poll.h,
364                                         x_io_backend=poll\(\),
365                                         AC_MSG_ERROR(
366                                              [Can't enable poll IO support!])
367                                 )
368                         ], [
369                                 AC_MSG_ERROR([Can't enable poll IO support!])
370                         ])
371                 fi
372         ],
373         [
374                 AC_CHECK_FUNCS(poll, [
375                         AC_CHECK_HEADERS(poll.h, x_io_backend=poll\(\))
376                 ])
377         ]
378 )
379
380 AC_ARG_WITH(devpoll,
381         AS_HELP_STRING([--without-devpoll],
382                        [disable /dev/poll IO support (autodetected by default)]),
383         [       if test "$withval" != "no"; then
384                         if test "$withval" != "yes"; then
385                                 CFLAGS="-I$withval/include $CFLAGS"
386                                 CPPFLAGS="-I$withval/include $CPPFLAGS"
387                                 LDFLAGS="-L$withval/lib $LDFLAGS"
388                         fi
389
390                                 AC_CHECK_HEADERS(sys/devpoll.h,,AC_MSG_ERROR([required C header missing!]))
391                 fi
392         ],
393         [
394                 AC_CHECK_HEADERS(sys/devpoll.h, x_io_backend=/dev/poll)
395         ]
396 )
397
398 AC_ARG_WITH(epoll,
399         AS_HELP_STRING([--without-epoll],
400                        [disable epoll IO support (autodetected by default)]),
401         [       if test "$withval" != "no"; then
402                         if test "$withval" != "yes"; then
403                                 CFLAGS="-I$withval/include $CFLAGS"
404                                 CPPFLAGS="-I$withval/include $CPPFLAGS"
405                                 LDFLAGS="-L$withval/lib $LDFLAGS"
406                         fi
407                         AC_CHECK_FUNCS(epoll_create, x_io_epoll=yes,
408                                 AC_MSG_ERROR([Can't enable epoll IO support!])
409                         )
410                 fi
411         ],
412         [
413                 AC_CHECK_FUNCS(epoll_create, x_io_epoll=yes)
414         ]
415 )
416
417 AC_ARG_WITH(kqueue,
418         AS_HELP_STRING([--without-kqueue],
419                        [disable kqueue IO support (autodetected by default)]),
420         [       if test "$withval" != "no"; then
421                         if test "$withval" != "yes"; then
422                                 CFLAGS="-I$withval/include $CFLAGS"
423                                 CPPFLAGS="-I$withval/include $CPPFLAGS"
424                                 LDFLAGS="-L$withval/lib $LDFLAGS"
425                         fi
426                         AC_CHECK_FUNCS(kqueue, x_io_backend=kqueue\(\),
427                                 AC_MSG_ERROR([Can't enable kqueue IO support!])
428                         )
429                 fi
430         ],
431         [
432                 AC_CHECK_FUNCS(kqueue, x_io_backend=kqueue\(\))
433         ]
434 )
435
436 if test "$x_io_epoll" = "yes" -a "$x_io_select" = "yes"; then
437         # when epoll() and select() are available, we'll use both!
438         x_io_backend="epoll(), select()"
439 else
440         if test "$x_io_epoll" = "yes"; then
441                 # we prefere epoll() if it is available
442                 x_io_backend="epoll()"
443         else
444                 if test "$x_io_select" = "yes" -a "$x_io_backend" = "none"; then
445                         # we'll use select, when available and no "better"
446                         # interface has been detected ...
447                         x_io_backend="select()"
448                 fi
449         fi
450 fi
451
452 if test "$x_io_backend" = "none"; then
453         AC_MSG_ERROR([No useable IO API activated/found!?])
454 fi
455
456 # use SSL?
457
458 AC_ARG_WITH(openssl,
459         AS_HELP_STRING([--with-openssl],
460                        [enable SSL support using OpenSSL]),
461         [       if test "$withval" != "no"; then
462                         if test "$withval" != "yes"; then
463                                 CFLAGS="-I$withval/include $CFLAGS"
464                                 CPPFLAGS="-I$withval/include $CPPFLAGS"
465                                 LDFLAGS="-L$withval/lib $LDFLAGS"
466                         fi
467                         PKG_CHECK_MODULES([OPENSSL], [libssl libcrypto],
468                                 [LIBS="$LIBS $OPENSSL_LIBS" CFLAGS="$CFLAGS $OPENSSL_CFLAGS"
469                                 AC_DEFINE(HAVE_LIBSSL, 1)],
470                                 [AC_CHECK_LIB(crypto, BIO_s_mem)
471                                 AC_CHECK_LIB(ssl, SSL_new)]
472                         )
473                         AC_CHECK_FUNCS(SSL_new, x_ssl_openssl=yes,
474                                 AC_MSG_ERROR([Can't enable openssl])
475                         )
476                 fi
477         ]
478 )
479
480 AC_ARG_WITH(gnutls,
481         AS_HELP_STRING([--with-gnutls],
482                        [enable SSL support using gnutls]),
483         [       if test "$withval" != "no"; then
484                         if test "$withval" != "yes"; then
485                                 CFLAGS="-I$withval/include $CFLAGS"
486                                 CPPFLAGS="-I$withval/include $CPPFLAGS"
487                                 LDFLAGS="-L$withval/lib $LDFLAGS"
488                         fi
489                         AC_CHECK_LIB(gnutls, gnutls_global_init)
490                         AC_CHECK_FUNCS(gnutls_global_init, x_ssl_gnutls=yes,
491                                 AC_MSG_ERROR([Can't enable gnutls])
492                         )
493                 fi
494         ]
495 )
496
497 x_ssl_lib="no"
498 if test "$x_ssl_gnutls" = "yes"; then
499         if test "$x_ssl_openssl" = "yes";then
500                 AC_MSG_ERROR([Cannot enable both gnutls and openssl])
501         fi
502         x_ssl_lib=gnutls
503 fi
504 if test "$x_ssl_openssl" = "yes"; then
505         x_ssl_lib=openssl
506 fi
507
508 # use TCP wrappers?
509
510 x_tcpwrap_on=no
511 AC_ARG_WITH(tcp-wrappers,
512         AS_HELP_STRING([--with-tcp-wrappers],
513                        [enable TCP wrappers support]),
514         [       if test "$withval" != "no"; then
515                         if test "$withval" != "yes"; then
516                                 CFLAGS="-I$withval/include $CFLAGS"
517                                 CPPFLAGS="-I$withval/include $CPPFLAGS"
518                                 LDFLAGS="-L$withval/lib $LDFLAGS"
519                         fi
520                         AC_MSG_CHECKING(for hosts_access)
521                         saved_LIBS="$LIBS"
522                         LIBS="-lwrap $LIBS"
523                         LIBS_END="-lwrap $LIBS_END"
524                         AC_LINK_IFELSE([AC_LANG_PROGRAM([[
525 #include <sys/types.h>
526 #include <sys/socket.h>
527 #include <tcpd.h>
528 int allow_severity = 0;
529 int deny_severity = 0;
530                                 ]],[[
531                                 tcpd_warn("link test");
532                                 ]])],[
533                                 AC_MSG_RESULT(yes)
534                                 AC_DEFINE(TCPWRAP, 1)
535                                 x_tcpwrap_on=yes
536                                 ],[
537                                 AC_MSG_RESULT(no)
538                                 AC_MSG_ERROR([Can't enable TCP wrappers!])
539                         ])
540                         LIBS="$saved_LIBS"
541                 fi
542         ]
543 )
544
545 # do IDENT requests using libident?
546
547 x_identauth_on=no
548 AC_ARG_WITH(ident,
549         AS_HELP_STRING([--with-ident],
550                        [enable "IDENT" ("AUTH") protocol support]),
551         [       if test "$withval" != "no"; then
552                         if test "$withval" != "yes"; then
553                                 CFLAGS="-I$withval/include $CFLAGS"
554                                 CPPFLAGS="-I$withval/include $CPPFLAGS"
555                                 LDFLAGS="-L$withval/lib $LDFLAGS"
556                         fi
557                         AC_CHECK_LIB(ident, ident_id)
558                         AC_CHECK_FUNCS(ident_id, x_identauth_on=yes,
559                                 AC_MSG_ERROR([Can't enable IDENT support!])
560                         )
561                 fi
562         ]
563 )
564 if test "$x_identauth_on" = "yes"; then
565         AC_DEFINE(IDENTAUTH, 1)
566         AC_CHECK_HEADERS(ident.h,,AC_MSG_ERROR([required C header missing!]))
567 fi
568
569 # compile in PAM support?
570
571 x_pam_on=no
572 AC_ARG_WITH(pam,
573         AS_HELP_STRING([--with-pam],
574                        [enable user authentication using PAM]),
575         [       if test "$withval" != "no"; then
576                         if test "$withval" != "yes"; then
577                                 CFLAGS="-I$withval/include $CFLAGS"
578                                 CPPFLAGS="-I$withval/include $CPPFLAGS"
579                                 LDFLAGS="-L$withval/lib $LDFLAGS"
580                         fi
581                         AC_CHECK_LIB(pam, pam_authenticate)
582                         AC_CHECK_FUNCS(pam_authenticate, x_pam_on=yes,
583                                 AC_MSG_ERROR([Can't enable PAM support!])
584                         )
585                 fi
586         ]
587 )
588 if test "$x_pam_on" = "yes"; then
589         AC_DEFINE(PAM, 1)
590         AC_CHECK_HEADERS(security/pam_appl.h,pam_ok=yes)
591         if test "$pam_ok" != "yes"; then
592                 AC_CHECK_HEADERS(pam/pam_appl.h,pam_ok=yes,
593                         AC_MSG_ERROR([required C header missing!]))
594         fi
595 fi
596
597 # compile in IRC+ protocol support?
598
599 x_ircplus_on=yes
600 AC_ARG_ENABLE(ircplus,
601         AS_HELP_STRING([--disable-ircplus],
602                        [disable IRC+ protocol]),
603         if test "$enableval" = "no"; then x_ircplus_on=no; fi
604 )
605 if test "$x_ircplus_on" = "yes"; then
606         AC_DEFINE(IRCPLUS, 1)
607
608         # Compile in iconv support?
609         # We only check for it when IRC+ is enabled, because the IRC+ command
610         # CHARCONV is the only function depending on it.
611         x_iconv_on=no
612         AC_ARG_WITH(iconv,
613                 AS_HELP_STRING([--with-iconv],
614                                [enable character conversion using libiconv]),
615                 [ if test "$withval" != "no"; then
616                         if test "$withval" != "yes"; then
617                                 CFLAGS="-I$withval/include $CFLAGS"
618                                 CPPFLAGS="-I$withval/include $CPPFLAGS"
619                                 LDFLAGS="-L$withval/lib $LDFLAGS"
620                         fi
621                         AC_CHECK_LIB(iconv, iconv_open)
622                         AC_CHECK_FUNCS(iconv_open, x_iconv_on=yes)
623                         if test "$x_iconv_on" != "yes"; then
624                                 AC_CHECK_LIB(iconv, libiconv_open)
625                                 AC_CHECK_FUNCS(libiconv_open, x_iconv_on=yes)
626                         fi
627                         if test "$x_iconv_on" != "yes"; then
628                                 AC_MSG_ERROR([Can't enable libiconv support!])
629                         fi
630                 fi ]
631         )
632         if test "$x_iconv_on" = "yes"; then
633                 AC_DEFINE(ICONV, 1)
634         fi
635 fi
636
637 # enable support for IPv6?
638 x_ipv6_on=no
639 AC_ARG_ENABLE(ipv6,
640         AS_HELP_STRING([--enable-ipv6],
641                        [enable IPv6 protocol support]),
642         if test "$enableval" = "yes"; then x_ipv6_on=yes; fi
643 )
644 if test "$x_ipv6_on" = "yes"; then
645         # getaddrinfo() and getnameinfo() are optional when not compiling
646         # with IPv6 support, but are required for IPv6 to work!
647         AC_CHECK_FUNCS([ \
648                 getaddrinfo getnameinfo \
649                 ],,AC_MSG_ERROR([required function missing for IPv6 support!]))
650         AC_DEFINE(WANT_IPV6, 1)
651 fi
652
653 # compile in IRC "sniffer"?
654
655 x_sniffer_on=no; x_debug_on=no
656 AC_ARG_ENABLE(sniffer,
657         AS_HELP_STRING([--enable-sniffer],
658                        [enable IRC traffic sniffer (enables debug mode)]),
659         if test "$enableval" = "yes"; then
660                 AC_DEFINE(SNIFFER, 1)
661                 x_sniffer_on=yes; x_debug_on=yes
662         fi
663 )
664
665 # enable additional debugging code?
666
667 AC_ARG_ENABLE(debug,
668         AS_HELP_STRING([--enable-debug],
669                        [show additional debug output]),
670         if test "$enableval" = "yes"; then x_debug_on=yes; fi
671 )
672 if test "$x_debug_on" = "yes"; then
673         AC_DEFINE(DEBUG, 1)
674         test "$GCC" = "yes" && CFLAGS="-pedantic $CFLAGS"
675         AC_CHECK_FUNCS(mtrace)
676 fi
677
678 # enable "strict RFC rules"?
679
680 x_strict_rfc_on=no
681 AC_ARG_ENABLE(strict-rfc,
682         AS_HELP_STRING([--enable-strict-rfc],
683                        [strict RFC conformance -- may break clients!]),
684         if test "$enableval" = "yes"; then
685                 AC_DEFINE(STRICT_RFC, 1)
686                 x_strict_rfc_on=yes
687         fi
688 )
689
690 # -- Definitions --
691
692 AC_DEFINE_UNQUOTED(HOST_CPU, "$host_cpu" )
693 AC_DEFINE_UNQUOTED(HOST_VENDOR, "$host_vendor" )
694 AC_DEFINE_UNQUOTED(HOST_OS, "$host_os" )
695
696 # Add additional CFLAGS, LDFLAGS and LIBS which were specified on the command
697 # line or by some tests from above, but after running this script. Useful for
698 # adding "-Werror", for example:
699 test -n "$CFLAGS_END" && CFLAGS="$CFLAGS $CFLAGS_END"
700 test -n "$LDFLAGS_END" && LDFLAGS="$LDFLAGS $LDFLAGS_END"
701 test -n "$LIBS_END" && LIBS="$LIBS $LIBS_END"
702
703 # -- Generate files --
704
705 AC_CONFIG_FILES([ \
706         Makefile \
707         contrib/Debian/Makefile \
708         contrib/MacOSX/Makefile \
709         contrib/MacOSX/ngIRCd.pmdoc/Makefile \
710         contrib/MacOSX/ngIRCd.xcodeproj/Makefile \
711         contrib/Makefile \
712         doc/Makefile \
713         doc/src/Makefile \
714         man/Makefile \
715         src/ipaddr/Makefile \
716         src/Makefile \
717         src/ngircd/Makefile \
718         src/portab/Makefile \
719         src/testsuite/Makefile \
720         src/tool/Makefile \
721 ])
722
723 AC_OUTPUT
724
725 type dpkg >/dev/null 2>&1
726 if test $? -eq 0; then
727         # Generate debian/ link if the dpkg command exists
728         # (read: if we are running on a debian compatible system)
729         echo "creating Debian-specific links ..."
730         if test ! -f debian/rules -a -f contrib/Debian/rules; then
731                 ln -s contrib/Debian debian
732         fi
733 fi
734
735 # -- Result --
736
737 echo
738 echo "ngIRCd $PACKAGE_VERSION has been configured with the following options:"
739 echo
740
741 # Someone please show me a better way :)  [borrowed by OpenSSH]
742 B=`eval echo ${bindir}` ; B=`eval echo ${B}`
743 S=`eval echo ${sbindir}` ; S=`eval echo ${S}`
744 C=`eval echo ${sysconfdir}` ; C=`eval echo ${C}`
745 M=`eval echo ${mandir}` ; M=`eval echo ${M}`
746 D=`eval echo ${docdir}` ; D=`eval echo ${D}`
747
748 echo "               Host: ${host}"
749 echo "           Compiler: ${CC}"
750 test -n "$CFLAGS"       && echo "     Compiler flags: ${CFLAGS}"
751 test -n "$CPPFLAGS"     && echo " Preprocessor flags: ${CPPFLAGS}"
752 test -n "$LDFLAGS"      && echo "       Linker flags: ${LDFLAGS}"
753 test -n "$LIBS"         && echo "          Libraries: ${LIBS}"
754 echo
755 echo "    'ngircd' binary: $S"
756 echo " Configuration file: $C"
757 echo "       Manual pages: $M"
758 echo "      Documentation: $D"
759 echo
760
761 echo $ECHO_N "     Syslog support: $ECHO_C"
762 test "$x_syslog_on" = "yes" \
763         && echo $ECHO_N "yes   $ECHO_C" \
764         || echo $ECHO_N "no    $ECHO_C"
765 echo $ECHO_N "  Enable debug code: $ECHO_C"
766 test "$x_debug_on" = "yes" \
767         && echo "yes" \
768         || echo "no"
769
770 echo $ECHO_N "   zlib compression: $ECHO_C"
771 test "$x_zlib_on" = "yes" \
772         && echo $ECHO_N "yes   $ECHO_C" \
773         || echo $ECHO_N "no    $ECHO_C"
774 echo $ECHO_N "        IRC sniffer: $ECHO_C"
775 test "$x_sniffer_on" = "yes" \
776         && echo "yes" \
777         || echo "no"
778
779 echo $ECHO_N "   Use TCP Wrappers: $ECHO_C"
780 test "$x_tcpwrap_on" = "yes" \
781         && echo $ECHO_N "yes   $ECHO_C" \
782         || echo $ECHO_N "no    $ECHO_C"
783 echo $ECHO_N "    Strict RFC mode: $ECHO_C"
784 test "$x_strict_rfc_on" = "yes" \
785         && echo "yes" \
786         || echo "no"
787
788 echo $ECHO_N "      IDENT support: $ECHO_C"
789 test "$x_identauth_on" = "yes" \
790         && echo $ECHO_N "yes   $ECHO_C" \
791         || echo $ECHO_N "no    $ECHO_C"
792 echo $ECHO_N "      IRC+ protocol: $ECHO_C"
793 test "$x_ircplus_on" = "yes" \
794         && echo "yes" \
795         || echo "no"
796
797 echo $ECHO_N "      IPv6 protocol: $ECHO_C"
798 test "$x_ipv6_on" = "yes" \
799         && echo $ECHO_N "yes   $ECHO_C" \
800         || echo $ECHO_N "no    $ECHO_C"
801 echo $ECHO_N "        I/O backend: $ECHO_C"
802         echo "$x_io_backend"
803
804 echo $ECHO_N "        PAM support: $ECHO_C"
805 test "$x_pam_on" = "yes" \
806         && echo $ECHO_N "yes   $ECHO_C" \
807         || echo $ECHO_N "no    $ECHO_C"
808 echo $ECHO_N "        SSL support: $ECHO_C"
809 echo "$x_ssl_lib"
810
811 echo $ECHO_N "   libiconv support: $ECHO_C"
812         echo "$x_iconv_on"
813
814 echo
815
816 define(_automake_regex_,[[^AUTOMAKE_OPTIONS = [a-z .\-]*/portab/ansi2knr]])
817 if ! grep "_automake_regex_" src/ngircd/Makefile.am >/dev/null 2>&1; then
818         echo "WARNING:"
819         echo "This GNU automake generated build system does not support \"de-ANSI-fication\","
820         echo "therefore don't use it to generate \"official\" distribution archives!"
821         echo "(Most probably you want to use GNU automake 1.11.x for this purpose ...)"
822         echo
823 fi
824
825 # -eof-