updates.
[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
169 AC_CHECK_FUNC(getopt,
170   [
171     AC_DEFINE([HAVE_GETOPT], [], [HAVE_GETOPT])
172     have_getopt=1
173   ], have_getopt=0
174 )
175
176 ##
177 ##  Enable/disable checking
178 ##
179
180 # IPv6 support
181 #
182 AC_MSG_CHECKING(whether to enable IPv6 support)
183 AC_ARG_ENABLE(ipv6,
184   [  --enable-ipv6           enable IPv6 support],
185   [
186     case "${enableval}" in
187       yes)
188         want_ipv6=true
189         check_ipv6=false
190         summary_ipv6="yes"
191         AC_DEFINE([HAVE_IPV6], [], [HAVE_IPV6])
192         AC_MSG_RESULT(yes)
193         ;;
194       *)
195         want_ipv6=false
196         check_ipv6=false
197         summary_ipv6="no"
198         AC_MSG_RESULT(no)
199         ;;
200     esac
201   ],
202     check_ipv6=true
203   )
204
205 if test x$check_ipv6 = xtrue; then
206   summary_ipv6="no"
207   AC_TRY_COMPILE(
208     [
209       #ifdef HAVE_SYS_TYPES_H
210       #include <sys/types.h>
211       #endif
212       #ifdef HAVE_NETINET_TCP_H
213       #include <netinet/tcp.h>
214       #endif
215       #ifdef HAVE_NETDB_H
216       #include <netdb.h>
217       #endif
218       #include <sys/socket.h>
219       #ifdef HAVE_NETINET_IN_H
220       #include <netinet/in.h>
221       #endif
222     ],
223     [
224       struct sockaddr_in6 sin6;
225       int family = AF_INET6;
226     ],
227     [
228       AC_DEFINE([HAVE_IPV6], [], [HAVE_IPV6])
229       AC_MSG_RESULT(yes)
230       summary_ipv6="yes"
231     ],
232       AC_MSG_RESULT(no)
233     )
234 fi
235
236 # Debug checking
237 #
238 AC_MSG_CHECKING(whether to enable debugging)
239 summary_debug="no"
240 __SILC_ENABLE_DEBUG=""
241 AC_ARG_ENABLE(debug,
242   [  --enable-debug          enable debugging],
243   [
244     case "${enableval}" in
245       yes)
246         AC_MSG_RESULT(yes)
247         AC_DEFINE([SILC_DEBUG], [], [enable-debug])
248         summary_debug="yes"
249         __SILC_ENABLE_DEBUG="#define __SILC_ENABLE_DEBUG 1"
250         ;;
251       *)
252         AC_MSG_RESULT(no)
253         ;;
254     esac
255   ],
256   [
257     AC_MSG_RESULT(no)
258   ])
259
260 # Disable all assembler optimizations
261 #
262 AC_MSG_CHECKING(whether to enable assembler optimizations)
263 want_asm=true
264 AC_ARG_ENABLE(asm,
265   [  --disable-asm           do not use assembler optimizations],
266   [
267     AC_MSG_RESULT(no)
268     want_asm=false
269   ],
270   [
271     AC_MSG_RESULT(yes)
272     want_asm=true
273   ])
274
275 ##
276 ## Compiler and compiler flag checks
277 ##
278
279 # Function to check if compiler flag works
280 # Usage: SILC_ADD_CFLAGS(FLAGS, [ACTION-IF-FAILED])
281 AC_DEFUN([SILC_ADD_CFLAGS],
282 [ tmp_CFLAGS="$CFLAGS"
283   CFLAGS="$CFLAGS $1"
284   AC_MSG_CHECKING(whether $CC accepts $1 flag)
285   AC_TRY_LINK([], [], [AC_MSG_RESULT(yes)], [AC_MSG_RESULT(no)
286                                        CFLAGS="$tmp_CFLAGS"
287                                        $2])
288   unset tmp_CFLAGS
289 ])
290
291 # Function to check if compiler flag works, destination specifiable
292 # Usage: SILC_ADD_CC_FLAGS(VAR, FLAGS, [ACTION-IF-FAILED])
293 AC_DEFUN([SILC_ADD_CC_FLAGS],
294 [ tmp_CFLAGS="$1_CFLAGS"
295   $1_CFLAGS="${$1_CFLAGS} $2"
296   AC_MSG_CHECKING(whether $CC accepts $2 flag)
297   AC_TRY_LINK([], [], [AC_MSG_RESULT(yes)], [AC_MSG_RESULT(no)
298                                        $1_CFLAGS="$tmp_CFLAGS"
299                                        $3])
300   unset tmp_CFLAGS
301 ])
302
303 if test "$GCC"; then
304   # GCC specific options
305   if test "x$summary_debug" = "xyes"; then
306     SILC_ADD_CFLAGS(-g -O)
307   else
308     SILC_ADD_CFLAGS(-g -O2)
309   fi
310   SILC_ADD_CFLAGS(-Wall -finline-functions)
311   SILC_ADD_CFLAGS(-Wno-pointer-sign)
312 else
313   # Other compilers
314   case "$target" in
315     alpha*-dec-osf*)
316       SILC_ADD_CFLAGS(-g3 -O2, SILC_ADD_CFLAGS(-g3 -O, SILC_ADD_CFLAGS(-O)))
317       ;;
318     *)
319       SILC_ADD_CFLAGS(-g)
320       SILC_ADD_CFLAGS(-O2, SILC_ADD_CFLAGS(-O))
321       ;;
322   esac
323
324   # Intel C++ Compiler needs -restrict
325   if test "x$CC" = "xicc"; then
326     SILC_ADD_CFLAGS(-restrict)
327   fi
328 fi
329
330 #
331 # Workaround a bug in GCC 2.x which causes memory exhaustion
332 # when compiling sha1 with optimizations on UltraSPARC.
333 #
334 FIX_SHA1='#'
335 if test "$GCC" -a "$host_cpu" = "sparc64"; then
336   AC_MSG_CHECKING(whether to enable GCC 2.x workaround for SHA1)
337   AC_TRY_COMPILE(
338     [
339       #if defined(__sparc64__) && (__GNUC__ == 2)
340       #else
341       choke me
342       #endif
343     ],
344     [],
345     [
346       FIX_SHA1=''
347       AC_MSG_RESULT(yes)
348     ],
349       AC_MSG_RESULT(no)
350     )
351 fi
352 AC_SUBST(FIX_SHA1)
353 #endif SILC_DIST_COMPILER
354
355 ##
356 ##  Installation
357 ##
358
359 # Default installation destination
360 #
361 #ifdef SILC_DIST_AUTODIST
362 AC_PREFIX_DEFAULT(/usr/local)
363 #else !SILC_DIST_AUTODIST
364 AC_PREFIX_DEFAULT(/usr/local/silc)
365 #endif SILC_DIST_AUTODIST
366 if test "x$prefix" != xNONE; then
367   silc_prefix="$prefix"
368 else
369   silc_prefix="$ac_default_prefix"
370 fi
371
372 #ifndef SILC_DIST_AUTODIST
373 # etc directory
374 #
375 if test "x$sysconfdir" != 'x${prefix}/etc'; then
376   ETCDIR="$sysconfdir"
377 else
378   ETCDIR="$silc_prefix/etc"
379 fi
380
381 AC_ARG_WITH(etcdir,
382   [[  --with-etcdir=DIR       directory for system files [/etc/silc]]],
383   [
384     case "$withval" in
385       no|yes)
386         ;;
387       *)
388         ETCDIR="$withval"
389         ;;
390     esac
391   ])
392 AC_SUBST(ETCDIR)
393 AC_DEFINE_UNQUOTED([SILC_ETCDIR], "$ETCDIR", [SILC_ETCDIR])
394
395 # doc directory
396 #
397 DOCDIR="$silc_prefix/doc"
398 AC_ARG_WITH(docdir,
399   [[  --with-docdir=DIR       directory for SILC documentation [PREFIX/doc]]],
400   [
401     case "$withval" in
402       no|yes)
403         ;;
404       *)
405         DOCDIR="$withval"
406         ;;
407     esac
408   ])
409 AC_SUBST(DOCDIR)
410 AC_DEFINE_UNQUOTED([SILC_DOCDIR], "$DOCDIR", [SILC_DOCDIR])
411 #endif SILC_DIST_AUTODIST
412
413 #ifdef SILC_DIST_COMPILER
414 ##
415 ##  With/without checkings
416 ##
417
418 #
419 # SILC library checking
420 compile_libs=true
421 LIBSUBDIR=lib
422
423 #ifndef SILC_DIST_TOOLKIT
424 AC_ARG_WITH(silc-includes,
425   [  --with-silc-includes=DIR SILC Toolkit includes [search in DIR]],
426   [ac_silc_includes="$withval"], [ac_silc_includes="no"])
427 AC_ARG_WITH(silc-libs,
428   [  --with-silc-libs=DIR     SILC Toolkit libraries [search in DIR]],
429   [ac_silc_libs="$withval"], [ac_silc_libs="no"])
430
431 if test -n "$with_silc_includes" || test -n "$with_silc_libs"; then
432
433   # Manually provided libs
434   if test "$ac_silc_includes" != "no"; then
435     compile_libs=false
436     SILC_LIB_INCLUDES="-I$ac_silc_includes"
437     LIBSUBDIR=
438   fi
439   if test "$ac_silc_libs" != "no"; then
440     compile_libs=false
441     LIBSUBDIR=
442     LIBS="$LIBS -L$ac_silc_libs"
443   fi
444
445   # Check libs to link against
446   f=`$EGREP __SILC_HAVE_PTHREAD $ac_silc_includes/silcincludes.h`
447   if test -n "$f"; then
448     LIBS="$LIBS -lpthread"
449     check_threads=false
450     has_threads=true
451   fi
452   f=`$EGREP __SILC_HAVE_SIM $ac_silc_includes/silcincludes.h`
453   if test -n "$f"; then
454     LIBS="$LIBS -ldl"
455   fi
456
457 else
458   # pkg-config check
459   PKG_CHECK_MODULES(SILC, silc, compile_libs=false, compile_libs=true)
460 #ifdef SILC_DIST_CLIENTLIB
461   PKG_CHECK_MODULES(SILCCLIENT, silcclient, compile_libs=false, compile_libs=true)
462 #endif SILC_DIST_CLIENTLIB
463
464   if test x$compile_libs = xfalse; then
465     LIBSUBDIR=
466     LIBS="$LIBS $SILC_LIBS"
467     CFLAGS="$CFLAGS $SILC_CFLAGS"
468 #ifdef SILC_DIST_CLIENTLIB
469     LIBS="$LIBS $SILCCLIENT_LIBS"
470     CFLAGS="$CFLAGS $SILCCLIENT_CFLAGS"
471 #endif SILC_DIST_CLIENTLIB
472   fi
473 fi
474 #endif SILC_DIST_TOOLKIT
475
476 AC_SUBST(LIBSUBDIR)
477
478 # SOCKS4 support checking
479 #
480 SAVE_LIBS="$LIBS"
481 SAVE_CFLAGS="$CFLAGS"
482 SAVE_LDFLAGS="$LDFLAGS"
483 AC_MSG_CHECKING(whether to support SOCKS4)
484 AC_ARG_WITH(socks4,
485   [[  --with-socks4[=DIR]     with SOCKS4 support [search in DIR/lib and DIR/include]]],
486   [
487     case "$withval" in
488       no)
489         AC_MSG_RESULT(no)
490         ;;
491       *)
492         AC_MSG_RESULT(yes)
493         socks=4
494
495         if test -d "$withval/include"; then
496           CFLAGS="$CFLAGS -I$withval/include"
497         fi
498         if test -d "$withval/lib"; then
499           LDFLAGS="$LDFLAGS -L$withval/lib"
500         fi
501
502         LIBS="-lsocks $LIBS"
503         ;;
504     esac
505
506     AC_TRY_LINK([],
507       [
508         Rconnect();
509       ], [],
510       [
511         AC_MSG_ERROR(Could not find SOCKS4 library.)
512         LIBS="$SAVE_LIBS"
513         CFLAGS="$SAVE_CFLAGS"
514         LDFLAGS="$SAVE_LDFLAGS"
515       ])
516   ],
517     AC_MSG_RESULT(no)
518   )
519
520 # SOCKS5 support checking
521 #
522 SAVE_LIBS="$LIBS"
523 SAVE_CFLAGS="$CFLAGS"
524 SAVE_LDFLAGS="$LDFLAGS"
525 AC_MSG_CHECKING(whether to support SOCKS5)
526 AC_ARG_WITH(socks5,
527   [[  --with-socks5[=DIR]     with SOCKS5 support [search in DIR/lib and DIR/include]]],
528   [
529     case "$withval" in
530       no)
531         AC_MSG_RESULT(no)
532         ;;
533       *)
534         AC_MSG_RESULT(yes)
535         socks=5
536
537         if test -d "$withval/include"; then
538           CFLAGS="$CFLAGS -I$withval/include"
539         fi
540         if test -d "$withval/lib"; then
541           LDFLAGS="$LDFLAGS -L$withval/lib"
542         fi
543
544         LIBS="-lsocks5 $LIBS"
545         ;;
546     esac
547
548     AC_TRY_LINK([],
549       [
550         SOCKSconnect();
551       ], [],
552       [
553         AC_MSG_ERROR(Could not find SOCKS5 library.)
554         LIBS="$SAVE_LIBS"
555         CFLAGS="$SAVE_CFLAGS"
556         LDFLAGS="$SAVE_LDFLAGS"
557       ])
558   ],
559     AC_MSG_RESULT(no)
560   )
561
562 if test "x$socks" = "x4"; then
563   AC_DEFINE([SOCKS], [], [Socks])
564   CFLAGS="$CFLAGS -Dconnect=Rconnect -Dgetsockname=Rgetsockname -Dbind=Rbind -Daccept=Raccept -Dlisten=Rlisten -Dselect=Rselect"
565 fi
566
567 if test "x$socks" = "x5"; then
568   AC_DEFINE([SOCKS], [], [Socks])
569   AC_DEFINE([SOCKS5], [], [Socks5])
570   AC_DEFINE([Rconnect], [SOCKSconnect], [Socks])
571   AC_DEFINE([Rgetsockname], [SOCKSgetsockname], [Socks])
572   AC_DEFINE([Rgetpeername], [SOCKSgetpeername], [Socks])
573   AC_DEFINE([Rbind], [SOCKSbind], [Socks])
574   AC_DEFINE([Raccept], [SOCKSaccept], [Socks])
575   AC_DEFINE([Rlisten], [SOCKSlisten], [Socks])
576   AC_DEFINE([Rselect], [SOCKSselect], [Socks])
577   AC_DEFINE([Rrecvfrom], [SOCKSrecvfrom], [Socks])
578   AC_DEFINE([Rsendto], [SOCKSsendto], [Socks])
579   AC_DEFINE([Rrecv], [SOCKSrecv], [Socks])
580   AC_DEFINE([Rsend], [SOCKSsend], [Socks])
581   AC_DEFINE([Rread], [SOCKSread], [Socks])
582   AC_DEFINE([Rwrite], [SOCKSwrite], [Socks])
583   AC_DEFINE([Rrresvport], [SOCKSrresvport], [Socks])
584   AC_DEFINE([Rshutdown], [SOCKSshutdown], [Socks])
585   AC_DEFINE([Rlisten], [SOCKSlisten], [Socks])
586   AC_DEFINE([Rclose], [SOCKSclose], [Socks])
587   AC_DEFINE([Rdup], [SOCKSdup], [Socks])
588   AC_DEFINE([Rdup2], [SOCKSdup2], [Socks])
589   AC_DEFINE([Rfclose], [SOCKSfclose], [Socks])
590   AC_DEFINE([Rgethostbyname], [SOCKSgethostbyname], [Socks])
591 fi
592
593 #ifdef SILC_DIST_MATH
594 # MP library checking. First check whether user wants to use GMP and use
595 # it if found. If not or not defined then compile the default library in the
596 # source tree.
597 #
598 mp_gmp=false
599 SAVE_LIBS="$LIBS"
600 SAVE_CFLAGS="$CFLAGS"
601 SAVE_LDFLAGS="$LDFLAGS"
602 AC_MSG_CHECKING(whether to search for GMP)
603 AC_ARG_WITH(gmp,
604   [[  --with-gmp[=DIR]        use GMP instead of SILC Math [search in DIR/lib and DIR/include]]],
605   [
606     case "$withval" in
607       no)
608         AC_MSG_RESULT(no)
609         ;;
610       *)
611         AC_MSG_RESULT(yes)
612
613         if test -d "$withval/include"; then
614           CFLAGS="$CFLAGS -I$withval/include"
615         fi
616         if test -d "$withval/lib"; then
617           LDFLAGS="$LDFLAGS -L$withval/lib"
618         fi
619
620         LIBS="-lgmp $LIBS"
621         ;;
622     esac
623
624     AC_CHECK_LIB(gmp, __gmpz_init,
625       [
626         mp_gmp=true
627         AC_DEFINE([SILC_MP_GMP], [], [GMP])
628         AC_MSG_RESULT(Using GMP as a MP library.)
629       ],
630       [
631         LIBS="$SAVE_LIBS"
632         CFLAGS="$SAVE_CFLAGS"
633         LDFLAGS="$SAVE_LDFLAGS"
634       ])
635   ],
636     AC_MSG_RESULT(no)
637   )
638
639 AM_CONDITIONAL(SILC_MP_GMP, test x$mp_gmp = xtrue)
640 AM_CONDITIONAL(SILC_MP_SILCMATH, test x$mp_gmp = xfalse)
641 if test x$mp_gmp = xfalse; then
642   AC_DEFINE([SILC_MP_SILCMAP], [], [SILCMATH])
643   AC_MSG_RESULT(Using SILC Math as a MP library.)
644 fi
645 #endif SILC_DIST_MATH
646
647 # iconv support
648 #
649 check_iconv=true
650 has_iconv=false
651 SAVE_LIBS="$LIBS"
652 SAVE_CFLAGS="$CFLAGS"
653 SAVE_LDFLAGS="$LDFLAGS"
654 SAVE_CPPFLAGS="$CPPFLAGS"
655 AC_MSG_CHECKING(whether to implicit search for libiconv)
656 AC_ARG_WITH(iconv,
657   [[  --with-iconv[=DIR]      use libiconv [search in DIR/include and DIR/lib]]],
658   [
659     case "${withval}" in
660       no)
661         AC_MSG_RESULT(no)
662         AC_CHECK_HEADERS(iconv.h,
663           [
664             AC_CHECK_FUNC(iconv, has_iconv=true)
665           ])
666         check_iconv=false
667         ;;
668       *)
669         AC_MSG_RESULT(yes)
670         if test -d $withval/include; then
671           CPPFLAGS="$CPPFLAGS -I$withval/include"
672           CFLAGS="$CFLAGS -I$withval/include"
673         fi
674         if test -d $withval/lib; then
675           LDFLAGS="$LDFLAGS -L$withval/lib"
676         fi
677         ;;
678     esac
679   ],
680   [
681     AC_MSG_RESULT(no)
682     AC_CHECK_HEADERS(iconv.h,
683       [
684         AC_CHECK_FUNCS(iconv,
685           [
686             has_iconv=true
687             check_iconv=false
688           ])
689       ])
690   ])
691
692 if test x$check_iconv = xtrue; then
693   AC_MSG_RESULT(Searching for iconv...)
694
695   # XXX
696   unset ac_cv_header__iconv_h_ ac_cv_header_iconv_h || true
697
698   AC_CHECK_HEADERS(iconv.h,
699     [
700       LIBS="$LIBS -liconv"
701       AC_MSG_CHECKING(for iconv in -liconv)
702       AC_TRY_LINK(
703         [
704           #include <stdlib.h>
705           #include <iconv.h>
706         ],
707         [
708           iconv_t cd = iconv_open("", "");
709           iconv(cd, NULL, NULL, NULL, NULL);
710           iconv_close(cd);
711         ],
712         [
713           echo "yes"
714           AC_DEFINE([HAVE_ICONV], [], [Define if you have the iconv() function.])
715           has_iconv=true
716           check_iconv=false
717         ],
718         [
719           echo "no"
720           LIBS="$SAVE_LIBS"
721           CFLAGS="$SAVE_CFLAGS"
722           LDFLAGS="$SAVE_LDFLAGS"
723           CPPFLAGS="$SAVE_CPPFLAGS"
724         ])
725      ])
726 fi
727
728 if test x$check_iconv = xtrue; then
729   # search for iconv library..
730   SAVE_LIBS="$LIBS"
731   SAVE_CFLAGS="$CFLAGS"
732   SAVE_LDFLAGS="$LDFLAGS"
733   SAVE_CPPFLAGS="$CPPFLAGS"
734
735   for dir in `echo "/usr/local /usr/pkg /usr/contrib"`; do
736     if test x$has_iconv = xfalse; then
737       AC_MSG_RESULT(searching in $dir...)
738
739       if test -d $dir/include; then
740         CPPFLAGS="$CPPFLAGS -I$dir/include"
741         CFLAGS="$CFLAGS -I$dir/include"
742       fi
743       if test -d $dir/lib; then
744         LDFLAGS="$LDFLAGS -L$dir/lib"
745       fi
746
747       # XXX
748       unset ac_cv_header__iconv_h_ ac_cv_header_iconv_h || true
749
750       AC_CHECK_HEADERS(iconv.h,
751         [
752           LIBS="$LIBS -liconv"
753           AC_MSG_CHECKING(for iconv in -liconv)
754           AC_TRY_LINK(
755             [
756               #include <stdlib.h>
757               #include <iconv.h>
758             ],
759             [
760               iconv_t cd = iconv_open("", "");
761               iconv(cd, NULL, NULL, NULL, NULL);
762               iconv_close(cd);
763             ],
764             [
765               echo "yes"
766               has_iconv=true
767               AC_DEFINE([HAVE_ICONV], [], [Define if you have the iconv() function.])
768             ],
769             [
770               echo "no"
771               has_iconv=false
772
773               LIBS="$SAVE_LIBS"
774               CFLAGS="$SAVE_CFLAGS"
775               LDFLAGS="$SAVE_LDFLAGS"
776               CPPFLAGS="$SAVE_CPPFLAGS"
777             ])
778          ],
779          [
780            CFLAGS="$SAVE_CFLAGS"
781            LDFLAGS="$SAVE_LDFLAGS"
782            CPPFLAGS="$SAVE_CPPFLAGS"
783          ])
784       fi
785     done
786 fi
787
788 if test x$has_iconv = xtrue; then
789   # (1) Some implementations of iconv won't convert from UTF-8 to UTF-8.
790   # (2) In glibc-2.1.2 and earlier there is a bug that messes up ob and
791   #     obl when args 2 and 3 are 0 (fixed in glibc-2.1.3).
792   #
793   AC_CACHE_CHECK([whether this iconv is good enough], ac_iconv_good,
794     AC_TRY_RUN(
795       [
796         #include <iconv.h>
797         int main() {
798           iconv_t cd;
799         changequote(, )dnl
800           char buf[4];
801         changequote([, ])dnl
802           char *ob;
803           size_t obl;
804           ob = buf, obl = sizeof(buf);
805           return ((cd = iconv_open("UTF-8", "UTF-8")) != (iconv_t)(-1) &&
806                  (iconv(cd, 0, 0, &ob, &obl) ||
807                  !(ob == buf && obl == sizeof(buf)) ||
808                  iconv_close(cd)));
809         }
810       ],
811       [
812         ac_iconv_good=yes
813       ],
814       [
815         ac_iconv_good=no
816       ],
817       [
818         ac_iconv_good=yes
819       ])
820     )
821
822   if test x$ac_iconv_good = xno; then
823     AC_MSG_RESULT(Try using libiconv instead.)
824   fi
825 fi
826
827 # POSIX threads support
828 #
829 AC_MSG_CHECKING(whether to search for POSIX threads)
830 AC_ARG_WITH(pthreads,
831   [[  --with-pthreads[=DIR]   use POSIX threads [search in DIR/include and DIR/lib]]],
832   [
833     case "${withval}" in
834       no)
835         check_threads=false
836         ;;
837       *)
838         if test -d $withval/include; then
839           CPPFLAGS="$CPPFLAGS -I$withval/include"
840           CFLAGS="$CFLAGS -I$withval/include"
841         fi
842         if test -d $withval/lib; then
843           LDFLAGS="$LDFLAGS -L$withval/lib"
844         fi
845
846         check_threads=true
847         ;;
848     esac
849   ])
850
851 if test x$check_threads = xtrue; then
852   has_threads=false
853   SAVE_LIBS="$LIBS"
854   SAVE_CFLAGS="$CFLAGS"
855   SAVE_LDFLAGS="$LDFLAGS"
856   SAVE_CPPFLAGS="$CPPFLAGS"
857
858   AC_MSG_RESULT(yes)
859   AC_CHECK_HEADERS(pthread.h,
860     [
861       LIBS="$LIBS -lpthread"
862       AC_CHECK_LIB(pthread, pthread_attr_init, has_threads=true,
863         [
864           # FreeBSD
865           case "${target}" in
866             *-*-freebsd*)
867               LIBS="$SAVE_LIBS -pthread"
868               AC_CHECK_LIB(c_r, pthread_attr_init, has_threads=true, LIBS="$SAVE_LIBS")
869               ;;
870             *)
871               LIBS="$SAVE_LIBS"
872               ;;
873           esac
874         ])
875     ],
876     [
877       # search for pthread library..
878       for dir in `echo "/usr/local /usr/pkg /usr/contrib /usr/pkg/pthreads /usr/local/pthreads"`; do
879         if test x$has_threads = xfalse; then
880           AC_MSG_RESULT(searching in $dir...)
881
882           if test -d $dir/include; then
883             CPPFLAGS="$CPPFLAGS -I$dir/include"
884             CFLAGS="$CFLAGS -I$dir/include"
885           fi
886           if test -d $dir/lib; then
887             LDFLAGS="$LDFLAGS -L$dir/lib"
888           fi
889
890           # XXX
891           unset ac_cv_header__pthread_h_ ac_cv_header_pthread_h || true
892
893           AC_CHECK_HEADERS(pthread.h,
894             [
895               LIBS="$LIBS -lpthread"
896               AC_CHECK_LIB(pthread, pthread_attr_init, has_threads=true,
897                 [
898                   has_threads=false
899
900                   LIBS="$SAVE_LIBS"
901                   CFLAGS="$SAVE_CFLAGS"
902                   LDFLAGS="$SAVE_LDFLAGS"
903                   CPPFLAGS="$SAVE_CPPFLAGS"
904                 ])
905             ],
906             [
907               CFLAGS="$SAVE_CFLAGS"
908               LDFLAGS="$SAVE_LDFLAGS"
909               CPPFLAGS="$SAVE_CPPFLAGS"
910             ])
911         fi
912       done
913     ])
914 else
915   AC_MSG_RESULT(no)
916   has_threads=false
917 fi
918
919 __SILC_HAVE_PTHREAD=""
920 AM_CONDITIONAL(SILC_THREADS, test x$has_threads = xtrue)
921 if test x$has_threads = xtrue; then
922   CFLAGS="$CFLAGS -D_REENTRANT"
923
924   # XXX possibly incomplete
925   case "${target}" in
926     *-*-aix*)
927       CFLAGS="$CFLAGS -D_THREAD_SAFE"
928       if test x"$GCC" = xyes; then
929         CFLAGS="$CFLAGS -mthreads"
930       fi
931       ;;
932     *-*-freebsd*)
933       CFLAGS="$CFLAGS -D_THREAD_SAFE"
934       ;;
935     *-*-sysv5uw7*)  # UnixWare 7
936       if test "$GCC" != "yes"; then
937         CFLAGS="$CFLAGS -Kthread"
938       else
939         CFLAGS="$CFLAGS -pthread"
940       fi
941       ;;
942     *-dg-dgux*)  # DG/UX
943       CFLAGS="$CFLAGS -D_POSIX4A_DRAFT10_SOURCE"
944       ;;
945    esac
946
947   AC_CHECK_FUNC(pthread_create)
948   AC_DEFINE([SILC_HAVE_PTHREAD], [], [HAVE_PTHREAD])
949   AC_DEFINE([SILC_THREADS], [], [HAVE_THREAD])
950   __SILC_HAVE_PTHREAD="#define __SILC_HAVE_PTHREAD 1"
951 fi
952
953 # Native WIN32 compilation under cygwin
954 #
955 AC_MSG_CHECKING(whether to compile native WIN32 code)
956 AC_ARG_WITH(win32,
957   [  --with-win32            compile native WIN32 (MinGW) code (-mno-cygwin)],
958   [
959     AC_MSG_RESULT(yes)
960     AC_DEFINE([SILC_WIN32], [], [SILC_WIN32])
961     win32_support=true
962     CFLAGS="-mno-cygwin $CFLAGS"
963     LIBS="$LIBS -lwsock32"
964   ],
965   [
966     AC_MSG_RESULT(no)
967   ])
968 AM_CONDITIONAL(SILC_WIN32, test x$win32_support = xtrue)
969
970 # Native EPOC support (disabled by default)
971 #
972 AM_CONDITIONAL(SILC_EPOC, test xfalse = xtrue)
973
974 # Native BeOS support (disabled by default)
975 #
976 AM_CONDITIONAL(SILC_BEOS, test xfalse = xtrue)
977
978 # Native OS2 support (disabled by default)
979 #
980 AM_CONDITIONAL(SILC_OS2, test xfalse = xtrue)
981
982 #ifdef SILC_DIST_TOOLKIT
983 # --without-irssi
984 #
985 without_irssi=false
986 AC_MSG_CHECKING(whether to compile Irssi SILC Client)
987 AC_ARG_WITH(irssi,
988   [  --without-irssi         compile without Irssi SILC Client],
989   [
990     AC_MSG_RESULT(no)
991     without_irssi=true
992   ],
993   [
994     AC_MSG_RESULT(yes)
995   ])
996
997 # --without-silcd
998 #
999 without_silcd=false
1000 AC_MSG_CHECKING(whether to compile SILC Server)
1001 AC_ARG_WITH(silcd,
1002   [  --without-silcd         compile without SILC Server],
1003   [
1004     AC_MSG_RESULT(no)
1005     without_silcd=true
1006   ],
1007   [
1008     AC_MSG_RESULT(yes)
1009   ])
1010 #endif SILC_DIST_TOOLKIT
1011
1012 libtoolfix=true
1013 AC_MSG_CHECKING(whether to do libtoolfix)
1014 AC_ARG_WITH(libtoolfix,
1015   [  --without-libtoolfix    Do not fix libtool, for package builders],
1016   [
1017     AC_MSG_RESULT(no)
1018     libtoolfix=false
1019   ],
1020   [
1021     AC_MSG_RESULT(yes)
1022   ])
1023
1024 AC_SUBST(ETCDIR)
1025 AC_DEFINE_UNQUOTED([SILC_ETCDIR], "$ETCDIR", [SILC_ETCDIR])
1026 #endif SILC_DIST_COMPILER
1027
1028 ##
1029 ##  Misc
1030 ##
1031
1032 # Make enable-shared aware
1033 AM_CONDITIONAL(SILC_ENABLE_SHARED, test "$enable_shared" = yes)
1034
1035 SILC_TOP_SRCDIR=`pwd`
1036
1037 # Included configure scripts
1038 AD_INCLUDE_CONFIGURE
1039
1040 #ifdef SILC_DIST_COMPILER
1041 #
1042 # Substitutions
1043 #
1044 AC_SUBST(SILC_TOP_SRCDIR)
1045 AC_SUBST(LIBS)
1046 AC_SUBST(SILC_LIB_INCLUDES)
1047 AC_SUBST(__SILC_HAVE_PTHREAD)
1048 AC_SUBST(__SILC_HAVE_SIM)
1049 AC_SUBST(__SILC_ENABLE_DEBUG)
1050
1051 #
1052 # Fix the libtool to support run-time configuration.  This allows us
1053 # to in run-time specify when to compile shared/static libraries without
1054 # need to reconfigure the entire libtool.
1055 #
1056 if test x$libtoolfix = xtrue; then
1057   ./libtoolfix $SILC_TOP_SRCDIR/ltmain.sh
1058 fi
1059 AM_CONDITIONAL(SILC_LIBTOOLFIX, test x$libtoolfix = xtrue)
1060
1061 INCLUDE_DEFINES_INT="include \$(top_srcdir)/Makefile.defines_int"
1062 AC_SUBST(INCLUDE_DEFINES_INT)
1063
1064 #endif SILC_DIST_COMPILER
1065
1066 #
1067 # Makefile outputs
1068 #
1069 AC_CONFIG_FILES(
1070 Makefile
1071 #ifdef SILC_DIST_DOC
1072 doc/Makefile
1073 #endif SILC_DIST_DOC
1074 #ifdef SILC_DIST_COMPILER
1075 Makefile.defines
1076 Makefile.defines_int
1077 includes/Makefile
1078 includes/silcversion.h
1079 includes/silcincludes.h
1080 #endif SILC_DIST_COMPILER
1081 #ifdef SILC_DIST_APPS
1082 apps/Makefile
1083 #endif SILC_DIST_APPS
1084 )
1085
1086 #ifdef SILC_DIST_TOOLKIT
1087 AC_CONFIG_FILES(
1088 win32/Makefile
1089 win32/libsilc/Makefile
1090 win32/libsilcclient/Makefile
1091 tutorial/Makefile
1092 tutorial/Makefile.defines
1093 tutorial/Makefile.defines_int
1094 )
1095 #endif SILC_DIST_TOOLKIT
1096
1097 AC_OUTPUT
1098
1099 #ifdef SILC_DIST_COMPILER
1100 s_bindir=`eval echo $bindir`;s_bindir=`eval echo $s_bindir`
1101 s_sbindir=`eval echo $sbindir`;s_sbindir=`eval echo $s_sbindir`
1102 s_mandir=`eval echo $mandir`;s_mandir=`eval echo $s_mandir`
1103 s_includedir=`eval echo $includedir`;s_includedir=`eval echo $s_includedir`
1104
1105 echo ""
1106 echo "$PACKAGE Configuration Summary:"
1107 echo "---------------------------"
1108 echo " Target host ...................: $target"
1109 echo " Compiler ......................: $CC"
1110 echo " CFLAGS ........................: $CFLAGS"
1111 echo " LDFLAGS .......................: $LDFLAGS"
1112 echo " LIBS ..........................: $LIBS"
1113 echo ""
1114 echo " Installation prefix ...........: $prefix"
1115 echo " bin directory .................: $s_bindir"
1116 echo " sbin directory ................: $s_sbindir"
1117 echo " etc directory .................: $ETCDIR"
1118 echo " man directory .................: $s_mandir"
1119 echo " doc directory .................: $DOCDIR"
1120 #ifdef SILC_DIST_CLIENT
1121 echo " help directory ................: $HELPDIR"
1122 #endif SILC_DIST_CLIENT
1123 #ifdef SILC_DIST_SERVER
1124 echo " logs directory ................: $LOGSDIR"
1125 #endif SILC_DIST_SERVER
1126 #ifdef SILC_DIST_SIM
1127 echo " SIM directory .................: $MODULESDIR"
1128 #endif SILC_DIST_SIM
1129 #ifdef SILC_DIST_INCLUDES
1130 echo " include directory .............: $s_includedir"
1131 #endif SILC_DIST_INCLUDES
1132 echo ""
1133
1134 #ifdef SILC_DIST_TOOLKIT
1135 if test x$without_irssi = xtrue; then
1136   irssi="no"
1137 fi
1138 if test x$without_silcd = xtrue; then
1139   silcd="no"
1140 fi
1141 #endif SILC_DIST_TOOLKIT
1142
1143 #ifdef SILC_DIST_CLIENT
1144 echo " Compile SILC Client ...........: $irssi"
1145 #endif SILC_DIST_CLIENT
1146
1147 #ifdef SILC_DIST_SERVER
1148 echo " Compile SILC Server ...........: $silcd"
1149 echo " Server configuration file .....: $summary_silcd_configfile"
1150 echo " Server PID file ...............: $PIDFILE"
1151 #endif SILC_DIST_SERVER
1152
1153 #ifdef SILC_DIST_SIM
1154 if test x$sim_support = xfalse; then
1155   sim_support="no"
1156 else
1157   sim_support="yes"
1158 fi
1159 echo " SIM support ...................: $sim_support"
1160 #endif SILC_DIST_SIM
1161
1162 echo " IPv6 support ..................: $summary_ipv6"
1163
1164 if test x$has_iconv = xfalse; then
1165   iconv_support="no"
1166 else
1167   iconv_support="yes"
1168 fi
1169 echo " Iconv support .................: $iconv_support"
1170
1171 if test x$want_asm = xfalse; then
1172   summary_asm="no"
1173 else
1174   summary_asm="yes"
1175 fi
1176 echo " Assembler optimizations .......: $summary_asm"
1177
1178 #ifdef SILC_DIST_MATH
1179 if test x$mp_gmp = xtrue; then
1180   echo " Arithmetic library ............: GMP"
1181 fi
1182 #endif SILC_DIST_MATH
1183
1184 threads="no"
1185 if test x$has_threads = xtrue; then
1186   threads="yes"
1187 fi
1188 echo " Multi-threads support .........: $threads"
1189 echo " Debugging enabled .............: $summary_debug"
1190 echo ""
1191 echo "Compile the sources with 'make' or 'gmake' command."
1192 #endif SILC_DIST_COMPILER