Use get_terminal_codepage in handle_interlink_event.
[elinks.git] / configure.in
blob3910b54309c6de7388f8aab4e007117a63e784be
1 dnl Process this file with autoconf to produce a configure script.
3 dnl There are two types of comments in this file.
4 dnl Comments that refer to Autoconf macros begin with "dnl", and m4
5 dnl discards them.  Other comments begin with "#", and they get copied
6 dnl to the configure script, hopefully making it easier to read.
8 dnl Autoconf 2.13 generates an incomplete config.h.in; see ELinks bug 936.
9 dnl Autoconf 2.59 is installed in the computer that generates our nightly
10 dnl snapshots, so we need to be compatible with that.
11 AC_PREREQ(2.59)
12 AC_INIT
13 AC_CONFIG_SRCDIR([src/main/main.c])
14 AC_CONFIG_AUX_DIR(config)
16 PACKAGE=elinks
17 VERSION=0.12pre2.GIT
18 AC_SUBST(PACKAGE)
19 AC_SUBST(VERSION)
20 AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Package version])
21 AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Package version])
22 AC_CONFIG_HEADERS(config.h)
24 AC_CHECK_PROG(ACLOCAL,[aclocal],[aclocal],[config/missing aclocal])
25 AC_CHECK_PROG(AUTOCONF,[autoconf],[autoconf],[config/missing autoconf])
26 AC_CHECK_PROG(AUTOHEADER,[autoheader],[autoheader],[config/missing autoheader])
28 MAKE=
30 for make in gnumake gmake make false; do
31         if test "x$MAKE" = x; then
32                 AC_PATH_PROGS(MAKE, "$make")
33         fi
34 done
36 builddir="`pwd`"
38 # Cleanup if we are configuring with a previous build in the tree
39 if test -e Makefile.config; then
40         AC_MSG_CHECKING([for previous build to clean])
41         "$MAKE" -C "$builddir/src" cleanall >/dev/null 2>/dev/null
42         AC_MSG_RESULT(done)
45 # ===================================================================
46 # Load feature configuration file and start logging features.
47 # ===================================================================
49 features="features.conf"
50 AC_CHECK_FILE("$srcdir/$features", [ . $srcdir/$features ])
51 AC_CHECK_FILE("$builddir/$features", [ . $builddir/$features ])
52 echo "Feature summary:" > features.log
54 # ===================================================================
55 # Checks for programs.
56 # ===================================================================
58 AC_PROG_CC
59 AC_PROG_AWK
60 AC_PATH_PROGS(AWK, "$AWK")
61 AC_PROG_RANLIB
62 AC_PROG_INSTALL
64 AC_PATH_PROGS(GIT, "git")
65 AC_PATH_PROGS(SPARSE, "sparse")
67 CONFIG_ASCIIDOC="no"
68 CONFIG_POD2HTML="no"
69 CONFIG_XMLTO="no"
70 CONFIG_JW="no"
72 if test "x$CONFIG_DOC" != xno; then
73         AC_PATH_PROGS(ASCIIDOC, "asciidoc")
74         if test "x$ASCIIDOC" != "x"; then
75                 EL_CONFIG(CONFIG_ASCIIDOC, [AsciiDoc])
76                 EL_CONFIG(MANUAL_ASCIIDOC, [HTML (one file)])
77                 EL_CONFIG(MAN_ASCIIDOC, [HTML])
79                 echo > config.asciidoc-unsafe.txt
80                 if "$ASCIIDOC" --unsafe config.asciidoc-unsafe.txt >/dev/null 2>/dev/null; then
81                         ASCIIDOC_FLAGS=--unsafe
82                 fi
83                 rm config.asciidoc-unsafe.*
84         fi
86         AC_PATH_PROGS(XMLTO, "xmlto")
87         if test "x$XMLTO" != "x"; then
88                 EL_CONFIG(CONFIG_XMLTO, [XmlTo])
89                 EL_CONFIG(MANUAL_XMLTO, [HTML (multiple files)])
90                 EL_CONFIG(MAN_XMLTO, [man (groff)])
91         fi
93         AC_PATH_PROGS(JW, "jw")
94         if test "x$JW" != "x"; then
95                 EL_CONFIG(CONFIG_JW, [JadeWrapper])
96                 EL_CONFIG(MANUAL_JW, [PDF])
97         fi
99         AC_PATH_PROGS(POD2HTML, "pod2html")
100         if test "x$POD2HTML" != "x"; then
101                 EL_CONFIG(CONFIG_POD2HTML, [Pod2HTML])
102         fi
104         AC_PATH_PROGS(DOXYGEN, "doxygen")
105         if test "x$DOXYGEN" != "x"; then
106                 EL_CONFIG(CONFIG_DOXYGEN, [Doxygen])
107                 api_srcdir="$(cd "$srcdir" && pwd)/src"
108                 AC_SUBST(api_srcdir)
109         fi
112 AC_SUBST(ASCIIDOC_FLAGS)
113 AC_SUBST(CONFIG_ASCIIDOC)
114 AC_SUBST(CONFIG_DOXYGEN)
115 AC_SUBST(CONFIG_POD2HTML)
116 AC_SUBST(CONFIG_XMLTO)
117 AC_SUBST(CONFIG_JW)
119 EL_CONFIG_DEPENDS(CONFIG_DOC, [CONFIG_ASCIIDOC CONFIG_XMLTO CONFIG_JW CONFIG_POD2HTML], [Documentation Tools])
120 EL_CONFIG_DEPENDS(CONFIG_MANUAL, [MANUAL_ASCIIDOC MANUAL_XMLTO MANUAL_JW], [Manual Formats])
121 EL_CONFIG_DEPENDS(CONFIG_MANPAGE, [MAN_ASCIIDOC MAN_XMLTO], [Man Page Formats])
122 EL_CONFIG_DEPENDS(CONFIG_APIDOCS, [CONFIG_DOXYGEN], [API Documentation])
124 # gcc specific options (to be continued at the bottom of configure)
125 if test "x$ac_cv_c_compiler_gnu" = "xyes"; then
126   # We want to see all warnings and live with none.
127   # We can't set up -Werror here as there may be some warnings in test
128   # suite of configure, and we don't want to fail them.
129   CFLAGS="$CFLAGS -Wall"
132 # ===================================================================
133 # Checks for special OSes.
134 # ===================================================================
136 dnl EL_CHECK_COMPILER_MACRO(define, name, flagname)
137 AC_DEFUN([EL_CHECK_COMPILER_MACROS],
139         AC_MSG_CHECKING([for $2])
141         for flag in $3; do
142                 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[#ifndef $flag
143 kill me!
144 #endif ]])],[$1=yes],[$1=no])
145                 if test "[$]$1" = yes; then
146                         EL_CONFIG([$1], [$2])
147                         break
148                 fi
149         done
151         AC_MSG_RESULT([$]$1)
154 EL_CHECK_COMPILER_MACROS(CONFIG_OS_BEOS, [BEOS], [__BEOS__])
155 AC_SUBST(CONFIG_OS_BEOS)
157 EL_CHECK_COMPILER_MACROS(CONFIG_OS_RISCOS, [RISCOS], [__riscos__])
158 AC_SUBST(CONFIG_OS_RISCOS)
160 EL_CHECK_COMPILER_MACROS(CONFIG_OS_WIN32, [WIN32], [_WIN32 __WIN32__])
161 AC_SUBST(CONFIG_OS_WIN32)
163 EL_CHECK_COMPILER_MACROS(CONFIG_OS_OS2, [EMX], [__EMX__])
164 AC_SUBST(CONFIG_OS_OS2)
165 test "$CONFIG_OS_OS2" = yes && LDFLAGS=`echo "$LDFLAGS" | sed "s/-Zexe//g"`
167 AC_MSG_CHECKING([for UNIX])
168 dnl FIXME: some depend kind of mechanism
169 if test "$CONFIG_OS_BEOS" = no && \
170    test "$CONFIG_OS_RISCOS" = no && \
171    test "$CONFIG_OS_WIN32" = no && \
172    test "$CONFIG_OS_OS2" = no; then
173         EL_CONFIG(CONFIG_OS_UNIX, [UNIX])
174 else
175         CONFIG_OS_UNIX=no
177 AC_MSG_RESULT($CONFIG_OS_UNIX)
178 AC_SUBST(CONFIG_OS_UNIX)
180 # ===================================================================
181 # Checks for header files.
182 # ===================================================================
184 AC_HEADER_DIRENT
185 AC_HEADER_STDC
186 AC_HEADER_SYS_WAIT
187 AC_HEADER_TIME
189 AC_CHECK_HEADERS(wctype.h)
190 AC_CHECK_HEADERS(fcntl.h limits.h time.h unistd.h)
191 AC_CHECK_HEADERS(sigaction.h)
192 AC_CHECK_HEADERS(arpa/inet.h)
193 AC_CHECK_HEADERS(netinet/in_systm.h netinet/in_system.h netinet/ip.h)
194 AC_CHECK_HEADERS(netdb.h netinet/in.h netinet/in6_var.h)
195 AC_CHECK_HEADERS(ifaddrs.h)
196 AC_CHECK_HEADERS(sys/cygwin.h io.h)
197 AC_CHECK_HEADERS(sys/fmutex.h)
198 AC_CHECK_HEADERS(sys/ioctl.h sys/sockio.h)
199 AC_CHECK_HEADERS(sys/resource.h)
200 AC_CHECK_HEADERS(sys/select.h)
201 AC_CHECK_HEADERS(sys/signal.h)
202 AC_CHECK_HEADERS(sys/socket.h)
203 AC_CHECK_HEADERS(sys/time.h)
204 AC_CHECK_HEADERS(sys/utsname.h)
205 AC_CHECK_HEADERS([net/if.h], [], [],
206 [[#ifdef HAVE_SYS_SOCKET_H
207 # include <sys/socket.h> /* <net/if.h> on Mac OS X 10.5.4 needs this */
208 #endif
210 AC_CHECK_HEADERS(stdint.h inttypes.h)
211 AC_CHECK_HEADERS(locale.h pwd.h)
212 AC_CHECK_HEADERS(termios.h)
215 AC_CHECK_HEADERS(sys/un.h,
216         [CONFIG_INTERLINK=yes
217          EL_CONFIG([CONFIG_INTERLINK], [interlinking])],
218         [CONFIG_INTERLINK=no])
219 AC_SUBST(CONFIG_INTERLINK)
221 # ===================================================================
222 # Checks for typedefs, structures, and compiler characteristics.
223 # ===================================================================
225 AC_STRUCT_TM
226 AC_C_CONST
227 AC_C_INLINE
228 EL_CHECK_CODE(typeof, HAVE_TYPEOF, [], [int a; typeof(a) b;])
230 AC_SYS_LARGEFILE
231 AC_TYPE_SIZE_T
232 AC_TYPE_OFF_T
233 EL_CHECK_TYPE(ssize_t, int)
234 EL_CHECK_SYS_TYPE(long long, HAVE_LONG_LONG, [])
235 EL_CHECK_SYS_TYPE(off_t, HAVE_OFF_T, [])
236 EL_CHECK_INT_TYPE(int32_t, HAVE_INT32_T)
237 EL_CHECK_INT_TYPE(uint32_t, HAVE_UINT32_T)
238 EL_CHECK_INT_TYPE(uint16_t, HAVE_UINT16_T)
240 AC_CHECK_SIZEOF(char, 1)
241 AC_CHECK_SIZEOF(short, 2)
242 AC_CHECK_SIZEOF(int, 4)
243 AC_CHECK_SIZEOF(long, 4)
244 test "x$HAVE_LONG_LONG" = xyes && AC_CHECK_SIZEOF(long long, 8)
245 test "x$HAVE_OFF_T" = xyes && AC_CHECK_SIZEOF(off_t, 4)
247 # Check for variadic macros
248 EL_CHECK_CODE([variadic macros], HAVE_VARIADIC_MACROS,
249                 [#include <stdio.h>
250                  #define a(b,c...) printf(b,##c)],
251                 [a("foo");a("%s","bar");a("%s%s","baz","quux");])
253 # ===================================================================
254 # Check for POSIX <regex.h>
255 # ===================================================================
257 EL_CHECK_SYS_TYPE(regex_t, HAVE_REGEX_H, [#include <regex.h>])
259 # ===================================================================
260 # Checks for library functions.
261 # ===================================================================
263 AC_PROG_GCC_TRADITIONAL
264 AC_FUNC_MEMCMP
265 AC_FUNC_MMAP
266 AC_FUNC_STRFTIME
267 AC_CHECK_FUNCS(atoll gethostbyaddr herror strerror)
268 AC_CHECK_FUNCS(popen uname access chmod alarm timegm mremap)
269 AC_CHECK_FUNCS(strcasecmp strncasecmp strcasestr strstr strchr strrchr)
270 AC_CHECK_FUNCS(memmove bcopy stpcpy strdup index isdigit mempcpy memrchr)
271 AC_CHECK_FUNCS(snprintf vsnprintf asprintf vasprintf)
272 AC_CHECK_FUNCS(getifaddrs getpwnam inet_pton inet_ntop)
273 AC_CHECK_FUNCS(fflush fsync fseeko ftello sigaction)
274 AC_CHECK_FUNCS(gettimeofday clock_gettime)
276 AC_CHECK_FUNCS([cygwin_conv_to_full_win32_path])
278 AC_CHECK_FUNCS(setenv putenv, HAVE_SETENV_OR_PUTENV=yes)
279 AC_CHECK_FUNCS(getuid, HAVE_GETUID=yes)
280 AC_CHECK_FUNCS(geteuid, HAVE_GETEUID=yes)
282 # These aren't probably needed now, as they are commented in links.h.
283 # I've no idea about their historical background, but I keep them here
284 # just in the case they will help later. --pasky
285 AC_CHECK_FUNCS(getpid, HAVE_GETPID=yes)
286 AC_CHECK_FUNCS(setpgid getpgid setpgrp getpgrp)
287 AC_CHECK_FUNCS(raise, HAVE_RAISE=yes)
288 AC_CHECK_FUNCS(kill, HAVE_KILL=yes)
290 if test x"$HAVE_RAISE" = x; then
291         if test x"$HAVE_KILL" = x || test x"$HAVE_GETPID" = x; then
292                 AC_MSG_ERROR([Unable to emulate raise()])
293         fi
296 AC_CACHE_CHECK([for __va_copy],el_cv_HAVE_VA_COPY,[
297 AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <stdarg.h>
298 va_list ap1,ap2;]], [[__va_copy(ap1,ap2);]])],[el_cv_HAVE_VA_COPY=yes],[el_cv_HAVE_VA_COPY=no])])
299 if test x"$el_cv_HAVE_VA_COPY" = x"yes"; then
300         EL_DEFINE(HAVE_VA_COPY, __va_copy)
303 AC_CACHE_CHECK([for sysconf(_SC_PAGE_SIZE)],el_cv_HAVE_SC_PAGE_SIZE,[
304 AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <unistd.h>
305 ]], [[int page_size = sysconf(_SC_PAGE_SIZE);]])],[el_cv_HAVE_SC_PAGE_SIZE=yes],[el_cv_HAVE_SC_PAGE_SIZE=no])])
306 if test x"$el_cv_HAVE_SC_PAGE_SIZE" = x"yes"; then
307         EL_DEFINE(HAVE_SC_PAGE_SIZE, _SC_PAGE_SIZE)
310 AC_CACHE_CHECK([for C99 vsnprintf],el_cv_HAVE_C99_VSNPRINTF,[
311 AC_RUN_IFELSE([AC_LANG_SOURCE([[
312 #include <stdio.h>
313 #include <stdarg.h>
314 #include <stdlib.h>
315 #include <string.h>
317 char buf[8];
319 int bar(char *buf, const char *format, va_list ap)
321        return vsnprintf(buf, 0, format, ap);
324 void foo(const char *format, ...) {
325        va_list ap;
326        int len;
328        va_start(ap, format);
329        len = bar(buf, format, ap);
330        va_end(ap);
331        if ((len != 6) && (len != 7)) exit(1); /* \n -> \r\n */
333        va_start(ap, format);
334        len = bar(buf, format, ap);
335        va_end(ap);
336        if ((len != 6) && (len != 7)) exit(1);
338        if (snprintf(buf, 3, "hello") != 5 || strcmp(buf, "he") != 0) exit(1);
340        exit(0);
342 main() { foo("hello\n"); }
343 ]])],[el_cv_HAVE_C99_VSNPRINTF=yes],[el_cv_HAVE_C99_VSNPRINTF=no],[el_cv_HAVE_C99_VSNPRINTF=cross])])
344 if test x"$el_cv_HAVE_C99_VSNPRINTF" = x"yes"; then
345         EL_DEFINE(HAVE_C99_VSNPRINTF, [C99 compliant vsnprintf()])
348 # OpenSSL and Lua frequently need dlopen
349 AC_CHECK_LIB(dl, dlopen)
351 # ===================================================================
352 # Checks for libraries.
353 # ===================================================================
355 AC_CHECK_FUNC(socket, cf_result=yes, cf_result=no)
356 if test "$cf_result" = no; then
357         AC_CHECK_LIB(socket, socket)
360 AC_CHECK_FUNC(setsockopt, cf_result=yes, cf_result=no)
361 if test "$cf_result" = no; then
362         AC_CHECK_LIB(socket, setsockopt)
365 AC_CHECK_FUNC(gethostbyname, cf_result=yes, cf_result=no)
366 if test "$cf_result" = no; then
367         AC_CHECK_LIB(socket, gethostbyname, cf_result=yes, cf_result=no)
368         if test "$cf_result" = no; then
369                 AC_CHECK_LIB(nsl, gethostbyname)
370         else
371                 test -z "`echo $LIBS | grep -- -lsocket`" && LIBS="$LIBS -lsocket"
372         fi
375 # ===================================================================
376 # Checks for packaging specific options.
377 # ===================================================================
379 AC_ARG_WITH(xterm, [  --with-xterm            how to invoke the X terminal emulator],
380             [ if test "$withval" != no && test "$withval" != yes; then
381                 AC_DEFINE_UNQUOTED(XTERM, "$withval", [How to invoke XTerm])
382               fi ])
384 # ===================================================================
385 # Checks for a libraries, optional even if installed.
386 # ===================================================================
388 dnl EL_CHECK_OPTIONAL_LIBRARY(define, name, header, lib, function)
389 AC_DEFUN([EL_CHECK_OPTIONAL_LIBRARY],
391         AC_MSG_CHECKING([for $2 support])
393         if test "[$]$1" != no; then
394                 AC_MSG_RESULT(yes)
395                 EL_SAVE_FLAGS
396                 if test -n "$withval" && test -d "$withval"; then
397                         # Be a little more careful when setting
398                         # include and lib directories. This way
399                         # $withval will work when includes are
400                         # there but the library is in the common
401                         # /usr/lib ... Does the right thing when
402                         # looking for gc on Debian.
403                         if test -d "$withval/include"; then
404                                 CFLAGS="$CFLAGS -I$withval/include"
405                                 CPPFLAGS="$CPPFLAGS -I$withval/include"
406                         else
407                                 CFLAGS="$CFLAGS -I$withval"
408                                 CPPFLAGS="$CPPFLAGS -I$withval"
409                         fi
410                         if test -d "$withval/lib"; then
411                                 LDFLAGS="$LDFLAGS -L$withval/lib"
412                         fi
413                 fi
415                 AC_CHECK_HEADERS([$3], [$1=yes], [$1=no; break;])
416                 if test "[$]$1" = yes; then
417                         AC_CHECK_LIB([$4], [$5], [$1=yes], [$1=no])
418                 fi
420                 if test "[$]$1" = yes; then
421                         EL_CONFIG([$1], [$2])
422                         LIBS="$LIBS -l$4"
423                 else
424                         if test -n "[$]WITHVAL_$1" &&
425                            test "[$]WITHVAL_$1" != xno; then
426                                 AC_MSG_ERROR([$2 not found])
427                         fi
428                         EL_RESTORE_FLAGS
429                 fi
430         else
431                 AC_MSG_RESULT(disabled)
432         fi
435 dnl EL_CONFIG_OPTIONAL_LIBRARY(define, name, header, lib, function, confhelp)
436 AC_DEFUN([EL_CONFIG_OPTIONAL_LIBRARY],
438         $1=yes
439         WITHVAL_$1=
441         AC_ARG_WITH([$2], [$6], [WITHVAL_$1="[$]withval"])
442         if test "x[$]WITHVAL_$1" = xno; then $1=no; fi
444         EL_CHECK_OPTIONAL_LIBRARY([$1], [$2], [$3], [$4], [$5])
446         EL_LOG_CONFIG([$1], [$2], [])
449 EL_CONFIG_OPTIONAL_LIBRARY(CONFIG_GPM, gpm, gpm.h, gpm, Gpm_Open,
450         [  --without-gpm           disable gpm (mouse) support])
452 # ELinks calls deflateInit2 with windowBits = MAX_WBITS | 32, to
453 # enable automatic decoding of both zlib and gzip headers.  This
454 # feature was added in zlib 1.2.0.2; earlier versions return an error.
455 # The gzclearerr function was also added in zlib 1.2.0.2, so check for
456 # that, even though ELinks does not actually call gzclearerr.
457 EL_CONFIG_OPTIONAL_LIBRARY(CONFIG_GZIP, zlib, zlib.h, z, gzclearerr,
458         [  --without-zlib          disable zlib support])
460 EL_CONFIG_OPTIONAL_LIBRARY(CONFIG_BZIP2, bzlib, bzlib.h, bz2, BZ2_bzReadOpen,
461         [  --without-bzlib         disable bzlib support])
463 EL_CONFIG_OPTIONAL_LIBRARY(CONFIG_IDN, idn, idna.h, idn, stringprep_check_version,
464         [  --without-idn           disable international domain names support])
466 if test "x{with_gc}" != xno; then
467         EL_CONFIG_OPTIONAL_LIBRARY(CONFIG_GC, gc, gc.h, gc, GC_init,
468                 [  --with-gc               enable Boehm's garbage collector])
471 EL_CONFIG_OPTIONAL_LIBRARY(CONFIG_LZMA, lzma, lzma.h, lzma, lzma_code,
472         [  --without-lzma          disable lzma encoding support])
474 # ===================================================================
475 # Check for GSSAPI, optional even if installed.
476 # ===================================================================
478 enable_gssapi="no";
480 AC_ARG_WITH(gssapi, [  --with-gssapi           enable GSSAPI support],
481             [ if test "x$withval" != xno; then enable_gssapi=yes; fi ])
483 AC_MSG_CHECKING([for GSSAPI])
485 if test "$enable_gssapi" = "yes"; then
486         AC_MSG_RESULT(yes)
487         GSSAPI_CFLAGS=`krb5-config --cflags gssapi`
488         GSSAPI_LIBS=`krb5-config --libs gssapi`
489         CFLAGS="$GSSAPI_CFLAGS $CFLAGS"
490         LIBS="$GSSAPI_LIBS $LIBS"
491         EL_CONFIG(CONFIG_GSSAPI, [GssApi])
492 else
493         AC_MSG_RESULT(no)
496 AC_SUBST(CONFIG_GSSAPI)
498 # ===================================================================
499 # Bookmark and XBEL support
500 # ===================================================================
502 EL_SAVE_FLAGS
504 EL_ARG_ENABLE(CONFIG_BOOKMARKS, bookmarks, [Bookmarks],
505               [  --disable-bookmarks     disable bookmark support])
507 # Check whether --enable-xbel or --disable-xbel was given.
508 if test "x${enable_xbel}" != xno; then
509         AC_CHECK_HEADERS(expat.h, HAVE_LIBEXPAT=yes, HAVE_LIBEXPAT=no)
511         if test "$HAVE_LIBEXPAT" = yes; then
512                 AC_CHECK_LIB(expat, XML_ParserCreate, HAVE_LIBEXPAT=yes, HAVE_LIBEXPAT=no)
513                 if test "$HAVE_LIBEXPAT" = yes; then
514                         LIBS="$LIBS -lexpat"
515                 fi
516         fi
520 EL_ARG_DEPEND(CONFIG_XBEL_BOOKMARKS, xbel, [CONFIG_BOOKMARKS:yes HAVE_LIBEXPAT:yes],
521               [XBEL bookmarks],
522               [  --disable-xbel          disable XBEL bookmark support (requires expat)])
524 if test "$CONFIG_XBEL_BOOKMARKS" != yes; then
525         EL_RESTORE_FLAGS
528 # ===================================================================
529 # Checks for BSD sysmouse
530 # ===================================================================
532 HAVE_SYSMOUSE_HEADER="no"
534 # Either of these header files provides the (same) sysmouse interface
535 AC_CHECK_HEADERS(sys/consio.h machine/console.h, [HAVE_SYSMOUSE_HEADER="yes"])
537 # ===================================================================
538 # Checks for OS/2
539 # ===================================================================
541 if test "$CONFIG_OS_OS2" = yes; then
542         EL_CONFIG_OS_OS2
545 # ===================================================================
546 # Checks for Win32
547 # ===================================================================
549 if test "$CONFIG_OS_WIN32" = yes; then
550         EL_CONFIG_OS_WIN32
553 # ===================================================================
554 # Check for SEE (Simple Ecmascript Engine)
555 # ===================================================================
556 AC_ARG_WITH(see, [  --with-see              enable Simple Ecmascript Engine (SEE) support],
557             [ if test "x$withval" != xno; then enable_see=yes; fi ])
559 # The following is probably bad, ugly and so on. Stolen from Guile's (1.4)
560 # SEE_FLAGS but I really don't want to require people to have Guile in order
561 # to compile CVS. Also, the macro seems to be really stupid regarding searching
562 # for Guile in $PATH etc. --pasky
564 CONFIG_ECMASCRIPT_SEE=no
566 if test "$enable_see" = "yes"; then
567         if test -d "$withval"; then
568                 SEE_PATH="$withval:$PATH"
569         else
570                 SEE_PATH="$PATH"
571         fi
573         AC_PATH_PROG(SEE_CONFIG, libsee-config, no, $SEE_PATH)
574         AC_MSG_CHECKING([for SEE (2.0.1131 or later)])
575         if test "$SEE_CONFIG" != no; then
576                 EL_SAVE_FLAGS
577                 SEE_LIBS="`$SEE_CONFIG --libs`"
578                 SEE_CFLAGS="`$SEE_CONFIG --cppflags`"
579                 CPPFLAGS="$SEE_CFLAGS $CPPFLAGS"
580                 LIBS="$SEE_LIBS $LIBS_X"
581                 AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <see/see.h>]], [[#if SEE_VERSION_API_MAJOR < 2
582                         #error SEE too old
583                         #endif
584                 ]])],[cf_result=yes],[cf_result=no])
585                 EL_RESTORE_FLAGS
586                 if test "$cf_result" = yes; then
587                         LIBS="$SEE_LIBS $LIBS"
588                         EL_CONFIG(CONFIG_ECMASCRIPT_SEE, [SEE])
589                         AC_SUBST(SEE_CFLAGS)
590                 fi
591                 AC_MSG_RESULT($cf_result)
592         else
593                 if test -n "$withval" && test "x$withval" != xno; then
594                         AC_MSG_ERROR([SEE not found])
595                 else
596                         AC_MSG_WARN([SEE support disabled])
597                 fi
598         fi
601 # ===================================================================
602 # Check for SpiderMonkey, optional even if installed.
603 # ===================================================================
605 AC_ARG_WITH(spidermonkey, [  --without-spidermonkey  disable SpiderMonkey Mozilla JavaScript engine support],
606             [if test "$withval" = no; then disable_spidermonkey=yes; fi])
607 AC_MSG_CHECKING([for SpiderMonkey (1.5 RC3a or later)])
609 EL_SAVE_FLAGS
610 cf_result=no
612 if test -z "$disable_spidermonkey"; then
613         if test ! -d "$withval"; then
614                 withval="";
615         fi
616         for spidermonkeydir in "$withval" "" /usr /usr/local /opt/spidermonkey /opt/js; do
617                 for spidermonkeyinclude in "/include" "/include/js" "/include/smjs" "/include/mozjs"; do
618                         for spidermonkeylib in js smjs mozjs; do
619                                 if test "$cf_result" = no &&
620                                    test -f "$spidermonkeydir$spidermonkeyinclude/jsapi.h"; then
621                                         SPIDERMONKEY_LIBS="-L$spidermonkeydir/lib -l$spidermonkeylib"
622                                         SPIDERMONKEY_CFLAGS="-I$spidermonkeydir$spidermonkeyinclude"
624                                         LIBS="$SPIDERMONKEY_LIBS $LIBS_X"
625                                         CFLAGS="$CFLAGS_X $SPIDERMONKEY_CFLAGS"
626                                         CPPFLAGS="$CPPFLAGS_X $SPIDERMONKEY_CFLAGS"
628                                         AC_LINK_IFELSE([AC_LANG_PROGRAM([[#define XP_UNIX
629                                                      #include <jsapi.h>]], [[JS_GetReservedSlot(NULL, NULL, 0, NULL)]])],[cf_result=yes],[cf_result=no])
630                                 fi
631                         done
632                 done
633         done
636 AC_MSG_RESULT($cf_result)
637 CONFIG_SPIDERMONKEY="$cf_result"
638 EL_RESTORE_FLAGS
640 if test "x$CONFIG_SPIDERMONKEY" = xyes &&
641    test "x$CONFIG_ECMASCRIPT_SEE" != xyes; then
642         EL_CONFIG(CONFIG_ECMASCRIPT_SMJS, [SpiderMonkey document scripting])
643 else
644         CONFIG_ECMASCRIPT_SMJS=no
647 EL_CONFIG_DEPENDS(CONFIG_ECMASCRIPT, [CONFIG_ECMASCRIPT_SEE CONFIG_ECMASCRIPT_SMJS], [ECMAScript (JavaScript)])
648 AC_SUBST(CONFIG_ECMASCRIPT_SEE)
649 AC_SUBST(CONFIG_ECMASCRIPT_SMJS)
652 # ===================================================================
653 # Optional Spidermonkey-based ECMAScript browser scripting
654 # ===================================================================
656 AC_ARG_ENABLE(sm-scripting,
657               [  --disable-sm-scripting  ECMAScript browser scripting (requires Spidermonkey)],
658               [if test "$enableval" != no; then enableval="yes"; fi
659                CONFIG_SCRIPTING_SPIDERMONKEY="$enableval";])
661 if test "x$CONFIG_SPIDERMONKEY" = xyes &&
662    test "x$CONFIG_SCRIPTING_SPIDERMONKEY" = xyes; then
663         EL_CONFIG(CONFIG_SCRIPTING_SPIDERMONKEY, [SpiderMonkey])
664 else
665         CONFIG_SCRIPTING_SPIDERMONKEY=no
668 if test "x$CONFIG_ECMASCRIPT_SMJS" = xyes ||
669    test "x$CONFIG_SCRIPTING_SPIDERMONKEY" = xyes; then
670         LIBS="$LIBS $SPIDERMONKEY_LIBS"
671         AC_SUBST(SPIDERMONKEY_LIBS)
672         AC_SUBST(SPIDERMONKEY_CFLAGS)
673         AC_SUBST(CONFIG_SPIDERMONKEY)
676 # ===================================================================
677 # Check for Guile, optional even if installed.
678 # ===================================================================
680 enable_guile="no";
682 AC_ARG_WITH(guile, [  --with-guile            enable Guile support],
683             [ if test "x$withval" != xno; then enable_guile=yes; fi ])
685 # The following is probably bad, ugly and so on. Stolen from Guile's (1.4)
686 # GUILE_FLAGS but I really don't want to require people to have Guile in order
687 # to compile CVS. Also, the macro seems to be really stupid regarding searching
688 # for Guile in $PATH etc. --pasky
690 AC_MSG_CHECKING([for Guile])
692 if test "$enable_guile" = "yes"; then
693         AC_MSG_RESULT(yes);
694         ## Based on the GUILE_FLAGS macro.
696         if test -d "$withval"; then
697                 GUILE_PATH="$withval:$PATH"
698         else
699                 GUILE_PATH="$PATH"
700         fi
702         AC_PATH_PROG(GUILE_CONFIG, guile-config, no, $GUILE_PATH)
704         ## First, let's just see if we can find Guile at all.
705         if test "$GUILE_CONFIG" != no; then
706                 cf_result="yes";
708                 GUILE_LIBS="`guile-config link`"
709                 GUILE_CFLAGS="`guile-config compile`"
710                 LIBS="$GUILE_LIBS $LIBS"
711                 EL_CONFIG(CONFIG_SCRIPTING_GUILE, [Guile])
712                 AC_SUBST(GUILE_CFLAGS)
713                 cat <<EOF
714 ***********************************************************************
715 The Guile support is incomplete and not so well integrated to ELinks
716 yet. That means, e.g., that you have no Guile console and there might
717 not be all the necessary hooks. Also, the Guile interface is not too
718 well tested (success stories heartily welcomed!).  See
719 src/scripting/guile/README for further details and hints.
720 ***********************************************************************
722         else
723                 if test -n "$withval" && test "x$withval" != xno; then
724                         AC_MSG_ERROR([Guile not found])
725                 else
726                         AC_MSG_WARN([Guile support disabled])
727                 fi
728         fi
729 else
730         AC_MSG_RESULT(no);
733 # ===================================================================
734 # Check for Perl
735 # ===================================================================
736 enable_perl="no";
738 AC_ARG_WITH(perl, [  --with-perl             enable Perl support],
739             [
740 if test "$withval" = yes; then
741         # FIXME: If withval is a valid directory append it to PATH
742         # so that you can specify one of several perl installations.
743         withval="";
744         enable_perl=yes;
746             ])
748 AC_MSG_CHECKING([for Perl])
750 cf_result=no
752 EL_SAVE_FLAGS
754 if test "$enable_perl" = "yes"; then
755         PERL_LIBS="`perl -MExtUtils::Embed -e ldopts`"
756         PERL_CFLAGS="`perl -MExtUtils::Embed -e ccopts`"
757         LIBS="$PERL_LIBS $LIBS"
758         CFLAGS="$PERL_CFLAGS $CFLAGS"
759         CPPFLAGS="$CPPFLAGS $PERL_CFLAGS"
760         AC_LINK_IFELSE([AC_LANG_PROGRAM([[
761 #include <EXTERN.h>
762 #include <perl.h>
763 #include <perlapi.h>
764 ]], [[PerlInterpreter *my_perl = perl_alloc();]])],[cf_result=yes],[cf_result=no])
767 if test "$cf_result"; then AC_MSG_RESULT($cf_result); fi
769 AC_MSG_CHECKING([whether POPpx works without an n_a variable])
770 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
771 #include <EXTERN.h>
772 #include <perl.h>
773 extern PerlInterpreter *my_perl;
774 ]], [[dSP; (void) POPpx;]])],[AC_MSG_RESULT([yes])
775 AC_DEFINE([CONFIG_PERL_POPPX_WITHOUT_N_A], [1],
776                 [Define if using Perl 5.8.8 or later, where the "POPpx" macro
777 no longer needs an "n_a" variable like it did in 5.8.7])],[AC_MSG_RESULT([no])])
779 if test "$cf_result" != "yes"; then
780         EL_RESTORE_FLAGS
781 else
782         EL_CONFIG(CONFIG_SCRIPTING_PERL, [Perl])
784         CFLAGS="$CFLAGS_X"
785         CPPFLAGS="$CPPFLAGS_X"
786         AC_SUBST(PERL_LIBS)
787         AC_SUBST(PERL_CFLAGS)
790 # ===================================================================
791 # Check for Python
792 # ===================================================================
793 enable_python="no";
795 AC_ARG_WITH(python, [[  --with-python[=DIR]     enable Python support]],
796             [ if test "x$withval" != xno; then enable_python=yes; fi ])
798 EL_SAVE_FLAGS
799 cf_result=no
801 AC_MSG_CHECKING([for Python])
803 if test "$enable_python" = "yes"; then
804         AC_MSG_RESULT(yes);
806         if test -d "$withval"; then
807                 PYTHON_PATH="$withval:$PATH"
808         else
809                 PYTHON_PATH="$PATH"
810         fi
812         AC_PATH_PROG(PYTHON, python, no, $PYTHON_PATH)
814         if test "$PYTHON" != no; then
815                 cf_result="yes";
817                 PYTHON_CFLAGS="`$PYTHON -c 'from distutils import sysconfig; print "-I%s -I%s" % (sysconfig.get_python_inc(), sysconfig.get_python_inc(plat_specific=True))'`"
818                 PYTHON_LIBS="`$PYTHON -c 'from distutils import sysconfig; var = sysconfig.get_config_var; print "%s %s %s -L%s -lpython%s" % (var("LINKFORSHARED"), var("LIBS"), var("SYSLIBS"), var("LIBPL"), var("VERSION"))'`"
819                 LIBS="$PYTHON_LIBS $LIBS"
820                 CPPFLAGS="$CPPFLAGS $PYTHON_CFLAGS"
821                 AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <Python.h>]], [[Py_Initialize();]])],[cf_result=yes],[cf_result=no])
823                 if test "$cf_result" != "yes"; then
824                         EL_RESTORE_FLAGS
825                 else
826                         EL_CONFIG(CONFIG_SCRIPTING_PYTHON, [Python])
827                         AC_SUBST(PYTHON_LIBS)
828                         AC_SUBST(PYTHON_CFLAGS)
829                         CPPFLAGS="$CPPFLAGS_X"
830                         cat <<EOF
831 ***********************************************************************
832 The Python support is incomplete and not so well integrated to ELinks
833 yet. That means, e.g., that you have no Python console and there might
834 not be all the necessary hooks. Also, the Python interface is not too
835 well tested (success stories heartily welcomed!).
836 ***********************************************************************
838                 fi
839         else
840                 if test -n "$withval" && test "x$withval" != xno; then
841                         AC_MSG_ERROR([Python not found])
842                 else
843                         AC_MSG_WARN([Python support disabled])
844                 fi
845         fi
846 else
847         AC_MSG_RESULT(no);
851 # ===================================================================
852 # Check for Lua, optional even if installed.
853 # ===================================================================
855 # Do this the long way, as FreeBSD reportedly needs -L<dir> for
856 # anything other than /usr/lib, and Lua is very often in /usr/local/lib.
858 AC_ARG_WITH(lua, [  --without-lua           disable Lua support],
859             [if test "$withval" = no; then disable_lua=yes; fi])
860 AC_MSG_CHECKING([for Lua])
862 EL_SAVE_FLAGS
863 cf_result=no
865 if test -z "$disable_lua"; then
866         if test ! -d "$withval"; then
867                 withval="";
868         fi
869         for luadir in "$withval" "" /usr /usr/local; do
870                 for suffix in "" 50; do
871                         if test "$cf_result" = no && ( test -f "$luadir/include/lua.h" || \
872                            test -f "$luadir/include/lua$suffix/lua.h" ) ; then
873                                 LUA_LIBS="-L$luadir/lib -llua$suffix -llualib$suffix -lm"
874                                 LUA_CFLAGS="-I$luadir/include -I$luadir/include/lua$suffix"
876                                 LIBS="$LUA_LIBS $LIBS_X"
877                                 CFLAGS="$CFLAGS_X $LUA_CFLAGS"
878                                 CPPFLAGS="$CPPFLAGS_X $LUA_CFLAGS"
880                                 # Check that it is a compatible Lua version
881                                 AC_LINK_IFELSE([AC_LANG_PROGRAM([[      #include <lua.h>
882                                                 #include <lualib.h>]], [[       lua_State *L = lua_open();
883                                                 luaopen_base(L);
884                                                 luaopen_table(L);
885                                                 luaopen_io(L);
886                                                 luaopen_string(L);
887                                                 luaopen_math(L);
888                                                 lua_pushboolean(L, 1);
889                                                 lua_close(L);]])],[cf_result=yes],[cf_result=no])
890                         fi
891                 done
892         done
895 AC_MSG_RESULT($cf_result)
897 if test "$cf_result" != yes; then
898         EL_RESTORE_FLAGS
899 else
900         EL_CONFIG(CONFIG_SCRIPTING_LUA, [Lua])
901         AC_CHECK_HEADERS(lauxlib.h)
903         CFLAGS="$CFLAGS_X"
904         CPPFLAGS="$CPPFLAGS_X"
905         AC_SUBST(LUA_LIBS)
906         AC_SUBST(LUA_CFLAGS)
910 # ===================================================================
911 # Check for Ruby, optional even if installed.
912 # ===================================================================
914 EL_CONFIG_SCRIPTING_RUBY
916 # ===================================================================
917 # Setup global scripting
918 # ===================================================================
920 EL_CONFIG_DEPENDS(CONFIG_SCRIPTING, [CONFIG_SCRIPTING_GUILE CONFIG_SCRIPTING_LUA CONFIG_SCRIPTING_PERL CONFIG_SCRIPTING_PYTHON CONFIG_SCRIPTING_RUBY CONFIG_SCRIPTING_SPIDERMONKEY], [Browser scripting])
921 AC_SUBST(CONFIG_SCRIPTING_GUILE)
922 AC_SUBST(CONFIG_SCRIPTING_LUA)
923 AC_SUBST(CONFIG_SCRIPTING_PERL)
924 AC_SUBST(CONFIG_SCRIPTING_PYTHON)
925 AC_SUBST(CONFIG_SCRIPTING_RUBY)
926 AC_SUBST(CONFIG_SCRIPTING_SPIDERMONKEY)
927 AC_SUBST(CONFIG_SCRIPTING)
930 # ===================================================================
931 # Check for SSL support.
932 # ===================================================================
934 # We by default use OpenSSL, and we always prefer it. However, when GNUTLS
935 # is enabled, we won't try to use OpenSSL anymore.
937 # For wiping SSL hooks..
938 #ifdef CONFIG_SSL
940 disable_openssl=""
941 disable_gnutls=""
942 enable_gnutls=""
944 AC_ARG_WITH(gnutls, [  --without-gnutls        disable GNUTLS SSL support],
945             [if test "$with_gnutls" = no;  then disable_gnutls=yes; fi])
946 AC_ARG_WITH(gnutls, [[  --with-gnutls[=DIR]     enable GNUTLS SSL support]],
947             [if test "$with_gnutls" != no;  then enable_gnutls=yes; fi])
948 gnutls_withval="$withval"
950 if test "$enable_gnutls" = yes; then
951         disable_openssl=yes;
954 AC_ARG_WITH(openssl, [  --without-openssl       disable OpenSSL support],
955             [if test "$with_openssl" = no;  then disable_openssl=yes; fi])
956 AC_ARG_WITH(openssl, [[  --with-openssl[=DIR]    enable OpenSSL support (default)]])
957 openssl_withval="$withval"
959 # ---- OpenSSL
961 AC_MSG_CHECKING([for OpenSSL])
963 EL_SAVE_FLAGS
964 cf_result="no"
966 if test "$disable_openssl" = yes; then
967         cf_result="not used"
968 else
969         for ssldir in "$openssl_withval" "" /usr /usr/local/openssl \
970                          /usr/lib/openssl /usr/local/ssl \
971                          /usr/local/www /usr/lib/ssl /usr/local \
972                          /usr/pkg /opt /opt/openssl; do
973                 if test "$cf_result" = no; then
974                         if test -d "$ssldir"; then
975                                 OPENSSL_CFLAGS="-I$ssldir/include"
976                                 LIBS="-L$ssldir/lib -lssl -lcrypto $LIBS_X"
977                                 CFLAGS="$CFLAGS_X $OPENSSL_CFLAGS"
978                                 CPPFLAGS="$CPPFLAGS_X $OPENSSL_CFLAGS"
979 #                               # FIXME: This created serious portability problems. --pasky
980 #                               if test "$CC" == "gcc"; then
981 #                                       # I'm not sure about compatibility here. --pasky
982 #                                       LIBS="$LIBS -R$ssldir/lib"
983 #                               fi
984                         else
985                                 LIBS="-lssl -lcrypto $LIBS_X"
986                         fi
987                         AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <openssl/ssl.h>]], [[OpenSSL_add_all_algorithms()]])],[cf_result=yes],[cf_result=no])
988                         if test "$cf_result" != yes; then
989                                 AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <openssl/ssl.h>]], [[SSLeay_add_ssl_algorithms()]])],[cf_result=yes],[cf_result=no])
990                         fi
991                 fi
992         done
994         if test "$cf_result" != yes; then
995                 if test -n "$openssl_withval" && test "x$openssl_withval" != xno; then
996                         AC_MSG_ERROR([OpenSSL not found])
997                 fi
998                 EL_RESTORE_FLAGS
999         else
1000                 EL_CONFIG(CONFIG_OPENSSL, [OpenSSL])
1002                 CFLAGS="$CFLAGS_X"
1003                 AC_SUBST(OPENSSL_CFLAGS)
1004         fi
1007 AC_MSG_RESULT($cf_result)
1009 CONFIG_GNUTLS_OPENSSL_COMPAT=no
1010 # ---- GNU TLS
1011 dnl We can't have AC_MSG_CHECKING here, because AC_PATH_PROG prints its own and
1012 dnl it looks ugly then.
1014 if test "$cf_result" = yes; then
1015         cf_result="not used"
1017 else
1018         EL_SAVE_FLAGS
1019         cf_result="no"
1021         if test -z "$disable_gnutls"; then
1022                 # Sure, we maybe _could_ use their macro, but how to ensure
1023                 # that the ./configure script won't fail if the macro won't be
1024                 # found..? :( --pasky
1026                 GNUTLS_PATH="$PATH:/usr/local/gnutls:/opt:/opt/gnutls"
1028                 if test -d "$gnutls_withval"; then
1029                         GNUTLS_PATH="$gnutls_withval:$GNUTLS_PATH"
1030                 fi
1032                 AC_PATH_PROG(LIBGNUTLS_CONFIG, libgnutls-config, no, $GNUTLS_PATH)
1034                 if test "$LIBGNUTLS_CONFIG" = "no" ; then
1035                         cf_result=no
1036                 else
1037                         GNUTLS_CFLAGS=`$LIBGNUTLS_CONFIG --cflags`
1038                         GNUTLS_LIBS=`$LIBGNUTLS_CONFIG --libs`
1040                         LIBS="$GNUTLS_LIBS $LIBS_X"
1041                         CFLAGS="$CFLAGS_X $GNUTLS_CFLAGS"
1042                         CPPFLAGS="$CPPFLAGS_X $GNUTLS_CFLAGS"
1044                         # Verify if it's really usable.  gnutls_session was
1045                         # renamed to gnutls_session_t before GNU TLS 1.2.0
1046                         # (on 2004-06-13); ELinks now requires this.
1047                         AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <gnutls/gnutls.h>]], [[gnutls_session_t dummy;
1048                                      gnutls_check_version(NULL)]])],[cf_result=yes],[cf_result=no])
1049                 fi
1051                 if test "$cf_result" = yes; then
1052                         EL_CONFIG(CONFIG_GNUTLS, [GNUTLS])
1054                         CFLAGS="$CFLAGS_X"
1055                         AC_SUBST(GNUTLS_CFLAGS)
1057                         # GnuTLS 2.2.0 changed libgnutls-openssl from GPLv2+
1058                         # to GPLv3+.  Don't link that with the GPLv2 ELinks.
1059                         # ELinks will use its internal MD5 code instead.
1060                         CONFIG_GNUTLS_OPENSSL_COMPAT=no
1061                 else
1062                         if test -n "$gnutls_withval" && test "x$gnutls_withval" != xno; then
1063                                 AC_MSG_ERROR([GNUTLS (1.2 or later) not found.  ELinks no longer supports GNUTLS 1.1.])
1064                         fi
1065                         EL_RESTORE_FLAGS
1066                 fi
1067         fi
1070 AC_MSG_CHECKING([for GNU TLS (1.2 or later)])
1071 AC_MSG_RESULT($cf_result)
1073 # Final SSL setup
1075 EL_CONFIG_DEPENDS(CONFIG_SSL, [CONFIG_OPENSSL CONFIG_GNUTLS], [SSL])
1076 AC_SUBST(CONFIG_GNUTLS_OPENSSL_COMPAT)
1077 AC_SUBST(CONFIG_OPENSSL)
1078 AC_SUBST(CONFIG_GNUTLS)
1080 #endif
1082 AC_MSG_CHECKING([whether to be or not to be])
1083 AC_MSG_RESULT([needs to be determined experimentally])
1085 # ===================================================================
1086 # Check for IPv6 support and related functions.
1087 # ===================================================================
1089 EL_CHECK_NET_TYPE(struct sockaddr_storage, HAVE_SA_STORAGE, [])
1090 EL_CHECK_NET_TYPE(struct sockaddr_in6, HAVE_SA_IN6, [#include <netinet/in.h>])
1091 EL_CHECK_NET_TYPE(struct addrinfo, HAVE_ADDRINFO, [#include <netdb.h>])
1093 AC_CHECK_FUNC(getaddrinfo, HAVE_GETADDRINFO=yes, HAVE_GETADDRINFO=no)
1094 if test "$HAVE_GETADDRINFO" != yes; then
1095         AC_CHECK_LIB(inet6, getaddrinfo, HAVE_GETADDRINFO=yes, HAVE_GETADDRINFO=no)
1096         if test "$HAVE_GETADDRINFO" = yes; then
1097                 LIBS="$LIBS -linet6"
1098         fi
1102 # ===================================================================
1103 # Checking for X11 (window title restoring).
1104 # ===================================================================
1106 AC_PATH_X
1107 if test x"$no_x" != xyes; then
1108         EL_SAVE_FLAGS
1109         if test -n "$x_includes"; then
1110                 X_CFLAGS="-I$x_includes"
1111                 CPPFLAGS="$CPPLAGS $X_CFLAGS"
1112                 CFLAGS="$CFLAGS $X_CFLAGS"
1113         fi
1114         if test -n "$x_libraries"; then
1115                 LDFLAGS="$LDFLAGS -L$x_libraries"
1116         fi
1117         LIBS="-lX11 $LIBS"
1118         AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <X11/Xlib.h>]], [[XrmInitialize()]])],[cf_result=yes],[cf_result=no])
1119         EL_RESTORE_FLAGS
1120         if test "$cf_result" = yes; then
1121                 if test -n "$x_libraries"; then
1122                         LDFLAGS="$LDFLAGS -L$x_libraries"
1123                 fi
1124                 LIBS="-lX11 $LIBS"
1125                 EL_DEFINE(HAVE_X11, [X11 for restoring window titles])
1126                 AC_SUBST(X_CFLAGS)
1127         fi
1131 # ===================================================================
1132 # Backtraces displaying support.
1133 # ===================================================================
1135 AC_CHECK_HEADERS(execinfo.h, HAVE_EXECINFO=yes, HAVE_EXECINFO=no)
1136 # possible checks for other system-specific means go here
1139 # ===================================================================
1140 # Gettext grey zone. Beware.
1141 # ===================================================================
1143 ALL_LINGUAS="af be bg ca cs da de el es et fi fr gl hr hu id is it lt nl nb pl pt pt_BR ro ru sk sr sv tr uk"
1145 AM_GNU_GETTEXT
1147 dnl AC_MSG_CHECKING([how many characters your English alphabet has])
1148 dnl # f33r d4 l33t... I hope it's portable. :)
1149 dnl cf_result=$((48#z - 48#a + 1));
1150 dnl AC_MSG_RESULT($cf_result)
1153 # ===================================================================
1154 # Compile-time features control
1155 # ===================================================================
1157 EL_ARG_ENABLE(CONFIG_COOKIES, cookies, [Cookies],
1158               [  --disable-cookies       disable cookie support])
1160 EL_ARG_ENABLE(CONFIG_FORMHIST, formhist, [Form history],
1161               [  --disable-formhist      disable form history support])
1163 EL_ARG_ENABLE(CONFIG_GLOBHIST, globhist, [Global history],
1164               [  --disable-globhist      disable global history support])
1167 EL_ARG_ENABLE(CONFIG_MAILCAP, mailcap, [Mailcap],
1168               [  --disable-mailcap       disable mailcap support])
1170 EL_ARG_ENABLE(CONFIG_MIMETYPES, mimetypes, [Mimetypes files],
1171               [  --disable-mimetypes     disable mimetypes files support])
1174 EL_ARG_DEPEND(CONFIG_IPV6, ipv6,
1175               [HAVE_SA_STORAGE:yes HAVE_SA_IN6:yes HAVE_ADDRINFO:yes HAVE_GETADDRINFO:yes],
1176               [IPv6],
1177               [  --disable-ipv6          disable IPv6 support])
1179 EL_ARG_ENABLE(CONFIG_BITTORRENT, bittorrent, [BitTorrent protocol],
1180               [  --enable-bittorrent     enable BitTorrent protocol support])
1182 EL_ARG_ENABLE(CONFIG_DATA, data, [Data protocol],
1183               [  --disable-data          disable data protocol support])
1185 EL_ARG_ENABLE(CONFIG_URI_REWRITE, uri-rewrite, [URI rewriting],
1186               [  --disable-uri-rewrite   disable URI rewrite support])
1188 EL_ARG_DEPEND(CONFIG_CGI, cgi, [HAVE_SETENV_OR_PUTENV:yes], [Local CGI],
1189               [  --enable-cgi            enable local CGI support])
1191 EL_ARG_ENABLE(CONFIG_FINGER, finger, [Finger protocol],
1192               [  --enable-finger         enable finger protocol support])
1194 # ===================================================================
1195 # FSP protocol
1196 # ===================================================================
1197 EL_SAVE_FLAGS
1199 if test "x${enable_fsp}" != xno; then
1200         AC_CHECK_HEADERS(fsplib.h, HAVE_FSPLIB=yes, HAVE_FSPLIB=no)
1202         if test "$HAVE_FSPLIB" = yes; then
1203                 AC_CHECK_LIB(fsplib, fsp_open_session, HAVE_FSPLIB=yes, HAVE_FSPLIB=no)
1204                 if test "$HAVE_FSPLIB" = yes; then
1205                         LIBS="$LIBS -lfsplib"
1206                 else
1207                         AC_CHECK_LIB(fsp, fsp_open_session, HAVE_FSPLIB=yes, HAVE_FSPLIB=no)
1208                         if test "$HAVE_FSPLIB" = yes; then
1209                                 LIBS="$LIBS -lfsp"
1210                         fi
1211                 fi
1212         fi
1215 EL_ARG_DEPEND(CONFIG_FSP, fsp, [HAVE_FSPLIB:yes], [FSP protocol],
1216               [  --enable-fsp            enable FSP protocol support])
1218 if test "x$CONFIG_FSP" = xno; then
1219         EL_RESTORE_FLAGS
1222 EL_ARG_ENABLE(CONFIG_FTP, ftp, [FTP protocol],
1223               [  --disable-ftp           disable ftp protocol support])
1225 EL_ARG_ENABLE(CONFIG_GOPHER, gopher, [Gopher protocol],
1226               [  --enable-gopher         enable gopher protocol support])
1228 EL_ARG_ENABLE(CONFIG_NNTP, nntp, [NNTP protocol],
1229               [  --enable-nntp           enable nntp protocol support])
1231 # ===================================================================
1232 # SMB protocol support.
1233 # ===================================================================
1234 EL_SAVE_FLAGS
1236 if test "x${enable_smb}" != xno; then
1237         AC_CHECK_HEADERS(libsmbclient.h, HAVE_SMBCLIENT=yes, HAVE_SMBCLIENT=no)
1239         if test "$HAVE_SMBCLIENT" = yes; then
1240                 AC_CHECK_LIB(smbclient, smbc_init, HAVE_SMBCLIENT=yes, HAVE_SMBCLIENT=no)
1241                 if test "$HAVE_SMBCLIENT" = yes; then
1242                         LIBS="$LIBS -lsmbclient"
1243                 fi
1244         fi
1247 EL_ARG_DEPEND(CONFIG_SMB, smb, [HAVE_SMBCLIENT:yes], [Samba protocol],
1248               [  --enable-smb            enable Samba protocol support])
1250 if test "x$CONFIG_SMB" = xno; then
1251         EL_RESTORE_FLAGS
1255 EL_ARG_ENABLE(CONFIG_MOUSE, mouse, [Mouse handling],
1256               [  --disable-mouse         disable mouse support])
1258 # GPM mouse is Linux specific, so ...
1259 CONFIG_SYSMOUSE=yes
1260 EL_ARG_DEPEND(CONFIG_SYSMOUSE, sysmouse,
1261               [CONFIG_MOUSE:yes CONFIG_GPM:no HAVE_SYSMOUSE_HEADER:yes],
1262               [BSD sysmouse],
1263               [  --disable-sysmouse      disable BSD sysmouse support])
1265 EL_ARG_ENABLE(CONFIG_88_COLORS, 88-colors, [88 colors],
1266               [  --enable-88-colors      enable 88 color support])
1268 EL_ARG_ENABLE(CONFIG_256_COLORS, 256-colors, [256 colors],
1269               [  --enable-256-colors     enable 256 color support])
1271 EL_ARG_ENABLE(CONFIG_TRUE_COLOR, true-color, [true color],
1272               [  --enable-true-color     enable true color support])
1274 EL_ARG_ENABLE(CONFIG_EXMODE, exmode, [Exmode interface],
1275               [  --enable-exmode         enable exmode (CLI) interface])
1277 EL_ARG_ENABLE(CONFIG_LEDS, leds, [LEDs],
1278               [  --disable-leds          disable LEDs support])
1280 EL_ARG_ENABLE(CONFIG_MARKS, marks, [Marks],
1281               [  --disable-marks         disable document marks support])
1284 EL_ARG_ENABLE(CONFIG_CSS, css, [Cascading Style Sheets],
1285               [  --disable-css           disable Cascading Style Sheet support])
1287 EL_ARG_DEPEND(CONFIG_HTML_HIGHLIGHT, html-highlight, [CONFIG_CSS:yes], [HTML highlighting],
1288               [  --enable-html-highlight HTML highlighting using DOM engine])
1290 # Everything in the tree already uses CONFIG_DOM
1291 # so resolve CONFIG_HTML_HIGHLIGHT to CONFIG_DOM
1292 EL_CONFIG_DEPENDS(CONFIG_DOM, [CONFIG_HTML_HIGHLIGHT], [DOM engine])
1294 EL_ARG_DEPEND(CONFIG_BACKTRACE, backtrace, [HAVE_EXECINFO:yes], [Backtrace],
1295               [  --disable-backtrace     disable backtrace support])
1297 EL_ARG_DEPEND(CONFIG_NO_ROOT_EXEC, no-root, [HAVE_GETUID:yes HAVE_GETEUID:yes], [No root exec],
1298               [  --enable-no-root        enable prevention of usage by root])
1301 EL_ARG_ENABLE(CONFIG_DEBUG, debug, [Debug mode],
1302               [  --enable-debug          enable leak debug and internal error checking])
1304 EL_ARG_DEPEND(CONFIG_FASTMEM, fastmem, [CONFIG_DEBUG:no], [Fast mode],
1305               [  --enable-fastmem        enable direct use of system allocation functions, not usable with --enable-debug])
1307 EL_ARG_ENABLE(CONFIG_OWN_LIBC, own-libc, [Own libc stubs],
1308               [  --enable-own-libc       force use of internal functions instead of those of system libc])
1310 EL_ARG_ENABLE(CONFIG_SMALL, small, [Small binary],
1311               [  --enable-small          reduce binary size as far as possible (but see the bottom of doc/small.txt!)])
1313 EL_ARG_ENABLE(CONFIG_UTF8, utf-8, [UTF-8],
1314               [  --disable-utf-8         disable UTF-8 support])
1317 AC_ARG_ENABLE(weehoofooboomookerchoo,
1318               [
1319     Also check out the features.conf file for more information about features!
1320               ],
1321               [AC_MSG_ERROR(Are you strange, or what?)])
1324 # ===================================================================
1325 # Further LDFLAGS tweaks
1326 # ===================================================================
1328 # == EMX hack
1330 test "$CONFIG_OS_OS2" = yes && LDFLAGS="$LDFLAGS -Zexe"
1331 test "$CONFIG_OS_OS2" = yes && LDFLAGS=`echo "$LDFLAGS" | sed "s/-Zbin-files//g"`
1334 # Check for -rdynamic
1336 # gcc -rdynamic calls ld -export-dynamic, which adds all symbols of
1337 # the executable to its dynamic symbol table.  ELinks uses this for
1338 # two purposes:
1340 # 1. If ELinks detects a bug, it can try to display a backtrace by
1341 #    calling backtrace_symbols_fd() in the GNU libc.  The glibc-2.3.6
1342 #    manual states users of GNU ld must pass -rdynamic to make the
1343 #    symbols available to the program.
1345 # 2. It would eventually be nice to dynamically load shared
1346 #    libraries as plugins (bug 73).  The plugins must be able to
1347 #    call ELinks functions.  This can be implemented either by
1348 #    registering all callable functions in ELinks-specific data
1349 #    structures, or by letting the dynamic linker handle them.
1350 #    The latter way requires something equivalent to -rdynamic.
1352 # Because backtraces are not needed for correct operation, and bug
1353 # 73 is not yet being fixed, the configure script and makefiles
1354 # should not complain to the user if they find that -rdynamic does
1355 # not work.  Besides, it was reported at elinks-users on 2006-09-12
1356 # that gcc-3.4.2 with "ld: Software Generation Utilities - Solaris
1357 # Link Editors: 5.8-1.284" on Sun Solaris 8 Sparc does not support
1358 # -rdynamic but does something equivalent automatically.  (This was
1359 # tested with "nm -D elinks | grep redraw_from_window".)
1361 # With Sun Studio 11 on Solaris 9, we get "cc: Warning: illegal option
1362 # -dynamic"; then, cc proceeds anyway, but the option can prevent the
1363 # linker from finding the libraries listed in -l operands.  So this
1364 # -rdynamic check needs to happen after the libraries have already
1365 # been added to $LDFLAGS.
1366 AC_MSG_CHECKING([for -rdynamic])
1367 LDFLAGS_X="$LDFLAGS"
1368 LDFLAGS="-rdynamic $LDFLAGS"
1369 AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[]])],[have_rdynamic=yes],[have_rdynamic=no])
1370 test "$have_rdynamic" = no && LDFLAGS="$LDFLAGS_X"
1371 AC_MSG_RESULT($have_rdynamic)
1373 # ===================================================================
1374 # Export directory paths
1375 # ===================================================================
1377 # Set up the ``entry points'' if they were not supplied by builder
1378 test "x$prefix" = xNONE && prefix=$ac_default_prefix
1379 test "x$exec_prefix" = xNONE && exec_prefix=${prefix}
1381 # Create CONFDIR #define for config.h
1383 # XXX: This may be dependent on a particular version of autoconf. Whatever,
1384 # it's autoconf fault to force us to do such hacks ;p.
1385 if test x"$sysconfdir" = x"\${prefix}/etc"; then
1386   # sysconfdir is set to its default value... fine, let's append /elinks/
1387   # XXX: We can't modify listing of the default in ./configure --help :-(
1388   sysconfdir_n=`eval echo "$sysconfdir"`
1389   sysconfdir=$sysconfdir_n
1390   (echo "$sysconfdir" | grep elinks >/dev/null 2>/dev/null) || \
1391         sysconfdir="$sysconfdir/elinks"
1394 CONFDIR=$sysconfdir
1395 AC_DEFINE_UNQUOTED(CONFDIR, "$CONFDIR", [Directory containing default config])
1396 AC_SUBST(CONFDIR)
1398 # Create LOCALEDIR #define for config.h
1399 LOCALEDIR=`eval echo "$datadir/locale"`
1400 while echo "$LOCALEDIR" | grep "\\$"
1402         LOCALEDIR=`eval echo "$LOCALEDIR"`
1403 done > /dev/null 2> /dev/null
1404 AC_DEFINE_UNQUOTED(LOCALEDIR, "$LOCALEDIR", [Directory containing locales])
1405 AC_SUBST(LOCALEDIR)
1407 # Create LIBDIR #define for config.h
1408 LIBDIR=`eval echo "$libdir"`
1409 AC_DEFINE_UNQUOTED(LIBDIR, "$LIBDIR", [Directory containing libraries])
1410 AC_SUBST(LIBDIR)
1412 EL_LOG_CONFIG(CONFDIR, [System configuration directory], [])
1413 EL_LOG_CONFIG(LOCALEDIR, [Locale catalogs directory], [])
1416 AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <stddef.h>
1417 ]], [[#if !defined(__TINYC__) || !defined(alloca)
1418         #error not tcc
1419         #endif ]])],[cf_result=yes],[cf_result=no])
1421 if test "$cf_result" = "yes"; then
1422         AC_DEFINE([HAVE_ALLOCA])
1423         AC_DEFINE([_ALLOCA_H], [1], [Define as 1 if you are using Tiny C Compiler
1424                 with the GNU C Library, and <alloca.h> of glibc would otherwise
1425                 override the alloca macro defined in <stddef.h> of TCC.
1426                 If <alloca.h> of glibc sees the _ALLOCA_H macro, it assumes
1427                 it has already been included, and does not redefine alloca.
1428                 This might not work in future glibc versions though, because
1429                 the names of the #include guard macros are not documented.
1430                 The incompatibility has been reported to the tinycc-devel
1431                 mailing list on 2008-07-14.  If a future version of TCC provides
1432                 an <alloca.h> of its own, this hack won't be needed.])
1434 # ===================================================================
1435 # A little fine tuning of gcc specific options (continued)
1436 # ===================================================================
1438 if test "x$ac_cv_c_compiler_gnu" = "xyes"; then
1439   if test "$CONFIG_DEBUG" = "yes"; then
1440     # We want to see all warnings and live with none (in debug mode).
1441     CFLAGS="$CFLAGS -Werror"
1442   fi
1444   case "`$CC -dumpversion`" in
1445     3.0|3.1|3.2)
1446       # These should be ok using -Werror
1447       ;;
1448     3.*)
1449       # If gcc is version 3.3 (or higher?) it emits lots of false positive
1450       # "dereferencing type-punned pointer will break strict-aliasing rules"
1451       # warnings. Disable them by not doing any strict-aliasing. The
1452       # alternative is just too ugly. Thanks gcc guys!! ;)
1453       CFLAGS="$CFLAGS -fno-strict-aliasing"
1454       ;;
1455     4.*)
1456       # Do not show warnings related to (char * | unsigned char *) type
1457       # difference.
1458       CFLAGS="$CFLAGS -fno-strict-aliasing -Wno-pointer-sign"
1459       ;;
1460     *)
1461       # These should be ok using -Werror
1462       ;;
1463   esac
1465   # GCC 4.2.1 warns if we use the address of an object in Boolean context:
1466   # warning: the address of `builtin_modules' will always evaluate as `true'
1467   # This hits the object_lock and foreach_module macros in particular.
1468   # It would be okay to put something in the macros to avoid the warning,
1469   # but currently this seems to require defining parallel macros that skip
1470   # the NULL check, and that's too ugly.  So we instead disable the warning.
1471   # GCC 4.2.1 needs -Wno-address, but GCC 4.2 snapshots need -Wno-always-true.
1472   # GCC 4.1.3 recognizes neither and exits with code 1 if they are given.
1473   for warning_flag in -Wno-address -Wno-always-true; do
1474     AC_MSG_CHECKING([whether $CC accepts $warning_flag])
1475     EL_SAVE_FLAGS
1476     CFLAGS="$CFLAGS $warning_flag"
1477     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
1478       [AC_MSG_RESULT([yes])
1479        break],
1480       [AC_MSG_RESULT([no])])
1481     EL_RESTORE_FLAGS
1482   done
1484   # Bug 1012: Some parts of ELinks do arithmetic with signed integers
1485   # in such a way that an overflow is possible.  GCC 4.2.1 warns
1486   # "warning: assuming signed overflow does not occur when assuming
1487   # that (X + c) > X is always true", which may be an incorrect
1488   # optimization (although allowed by the standard), and breaks the
1489   # build with -Werror.
1490   #
1491   # All of the following tests included -S -Wall -Wextra:
1492   #
1493   # GCC: (GNU) 4.0.4 20060507 (prerelease) (Debian 4.0.3-3)
1494   # * gcc-4.0 -O0: OK, compares the values
1495   # * gcc-4.0 -O2: assumes no overflow, does not warn
1496   # * gcc-4.0 -O0 -fno-strict-overflow: unrecognized command line option
1497   # * gcc-4.0 -O0 -fwrapv: OK, compares the values
1498   # * gcc-4.0 -O2 -fwrapv: OK, compares the values
1499   # * gcc-4.0 -O0 -ftrapv: OK, calls __addvsi3
1500   # * gcc-4.0 -O2 -ftrapv: assumes no overflow, does not warn
1501   # * gcc-4.0 -O0 -fwrapv -ftrapv: OK, calls __addvsi3
1502   # * gcc-4.0 -O2 -fwrapv -ftrapv: compares the values
1503   #
1504   # GCC: (GNU) 4.1.3 20070812 (prerelease) (Debian 4.1.2-15)
1505   # * gcc-4.1 -O0: assumes no overflow, does not warn
1506   # * gcc-4.1 -O2: assumes no overflow, does not warn
1507   # * gcc-4.1 -O0 -fno-strict-overflow: unrecognized command line option
1508   # * gcc-4.1 -O0 -fwrapv: OK, compares the values
1509   # * gcc-4.1 -O2 -fwrapv: OK, compares the values
1510   # * gcc-4.1 -O0 -ftrapv: OK, calls __addvsi3
1511   # * gcc-4.1 -O2 -ftrapv: compares the values
1512   # * gcc-4.1 -O0 -fwrapv -ftrapv: OK, calls __addvsi3
1513   # * gcc-4.1 -O2 -fwrapv -ftrapv: compares the values
1514   #
1515   # GCC: (GNU) 4.2.1 (Debian 4.2.1-5)
1516   # * gcc-4.2 -O0: OK, compares the values
1517   # * gcc-4.2 -O2: assumes no overflow, warns about it
1518   # * gcc-4.2 -O0 -fno-strict-overflow: OK, compares the values
1519   # * gcc-4.2 -O2 -fno-strict-overflow: OK, compares the values
1520   # * gcc-4.2 -O0 -fwrapv: OK, compares the values
1521   # * gcc-4.2 -O2 -fwrapv: OK, compares the values
1522   # * gcc-4.2 -O0 -ftrapv: OK, calls __addvsi3
1523   # * gcc-4.2 -O2 -ftrapv: compares the values
1524   # * gcc-4.2 -O0 -fwrapv -ftrapv: OK, calls __addvsi3
1525   # * gcc-4.2 -O2 -fwrapv -ftrapv: compares the values
1526   #
1527   # Apparently, -ftrapv does not work reliably at all.
1528   for overflow_flag in -fno-strict-overflow -fwrapv; do
1529     AC_MSG_CHECKING([whether $CC accepts $overflow_flag])
1530     EL_SAVE_FLAGS
1531     CFLAGS="$CFLAGS $overflow_flag"
1532     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
1533       [AC_MSG_RESULT([yes])
1534        break],
1535       [AC_MSG_RESULT([no])])
1536     EL_RESTORE_FLAGS
1537   done
1540 EL_LOG_CONFIG(CFLAGS, [Compiler flags (CFLAGS)], [])
1541 EL_LOG_CONFIG(CPPFLAGS, [Preprocessor flags (CPPFLAGS)], [])
1542 EL_LOG_CONFIG(LDFLAGS, [Linker flags (LDFLAGS)], [])
1543 EL_LOG_CONFIG(LIBS, [Library flags (LIBS)], [])
1545 # ===================================================================
1546 # Colored make output
1547 # ===================================================================
1549 if test $(`which tput` colors) -ge 4; then
1550         MAKE_COLOR=1
1551         AC_SUBST(MAKE_COLOR)
1554 # ===================================================================
1555 # Generated files
1556 # ===================================================================
1558 AC_CONFIG_FILES([ \
1559  Makefile.config \
1560  contrib/elinks.spec \
1561  contrib/lua/hooks.lua \
1562  contrib/conv/w3m2links.awk \
1563  doc/Doxyfile \
1564  doc/man/man1/elinks.1 \
1565  src/intl/gettext/ref-add.sed \
1566  src/intl/gettext/ref-del.sed
1568 AC_OUTPUT
1570 abs_srcdir="$(cd "$srcdir" && pwd)"
1571 # builddir is always absolute!
1572 if test "$abs_srcdir" != "$builddir"; then
1573         # Bootstrap the Makefile creation
1574         echo "include $abs_srcdir/Makefile" > "$builddir/Makefile"
1575         "$MAKE" "SRC=$abs_srcdir" init
1577         # Make cg-status ignore this build directory
1578         echo "*" > "$builddir/.gitignore"
1581 # ===================================================================
1582 # Configuration summary
1583 # ===================================================================
1585 AC_MSG_RESULT(The following feature summary has been saved to features.log)
1586 cat features.log