]> arthur.barton.de Git - ngircd-alex.git/blob - configure.ng
contrib/nglog.sh: Use bright colors for warning & error messages
[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         strsignal \
269         strtok_r \
270         unsetenv \
271         vsnprintf \
272         waitpid \
273 ])
274
275 WORKING_GETADDRINFO
276
277 # -- Configuration options --
278
279 # use syslog?
280
281 x_syslog_on=no
282 AC_ARG_WITH(syslog,
283         AS_HELP_STRING([--without-syslog],
284                        [disable syslog (autodetected by default)]),
285         [       if test "$withval" != "no"; then
286                         if test "$withval" != "yes"; then
287                                 CFLAGS="-I$withval/include $CFLAGS"
288                                 CPPFLAGS="-I$withval/include $CPPFLAGS"
289                                 LDFLAGS="-L$withval/lib $LDFLAGS"
290                         fi
291                         AC_SEARCH_LIBS([syslog], [be], [x_syslog_on=yes], [
292                                 AC_MSG_ERROR([Can't enable syslog!])
293                         ])
294                 fi
295         ],
296         [       AC_SEARCH_LIBS([syslog], [be], [x_syslog_on=yes])
297         ]
298 )
299 if test "$x_syslog_on" = "yes"; then
300         AC_DEFINE(SYSLOG, 1)
301         AC_CHECK_HEADERS(syslog.h,,AC_MSG_ERROR([required C header missing!]))
302 fi
303
304 # use zlib compression?
305
306 x_zlib_on=no
307 AC_ARG_WITH(zlib,
308         AS_HELP_STRING([--without-zlib],
309                        [disable zlib compression (autodetected by default)]),
310         [       if test "$withval" != "no"; then
311                         if test "$withval" != "yes"; then
312                                 CFLAGS="-I$withval/include $CFLAGS"
313                                 CPPFLAGS="-I$withval/include $CPPFLAGS"
314                                 LDFLAGS="-L$withval/lib $LDFLAGS"
315                         fi
316                         AC_CHECK_LIB(z, deflate)
317                         AC_CHECK_FUNCS(deflate, x_zlib_on=yes,
318                                 AC_MSG_ERROR([Can't enable zlib!])
319                         )
320                 fi
321         ],
322         [       AC_CHECK_LIB(z, deflate)
323                 AC_CHECK_FUNCS(deflate, x_zlib_on=yes)
324         ]
325 )
326 if test "$x_zlib_on" = "yes"; then
327         AC_DEFINE(ZLIB, 1)
328         AC_CHECK_HEADERS(zlib.h,,AC_MSG_ERROR([required C header missing!]))
329 fi
330
331 # detect which IO API to use:
332
333 x_io_backend=none
334
335 AC_ARG_WITH(select,
336         AS_HELP_STRING([--without-select],
337                        [disable select IO support (autodetected by default)]),
338         [       if test "$withval" != "no"; then
339                         if test "$withval" != "yes"; then
340                                 CFLAGS="-I$withval/include $CFLAGS"
341                                 CPPFLAGS="-I$withval/include $CPPFLAGS"
342                                 LDFLAGS="-L$withval/lib $LDFLAGS"
343                         fi
344                         AC_CHECK_FUNCS(select, x_io_select=yes,
345                                 AC_MSG_ERROR([Can't enable select IO support!])
346                         )
347                 fi
348         ],
349         [
350                 AC_CHECK_FUNCS(select, x_io_select=yes)
351         ]
352 )
353
354 AC_ARG_WITH(poll,
355         AS_HELP_STRING([--without-poll],
356                        [disable poll support (autodetected by default)]),
357         [       if test "$withval" != "no"; then
358                         if test "$withval" != "yes"; then
359                                 CFLAGS="-I$withval/include $CFLAGS"
360                                 CPPFLAGS="-I$withval/include $CPPFLAGS"
361                                 LDFLAGS="-L$withval/lib $LDFLAGS"
362                         fi
363                         AC_CHECK_FUNCS(poll, [
364                                 AC_CHECK_HEADERS(poll.h,
365                                         x_io_backend=poll\(\),
366                                         AC_MSG_ERROR(
367                                              [Can't enable poll IO support!])
368                                 )
369                         ], [
370                                 AC_MSG_ERROR([Can't enable poll IO support!])
371                         ])
372                 fi
373         ],
374         [
375                 AC_CHECK_FUNCS(poll, [
376                         AC_CHECK_HEADERS(poll.h, x_io_backend=poll\(\))
377                 ])
378         ]
379 )
380
381 AC_ARG_WITH(devpoll,
382         AS_HELP_STRING([--without-devpoll],
383                        [disable /dev/poll IO support (autodetected by default)]),
384         [       if test "$withval" != "no"; then
385                         if test "$withval" != "yes"; then
386                                 CFLAGS="-I$withval/include $CFLAGS"
387                                 CPPFLAGS="-I$withval/include $CPPFLAGS"
388                                 LDFLAGS="-L$withval/lib $LDFLAGS"
389                         fi
390
391                                 AC_CHECK_HEADERS(sys/devpoll.h,,AC_MSG_ERROR([required C header missing!]))
392                 fi
393         ],
394         [
395                 AC_CHECK_HEADERS(sys/devpoll.h, x_io_backend=/dev/poll)
396         ]
397 )
398
399 AC_ARG_WITH(epoll,
400         AS_HELP_STRING([--without-epoll],
401                        [disable epoll IO support (autodetected by default)]),
402         [       if test "$withval" != "no"; then
403                         if test "$withval" != "yes"; then
404                                 CFLAGS="-I$withval/include $CFLAGS"
405                                 CPPFLAGS="-I$withval/include $CPPFLAGS"
406                                 LDFLAGS="-L$withval/lib $LDFLAGS"
407                         fi
408                         AC_CHECK_FUNCS(epoll_create, x_io_epoll=yes,
409                                 AC_MSG_ERROR([Can't enable epoll IO support!])
410                         )
411                 fi
412         ],
413         [
414                 AC_CHECK_FUNCS(epoll_create, x_io_epoll=yes)
415         ]
416 )
417
418 AC_ARG_WITH(kqueue,
419         AS_HELP_STRING([--without-kqueue],
420                        [disable kqueue IO support (autodetected by default)]),
421         [       if test "$withval" != "no"; then
422                         if test "$withval" != "yes"; then
423                                 CFLAGS="-I$withval/include $CFLAGS"
424                                 CPPFLAGS="-I$withval/include $CPPFLAGS"
425                                 LDFLAGS="-L$withval/lib $LDFLAGS"
426                         fi
427                         AC_CHECK_FUNCS(kqueue, x_io_backend=kqueue\(\),
428                                 AC_MSG_ERROR([Can't enable kqueue IO support!])
429                         )
430                 fi
431         ],
432         [
433                 AC_CHECK_FUNCS(kqueue, x_io_backend=kqueue\(\))
434         ]
435 )
436
437 if test "$x_io_epoll" = "yes" -a "$x_io_select" = "yes"; then
438         # when epoll() and select() are available, we'll use both!
439         x_io_backend="epoll(), select()"
440 else
441         if test "$x_io_epoll" = "yes"; then
442                 # we prefere epoll() if it is available
443                 x_io_backend="epoll()"
444         else
445                 if test "$x_io_select" = "yes" -a "$x_io_backend" = "none"; then
446                         # we'll use select, when available and no "better"
447                         # interface has been detected ...
448                         x_io_backend="select()"
449                 fi
450         fi
451 fi
452
453 if test "$x_io_backend" = "none"; then
454         AC_MSG_ERROR([No useable IO API activated/found!?])
455 fi
456
457 # use SSL?
458
459 AC_ARG_WITH(openssl,
460         AS_HELP_STRING([--with-openssl],
461                        [enable SSL support using OpenSSL]),
462         [       if test "$withval" != "no"; then
463                         if test "$withval" != "yes"; then
464                                 CFLAGS="-I$withval/include $CFLAGS"
465                                 CPPFLAGS="-I$withval/include $CPPFLAGS"
466                                 LDFLAGS="-L$withval/lib $LDFLAGS"
467                         fi
468                         PKG_CHECK_MODULES([OPENSSL], [libssl libcrypto],
469                                 [LIBS="$LIBS $OPENSSL_LIBS" CFLAGS="$CFLAGS $OPENSSL_CFLAGS"
470                                 AC_DEFINE(HAVE_LIBSSL, 1)],
471                                 [AC_CHECK_LIB(crypto, BIO_s_mem)
472                                 AC_CHECK_LIB(ssl, SSL_new)]
473                         )
474                         AC_CHECK_FUNCS(SSL_new, x_ssl_openssl=yes,
475                                 AC_MSG_ERROR([Can't enable openssl])
476                         )
477                 fi
478         ]
479 )
480
481 AC_ARG_WITH(gnutls,
482         AS_HELP_STRING([--with-gnutls],
483                        [enable SSL support using gnutls]),
484         [       if test "$withval" != "no"; then
485                         if test "$withval" != "yes"; then
486                                 CFLAGS="-I$withval/include $CFLAGS"
487                                 CPPFLAGS="-I$withval/include $CPPFLAGS"
488                                 LDFLAGS="-L$withval/lib $LDFLAGS"
489                         fi
490                         AC_CHECK_LIB(gnutls, gnutls_global_init)
491                         AC_CHECK_FUNCS(gnutls_global_init, x_ssl_gnutls=yes,
492                                 AC_MSG_ERROR([Can't enable gnutls])
493                         )
494                 fi
495         ]
496 )
497
498 x_ssl_lib="no"
499 if test "$x_ssl_gnutls" = "yes"; then
500         if test "$x_ssl_openssl" = "yes";then
501                 AC_MSG_ERROR([Cannot enable both gnutls and openssl])
502         fi
503         x_ssl_lib=gnutls
504 fi
505 if test "$x_ssl_openssl" = "yes"; then
506         x_ssl_lib=openssl
507 fi
508
509 # use TCP wrappers?
510
511 x_tcpwrap_on=no
512 AC_ARG_WITH(tcp-wrappers,
513         AS_HELP_STRING([--with-tcp-wrappers],
514                        [enable TCP wrappers support]),
515         [       if test "$withval" != "no"; then
516                         if test "$withval" != "yes"; then
517                                 CFLAGS="-I$withval/include $CFLAGS"
518                                 CPPFLAGS="-I$withval/include $CPPFLAGS"
519                                 LDFLAGS="-L$withval/lib $LDFLAGS"
520                         fi
521                         AC_MSG_CHECKING(for hosts_access)
522                         saved_LIBS="$LIBS"
523                         LIBS="-lwrap $LIBS"
524                         LIBS_END="-lwrap $LIBS_END"
525                         AC_LINK_IFELSE([AC_LANG_PROGRAM([[
526 #include <sys/types.h>
527 #include <sys/socket.h>
528 #include <tcpd.h>
529 int allow_severity = 0;
530 int deny_severity = 0;
531                                 ]],[[
532                                 tcpd_warn("link test");
533                                 ]])],[
534                                 AC_MSG_RESULT(yes)
535                                 AC_DEFINE(TCPWRAP, 1)
536                                 x_tcpwrap_on=yes
537                                 ],[
538                                 AC_MSG_RESULT(no)
539                                 AC_MSG_ERROR([Can't enable TCP wrappers!])
540                         ])
541                         LIBS="$saved_LIBS"
542                 fi
543         ]
544 )
545
546 # do IDENT requests using libident?
547
548 x_identauth_on=no
549 AC_ARG_WITH(ident,
550         AS_HELP_STRING([--with-ident],
551                        [enable "IDENT" ("AUTH") protocol support]),
552         [       if test "$withval" != "no"; then
553                         if test "$withval" != "yes"; then
554                                 CFLAGS="-I$withval/include $CFLAGS"
555                                 CPPFLAGS="-I$withval/include $CPPFLAGS"
556                                 LDFLAGS="-L$withval/lib $LDFLAGS"
557                         fi
558                         AC_CHECK_LIB(ident, ident_id)
559                         AC_CHECK_FUNCS(ident_id, x_identauth_on=yes,
560                                 AC_MSG_ERROR([Can't enable IDENT support!])
561                         )
562                 fi
563         ]
564 )
565 if test "$x_identauth_on" = "yes"; then
566         AC_DEFINE(IDENTAUTH, 1)
567         AC_CHECK_HEADERS(ident.h,,AC_MSG_ERROR([required C header missing!]))
568 fi
569
570 # compile in PAM support?
571
572 x_pam_on=no
573 AC_ARG_WITH(pam,
574         AS_HELP_STRING([--with-pam],
575                        [enable user authentication using PAM]),
576         [       if test "$withval" != "no"; then
577                         if test "$withval" != "yes"; then
578                                 CFLAGS="-I$withval/include $CFLAGS"
579                                 CPPFLAGS="-I$withval/include $CPPFLAGS"
580                                 LDFLAGS="-L$withval/lib $LDFLAGS"
581                         fi
582                         AC_CHECK_LIB(pam, pam_authenticate)
583                         AC_CHECK_FUNCS(pam_authenticate, x_pam_on=yes,
584                                 AC_MSG_ERROR([Can't enable PAM support!])
585                         )
586                 fi
587         ]
588 )
589 if test "$x_pam_on" = "yes"; then
590         AC_DEFINE(PAM, 1)
591         AC_CHECK_HEADERS(security/pam_appl.h,pam_ok=yes)
592         if test "$pam_ok" != "yes"; then
593                 AC_CHECK_HEADERS(pam/pam_appl.h,pam_ok=yes,
594                         AC_MSG_ERROR([required C header missing!]))
595         fi
596 fi
597
598 # compile in IRC+ protocol support?
599
600 x_ircplus_on=yes
601 AC_ARG_ENABLE(ircplus,
602         AS_HELP_STRING([--disable-ircplus],
603                        [disable IRC+ protocol]),
604         if test "$enableval" = "no"; then x_ircplus_on=no; fi
605 )
606 if test "$x_ircplus_on" = "yes"; then
607         AC_DEFINE(IRCPLUS, 1)
608
609         # Compile in iconv support?
610         # We only check for it when IRC+ is enabled, because the IRC+ command
611         # CHARCONV is the only function depending on it.
612         x_iconv_on=no
613         AC_ARG_WITH(iconv,
614                 AS_HELP_STRING([--with-iconv],
615                                [enable character conversion using libiconv]),
616                 [ if test "$withval" != "no"; then
617                         if test "$withval" != "yes"; then
618                                 CFLAGS="-I$withval/include $CFLAGS"
619                                 CPPFLAGS="-I$withval/include $CPPFLAGS"
620                                 LDFLAGS="-L$withval/lib $LDFLAGS"
621                         fi
622                         AC_CHECK_LIB(iconv, iconv_open)
623                         AC_CHECK_FUNCS(iconv_open, x_iconv_on=yes)
624                         if test "$x_iconv_on" != "yes"; then
625                                 AC_CHECK_LIB(iconv, libiconv_open)
626                                 AC_CHECK_FUNCS(libiconv_open, x_iconv_on=yes)
627                         fi
628                         if test "$x_iconv_on" != "yes"; then
629                                 AC_MSG_ERROR([Can't enable libiconv support!])
630                         fi
631                 fi ]
632         )
633         if test "$x_iconv_on" = "yes"; then
634                 AC_DEFINE(ICONV, 1)
635         fi
636 fi
637
638 # enable support for IPv6?
639 x_ipv6_on=no
640 AC_ARG_ENABLE(ipv6,
641         AS_HELP_STRING([--enable-ipv6],
642                        [enable IPv6 protocol support]),
643         if test "$enableval" = "yes"; then x_ipv6_on=yes; fi
644 )
645 if test "$x_ipv6_on" = "yes"; then
646         # getaddrinfo() and getnameinfo() are optional when not compiling
647         # with IPv6 support, but are required for IPv6 to work!
648         AC_CHECK_FUNCS([ \
649                 getaddrinfo getnameinfo \
650                 ],,AC_MSG_ERROR([required function missing for IPv6 support!]))
651         AC_DEFINE(WANT_IPV6, 1)
652 fi
653
654 # compile in IRC "sniffer"?
655
656 x_sniffer_on=no; x_debug_on=no
657 AC_ARG_ENABLE(sniffer,
658         AS_HELP_STRING([--enable-sniffer],
659                        [enable IRC traffic sniffer (enables debug mode)]),
660         if test "$enableval" = "yes"; then
661                 AC_DEFINE(SNIFFER, 1)
662                 x_sniffer_on=yes; x_debug_on=yes
663         fi
664 )
665
666 # enable additional debugging code?
667
668 AC_ARG_ENABLE(debug,
669         AS_HELP_STRING([--enable-debug],
670                        [show additional debug output]),
671         if test "$enableval" = "yes"; then x_debug_on=yes; fi
672 )
673 if test "$x_debug_on" = "yes"; then
674         AC_DEFINE(DEBUG, 1)
675         test "$GCC" = "yes" && CFLAGS="-pedantic $CFLAGS"
676         AC_CHECK_FUNCS(mtrace)
677 fi
678
679 # enable "strict RFC rules"?
680
681 x_strict_rfc_on=no
682 AC_ARG_ENABLE(strict-rfc,
683         AS_HELP_STRING([--enable-strict-rfc],
684                        [strict RFC conformance -- may break clients!]),
685         if test "$enableval" = "yes"; then
686                 AC_DEFINE(STRICT_RFC, 1)
687                 x_strict_rfc_on=yes
688         fi
689 )
690
691 # -- Definitions --
692
693 AC_DEFINE_UNQUOTED(HOST_CPU, "$host_cpu" )
694 AC_DEFINE_UNQUOTED(HOST_VENDOR, "$host_vendor" )
695 AC_DEFINE_UNQUOTED(HOST_OS, "$host_os" )
696
697 # Add additional CFLAGS, LDFLAGS and LIBS which were specified on the command
698 # line or by some tests from above, but after running this script. Useful for
699 # adding "-Werror", for example:
700 test -n "$CFLAGS_END" && CFLAGS="$CFLAGS $CFLAGS_END"
701 test -n "$LDFLAGS_END" && LDFLAGS="$LDFLAGS $LDFLAGS_END"
702 test -n "$LIBS_END" && LIBS="$LIBS $LIBS_END"
703
704 # -- Generate files --
705
706 AC_CONFIG_FILES([ \
707         Makefile \
708         contrib/Debian/Makefile \
709         contrib/MacOSX/Makefile \
710         contrib/MacOSX/ngIRCd.pmdoc/Makefile \
711         contrib/MacOSX/ngIRCd.xcodeproj/Makefile \
712         contrib/Makefile \
713         doc/Makefile \
714         doc/src/Makefile \
715         man/Makefile \
716         src/ipaddr/Makefile \
717         src/Makefile \
718         src/ngircd/Makefile \
719         src/portab/Makefile \
720         src/testsuite/Makefile \
721         src/tool/Makefile \
722 ])
723
724 AC_OUTPUT
725
726 type dpkg >/dev/null 2>&1
727 if test $? -eq 0; then
728         # Generate debian/ link if the dpkg command exists
729         # (read: if we are running on a debian compatible system)
730         echo "creating Debian-specific links ..."
731         if test ! -f debian/rules -a -f contrib/Debian/rules; then
732                 ln -s contrib/Debian debian
733         fi
734 fi
735
736 # -- Result --
737
738 echo
739 echo "ngIRCd $PACKAGE_VERSION has been configured with the following options:"
740 echo
741
742 # Someone please show me a better way :)  [borrowed by OpenSSH]
743 B=`eval echo ${bindir}` ; B=`eval echo ${B}`
744 S=`eval echo ${sbindir}` ; S=`eval echo ${S}`
745 C=`eval echo ${sysconfdir}` ; C=`eval echo ${C}`
746 M=`eval echo ${mandir}` ; M=`eval echo ${M}`
747 D=`eval echo ${docdir}` ; D=`eval echo ${D}`
748
749 echo "               Host: ${host}"
750 echo "           Compiler: ${CC}"
751 test -n "$CFLAGS"       && echo "     Compiler flags: ${CFLAGS}"
752 test -n "$CPPFLAGS"     && echo " Preprocessor flags: ${CPPFLAGS}"
753 test -n "$LDFLAGS"      && echo "       Linker flags: ${LDFLAGS}"
754 test -n "$LIBS"         && echo "          Libraries: ${LIBS}"
755 echo
756 echo "    'ngircd' binary: $S"
757 echo " Configuration file: $C"
758 echo "       Manual pages: $M"
759 echo "      Documentation: $D"
760 echo
761
762 echo $ECHO_N "     Syslog support: $ECHO_C"
763 test "$x_syslog_on" = "yes" \
764         && echo $ECHO_N "yes   $ECHO_C" \
765         || echo $ECHO_N "no    $ECHO_C"
766 echo $ECHO_N "  Enable debug code: $ECHO_C"
767 test "$x_debug_on" = "yes" \
768         && echo "yes" \
769         || echo "no"
770
771 echo $ECHO_N "   zlib compression: $ECHO_C"
772 test "$x_zlib_on" = "yes" \
773         && echo $ECHO_N "yes   $ECHO_C" \
774         || echo $ECHO_N "no    $ECHO_C"
775 echo $ECHO_N "        IRC sniffer: $ECHO_C"
776 test "$x_sniffer_on" = "yes" \
777         && echo "yes" \
778         || echo "no"
779
780 echo $ECHO_N "   Use TCP Wrappers: $ECHO_C"
781 test "$x_tcpwrap_on" = "yes" \
782         && echo $ECHO_N "yes   $ECHO_C" \
783         || echo $ECHO_N "no    $ECHO_C"
784 echo $ECHO_N "    Strict RFC mode: $ECHO_C"
785 test "$x_strict_rfc_on" = "yes" \
786         && echo "yes" \
787         || echo "no"
788
789 echo $ECHO_N "      IDENT support: $ECHO_C"
790 test "$x_identauth_on" = "yes" \
791         && echo $ECHO_N "yes   $ECHO_C" \
792         || echo $ECHO_N "no    $ECHO_C"
793 echo $ECHO_N "      IRC+ protocol: $ECHO_C"
794 test "$x_ircplus_on" = "yes" \
795         && echo "yes" \
796         || echo "no"
797
798 echo $ECHO_N "      IPv6 protocol: $ECHO_C"
799 test "$x_ipv6_on" = "yes" \
800         && echo $ECHO_N "yes   $ECHO_C" \
801         || echo $ECHO_N "no    $ECHO_C"
802 echo $ECHO_N "        I/O backend: $ECHO_C"
803         echo "$x_io_backend"
804
805 echo $ECHO_N "        PAM support: $ECHO_C"
806 test "$x_pam_on" = "yes" \
807         && echo $ECHO_N "yes   $ECHO_C" \
808         || echo $ECHO_N "no    $ECHO_C"
809 echo $ECHO_N "        SSL support: $ECHO_C"
810 echo "$x_ssl_lib"
811
812 echo $ECHO_N "   libiconv support: $ECHO_C"
813         echo "$x_iconv_on"
814
815 echo
816
817 define(_automake_regex_,[[^AUTOMAKE_OPTIONS = [a-z .\-]*/portab/ansi2knr]])
818 if ! grep "_automake_regex_" src/ngircd/Makefile.am >/dev/null 2>&1; then
819         echo "WARNING:"
820         echo "This GNU automake generated build system does not support \"de-ANSI-fication\","
821         echo "therefore don't use it to generate \"official\" distribution archives!"
822         echo "(Most probably you want to use GNU automake 1.11.x for this purpose ...)"
823         echo
824 fi
825
826 # -eof-