1# $Id: configure.ac 2882 2010-03-20 13:56:20Z kuhlmann $
2
3# Process this file with autoconf to produce a configure script.
4
5AC_PREREQ(2.59)
6AC_INIT([climm], [0.7.1])
7AC_CONFIG_SRCDIR([include/climm.h])
8AC_CONFIG_LIBOBJ_DIR(replace)
9AC_CONFIG_HEADER(include/config.h)
10AC_CONFIG_AUX_DIR(build-aux)
11AC_CANONICAL_HOST
12
13AC_CHECK_PROG(AUTOMAKE, automake-1.9, automake-1.9)
14AC_CHECK_PROG(ACLOCAL, aclocal-1.9, aclocal-1.9)
15AC_CHECK_PROG(AUTOHEADER, autoheader, autoheader)
16AC_CHECK_PROG(AUTOCONF, autoconf, autoconf)
17PKG_PROG_PKG_CONFIG
18
19AM_INIT_AUTOMAKE(1.9)
20AM_MAINTAINER_MODE
21
22AC_DEFINE(CLIMM_VERSION,VERSION,[climm's current version])
23
24if test -f $srcdir/.is_release; then
25  AC_DEFINE(CLIMM_IS_SVN, "")
26else
27  AC_DEFINE(CLIMM_IS_SVN, " SVN " BUILDDATE, whether we are SVN or not)
28fi
29
30# Checks for programs.
31AM_PROG_CC_C_O
32AC_PROG_RANLIB
33AC_PROG_INSTALL
34AC_PROG_LN_S
35AC_SYS_LARGEFILE
36
37# Check for arguments.
38
39AC_ARG_ENABLE([peer2peer], AC_HELP_STRING([--disable-peer2peer], [disable Oscar peer to peer connections]),
40              ac_arg_use_dc=$enableval, ac_arg_use_dc=yes)
41AC_ARG_ENABLE([iconv], AC_HELP_STRING([--disable-iconv], [do not use iconv() at all]),
42              ac_arg_use_iconv=$enableval, ac_arg_use_iconv=yes)
43AC_ARG_ENABLE([iconvrepl], AC_HELP_STRING([--enable-iconvrepl], [compile in iconv() replacement fallbacks]),
44              ac_arg_use_iconvrepl=$enableval, ac_arg_use_iconvrepl=no)
45AC_ARG_ENABLE([remote], AC_HELP_STRING([--disable-remote], [disable scripting FIFO]),
46              ac_arg_use_remote=$enableval, ac_arg_use_remote=auto)
47AC_ARG_ENABLE([xmpp], AC_HELP_STRING([--disable-xmpp], [disable XMPP (Jabber) chat network using libiksemel]),
48              ac_arg_use_xmpp=$enableval, ac_arg_use_xmpp=yes)
49dnl AC_ARG_ENABLE([msn], AC_HELP_STRING([--enable-msn], [enable MSN chat network (NOT YET IMPLEMENTED)]),
50dnl               ac_arg_use_msn=$enableval, ac_arg_use_msn=auto)
51AC_ARG_ENABLE([tcl], AC_HELP_STRING([--disable-tcl], [disable Tcl scripting]),
52              ac_arg_use_tcl=$enableval, ac_arg_use_tcl=auto)
53AC_ARG_ENABLE([ssl], AC_HELP_STRING([--disable-ssl], [disable SSL encryption]),
54              ac_arg_use_ssl=$enableval, ac_arg_use_ssl=auto)
55AC_ARG_ENABLE([ssl], AC_HELP_STRING([[[[--enable-ssl=gnutls,openssl,gnutls+openssl]]]], [choose SSL library]))
56AC_ARG_ENABLE([otr], AC_HELP_STRING([--disable-otr], [disable OTR encryption support]),
57              ac_arg_use_otr=$enableval, ac_arg_use_otr=auto)
58
59AC_ARG_ENABLE([autopackage], AC_HELP_STRING([--enable-autopackage], [enable autopackage generation]),
60              ac_arg_use_autopackage=$enableval, ac_arg_use_autopackage=no)
61
62# Checks for libraries.
63AC_CHECK_FUNCS([inet_ntoa getpeername])
64if test "x$ac_cv_func_inet_ntoa" = "xno"; then
65  AC_CHECK_LIB(nsl, inet_ntoa)
66fi
67if test "x$ac_cv_func_getpeername" = "xno"; then
68  AC_CHECK_LIB(socket, getpeername)
69fi
70
71# Checks for header files.
72AC_HEADER_STDC
73AC_CHECK_HEADERS([locale.h langinfo.h sys/select.h arpa/inet.h ctype.h errno.h fcntl.h limits.h netdb.h netinet/in.h sys/ioctl.h sys/socket.h sys/time.h sys/wait.h termios.h unistd.h strings.h sys/utsname.h sys/un.h wchar.h wctype.h pwd.h utmp.h utmpx.h values.h resolv.h arpa/nameser.h])
74
75if test "x$ac_arg_use_autopackage" = xyes; then
76    enable_binreloc=auto
77    rk_BINRELOC
78    if test "x$br_cv_binreloc" = xyes; then
79        AC_CHECK_PROGS(RELAYTOOL, relaytool, :)
80        if test "x$RELAYTOOL" != x:; then
81            old_LIBS=$LIBS
82            LIBS=
83            AC_SEARCH_LIBS([dlopen], [dl])
84            AC_SUBST(BINRELOC_LIBS, [$LIBS])
85            LIBS="$old_LIBS"
86            ac_use_autopackage=yes
87            AC_DEFINE(ENABLE_AUTOPACKAGE,1,[Use autopackage to check libraries at run time])
88        fi
89    fi
90else
91    AC_SUBST(BINRELOC_LIBS,[ ])
92fi
93
94if test "x$ac_arg_use_dc" != "xno" || test "x$ac_arg_use_xmpp" != "xno"; then
95  if test "x$ac_arg_use_ssl" != "xno"; then
96    ac_use_ssl=no
97    if test "x$ac_arg_use_ssl" != "xopenssl"; then
98      PKG_CHECK_MODULES(LIBGNUTLS, gnutls > 2, ac_use_ssl=gnutls, ac_use_ssl=no)
99      if test "x$ac_use_ssl" = xno; then
100        AM_PATH_LIBGNUTLS(0.8.8, ac_use_ssl=gnutls)
101      fi
102      AM_PATH_LIBGCRYPT(, , ac_use_ssl=no)
103      AC_CHECK_HEADERS([gcrypt.h], , ac_use_ssl=no)
104      if test "x$ac_use_ssl" = "xgnutls"; then
105        CFLAGS="$LIBGNUTLS_CFLAGS $LIBGCRYPT_CFLAGS $CFLAGS"
106        temp_LIBS="$LIBS"
107        LIBS="$LIBGNUTLS_LIBS $LIBGCRYPT_LIBS $LIBS"
108        AC_CHECK_FUNC(gnutls_dh_params_generate2, [AC_DEFINE(HAVE_DH_GENPARAM2, 1, [Whether new DH prime generator is available])],)
109        LIBS="$temp_LIBS"
110        AC_DEFINE(HAVE_GNUTLS, 1, [whether to use GnuTSL support.])
111      fi
112    fi
113    if test "x$ac_use_ssl" = "xno" || test "x$ac_arg_use_ssl" = "xgnutls+openssl"; then
114      if test "x$ac_arg_use_ssl" != "xgnutls"; then
115        ac_use_openssl=no
116        AC_CHECK_HEADERS([openssl/ssl.h], [ac_use_openssl=openssl])
117        temp_LIBS="$LIBS"
118        AC_CHECK_LIB([crypto], [DH_free], , [ac_use_openssl=no])
119        AC_CHECK_LIB([ssl], [SSL_new], , [ac_use_openssl=no
120                                          LIBS="$temp_LIBS"])
121        if test "x$ac_use_openssel" != "xno"; then
122          if test "x$ac_use_ssl" = "xno"; then
123            ac_use_ssl=$ac_use_openssl
124          else
125            ac_use_ssl=$ac_use_ssl+$ac_use_openssl
126          fi
127        fi
128      fi
129    fi
130    if test "x$ac_use_ssl" = "xno"; then
131      case "$ac_arg_use_ssl" in
132        gnutls)         AC_MSG_FAILURE([cannot find GnuTLS library]) ;;
133        openssl)        AC_MSG_FAILURE([cannot find OpenSSL library]) ;;
134        yes)            AC_MSG_FAILURE([cannot find any SSL library]) ;;
135        *)              AC_MSG_WARN([cannot find a suitable SSL library -- encrypted connection support disabled]) ;;
136      esac
137    fi
138    if test "x$ac_arg_use_ssl" = "xgnutls+openssl" &&  test "x$ac_arg_use_ssl" != "x$ac_use_ssl";  then
139      case "$ac_use_ssl" in
140        gnutls)         AC_MSG_FAILURE([cannot find OpenSSL library]) ;;
141        openssl)        AC_MSG_FAILURE([cannot find GnuTLS library]) ;;
142        *)              AC_MSG_FAILURE([cannot find neither GnuTLS nor OpenSSL library]) ;;
143      esac
144    fi
145    ac_arg_use_ssl=$ac_use_ssl
146  fi
147else
148  ac_arg_use_ssl=no
149fi
150
151if test "x$ac_arg_use_otr" != "xno"; then
152    ac_use_otr=no
153    temp_LIBS="$LIBS"
154    temp_CFLAGS="$CFLAGS"
155    if test "x$ac_arg_use_ssl" != "xgnutls" && test "x$ac_arg_use_ssl" != "xgnutls+openssl"; then
156        AM_PATH_LIBGCRYPT(, ac_use_otr=maybe, ac_use_otr=no)
157        CFLAGS="$LIBGCRYPT_CFLAGS $CFLAGS"
158    else
159        ac_use_otr=maybe
160    fi
161    LIBS="$LIBGCRYPT_LIBS $LIBS"
162    if test "x$ac_use_otr" != "xno"; then
163        AM_PATH_LIBOTR(, ac_use_otr=yes, ac_use_otr=no)
164    fi
165    if test "x$ac_use_otr" = "xyes"; then
166        CFLAGS="$LIBOTR_CFLAGS $CFLAGS"
167        ac_arg_use_otr=yes
168    else
169        if test "x$ac_arg_use_otr" = "xyes"; then
170            AC_MSG_FAILURE([OTR support requested, but no usable libotr found!])
171        fi
172        CFLAGS="$temp_CFLAGS"
173        ac_arg_use_otr=no
174    fi
175    LIBS="$temp_LIBS"
176fi
177
178if test "x$ac_arg_use_tcl" != "xno"; then
179  ac_use_tcl=no
180  temp_LIBS="$LIBS"
181  LIBS=""
182  LIBTCL_LIBS=""
183  if test "x$ac_arg_use_autopackage" = xyes; then
184    AC_CHECK_HEADERS([tcl8.4/tcl.h tcl.h], [ac_use_tcl=yes
185                                            break])
186    if test "x$ac_use_tcl" = "xyes"; then
187      AC_SEARCH_LIBS([Tcl_CreateInterp], [tcl8.4], [ac_use_tcl=yes
188                                                    LIBTCL_LIBS=$LIBS], [ac_use_tcl=no], [$temp_LIBS])
189    fi
190  else
191    AC_CHECK_HEADERS([tcl8.5/tcl.h tcl8.4/tcl.h tcl8.3/tcl.h tcl.h], [ac_use_tcl=yes
192                                                                      break])
193    if test "x$ac_use_tcl" = "xyes"; then
194      AC_SEARCH_LIBS([Tcl_CreateInterp], [tcl8.5 tcl8.4 tcl8.3], [ac_use_tcl=yes
195                                                                  LIBTCL_LIBS=$LIBS], [ac_use_tcl=no], [$temp_LIBS])
196    fi
197  fi
198  LIBS="$temp_LIBS"
199  AC_SUBST(LIBTCL_LIBS, [$LIBTCL_LIBS])
200  if test "x$ac_usl_tcl$ac_arg_use_tcl" = "xnoyes"; then
201    AC_MSG_FAILURE([cannot find a suitable Tcl interpreter library])
202  fi
203  ac_arg_use_tcl=$ac_use_tcl;
204fi
205
206if test "x$ac_arg_use_iconv" != "xno"; then
207  AM_ICONV
208fi
209
210AC_CACHE_CHECK(for iconv() fallbacks to compile in, ac_cv_iconv_fb,
211  [ac_cv_iconv_fb="ASCII UCS2BE WIN1251 KOI8 LATIN9 LATIN1 UTF8 WCHART TRANSLIT"
212  if test "x$ac_arg_use_iconvrepl" != "xyes"; then
213    if test "x$ac_arg_use_iconvrepl" != "xno"; then
214      ac_cv_iconv_fb=$ac_arg_use_iconvrepl;
215    fi
216  fi
217  if test "x$am_cv_func_iconv$ac_arg_use_iconvrepl" = "xyesno"; then
218    old_LDFLAGS=$LDFLAGS
219    LDFLAGS="$LDFLAGS $LIBICONV"
220    AC_RUN_IFELSE([AC_LANG_PROGRAM([[#include <stdlib.h>
221          #include <iconv.h>
222          #include <stdio.h>]],
223        [[iconv_t resa, resb;
224          FILE *hf = fopen ("conftest.encodings", "w");
225          resa = iconv_open ("UTF-8", "US-ASCII");
226          resb = iconv_open ("US-ASCII", "UTF-8");
227          if (resa == (iconv_t)-1 || !resa || resb == (iconv_t)-1 || !resb)
228              fprintf (hf, "ASCII ");
229          resa = iconv_open ("UTF-8", "UCS-2BE");
230          resb = iconv_open ("UCS-2BE", "UTF-8");
231          if (resa == (iconv_t)-1 || !resa || resb == (iconv_t)-1 || !resb)
232          {
233              resa = iconv_open ("UTF-8", "UNICODEBIG");
234              resb = iconv_open ("UNICODEBIG", "UTF-8");
235          }
236          if (resa == (iconv_t)-1 || !resa || resb == (iconv_t)-1 || !resb)
237              fprintf (hf, "UCS2BE ");
238          resa = iconv_open ("UTF-8", "CP1251");
239          resb = iconv_open ("CP1251", "UTF-8");
240          if (resa == (iconv_t)-1 || !resa || resb == (iconv_t)-1 || !resb)
241          {
242              resa = iconv_open ("UTF-8", "WINDOWS-1251");
243              resb = iconv_open ("WINDOWS-1251", "UTF-8");
244          }
245          if (resa == (iconv_t)-1 || !resa || resb == (iconv_t)-1 || !resb)
246              fprintf (hf, "WIN1251 ");
247          resa = iconv_open ("UTF-8", "KOI8-U");
248          resb = iconv_open ("KOI8-U", "UTF-8");
249          if (resa == (iconv_t)-1 || !resa || resb == (iconv_t)-1 || !resb)
250              fprintf (hf, "KOI8 ");
251          resa = iconv_open ("UTF-8", "ISO-8859-15");
252          resb = iconv_open ("ISO-8859-15", "UTF-8");
253          if (resa == (iconv_t)-1 || !resa || resb == (iconv_t)-1 || !resb)
254          {
255              resa = iconv_open ("UTF-8", "ISO8859-15");
256              resb = iconv_open ("ISO8859-15", "UTF-8");
257          }
258          if (resa == (iconv_t)-1 || !resa || resb == (iconv_t)-1 || !resb)
259              fprintf (hf, "LATIN9 ");
260          resa = iconv_open ("UTF-8", "ISO-8859-1");
261          resb = iconv_open ("ISO-8859-1", "UTF-8");
262          if (resa == (iconv_t)-1 || !resa || resb == (iconv_t)-1 || !resb)
263          {
264              resa = iconv_open ("UTF-8", "ISO8859-1");
265              resb = iconv_open ("ISO8859-1", "UTF-8");
266          }
267          if (resa == (iconv_t)-1 || !resa || resb == (iconv_t)-1 || !resb)
268              fprintf (hf, "LATIN1 ");
269          resa = iconv_open ("UTF-8", "UTF-8");
270          if (resa == (iconv_t)-1)
271              resa = 0;
272          else
273          {
274              size_t inl = 2, outl = 10;
275              char inb[10], outb[10], *inp = inb, *outp = outb;
276              strcpy (inp, "\xfc.\xc0\xaf");
277              if (iconv (resa, &inp, &inl, &outp, &outl) != (size_t)-1)
278                  resa = 0;
279              else
280              {
281                  inp = inb + 2;
282                  iconv (resa, NULL, NULL, NULL, NULL);
283                  if ((iconv (resa, &inp, &inl, &outp, &outl) != (size_t)-1) && *outp != '/')
284                      resa = 0;
285              }
286          }
287          if (!resa)
288              fprintf (hf, "UTF8 ");
289          resa = iconv_open ("UTF-8", "WCHAR_T");
290          resb = iconv_open ("WCHAR_T", "UTF-8");
291          if (resa == (iconv_t)-1 || !resa || resb == (iconv_t)-1 || !resb)
292              fprintf (hf, "WCHART ");
293          resa = iconv_open ("US-ASCII//TRANSLIT", "UTF-8");
294          if (resa == (iconv_t)-1 || !resa)
295              fprintf (hf, "TRANSLIT ");
296          fclose (hf);
297          exit (0);]])],
298      [ac_cv_iconv_fb="`cat conftest.encodings`"],
299      [], [:])
300    LDFLAGS=$old_LDFLAGS
301    rm -f conftest.encodings
302  fi
303])
304
305if false; then
306 AC_DEFINE(ENABLE_FALLBACK_ASCII, 0, enable fallback function for ASCII)
307 AC_DEFINE(ENABLE_FALLBACK_UCS2BE, 0, enable fallback function for UCS2BE)
308 AC_DEFINE(ENABLE_FALLBACK_WIN1251, 0, enable fallback function for WIN1251)
309 AC_DEFINE(ENABLE_FALLBACK_KOI8, 0, enable fallback function for KOI8)
310 AC_DEFINE(ENABLE_FALLBACK_LATIN9, 0, enable fallback function for LATIN9)
311 AC_DEFINE(ENABLE_FALLBACK_LATIN1, 0, enable fallback function for LATIN1)
312 AC_DEFINE(ENABLE_FALLBACK_UTF8, 0, enable fallback function for UTF8)
313 AC_DEFINE(ENABLE_FALLBACK_WCHART, 0, enable fallback function for WCHART)
314 AC_DEFINE(ENABLE_FALLBACK_TRANSLIT, 0, transliteration is _not_ supported)
315fi
316
317for enc in DUMMY $ac_cv_iconv_fb; do
318  AC_DEFINE_UNQUOTED(ENABLE_FALLBACK_$enc, 1, enable fallback function for $enc)
319done
320
321if test "x$ac_arg_use_remote" != "xno"; then
322  AC_CACHE_CHECK(for FIFO functionality, ac_cv_fifo_stuff,
323    [AC_RUN_IFELSE([AC_LANG_PROGRAM([[#include <stdlib.h>
324          #include <sys/types.h>
325          #include <stdio.h>
326
327          #include <sys/stat.h>
328          #include <fcntl.h>
329          #include <signal.h>
330          void timeout (int i) { exit (11); } ]],
331        [[int res, sok, so2;
332          char buf[10];
333          unlink ("./conftest.fifo");
334          signal (SIGALRM, &timeout);
335          alarm (5);
336          res = mkfifo ("./conftest.fifo", 0600);
337          if (res < 0) exit (1);
338          sok = open ("./conftest.fifo", O_RDWR | O_NONBLOCK);
339          if (sok < 0) exit (2);
340          so2 = open ("./conftest.fifo", O_RDONLY | O_NONBLOCK);
341          if (so2 < 0) exit (3);
342          res = write (sok, "bla", 3);
343          if (res < 3) exit (4);
344          buf[0] = buf[3] = buf[5] = 0;
345          res = read (so2, buf, 3);
346          if (res < 3) exit (5);
347          if (strcmp (buf, "bla")) exit (6);
348          close (sok);
349          close (so2);
350          unlink ("./conftest.fifo");
351          exit (0);]])],
352      [ac_cv_fifo_stuff=yes],
353      [ac_cv_fifo_stuff=no],
354      [ac_cv_fifo_stuff=cross])
355  ])
356  if test "x$ac_cv_fifo_stuff" != xyes && test "x$ac_cv_fifo_stuff$ac_arg_use_remote" != xcrossyes; then
357    ac_arg_use_remote=none
358  else
359    ac_arg_use_remote=yes
360  fi
361else
362  ac_arg_use_remote=none
363fi
364
365dnl AC_LANG([C++])
366dnl AC_PROG_CXX
367dnl if test "x$ac_arg_use_msn" = "xyes"; then
368dnl   AC_SUBST(LIBMSN, "libclimmmsn.a", [Static lib to link if MSN is enabled])
369dnl   AC_SUBST(L_LIBMSN, "-L. -lclimmmsn -lmsn -lstdc++", [Static lib link option to link if MSN is enabled])
370dnl   AC_DEFINE(ENABLE_MSN, 1, [Enable MSN chat network using libmsn])
371dnl   AC_CHECK_HEADERS(sstream,,
372dnl     [AC_CHECK_HEADERS(strstream,,
373dnl         AC_MSG_ERROR([Your libstdc++ doesn't have the sstream or strstream classes]))])
374dnl else
375dnl   ac_arg_use_msn=no
376dnl fi
377dnl AC_LANG([C])
378
379if test "x$ac_arg_use_xmpp" != "xno"; then
380  ac_use_xmpp=yes
381
382  if test "x$ac_arg_use_ssl" != "xgnutls" && test "x$ac_arg_use_ssl" != "xgnutls+openssl"; then
383    if test "x$ac_arg_use_xmpp" = xyes; then
384      AC_MSG_CHECKING([XMPP])
385      AC_MSG_FAILURE([no, GnuTLS missing])
386    else
387      AC_MSG_CHECKING([XMPP])
388      AC_MSG_RESULT([no, GnuTLS missing])
389      ac_use_xmpp=no
390    fi
391  fi
392
393  if test "x$ac_use_xmpp" = xyes; then
394    PKG_CHECK_MODULES(IKS, iksemel >= 1.2, ac_iksemel_version=`pkg-config --modversion iksemel | tr . " "`
395      ac_iksemel_version=`printf 0x%02x%02x $ac_iksemel_version`, ac_use_xmpp=no)
396
397    if test "x$ac_use_xmpp" = xno; then
398      AC_MSG_RESULT([no, using replacement])
399    fi
400
401    if test "x$ac_use_xmpp" = xno || test "x$ac_arg_use_autopackage" = xyes; then
402      # use our version of iksemel
403      AC_SUBST(IKS_INC, ['-I$(top_srcdir)/iksemel-1.4/include'])
404      AC_SUBST(IKS_LIBS, libiksemel.a)
405      ac_iksemel_version=0x0104
406      ac_use_xmpp=yes
407    fi
408  fi
409
410  ac_arg_use_xmpp=$ac_use_xmpp;
411  if test "x$ac_arg_use_xmpp" != xno; then
412    AC_DEFINE(ENABLE_XMPP, 1, [Enable XMPP chat network])
413    AC_DEFINE_UNQUOTED(LIBIKS_VERSION, $ac_iksemel_version, [libiksemel version])
414    ac_use_xmpp=yes
415  fi
416fi
417
418if test "x$ac_arg_use_dc" = "xyes"; then
419  AC_DEFINE(ENABLE_PEER2PEER, 1, [Whether to enable Oscar peer to peer connections])
420fi
421
422if test "x$ac_arg_use_remote" = "xyes"; then
423  AC_DEFINE(ENABLE_REMOTECONTROL, 1, [Whether to enable scripting FIFO])
424fi
425
426if test "x$ac_arg_use_ssl" = "xgnutls+openssl"; then
427  AC_DEFINE(ENABLE_SSL, 1, [Whether to use the SSL extension])
428  AC_DEFINE(ENABLE_GNUTLS, 1, [Whether to use GnuTLS for SSL/TLS support])
429  AC_DEFINE(ENABLE_OPENSSL, 1, [Whether to use OpenSSL for SSL/TLS support])
430elif test "x$ac_arg_use_ssl" = "xgnutls"; then
431  AC_DEFINE(ENABLE_SSL, 1, [Whether to use the SSL extension])
432  AC_DEFINE(ENABLE_GNUTLS, 1, [Whether to use GnuTLS for SSL/TLS support])
433elif test "x$ac_arg_use_ssl" = "xopenssl";  then
434  AC_DEFINE(ENABLE_SSL, 1, [Whether to enable SSL/TLS support])
435  AC_DEFINE(ENABLE_OPENSSL, 1, [Whether to use OpenSSL for SSL/TLS support])
436fi
437
438if test "x$ac_arg_use_otr" = "xyes"; then
439    AC_DEFINE(ENABLE_OTR, 1, [Whether to support OTR encryption])
440fi
441
442if test "x$ac_arg_use_tcl" = "xyes"; then
443  AC_DEFINE(ENABLE_TCL, 1, [Whether to use the Tcl scripting extension])
444fi
445
446# Checks for typedefs, structures, and compiler characteristics.
447AC_C_CONST
448AC_C_INLINE
449AC_TYPE_SIZE_T
450AC_HEADER_TIME
451AC_STRUCT_TM
452
453# Checks for library functions.
454AC_PROG_GCC_TRADITIONAL
455
456AC_TYPE_SIGNAL
457
458AC_STRUCT_TIMEZONE
459AC_CACHE_CHECK(for timezone external, ac_cv_var_timezone,
460  [AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <time.h>]], [[int x = - timezone;]])],
461      [ac_cv_var_timezone=yes], [ac_cv_var_timezone=no])])
462if test "x$ac_cv_var_timezone" = xyes; then
463   AC_DEFINE([HAVE_TIMEZONE], 1, [Define if you have the external 'timezone' variable.])
464else
465  AC_CACHE_CHECK(for tm_gmtoff member, ac_cv_tm_gmtoff,
466    [AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <time.h>]], [[ struct tm stamp; stamp.tm_gmtoff = 0; ]])],
467      [ac_cv_tm_gmtoff=yes], [ac_cv_tm_gmtoff=no])])
468  if test "x$ac_cv_tm_gmtoff" = xyes; then
469    AC_DEFINE([HAVE_TM_GMTOFF], 1, [Define if struct tm has a tm_gmt member.])
470  fi
471fi
472
473AC_FUNC_VPRINTF
474AC_FUNC_SNPRINTF
475AC_FUNC_MEMMOVE
476AC_CHECK_FUNCS([mkdir atexit strcasecmp strchr memchr strdup strncasecmp strpbrk strrchr strstr strtol],,
477               [AC_MSG_ERROR([Required function $ac_func missing. Sorry.])])
478AC_CHECK_FUNCS([localtime_r timegm timelocal memcmp uname fcntl strchr strtok_r \
479                symlink chmod tcgetattr gettimeofday setlocale select sigprocmask])
480AC_CHECK_FUNCS([memset wcwidth iswalnum iswspace nl_langinfo atoll getpwuid getuid fsync getutent getutxent])
481
482AC_CHECK_LIB(resolv, res_query)
483AC_CHECK_LIB(resolv, __res_query)
484
485if test "x$ac_cv_func_timegm" != xyes; then
486    AC_LIBOBJ(timegm)
487    AC_CHECK_FUNCS([setenv putenv unsetenv])
488fi
489
490if test "x$ac_cv_func_select" != "xyes"; then
491    AC_CHECK_HEADERS([winsock2.h conio.h windef.h])
492    my_old_LIBS=$LIBS
493    LIBS="-lws2_32 $LIBS"
494    AC_CACHE_CHECK(for library containing select, ac_cv_search_select,
495      [AC_LINK_IFELSE([AC_LANG_PROGRAM([[/* argl */
496          #if HAVE_SYS_TYPES_H
497          #include <sys/types.h>
498          #endif
499          #if TIME_WITH_SYS_TIME
500          #include <sys/time.h>
501          #include <time.h>
502          #elif HAVE_SYS_TIME_H
503          #include <sys/time.h>
504          #else
505          #include <time.h>
506          #endif
507          #if HAVE_UNISTD_H
508          #include <unistd.h>
509          #endif
510          #if HAVE_SYS_SOCKET_H
511          #include <sys/socket.h>
512          #endif
513          #if HAVE_NETDB_H
514          #include <netdb.h>
515          #endif
516          #if HAVE_WINSOCK2_H
517          #include <winsock2.h>
518          #endif]],
519          [[struct timeval *tm;
520            fd_set *fds;
521            int *i;
522            select (1, fds, fds, fds, tm);
523            socket (1, 1, 1);
524            gethostbyname ("www.climm.org");
525            ioctlsocket(1, 1, i);]])],
526        [ac_cv_search_select=ws2_32],
527        [ac_cv_search_select=no])])
528    LIBS=$my_old_LIBS
529    if test x$ac_cv_search_select != xno; then
530       AC_DEFINE([ICONV_CONST], const, [Define as const if the declaration of iconv() needs const.])
531       LIBS="-lws2_32 $LIBS"
532       ac_cv_func_select=yes
533       ac_cv_func_socket=yes
534       ac_cv_func_gethostbyname=yes
535       ac_cv_func_ioctlsocket=yes
536       AC_DEFINE(HAVE_SELECT, 1)
537       AC_DEFINE(HAVE_SOCKET, 1)
538       AC_DEFINE(HAVE_GETHOSTBYNAME, 1)
539       AC_DEFINE(HAVE_IOCTLSOCKET, 1)
540    else
541       AC_MSG_ERROR([Required functions select and/or socket is missing. Sorry.])
542    fi
543fi
544
545AC_CHECK_FUNCS([select socket gethostbyname hstrerror ioctlsocket])
546
547if test "x$ac_cv_func_gethostbyname" != "xyes"; then
548    AC_MSG_WARN([Function gethostbyname() not found; you will need to specify all host names as IP addresses.])
549fi
550
551AC_CHECK_DECLS(h_errno,,,[$ac_includes_default
552#ifdef HAVE_NETDB_H
553#include <netdb.h>
554#endif
555#ifdef HAVE_WINDEF_H
556#include <windef.h>
557#endif
558#ifdef HAVE_WINSOCK2_H
559#include <winsock2.h>
560#endif])
561
562AC_CHECK_TYPES([wchar_t, wint_t, socklen_t, BOOL, UBYTE, UWORD, UDWORD],,,[$ac_includes_default
563#ifdef HAVE_SYS_SOCKET_H
564#include <sys/socket.h>
565#endif
566#ifdef HAVE_NETDB_H
567#include <netdb.h>
568#endif
569#ifdef HAVE_WINSOCK2_H
570#include <winsock2.h>
571#endif])
572
573AC_C_BIGENDIAN
574AC_CHECK_SIZEOF(char)
575AC_CHECK_SIZEOF(short)
576AC_CHECK_SIZEOF(int)
577AC_CHECK_SIZEOF(long)
578
579if test "x$ac_cv_sizeof_long" = "x4"; then
580  AC_DEFINE(SIZE_4_TYPE, long, [Type of length 4 bytes])
581elif test "x$ac_cv_sizeof_int" = "x4"; then
582  AC_DEFINE(SIZE_4_TYPE, int)
583else
584  AC_MSG_ERROR([No type of length 4 bytes found.])
585fi
586
587if test "x$ac_cv_sizeof_int" = "x2"; then
588  AC_DEFINE(SIZE_2_TYPE, int, [Type of length 2 bytes])
589elif test "x$ac_cv_sizeof_short" = "x2"; then
590  AC_DEFINE(SIZE_2_TYPE, short)
591else
592  AC_MSG_ERROR([No type of length 2 bytes found.])
593fi
594
595if test "x$ac_cv_sizeof_short" = "x1"; then
596  AC_DEFINE(SIZE_1_TYPE, short, [Type of length 1 bytes])
597elif test "x$ac_cv_sizeof_char" = "x1"; then
598  AC_DEFINE(SIZE_1_TYPE, char)
599else
600  AC_MSG_ERROR([No type of length 1 bytes found.])
601fi
602
603# Optimize.
604AC_CACHE_CHECK(checking for variadic macro support, ac_cv_macro_variadic,
605  [AC_LINK_IFELSE([AC_LANG_PROGRAM([[#define variadic(a,...) printf (a "bla" , ## __VA_ARGS__) ]],
606      [[variadic ("bla\n");                      /* note space before comma ^ to avoid gcc-2.95 bug */
607        variadic ("bla%sbla\n", "bla");]])],
608    [ac_cv_macro_variadic=yes],
609    [ac_cv_macro_variadic=no])])
610if test "x$ac_cv_macro_variadic" = xyes; then
611    AC_DEFINE(HAVE_VARIADIC_MACRO,1,[have support for advances variadic macros])
612fi
613
614
615if test "x$GCC" = xyes; then
616    CFLAGS="$CFLAGS -Wall"
617fi
618
619if test "x$WIP" != "x"; then
620    AC_DEFINE(WIP,1,[Include probably buggy work-in-progress code])
621fi
622
623if test "x${DEB_HOST_GNU_SYSTEM}" != "x"; then
624    AC_DEFINE(__Dbn__,1,"")
625else
626    AC_DEFINE(__Dbn__,-1)
627fi
628
629if test "x$CLIMM_EXTRAVERSION" != "x"; then
630    AC_DEFINE_UNQUOTED(EXTRAVERSION,"$CLIMM_EXTRAVERSION",[Extra version information like the distribution used])
631fi
632
633if test "x$ac_use_autopackage" = xyes; then
634    relay_libs="tcl8.4 tcl8.3 gnutls gcrypt gpg-error otr iksemel"
635    LIBS='`'"$RELAYTOOL --relay '$relay_libs' $LIBS"'`'
636    LIBGCRYPT_LIBS='`'"$RELAYTOOL --relay '$relay_libs' $LIBGCRYPT_LIBS"'`'
637    LIBGNUTLS_LIBS='`'"$RELAYTOOL --relay '$relay_libs' $LIBGNUTLS_LIBS"'`'
638    LIBOTR_LIBS='`'"$RELAYTOOL --relay '$relay_libs' $LIBOTR_LIBS"'`'
639    LIBTCL_LIBS='`'"$RELAYTOOL --relay '$relay_libs' $LIBTCL_LIBS"'`'
640    XMPP_LIBS='`'"$RELAYTOOL --relay '$relay_libs' $XMPP_LIBS"'`'
641fi
642
643AC_MSG_CHECKING([whether to enable XMPP chat network])
644AC_MSG_RESULT([$ac_arg_use_xmpp])
645dnl AC_MSG_CHECKING([whether to enable MSN chat network (EXPERIMENTAL BROKEN INCOMPLETE)])
646dnl AC_MSG_RESULT([$ac_arg_use_msn])
647AC_MSG_CHECKING([whether to enable Oscar peer to peer connections])
648AC_MSG_RESULT([$ac_arg_use_dc])
649AC_MSG_CHECKING([whether to enable scripting FIFO])
650AC_MSG_RESULT([$ac_arg_use_remote])
651AC_MSG_CHECKING([whether to enable Tcl scripting])
652AC_MSG_RESULT([$ac_arg_use_tcl])
653AC_MSG_CHECKING([whether to enable SSL/TLS support])
654AC_MSG_RESULT([$ac_arg_use_ssl])
655AC_MSG_CHECKING([whether to enable OTR support])
656AC_MSG_RESULT([$ac_arg_use_otr])
657
658
659AC_CONFIG_FILES([src/Makefile Makefile lang/Makefile doc/Makefile])
660AC_OUTPUT
661