Merged silc_1_0_branch to trunk.
[silc.git] / configure.ad
1 #
2 #  configure.ad
3 #
4 #  Author: Pekka Riikonen <priikone@silcnet.org>
5 #
6 #  Copyright (C) 2000 - 2005 Pekka Riikonen
7 #
8 #  This program is free software; you can redistribute it and/or modify
9 #  it under the terms of the GNU General Public License as published by
10 #  the Free Software Foundation; version 2 of the License.
11 #
12 #  This program is distributed in the hope that it will be useful,
13 #  but WITHOUT ANY WARRANTY; without even the implied warranty of
14 #  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 #  GNU General Public License for more details.
16 #
17
18 AD_INIT
19 AC_CANONICAL_SYSTEM
20 AM_INIT_AUTOMAKE
21 AC_PREREQ(2.52)
22 AC_CONFIG_HEADERS(silcdefs.h)
23
24 AC_PROG_INSTALL
25 AC_PROG_MAKE_SET
26
27 AC_PROG_LN_S
28 AC_PROG_EGREP
29 AC_SUBST(LN_S)
30 AC_PATH_PROG(sedpath, sed)
31
32 #ifdef SILC_DIST_COMPILER
33 # Put here any platform specific stuff
34 #
35 case "$target" in
36   *-*-freebsd*)
37     check_threads=true
38     ;;
39   *-*-*bsd*)
40     check_threads=false
41     ;;
42   *)
43     check_threads=true
44     ;;
45 esac
46
47 # Control compiler optimizations
48 CFLAGS=`echo $CFLAGS | sed 's/-O[ 0123456789s]*//g'`
49
50 AC_PROG_CC
51 AC_C_INLINE
52 AC_C_CONST
53
54 __SILC_HAVE_PTHREAD=""
55 __SILC_HAVE_SIM=""
56 __SILC_ENABLE_DEBUG=""
57
58 AC_PROG_RANLIB
59 AC_DISABLE_SHARED
60 AC_PROG_LIBTOOL
61
62 # Header checking
63 #
64 AC_HEADER_STDC
65 AC_HEADER_TIME
66 AC_HEADER_STAT
67
68 # More header checking
69 #
70 AC_CHECK_HEADERS(unistd.h string.h getopt.h errno.h fcntl.h assert.h)
71 AC_CHECK_HEADERS(sys/types.h sys/stat.h sys/time.h stddef.h)
72 AC_CHECK_HEADERS(netinet/in.h netinet/tcp.h xti.h netdb.h sys/resource.h)
73 AC_CHECK_HEADERS(pwd.h grp.h termcap.h paths.h)
74 AC_CHECK_HEADERS(ncurses.h signal.h ctype.h utime.h)
75 AC_CHECK_HEADERS(arpa/inet.h sys/mman.h limits.h termios.h locale.h langinfo.h)
76
77 # Data type checking
78 #
79 AC_TYPE_SIGNAL
80 AC_TYPE_SIZE_T
81 AC_TYPE_MODE_T
82 AC_TYPE_UID_T
83 AC_TYPE_PID_T
84
85 AC_CHECK_SIZEOF(long long, 0)
86 AC_SUBST(SILC_SIZEOF_LONG_LONG, $ac_cv_sizeof_long_long)
87 AC_CHECK_SIZEOF(long, 0)
88 AC_SUBST(SILC_SIZEOF_LONG, $ac_cv_sizeof_long)
89 AC_CHECK_SIZEOF(int, 0)
90 AC_SUBST(SILC_SIZEOF_INT, $ac_cv_sizeof_int)
91 AC_CHECK_SIZEOF(short, 0)
92 AC_SUBST(SILC_SIZEOF_SHORT, $ac_cv_sizeof_short)
93 AC_CHECK_SIZEOF(char, 0)
94 AC_SUBST(SILC_SIZEOF_CHAR, $ac_cv_sizeof_char)
95 AC_CHECK_SIZEOF(void *, 0)
96 AC_SUBST(SILC_SIZEOF_VOID_P, $ac_cv_sizeof_void_p)
97
98 # Function and library checking
99 #
100 AC_CHECK_FUNC(gethostbyname, [],
101   [
102     AC_CHECK_LIB(nsl, gethostbyname, LIBS="$LIBS -lnsl")
103     AC_CHECK_FUNC(res_gethostbyname, [],
104        AC_CHECK_LIB(resolv, res_gethostbyname, LIBS="$LIBS -lresolv")
105     )
106   ])
107 AC_CHECK_FUNC(socket, [],
108   AC_CHECK_LIB(socket, socket, LIBS="$LIBS -lsocket")
109 )
110 AC_CHECK_FUNCS(gethostname gethostbyaddr getservbyname getservbyport)
111 AC_CHECK_FUNCS(select listen bind shutdown close connect setsockopt)
112 AC_CHECK_FUNCS(time ctime utime gettimeofday getrusage)
113 AC_CHECK_FUNCS(chmod fcntl stat fstat getenv putenv strerror)
114 AC_CHECK_FUNCS(getpid getgid getsid getpgid getpgrp getuid)
115 AC_CHECK_FUNCS(setgroups initgroups nl_langinfo)
116 AC_CHECK_FUNCS(strchr strstr strcpy strncpy memcpy memset memmove)
117
118 #ifdef SILC_DIST_SIM
119 # SIM support checking
120 # XXX These needs to be changed as more supported platforms appear.
121 # XXX This probably needs to be made platform dependant check.
122 #
123 sim_support=false
124 AC_MSG_CHECKING(for SIM support)
125 AC_MSG_RESULT()
126 AC_CHECK_HEADERS(dlfcn.h,
127   [
128     AC_CHECK_LIB(dl, dlopen,
129       [
130         AC_DEFINE([SILC_SIM], [], [HAVE_SIM])
131         sim_support=true
132         LIBS="$LIBS -ldl"
133       ],
134       [
135         AC_CHECK_LIB(c, dlopen,
136           [
137             AC_DEFINE([SILC_SIM], [], [HAVE_SIM])
138             sim_support=true
139           ])
140       ])
141    ])
142
143 AM_CONDITIONAL(SILC_SIM, test x$sim_support = xtrue)
144 if test x$sim_support = xtrue; then
145   AC_MSG_RESULT(Enabled SIM support.)
146   __SILC_HAVE_SIM="#define __SILC_HAVE_SIM 1"
147 else
148   AC_MSG_RESULT(No SIM support found.)
149 fi
150 #endif SILC_DIST_SIM
151
152 # lib/contrib conditionals
153 #
154 AC_CHECK_HEADER(regex.h,
155   [
156     AC_DEFINE([HAVE_REGEX], [], [HAVE_REGEX])
157     have_regex=1
158   ], have_regex=0
159 )
160 AM_CONDITIONAL(HAVE_REGEX, test x$have_regex = x1)
161
162 AC_CHECK_FUNC(getopt_long,
163   [
164     AC_DEFINE([HAVE_GETOPT_LONG], [], [HAVE_GETOPT_LONG])
165     have_getopt_long=1
166   ], have_getopt_long=0
167 )
168 AM_CONDITIONAL(HAVE_GETOPT_LONG, test x$have_getopt_long = x1)
169
170 ##
171 ##  Enable/disable checking
172 ##
173
174 # IPv6 support
175 #
176 AC_MSG_CHECKING(whether to enable IPv6 support)
177 AC_ARG_ENABLE(ipv6,
178   [  --enable-ipv6           enable IPv6 support],
179   [
180     case "${enableval}" in
181       yes)
182         want_ipv6=true
183         check_ipv6=false
184         summary_ipv6="yes"
185         AC_DEFINE([HAVE_IPV6], [], [HAVE_IPV6])
186         AC_MSG_RESULT(yes)
187         ;;
188       *)
189         want_ipv6=false
190         check_ipv6=false
191         summary_ipv6="no"
192         AC_MSG_RESULT(no)
193         ;;
194     esac
195   ],
196     check_ipv6=true
197   )
198
199 if test x$check_ipv6 = xtrue; then
200   summary_ipv6="no"
201   AC_TRY_COMPILE(
202     [
203       #ifdef HAVE_SYS_TYPES_H
204       #include <sys/types.h>
205       #endif
206       #ifdef HAVE_NETINET_TCP_H
207       #include <netinet/tcp.h>
208       #endif
209       #ifdef HAVE_NETDB_H
210       #include <netdb.h>
211       #endif
212       #include <sys/socket.h>
213       #ifdef HAVE_NETINET_IN_H
214       #include <netinet/in.h>
215       #endif
216     ],
217     [
218       struct sockaddr_in6 sin6;
219       int family = AF_INET6;
220     ],
221     [
222       AC_DEFINE([HAVE_IPV6], [], [HAVE_IPV6])
223       AC_MSG_RESULT(yes)
224       summary_ipv6="yes"
225     ],
226       AC_MSG_RESULT(no)
227     )
228 fi
229
230 # Debug checking
231 #
232 AC_MSG_CHECKING(whether to enable debugging)
233 summary_debug="no"
234 __SILC_ENABLE_DEBUG=""
235 AC_ARG_ENABLE(debug,
236   [  --enable-debug          enable debugging],
237   [
238     case "${enableval}" in
239       yes)
240         AC_MSG_RESULT(yes)
241         AC_DEFINE([SILC_DEBUG], [], [enable-debug])
242         summary_debug="yes"
243         __SILC_ENABLE_DEBUG="#define __SILC_ENABLE_DEBUG 1"
244         ;;
245       *)
246         AC_MSG_RESULT(no)
247         ;;
248     esac
249   ],
250   [
251     AC_MSG_RESULT(no)
252   ])
253
254 # Disable all assembler optimizations
255 #
256 AC_MSG_CHECKING(whether to enable assembler optimizations)
257 want_asm=true
258 AC_ARG_ENABLE(asm,
259   [  --disable-asm           do not use assembler optimizations],
260   [
261     AC_MSG_RESULT(no)
262     want_asm=false
263   ],
264   [
265     AC_MSG_RESULT(yes)
266     want_asm=true
267   ])
268
269 ##
270 ## Compiler and compiler flag checks
271 ##
272
273 # Function to check if compiler flag works
274 # Usage: SILC_ADD_CFLAGS(FLAGS, [ACTION-IF-FAILED])
275 AC_DEFUN([SILC_ADD_CFLAGS],
276 [ tmp_CFLAGS="$CFLAGS"
277   CFLAGS="$CFLAGS $1"
278   AC_MSG_CHECKING(whether $CC accepts $1 flag)
279   AC_TRY_LINK([], [], [AC_MSG_RESULT(yes)], [AC_MSG_RESULT(no)
280                                        CFLAGS="$tmp_CFLAGS"
281                                        $2])
282   unset tmp_CFLAGS
283 ])
284
285 if test "$GCC"; then
286   # GCC specific options
287   if test "x$summary_debug" = "xyes"; then
288     SILC_ADD_CFLAGS(-g -O)
289   else
290     SILC_ADD_CFLAGS(-g -O2)
291   fi
292   SILC_ADD_CFLAGS(-Wall -finline-functions)
293   SILC_ADD_CFLAGS(-Wno-pointer-sign)
294 else
295   # Other compilers
296   case "$target" in
297     alpha*-dec-osf*)
298       SILC_ADD_CFLAGS(-g3 -O2, SILC_ADD_CFLAGS(-g3 -O, SILC_ADD_CFLAGS(-O)))
299       ;;
300     *)
301       SILC_ADD_CFLAGS(-g)
302       SILC_ADD_CFLAGS(-O2, SILC_ADD_CFLAGS(-O))
303       ;;
304   esac
305
306   # Intel C++ Compiler needs -restrict
307   if test "x$CC" = "xicc"; then
308     SILC_ADD_CFLAGS(-restrict)
309   fi
310 fi
311
312 #
313 # Workaround a bug in GCC 2.x which causes memory exhaustion
314 # when compiling sha1 with optimizations on UltraSPARC.
315 #
316 FIX_SHA1='#'
317 if test "$GCC" -a "$host_cpu" = "sparc64"; then
318   AC_MSG_CHECKING(whether to enable GCC 2.x workaround for SHA1)
319   AC_TRY_COMPILE(
320     [
321       #if defined(__sparc64__) && (__GNUC__ == 2)
322       #else
323       choke me
324       #endif
325     ],
326     [],
327     [
328       FIX_SHA1=''
329       AC_MSG_RESULT(yes)
330     ],
331       AC_MSG_RESULT(no)
332     )
333 fi
334 AC_SUBST(FIX_SHA1)
335 #endif SILC_DIST_COMPILER
336
337 ##
338 ##  Installation
339 ##
340
341 # Default installation destination
342 #
343 #ifdef SILC_DIST_AUTODIST
344 AC_PREFIX_DEFAULT(/usr/local)
345 #else !SILC_DIST_AUTODIST
346 AC_PREFIX_DEFAULT(/usr/local/silc)
347 #endif SILC_DIST_AUTODIST
348 if test "x$prefix" != xNONE; then
349   silc_prefix="$prefix"
350 else
351   silc_prefix="$ac_default_prefix"
352 fi
353
354 #ifndef SILC_DIST_AUTODIST
355 # etc directory
356 #
357 if test "x$sysconfdir" != 'x${prefix}/etc'; then
358   ETCDIR="$sysconfdir"
359 else
360   ETCDIR="$silc_prefix/etc"
361 fi
362
363 AC_ARG_WITH(etcdir,
364   [[  --with-etcdir=DIR       directory for system files [/etc/silc]]],
365   [
366     case "$withval" in
367       no|yes)
368         ;;
369       *)
370         ETCDIR="$withval"
371         ;;
372     esac
373   ])
374 AC_SUBST(ETCDIR)
375 AC_DEFINE_UNQUOTED([SILC_ETCDIR], "$ETCDIR", [SILC_ETCDIR])
376
377 # doc directory
378 #
379 DOCDIR="$silc_prefix/doc"
380 AC_ARG_WITH(docdir,
381   [[  --with-docdir=DIR       directory for SILC documentation [PREFIX/doc]]],
382   [
383     case "$withval" in
384       no|yes)
385         ;;
386       *)
387         DOCDIR="$withval"
388         ;;
389     esac
390   ])
391 AC_SUBST(DOCDIR)
392 AC_DEFINE_UNQUOTED([SILC_DOCDIR], "$DOCDIR", [SILC_DOCDIR])
393 #endif SILC_DIST_AUTODIST
394
395 #ifdef SILC_DIST_CLIENT
396 # help directory
397 #
398 HELPDIR="$silc_prefix/help"
399 AC_ARG_WITH(helpdir,
400   [[  --with-helpdir=DIR      directory for SILC help files [PREFIX/help]]],
401   [
402     case "$withval" in
403       no|yes)
404         ;;
405       *)
406        HELPDIR="$withval"
407        ;;
408     esac
409   ])
410 AC_SUBST(HELPDIR)
411 AC_DEFINE_UNQUOTED([SILC_HELPDIR], "$HELPDIR", [SILC_HELPDIR])
412 #endif SILC_DIST_CLIENT
413
414 #ifdef SILC_DIST_SIM
415 # SIM modules directory
416 #
417 MODULESDIR="$silc_prefix/modules"
418 AC_ARG_WITH(simdir,
419   [[  --with-simdir=DIR       directory for SIM modules [PREFIX/modules]]],
420   [
421     case "$withval" in
422       no|yes)
423         ;;
424       *)
425         MODULESDIR="$withval"
426         ;;
427     esac
428   ])
429 AC_SUBST(MODULESDIR)
430 AC_DEFINE_UNQUOTED([SILC_MODULESDIR], "$MODULESDIR", [SILC_MODULESDIR])
431 #endif SILC_DIST_SIM
432
433 #ifdef SILC_DIST_COMPILER
434 ##
435 ##  With/without checkings
436 ##
437
438 #
439 # SILC library checking
440 compile_libs=true
441
442 #ifndef SILC_DIST_TOOLKIT
443 AC_ARG_WITH(silc-includes, 
444   [  --with-silc-includes=DIR SILC Toolkit includes [search in DIR]],
445   [ac_silc_includes="$withval"], [ac_silc_includes="no"])
446 AC_ARG_WITH(silc-libs,
447   [  --with-silc-libs=DIR     SILC Toolkit libraries [search in DIR]],
448   [ac_silc_libs="$withval"], [ac_silc_libs="no"])
449
450 if test -n "$with_silc_includes" || test -n "$with_silc_libs"; then
451
452   # Manually provided libs
453   if test "$ac_silc_includes" != "no"; then
454     compile_libs=false
455     SILC_LIB_INCLUDES="-I$ac_silc_includes"
456   fi
457   if test "$ac_silc_libs" != "no"; then
458     compile_libs=false
459     LIBS="$LIBS -L$ac_silc_libs"
460   fi
461
462   # Check libs to link against
463   f=`$EGREP __SILC_HAVE_PTHREAD $ac_silc_includes/silcincludes.h`
464   if test -n "$f"; then
465     LIBS="$LIBS -lpthread"
466     check_threads=false
467     has_threads=true
468   fi
469   f=`$EGREP __SILC_HAVE_SIM $ac_silc_includes/silcincludes.h`
470   if test -n "$f"; then
471     LIBS="$LIBS -ldl"
472   fi
473
474 else
475   # pkg-config check
476   PKG_CHECK_MODULES(SILC, silc, compile_libs=false, compile_libs=true)
477   PKG_CHECK_MODULES(SILCCLIENT, silcclient, compile_libs=false, compile_libs=true)
478
479   if test x$compile_libs = xfalse; then
480     LIBS="$LIBS $SILC_LIBS"
481     CFLAGS="$CFLAGS $SILC_CFLAGS"
482     LIBS="$LIBS $SILCCLIENT_LIBS"
483     CFLAGS="$CFLAGS $SILCCLIENT_CFLAGS"
484   fi
485 fi
486 #endif SILC_DIST_TOOLKIT
487
488 # SOCKS4 support checking
489 #
490 SAVE_LIBS="$LIBS"
491 SAVE_CFLAGS="$CFLAGS"
492 SAVE_LDFLAGS="$LDFLAGS"
493 AC_MSG_CHECKING(whether to support SOCKS4)
494 AC_ARG_WITH(socks4,
495   [[  --with-socks4[=DIR]     with SOCKS4 support [search in DIR/lib and DIR/include]]],
496   [
497     case "$withval" in
498       no)
499         AC_MSG_RESULT(no)
500         ;;
501       *)
502         AC_MSG_RESULT(yes)
503         socks=4
504
505         if test -d "$withval/include"; then
506           CFLAGS="$CFLAGS -I$withval/include"
507         fi
508         if test -d "$withval/lib"; then
509           LDFLAGS="$LDFLAGS -L$withval/lib"
510         fi
511
512         LIBS="-lsocks $LIBS"
513         ;;
514     esac
515
516     AC_TRY_LINK([],
517       [
518         Rconnect();
519       ], [],
520       [
521         AC_MSG_ERROR(Could not find SOCKS4 library.)
522         LIBS="$SAVE_LIBS"
523         CFLAGS="$SAVE_CFLAGS"
524         LDFLAGS="$SAVE_LDFLAGS"
525       ])
526   ],
527     AC_MSG_RESULT(no)
528   )
529
530 # SOCKS5 support checking
531 #
532 SAVE_LIBS="$LIBS"
533 SAVE_CFLAGS="$CFLAGS"
534 SAVE_LDFLAGS="$LDFLAGS"
535 AC_MSG_CHECKING(whether to support SOCKS5)
536 AC_ARG_WITH(socks5,
537   [[  --with-socks5[=DIR]     with SOCKS5 support [search in DIR/lib and DIR/include]]],
538   [
539     case "$withval" in
540       no)
541         AC_MSG_RESULT(no)
542         ;;
543       *)
544         AC_MSG_RESULT(yes)
545         socks=5
546
547         if test -d "$withval/include"; then
548           CFLAGS="$CFLAGS -I$withval/include"
549         fi
550         if test -d "$withval/lib"; then
551           LDFLAGS="$LDFLAGS -L$withval/lib"
552         fi
553
554         LIBS="-lsocks5 $LIBS"
555         ;;
556     esac
557
558     AC_TRY_LINK([],
559       [
560         SOCKSconnect();
561       ], [],
562       [
563         AC_MSG_ERROR(Could not find SOCKS5 library.)
564         LIBS="$SAVE_LIBS"
565         CFLAGS="$SAVE_CFLAGS"
566         LDFLAGS="$SAVE_LDFLAGS"
567       ])
568   ],
569     AC_MSG_RESULT(no)
570   )
571
572 if test "x$socks" = "x4"; then
573   AC_DEFINE([SOCKS], [], [Socks])
574   CFLAGS="$CFLAGS -Dconnect=Rconnect -Dgetsockname=Rgetsockname -Dbind=Rbind -Daccept=Raccept -Dlisten=Rlisten -Dselect=Rselect"
575 fi
576
577 if test "x$socks" = "x5"; then
578   AC_DEFINE([SOCKS], [], [Socks])
579   AC_DEFINE([SOCKS5], [], [Socks5])
580   AC_DEFINE([Rconnect], [SOCKSconnect], [Socks])
581   AC_DEFINE([Rgetsockname], [SOCKSgetsockname], [Socks])
582   AC_DEFINE([Rgetpeername], [SOCKSgetpeername], [Socks])
583   AC_DEFINE([Rbind], [SOCKSbind], [Socks])
584   AC_DEFINE([Raccept], [SOCKSaccept], [Socks])
585   AC_DEFINE([Rlisten], [SOCKSlisten], [Socks])
586   AC_DEFINE([Rselect], [SOCKSselect], [Socks])
587   AC_DEFINE([Rrecvfrom], [SOCKSrecvfrom], [Socks])
588   AC_DEFINE([Rsendto], [SOCKSsendto], [Socks])
589   AC_DEFINE([Rrecv], [SOCKSrecv], [Socks])
590   AC_DEFINE([Rsend], [SOCKSsend], [Socks])
591   AC_DEFINE([Rread], [SOCKSread], [Socks])
592   AC_DEFINE([Rwrite], [SOCKSwrite], [Socks])
593   AC_DEFINE([Rrresvport], [SOCKSrresvport], [Socks])
594   AC_DEFINE([Rshutdown], [SOCKSshutdown], [Socks])
595   AC_DEFINE([Rlisten], [SOCKSlisten], [Socks])
596   AC_DEFINE([Rclose], [SOCKSclose], [Socks])
597   AC_DEFINE([Rdup], [SOCKSdup], [Socks])
598   AC_DEFINE([Rdup2], [SOCKSdup2], [Socks])
599   AC_DEFINE([Rfclose], [SOCKSfclose], [Socks])
600   AC_DEFINE([Rgethostbyname], [SOCKSgethostbyname], [Socks])
601 fi
602
603 #ifdef SILC_DIST_MATH
604 # MP library checking. First check whether user wants to use GMP and use
605 # it if found. If not or not defined then compile the MPI library in the
606 # source tree.
607 #
608 mp_gmp=false
609 SAVE_LIBS="$LIBS"
610 SAVE_CFLAGS="$CFLAGS"
611 SAVE_LDFLAGS="$LDFLAGS"
612 AC_MSG_CHECKING(whether to search for GMP)
613 AC_ARG_WITH(gmp,
614   [[  --with-gmp[=DIR]        use GMP instead of MPI [search in DIR/lib and DIR/include]]],
615   [
616     case "$withval" in
617       no)
618         AC_MSG_RESULT(no)
619         ;;
620       *)
621         AC_MSG_RESULT(yes)
622
623         if test -d "$withval/include"; then
624           CFLAGS="$CFLAGS -I$withval/include"
625         fi
626         if test -d "$withval/lib"; then
627           LDFLAGS="$LDFLAGS -L$withval/lib"
628         fi
629
630         LIBS="-lgmp $LIBS"
631         ;;
632     esac
633
634     AC_CHECK_LIB(gmp, __gmpz_init,
635       [
636         mp_gmp=true
637         AC_DEFINE([SILC_MP_GMP], [], [GMP])
638         AC_MSG_RESULT(Using GMP as a MP library.)
639       ],
640       [
641         LIBS="$SAVE_LIBS"
642         CFLAGS="$SAVE_CFLAGS"
643         LDFLAGS="$SAVE_LDFLAGS"
644       ])
645   ],
646     AC_MSG_RESULT(no)
647   )
648
649 AM_CONDITIONAL(SILC_MP_GMP, test x$mp_gmp = xtrue)
650 AM_CONDITIONAL(SILC_MP_NSS_MPI, test x$mp_gmp = xfalse)
651 if test x$mp_gmp = xfalse; then
652   AC_DEFINE([SILC_MP_NSS_MPI], [], [MPI])
653   AC_MSG_RESULT(Using NSS MPI as a MP library.)
654 fi
655 #endif SILC_DIST_MATH
656
657 # iconv support
658 #
659 check_iconv=true
660 has_iconv=false
661 SAVE_LIBS="$LIBS"
662 SAVE_CFLAGS="$CFLAGS"
663 SAVE_LDFLAGS="$LDFLAGS"
664 SAVE_CPPFLAGS="$CPPFLAGS"
665 AC_MSG_CHECKING(whether to implicit search for libiconv)
666 AC_ARG_WITH(iconv,
667   [[  --with-iconv[=DIR]      use libiconv [search in DIR/include and DIR/lib]]],
668   [
669     case "${withval}" in
670       no)
671         AC_MSG_RESULT(no)
672         AC_CHECK_HEADERS(iconv.h,
673           [
674             AC_CHECK_FUNC(iconv, has_iconv=true)
675           ])
676         check_iconv=false
677         ;;
678       *)
679         AC_MSG_RESULT(yes)
680         if test -d $withval/include; then
681           CPPFLAGS="$CPPFLAGS -I$withval/include"
682           CFLAGS="$CFLAGS -I$withval/include"
683         fi
684         if test -d $withval/lib; then
685           LDFLAGS="$LDFLAGS -L$withval/lib"
686         fi
687         ;;
688     esac
689   ],
690   [
691     AC_MSG_RESULT(no)
692     AC_CHECK_HEADERS(iconv.h,
693       [
694         AC_CHECK_FUNCS(iconv,
695           [
696             has_iconv=true
697             check_iconv=false
698           ])
699       ])
700   ])
701
702 if test x$check_iconv = xtrue; then
703   AC_MSG_RESULT(Searching for iconv...)
704
705   # XXX
706   unset ac_cv_header__iconv_h_ ac_cv_header_iconv_h || true
707
708   AC_CHECK_HEADERS(iconv.h,
709     [
710       LIBS="$LIBS -liconv"
711       AC_MSG_CHECKING(for iconv in -liconv)
712       AC_TRY_LINK(
713         [
714           #include <stdlib.h>
715           #include <iconv.h>
716         ],
717         [
718           iconv_t cd = iconv_open("", "");
719           iconv(cd, NULL, NULL, NULL, NULL);
720           iconv_close(cd);
721         ],
722         [
723           echo "yes"
724           AC_DEFINE([HAVE_ICONV], [], [Define if you have the iconv() function.])
725           has_iconv=true
726           check_iconv=false
727         ],
728         [
729           echo "no"
730           LIBS="$SAVE_LIBS"
731           CFLAGS="$SAVE_CFLAGS"
732           LDFLAGS="$SAVE_LDFLAGS"
733           CPPFLAGS="$SAVE_CPPFLAGS"
734         ])
735      ])
736 fi
737
738 if test x$check_iconv = xtrue; then
739   # search for iconv library..
740   SAVE_LIBS="$LIBS"
741   SAVE_CFLAGS="$CFLAGS"
742   SAVE_LDFLAGS="$LDFLAGS"
743   SAVE_CPPFLAGS="$CPPFLAGS"
744
745   for dir in `echo "/usr/local /usr/pkg /usr/contrib"`; do
746     if test x$has_iconv = xfalse; then
747       AC_MSG_RESULT(searching in $dir...)
748
749       if test -d $dir/include; then
750         CPPFLAGS="$CPPFLAGS -I$dir/include"
751         CFLAGS="$CFLAGS -I$dir/include"
752       fi
753       if test -d $dir/lib; then
754         LDFLAGS="$LDFLAGS -L$dir/lib"
755       fi
756
757       # XXX
758       unset ac_cv_header__iconv_h_ ac_cv_header_iconv_h || true
759
760       AC_CHECK_HEADERS(iconv.h,
761         [
762           LIBS="$LIBS -liconv"
763           AC_MSG_CHECKING(for iconv in -liconv)
764           AC_TRY_LINK(
765             [
766               #include <stdlib.h>
767               #include <iconv.h>
768             ],
769             [
770               iconv_t cd = iconv_open("", "");
771               iconv(cd, NULL, NULL, NULL, NULL);
772               iconv_close(cd);
773             ],
774             [
775               echo "yes"
776               has_iconv=true
777               AC_DEFINE([HAVE_ICONV], [], [Define if you have the iconv() function.])
778             ],
779             [
780               echo "no"
781               has_iconv=false
782
783               LIBS="$SAVE_LIBS"
784               CFLAGS="$SAVE_CFLAGS"
785               LDFLAGS="$SAVE_LDFLAGS"
786               CPPFLAGS="$SAVE_CPPFLAGS"
787             ])
788          ],
789          [
790            CFLAGS="$SAVE_CFLAGS"
791            LDFLAGS="$SAVE_LDFLAGS"
792            CPPFLAGS="$SAVE_CPPFLAGS"
793          ])
794       fi
795     done
796 fi
797
798 if test x$has_iconv = xtrue; then
799   # (1) Some implementations of iconv won't convert from UTF-8 to UTF-8.
800   # (2) In glibc-2.1.2 and earlier there is a bug that messes up ob and
801   #     obl when args 2 and 3 are 0 (fixed in glibc-2.1.3).
802   #
803   AC_CACHE_CHECK([whether this iconv is good enough], ac_iconv_good,
804     AC_TRY_RUN(
805       [
806         #include <iconv.h>
807         int main() {
808           iconv_t cd;
809         changequote(, )dnl
810           char buf[4];
811         changequote([, ])dnl
812           char *ob;
813           size_t obl;
814           ob = buf, obl = sizeof(buf);
815           return ((cd = iconv_open("UTF-8", "UTF-8")) != (iconv_t)(-1) &&
816                  (iconv(cd, 0, 0, &ob, &obl) ||
817                  !(ob == buf && obl == sizeof(buf)) ||
818                  iconv_close(cd)));
819         }
820       ],
821       [
822         ac_iconv_good=yes
823       ],
824       [
825         ac_iconv_good=no
826       ],
827       [
828         ac_iconv_good=yes
829       ])
830     )
831
832   if test x$ac_iconv_good = xno; then
833     AC_MSG_RESULT(Try using libiconv instead.)
834   fi
835 fi
836
837 # POSIX threads support
838 #
839 AC_MSG_CHECKING(whether to search for POSIX threads)
840 AC_ARG_WITH(pthreads,
841   [[  --with-pthreads[=DIR]   use POSIX threads [search in DIR/include and DIR/lib]]],
842   [
843     case "${withval}" in
844       no)
845         check_threads=false
846         ;;
847       *)
848         if test -d $withval/include; then
849           CPPFLAGS="$CPPFLAGS -I$withval/include"
850           CFLAGS="$CFLAGS -I$withval/include"
851         fi
852         if test -d $withval/lib; then
853           LDFLAGS="$LDFLAGS -L$withval/lib"
854         fi
855
856         check_threads=true
857         ;;
858     esac
859   ])
860
861 if test x$check_threads = xtrue; then
862   has_threads=false
863   SAVE_LIBS="$LIBS"
864   SAVE_CFLAGS="$CFLAGS"
865   SAVE_LDFLAGS="$LDFLAGS"
866   SAVE_CPPFLAGS="$CPPFLAGS"
867
868   AC_MSG_RESULT(yes)
869   AC_CHECK_HEADERS(pthread.h,
870     [
871       LIBS="$LIBS -lpthread"
872       AC_CHECK_LIB(pthread, pthread_attr_init, has_threads=true,
873         [
874           # FreeBSD
875           case "${target}" in
876             *-*-freebsd*)
877               LIBS="$SAVE_LIBS -pthread"
878               AC_CHECK_LIB(c_r, pthread_attr_init, has_threads=true, LIBS="$SAVE_LIBS")
879               ;;
880             *)
881               LIBS="$SAVE_LIBS"
882               ;;
883           esac
884         ])
885     ],
886     [
887       # search for pthread library..
888       for dir in `echo "/usr/local /usr/pkg /usr/contrib /usr/pkg/pthreads /usr/local/pthreads"`; do
889         if test x$has_threads = xfalse; then
890           AC_MSG_RESULT(searching in $dir...)
891
892           if test -d $dir/include; then
893             CPPFLAGS="$CPPFLAGS -I$dir/include"
894             CFLAGS="$CFLAGS -I$dir/include"
895           fi
896           if test -d $dir/lib; then
897             LDFLAGS="$LDFLAGS -L$dir/lib"
898           fi
899
900           # XXX
901           unset ac_cv_header__pthread_h_ ac_cv_header_pthread_h || true
902
903           AC_CHECK_HEADERS(pthread.h,
904             [
905               LIBS="$LIBS -lpthread"
906               AC_CHECK_LIB(pthread, pthread_attr_init, has_threads=true,
907                 [
908                   has_threads=false
909
910                   LIBS="$SAVE_LIBS"
911                   CFLAGS="$SAVE_CFLAGS"
912                   LDFLAGS="$SAVE_LDFLAGS"
913                   CPPFLAGS="$SAVE_CPPFLAGS"
914                 ])
915             ],
916             [
917               CFLAGS="$SAVE_CFLAGS"
918               LDFLAGS="$SAVE_LDFLAGS"
919               CPPFLAGS="$SAVE_CPPFLAGS"
920             ])
921         fi
922       done
923     ])
924 else
925   AC_MSG_RESULT(no)
926   has_threads=false
927 fi
928
929 __SILC_HAVE_PTHREAD=""
930 AM_CONDITIONAL(SILC_THREADS, test x$has_threads = xtrue)
931 if test x$has_threads = xtrue; then
932   CFLAGS="$CFLAGS -D_REENTRANT"
933
934   # XXX possibly incomplete
935   case "${target}" in
936     *-*-aix*)
937       CFLAGS="$CFLAGS -D_THREAD_SAFE"
938       if test x"$GCC" = xyes; then
939         CFLAGS="$CFLAGS -mthreads"
940       fi
941       ;;
942     *-*-freebsd*)
943       CFLAGS="$CFLAGS -D_THREAD_SAFE"
944       ;;
945     *-*-sysv5uw7*)  # UnixWare 7
946       if test "$GCC" != "yes"; then
947         CFLAGS="$CFLAGS -Kthread"
948       else
949         CFLAGS="$CFLAGS -pthread"
950       fi
951       ;;
952     *-dg-dgux*)  # DG/UX
953       CFLAGS="$CFLAGS -D_POSIX4A_DRAFT10_SOURCE"
954       ;;
955    esac
956
957   AC_CHECK_FUNC(pthread_create)
958   AC_DEFINE([SILC_HAVE_PTHREAD], [], [HAVE_PTHREAD])
959   AC_DEFINE([SILC_THREADS], [], [HAVE_THREAD])
960   __SILC_HAVE_PTHREAD="#define __SILC_HAVE_PTHREAD 1"
961 fi
962
963 # Native WIN32 compilation under cygwin
964 #
965 AC_MSG_CHECKING(whether to compile native WIN32 code)
966 AC_ARG_WITH(win32,
967   [  --with-win32            compile native WIN32 (MinGW) code (-mno-cygwin)],
968   [
969     AC_MSG_RESULT(yes)
970     AC_DEFINE([SILC_WIN32], [], [SILC_WIN32])
971     win32_support=true
972     CFLAGS="-mno-cygwin $CFLAGS"
973     LIBS="$LIBS -lwsock32"
974   ],
975   [
976     AC_MSG_RESULT(no)
977   ])
978 AM_CONDITIONAL(SILC_WIN32, test x$win32_support = xtrue)
979
980 # Native EPOC support (disabled by default)
981 #
982 AM_CONDITIONAL(SILC_EPOC, test xfalse = xtrue)
983
984 # Native BeOS support (disabled by default)
985 #
986 AM_CONDITIONAL(SILC_BEOS, test xfalse = xtrue)
987
988 # Native OS2 support (disabled by default)
989 #
990 AM_CONDITIONAL(SILC_OS2, test xfalse = xtrue)
991
992 #ifdef SILC_DIST_TOOLKIT
993 # --without-irssi
994 #
995 without_irssi=false
996 AC_MSG_CHECKING(whether to compile Irssi SILC Client)
997 AC_ARG_WITH(irssi,
998   [  --without-irssi         compile without Irssi SILC Client],
999   [
1000     AC_MSG_RESULT(no)
1001     without_irssi=true
1002   ],
1003   [
1004     AC_MSG_RESULT(yes)
1005   ])
1006
1007 # --without-silcd
1008 #
1009 without_silcd=false
1010 AC_MSG_CHECKING(whether to compile SILC Server)
1011 AC_ARG_WITH(silcd,
1012   [  --without-silcd         compile without SILC Server],
1013   [
1014     AC_MSG_RESULT(no)
1015     without_silcd=true
1016   ],
1017   [
1018     AC_MSG_RESULT(yes)
1019   ])
1020 #endif SILC_DIST_TOOLKIT
1021
1022 #ifdef SILC_DIST_CLIENT
1023 # Irssi perl support
1024 #
1025 AC_ARG_WITH(perl,
1026   [[  --with-perl[=yes|no|module]  Build with Perl support - also specifies
1027                                if it should be built into main silc binary
1028                                (static, default) or as a module]])
1029 #endif SILC_DIST_CLIENT
1030
1031 libtoolfix=true
1032 AC_MSG_CHECKING(whether to do libtoolfix)
1033 AC_ARG_WITH(libtoolfix,
1034   [  --without-libtoolfix    Do not fix libtool, for package builders],
1035   [
1036     AC_MSG_RESULT(no)
1037     libtoolfix=false
1038   ],
1039   [
1040     AC_MSG_RESULT(yes)
1041   ])
1042
1043 AC_SUBST(ETCDIR)
1044 AC_DEFINE_UNQUOTED([SILC_ETCDIR], "$ETCDIR", [SILC_ETCDIR])
1045
1046 #endif SILC_DIST_COMPILER
1047
1048 ##
1049 ##  Misc
1050 ##
1051
1052 # Make enable-shared aware
1053 AM_CONDITIONAL(SILC_ENABLE_SHARED, test "$enable_shared" = yes)
1054
1055 # Other configure scripts
1056 #
1057
1058 #ifdef SILC_DIST_TOOLKIT
1059 if test x$without_irssi = xfalse; then
1060 #endif SILC_DIST_TOOLKIT
1061 #ifdef SILC_DIST_CLIENT
1062   AC_CONFIG_SUBDIRS(irssi)
1063   irssi="yes"
1064 #endif SILC_DIST_CLIENT
1065 #ifdef SILC_DIST_TOOLKIT
1066 fi
1067 #endif SILC_DIST_TOOLKIT
1068
1069 SILC_TOP_SRCDIR=`pwd`
1070
1071 # Included configure scripts
1072 AD_INCLUDE_CONFIGURE
1073
1074 #ifdef SILC_DIST_COMPILER
1075 #
1076 # Substitutions
1077 #
1078 AC_SUBST(SILC_TOP_SRCDIR)
1079 AC_SUBST(LIBS)
1080 AC_SUBST(SILC_LIB_INCLUDES)
1081 AC_SUBST(__SILC_HAVE_PTHREAD)
1082 AC_SUBST(__SILC_HAVE_SIM)
1083 AC_SUBST(__SILC_ENABLE_DEBUG)
1084
1085 #
1086 # Fix the libtool to support run-time configuration.  This allows us
1087 # to in run-time specify when to compile shared/static libraries without
1088 # need to reconfigure the entire libtool.
1089 #
1090 if test x$libtoolfix = xtrue; then
1091   ./libtoolfix $SILC_TOP_SRCDIR/ltmain.sh
1092 fi
1093 AM_CONDITIONAL(SILC_LIBTOOLFIX, test x$libtoolfix = xtrue)
1094
1095 INCLUDE_DEFINES_INT="include \$(top_srcdir)/Makefile.defines_int"
1096 AC_SUBST(INCLUDE_DEFINES_INT)
1097
1098 #endif SILC_DIST_COMPILER
1099
1100 #
1101 # Makefile outputs
1102 #
1103 AC_CONFIG_FILES(
1104 Makefile
1105 #ifdef SILC_DIST_DOC
1106 doc/Makefile
1107 #endif SILC_DIST_DOC
1108 #ifdef SILC_DIST_COMPILER
1109 Makefile.defines
1110 Makefile.defines_int
1111 includes/Makefile
1112 includes/silcversion.h
1113 includes/silcincludes.h
1114 #endif SILC_DIST_COMPILER
1115 #ifdef SILC_DIST_APPS
1116 apps/Makefile
1117 #endif SILC_DIST_APPS
1118 )
1119
1120 #ifdef SILC_DIST_TOOLKIT
1121 if test x$without_irssi = xfalse ; then
1122 #endif SILC_DIST_TOOLKIT
1123 #ifdef SILC_DIST_CLIENT
1124   AC_CONFIG_FILES(
1125 irssi/Makefile.defines
1126 irssi/Makefile.defines_int
1127 )
1128 #endif SILC_DIST_CLIENT
1129 #ifdef SILC_DIST_TOOLKIT
1130 fi
1131 #endif SILC_DIST_TOOLKIT
1132
1133 #ifdef SILC_DIST_TOOLKIT
1134 AC_CONFIG_FILES(
1135 silc/Makefile
1136 win32/Makefile
1137 win32/libsilc/Makefile
1138 win32/libsilcclient/Makefile
1139 tutorial/Makefile
1140 tutorial/Makefile.defines
1141 tutorial/Makefile.defines_int
1142 )
1143 #endif SILC_DIST_TOOLKIT
1144
1145 AC_OUTPUT
1146
1147 #ifdef SILC_DIST_COMPILER
1148 s_bindir=`eval echo $bindir`;s_bindir=`eval echo $s_bindir`
1149 s_sbindir=`eval echo $sbindir`;s_sbindir=`eval echo $s_sbindir`
1150 s_mandir=`eval echo $mandir`;s_mandir=`eval echo $s_mandir`
1151 s_includedir=`eval echo $includedir`;s_includedir=`eval echo $s_includedir`
1152
1153 echo ""
1154 echo "$PACKAGE Configuration Summary:"
1155 echo "---------------------------"
1156 echo " Target host ...................: $target"
1157 echo " Compiler ......................: $CC"
1158 echo " CFLAGS ........................: $CFLAGS"
1159 echo " LDFLAGS .......................: $LDFLAGS"
1160 echo " LIBS ..........................: $LIBS"
1161 echo ""
1162 echo " Installation prefix ...........: $prefix"
1163 echo " bin directory .................: $s_bindir"
1164 echo " sbin directory ................: $s_sbindir"
1165 echo " etc directory .................: $ETCDIR"
1166 echo " man directory .................: $s_mandir"
1167 echo " doc directory .................: $DOCDIR"
1168 #ifdef SILC_DIST_CLIENT
1169 echo " help directory ................: $HELPDIR"
1170 #endif SILC_DIST_CLIENT
1171 #ifdef SILC_DIST_SERVER
1172 echo " logs directory ................: $LOGSDIR"
1173 #endif SILC_DIST_SERVER
1174 #ifdef SILC_DIST_SIM
1175 echo " SIM directory .................: $MODULESDIR"
1176 #endif SILC_DIST_SIM
1177 #ifdef SILC_DIST_INCLUDES
1178 echo " include directory .............: $s_includedir"
1179 #endif SILC_DIST_INCLUDES
1180 echo ""
1181
1182 #ifdef SILC_DIST_TOOLKIT
1183 if test x$without_irssi = xtrue; then
1184   irssi="no"
1185 fi
1186 if test x$without_silcd = xtrue; then
1187   silcd="no"
1188 fi
1189 #endif SILC_DIST_TOOLKIT
1190
1191 #ifdef SILC_DIST_CLIENT
1192 echo " Compile SILC Client ...........: $irssi"
1193 #endif SILC_DIST_CLIENT
1194
1195 #ifdef SILC_DIST_SERVER
1196 echo " Compile SILC Server ...........: $silcd"
1197 echo " Server configuration file .....: $summary_silcd_configfile"
1198 echo " Server PID file ...............: $PIDFILE"
1199 #endif SILC_DIST_SERVER
1200
1201 #ifdef SILC_DIST_SIM
1202 if test x$sim_support = xfalse; then
1203   sim_support="no"
1204 else
1205   sim_support="yes"
1206 fi
1207 echo " SIM support ...................: $sim_support"
1208 #endif SILC_DIST_SIM
1209
1210 echo " IPv6 support ..................: $summary_ipv6"
1211
1212 if test x$has_iconv = xfalse; then
1213   iconv_support="no"
1214 else
1215   iconv_support="yes"
1216 fi
1217 echo " Iconv support .................: $iconv_support"
1218
1219 if test x$want_asm = xfalse; then
1220   summary_asm="no"
1221 else
1222   summary_asm="yes"
1223 fi
1224 echo " Assembler optimizations .......: $summary_asm"
1225
1226 #ifdef SILC_DIST_MATH
1227 mp="MPI"
1228 if test x$mp_gmp = xtrue; then
1229   mp="GMP"
1230 fi
1231 echo " Arithmetic library ............: $mp"
1232 #endif SILC_DIST_MATH
1233
1234 threads="no"
1235 if test x$has_threads = xtrue; then
1236   threads="yes"
1237 fi
1238 echo " Multi-threads support .........: $threads"
1239 echo " Debugging enabled .............: $summary_debug"
1240 echo ""
1241 echo "Compile the sources with 'make' or 'gmake' command."
1242 #endif SILC_DIST_COMPILER
1243