]> sjero.net Git - wget/blob - configure.in
[svn] Don't cast return type of malloc/realloc. Assume ANSI C signal handlers.
[wget] / configure.in
1 dnl Template file for GNU Autoconf
2 dnl Copyright (C) 1995, 1996, 1997, 2001 Free Software Foundation, Inc.
3
4 dnl This program is free software; you can redistribute it and/or modify
5 dnl it under the terms of the GNU General Public License as published by
6 dnl the Free Software Foundation; either version 2 of the License, or
7 dnl (at your option) any later version.
8
9 dnl This program is distributed in the hope that it will be useful,
10 dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
11 dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 dnl GNU General Public License for more details.
13
14 dnl You should have received a copy of the GNU General Public License
15 dnl along with this program; if not, write to the Free Software
16 dnl Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
17
18 dnl In addition, as a special exception, the Free Software Foundation
19 dnl gives permission to link the code of its release of Wget with the
20 dnl OpenSSL project's "OpenSSL" library (or with modified versions of it
21 dnl that use the same license as the "OpenSSL" library), and distribute
22 dnl the linked executables.  You must obey the GNU General Public License
23 dnl in all respects for all of the code used other than "OpenSSL".  If you
24 dnl modify this file, you may extend this exception to your version of the
25 dnl file, but you are not obligated to do so.  If you do not wish to do
26 dnl so, delete this exception statement from your version.
27
28 dnl
29 dnl Process this file with autoconf to produce a configure script.
30 dnl
31
32 AC_INIT([src/version.c])
33 AC_PREREQ(2.57)
34
35 dnl
36 dnl What version of Wget are we building?
37 dnl
38 VERSION=`sed -e 's/^.*"\(.*\)";$/\1/' ${srcdir}/src/version.c`
39 AC_MSG_NOTICE([configuring for GNU Wget $VERSION])
40 AC_SUBST(VERSION)
41 PACKAGE=wget
42 AC_SUBST(PACKAGE)
43
44 dnl
45 dnl Get cannonical host
46 dnl
47 AC_CANONICAL_HOST
48 AC_DEFINE_UNQUOTED([OS_TYPE], "$host_os",
49                    [Define to be the name of the operating system.])
50
51 dnl
52 dnl Process features.
53 dnl
54
55 AC_ARG_WITH(ssl,
56 [[  --with-ssl[=SSL-ROOT]   link with SSL support [default=auto]
57   --without-ssl           disable SSL autodetection]])
58
59 AC_ARG_ENABLE(opie,
60 [  --disable-opie          disable support for opie or s/key FTP login],
61 ENABLE_OPIE=$enableval, ENABLE_OPIE=yes)
62 test x"${ENABLE_OPIE}" = xyes && AC_DEFINE([ENABLE_OPIE], 1,
63    [Define if you want the Opie support for FTP compiled in.])
64
65 AC_ARG_ENABLE(digest,
66 [  --disable-digest        disable support for HTTP digest authorization],
67 ENABLE_DIGEST=$enableval, ENABLE_DIGEST=yes)
68 test x"${ENABLE_DIGEST}" = xyes && AC_DEFINE([ENABLE_DIGEST], 1,
69    [Define if you want the HTTP Digest Authorization compiled in.])
70
71 AC_ARG_ENABLE(ntlm,
72 [  --disable-ntlm          disable support for NTLM authorization],
73 [ENABLE_NTLM=$enableval], [ENABLE_NTLM=auto])
74
75 AC_ARG_ENABLE(debug,
76 [  --disable-debug         disable support for debugging output],
77 ENABLE_DEBUG=$enableval, ENABLE_DEBUG=yes)
78 test x"${ENABLE_DEBUG}" = xyes && AC_DEFINE([ENABLE_DEBUG], 1,
79    [Define if you want the debug output support compiled in.])
80
81 wget_need_md5=no
82
83 case "${ENABLE_OPIE}${ENABLE_DIGEST}" in
84 *yes*)
85         wget_need_md5=yes
86 esac
87 if test x"$ENABLE_OPIE" = xyes; then
88   OPIE_OBJ='ftp-opie.o'
89 fi
90 AC_SUBST(OPIE_OBJ)
91
92 dnl
93 dnl Whether make sets $(MAKE)...
94 dnl
95 AC_PROG_MAKE_SET
96
97 dnl
98 dnl Find a good install
99 dnl
100 AC_PROG_INSTALL
101
102 dnl
103 dnl Find the compiler
104 dnl
105
106 dnl We want these before the checks, so the checks can modify their values.
107 test -z "$CFLAGS"  && CFLAGS= auto_cflags=1
108 test -z "$CC" && cc_specified=yes
109
110 AC_PROG_CC
111 AC_AIX
112
113 dnl Turn on optimization by default.  Specifically:
114 dnl
115 dnl if the user hasn't specified CFLAGS, then
116 dnl   if compiler is gcc, then
117 dnl     use -O2 and some warning flags
118 dnl   else
119 dnl     use os-specific flags or -O
120 if test -n "$auto_cflags"; then
121   if test -n "$GCC"; then
122     CFLAGS="$CFLAGS -O2 -Wall -Wno-implicit"
123   else
124     case "$host_os" in
125       *hpux*)  CFLAGS="$CFLAGS +O3"                      ;;
126       *ultrix* | *osf*) CFLAGS="$CFLAGS -O -Olimit 2000" ;;
127       *)       CFLAGS="$CFLAGS -O" ;;
128     esac
129   fi
130 fi
131
132 dnl
133 dnl Configure our included libtool and make sure it's regenerated when needed
134 dnl
135 AC_PROG_LIBTOOL
136 AC_SUBST(LIBTOOL_DEPS)
137
138 dnl
139 dnl In case of {cyg,gnu}win32.  Should be a _target_ test.
140 dnl Might also be erelevant for DJGPP.
141 dnl
142 case "$host_os" in
143   *win32) exeext='.exe';;
144   *) exeext='';;
145 esac
146 AC_SUBST(exeext)
147
148 dnl
149 dnl Checks for basic compiler characteristics.
150 dnl
151 AC_C_CONST
152 AC_C_INLINE
153 AC_C_VOLATILE
154 AC_C_BIGENDIAN
155 AC_C_PROTOTYPES
156
157 dnl
158 dnl Checks for header files that might be missing.
159 dnl
160
161 dnl Check for basic headers, even those we assume the presence of.
162 dnl This is because Autoconf default includes check for STDC_HEADERS,
163 dnl HAVE_SYS_TYPES_H, etc. before including them.
164 AC_HEADER_STDC
165 AC_CHECK_HEADERS(sys/types.h sys/stat.h)
166 dnl Now check for the others.
167 AC_CHECK_HEADERS(string.h strings.h limits.h unistd.h sys/time.h)
168 AC_CHECK_HEADERS(termios.h sys/ioctl.h sys/select.h utime.h sys/utime.h)
169 AC_CHECK_HEADERS(stdint.h inttypes.h signal.h setjmp.h pwd.h)
170 AC_HEADER_TIME
171
172 dnl
173 dnl Check integral type sizes.
174 dnl
175 AC_CHECK_SIZEOF(short)
176 AC_CHECK_SIZEOF(int)
177 AC_CHECK_SIZEOF(long)
178 AC_CHECK_SIZEOF(long long)
179
180 dnl
181 dnl Check for large file support.  This check needs to come fairly
182 dnl early because it could (in principle) affect whether functions and
183 dnl headers are available, whether they work, etc.
184 dnl
185 AC_SYS_LARGEFILE
186 AC_CHECK_SIZEOF(off_t)
187
188 dnl
189 dnl Checks for non-universal or system-specific types.
190 dnl
191 AC_TYPE_SIZE_T
192 AC_TYPE_PID_T
193 AC_CHECK_TYPES(uint32_t)
194 AC_CHECK_TYPES(sig_atomic_t, [], [], [
195 #include <stdio.h>
196 #include <sys/types.h>
197 #if HAVE_INTTYPES_H
198 # include <inttypes.h>
199 #endif
200 #ifdef HAVE_SIGNAL_H
201 # include <signal.h>
202 #endif
203 ])
204
205 dnl
206 dnl Checks for library functions.
207 dnl
208 AC_FUNC_ALLOCA
209 AC_FUNC_MMAP
210 AC_FUNC_FSEEKO
211 AC_CHECK_FUNCS(strdup strstr strcasecmp strncasecmp strpbrk memmove)
212 AC_CHECK_FUNCS(gettimeofday mktime strptime strerror snprintf vsnprintf)
213 AC_CHECK_FUNCS(usleep select ftello sigblock sigsetjmp signal)
214 AC_CHECK_FUNCS(symlink access isatty)
215
216 dnl
217 dnl Call Wget's local macros defined in aclocal.
218 dnl
219 WGET_STRUCT_UTIMBUF
220 WGET_SOCKLEN_T
221 WGET_FNMATCH
222 WGET_NANOSLEEP
223 WGET_POSIX_CLOCK
224 WGET_NSL_SOCKET
225
226 dnl
227 dnl Check if we need to compile in getopt.c.
228 dnl
229 AC_CHECK_FUNC(getopt_long, [], [
230   GETOPT_OBJ='getopt.o'
231 ])
232 AC_SUBST(GETOPT_OBJ)
233
234 dnl
235 dnl Checks for libraries.
236 dnl
237
238 dnl $with_ssl can be one of:
239 dnl  - empty string or "auto", meaning autodetect SSL and use it if found.
240 dnl  - "yes", meaning link with SSL or bail out.
241 dnl  - "no", meaning don't link with SSL.
242 dnl  - anything else, meaning use that as the SSL root, and bail out
243 dnl    if it fails.
244
245 if test x"$with_ssl" = x; then
246   dnl Canonicalize unspecified with-ssl setting to "auto".  This
247   dnl implements the "auto-detect by default" feature.  If you want to
248   dnl change this to "ignore SSL by default", change "auto" to "no".
249   with_ssl=auto
250 fi
251
252 dnl Detection of OpenSSL is much hairier than the detection of other
253 dnl libraries because OpenSSL can be compiled as a third-party
254 dnl library, which means it will not be found without additional
255 dnl linker magic.  It would be really nice to rework this check into
256 dnl an AC_DEFUN so that we can reuse it for other third-party
257 dnl libraries.
258
259 if test x"$with_ssl" != x"no"; then
260
261   wget_force_ssl=no
262   if test x"$with_ssl" = x"yes"; then
263     wget_force_ssl=yes
264   fi
265
266   if test x"$with_ssl" = x"yes" || test x"$with_ssl" = x"auto"; then
267     dnl OpenSSL's root was not specified, so we have to guess.  First
268     dnl try the system default location, then "/usr/local/ssl" (where
269     dnl OpenSSL installs by default), then "/usr/local" (traditional
270     dnl choice for installation root), then "/opt".
271     ssl_all_roots="system-default /usr/local/ssl /usr/local /opt"
272   else
273     dnl Root has been specified by the user.
274     ssl_all_roots=$with_ssl
275     wget_force_ssl=yes
276   fi
277
278   wget_save_CC=$CC
279   wget_save_LIBS=$LIBS
280   wget_save_LDFLAGS=$LDFLAGS
281   wget_save_CPPFLAGS=$CPPFLAGS
282
283   dnl Use libtool for OpenSSL tests so we can specify "-R<rpath>"
284   dnl without having to know how the linker handles it.
285   CC="$SHELL ./libtool $CC"
286
287   dnl Unfortunately, as of this writing (OpenSSL 0.9.6), the libcrypto
288   dnl shared library doesn't record its dependency on libdl, so we
289   dnl need to check for it ourselves so we won't fail to link due to a
290   dnl lack of -ldl.  Most OSes use dlopen(), but HP-UX uses
291   dnl shl_load().
292   AC_CHECK_LIB(dl,dlopen)
293   AC_CHECK_LIB(dl,shl_load)
294
295   ssl_success=no
296
297   dnl Now try to find SSL libraries in each of the likely SSL roots.
298   for ssl_root in $ssl_all_roots
299   do
300     if test x"$ssl_root" = x"system-default"; then
301       dnl Try the default include and library locations.
302       SSL_INCLUDES=
303     else
304       dnl Try this specific root.
305       SSL_INCLUDES=-I$ssl_root/include
306       dnl It's OK to use -R directly because libtool will
307       dnl interpret it for us.
308       LDFLAGS="-L$ssl_root/lib -R$ssl_root/lib $wget_save_LDFLAGS"
309     fi
310
311     AC_MSG_NOTICE([looking for SSL libraries in $ssl_root])
312
313     dnl Check whether the compiler can find the include files.  On
314     dnl some systems Gcc finds libraries in /usr/local/lib, but fails
315     dnl to find the includes in /usr/local/include.
316
317     ssl_found_includes=no
318     CPPFLAGS="$SSL_INCLUDES $wget_save_CPPFLAGS"
319
320     dnl Check for all the OpenSSL includes that Wget actually uses.
321     dnl This will prune both invalid installations and ancient
322     dnl versions of OpenSSL that we can't use.
323     AC_MSG_CHECKING([for includes])
324     AC_COMPILE_IFELSE([
325 #include <openssl/ssl.h>
326 #include <openssl/x509.h>
327 #include <openssl/err.h>
328 #include <openssl/rand.h>
329 #include <openssl/des.h>
330 #include <openssl/md4.h>
331 #include <openssl/md5.h>
332     ], [
333       AC_MSG_RESULT(found)
334       ssl_found_includes=yes
335     ], [
336       AC_MSG_RESULT([not found])
337     ])
338
339     if test x"$ssl_found_includes" = xno; then
340       continue
341     fi
342
343     ssl_link_failure=no
344
345     dnl Make sure that the checks don't run afoul of the cache.  It
346     dnl would be nicer to temporarily turn off the cache, but
347     dnl apparently Autoconf doesn't allow that.
348
349     unset ac_cv_lib_crypto_RSA_new
350     unset ac_cv_lib_ssl_SSL_new
351
352     dnl These checks need to be in this order, or you'll get a link
353     dnl failure if you use a static libcrypto.a and libssl.a rather
354     dnl than shared libraries.
355
356     AC_CHECK_LIB(crypto, RSA_new, , ssl_link_failure=yes)
357     AC_CHECK_LIB(ssl, SSL_new, , ssl_link_failure=yes)
358
359     if test x"$ssl_link_failure" = xyes; then
360       dnl One or both libs failed to link.
361       continue
362     fi
363
364     dnl The libraries link.  But we still need to check if the program
365     dnl linked with those libraries under these settings with run.  On
366     dnl some systems (Solaris), Gcc adds -L/usr/local/lib to the
367     dnl linking line, but fails to add -R/usr/local/lib, thus creating
368     dnl executables that link, but fail to run.
369
370     dnl If we are cross-compiling, just assume that working linkage
371     dnl implies working executable.
372
373     ssl_run_failure=no
374
375     AC_MSG_CHECKING([whether SSL libs are resolved at runtime])
376     AC_TRY_RUN([
377 int RSA_new();
378 int SSL_new();
379 main(){return 0;}
380 ],
381       AC_MSG_RESULT(yes),
382       AC_MSG_RESULT(no); ssl_run_failure=yes,
383       AC_MSG_RESULT(cross)
384     )
385
386     if test x"$ssl_run_failure" = xno; then
387       ssl_success=yes
388       break
389     fi
390   done
391
392   if test x"$ssl_success" = xyes; then
393     AC_MSG_NOTICE([compiling in support for SSL in $ssl_root])
394     AC_DEFINE([HAVE_SSL], 1,
395               [Define if SSL support should be compiled in.])
396     AC_SUBST(SSL_INCLUDES)
397     SSL_OBJ='openssl.o'
398     AC_SUBST(SSL_OBJ)
399   else
400     LDFLAGS=$wget_save_LDFLAGS
401     LIBS=$wget_save_LIBS
402
403     dnl If linking with SSL was forced rather than auto-detected, then
404     dnl bail out if SSL failed.
405     if test x"$wget_force_ssl" = x"yes"; then
406       AC_MSG_ERROR([failed to find OpenSSL libraries], 2)
407     fi
408   fi
409
410   dnl Restore the compiler setting.
411   CC=$wget_save_CC
412
413   dnl Restore the CPPFLAGS.  Do this regardless of whether linking
414   dnl with SSL succeeded -- SSL includes will be handled using
415   dnl @SSL_INCLUDES@.
416   CPPFLAGS=$wget_save_CPPFLAGS
417 fi
418
419 dnl Enable NTLM if requested and if SSL is available.
420 NTLM_OBJ=''
421 if test x"$ssl_success" = xyes
422 then
423   if test x"$ENABLE_NTLM" != xno
424   then
425     AC_DEFINE([ENABLE_NTLM], 1,
426      [Define if you want the NTLM authorization support compiled in.])
427     NTLM_OBJ='http-ntlm.o'
428   fi
429 else
430   dnl If SSL is unavailable and the user explicitly requested NTLM,
431   dnl abort.
432   if test x"$ENABLE_NTLM" = xyes
433   then
434     AC_MSG_ERROR([NTLM authorization requested and OpenSSL not found; aborting])
435   fi
436 fi
437 AC_SUBST(NTLM_OBJ)
438
439 dnl
440 dnl Find an md5 implementation.
441 dnl
442
443 if test x"$wget_need_md5" = xyes
444 then
445   dnl This should be moved to an AC_DEFUN, but I'm not sure how to
446   dnl manipulate MD5_OBJ from the defun.
447
448   MD5_OBJ='gen-md5.o'
449   found_md5=no
450
451   dnl Check for the system MD5 library on Solaris.  We don't check for
452   dnl something simple like "MD5Update" because there are a number of
453   dnl MD5 implementations that use that name.  md5_calc is, hopefully,
454   dnl specific to the Solaris MD5 library.
455   if test x"$found_md5" = xno; then
456     AC_CHECK_LIB(md5, md5_calc, [
457       dnl Some installations have bogus <md5.h> in the compiler's
458       dnl include path, making the system md5 library useless.
459       AC_MSG_CHECKING([for working md5.h])
460       AC_COMPILE_IFELSE([#include <md5.h>
461                         ], [
462         AC_MSG_RESULT(yes)
463         AC_DEFINE([HAVE_SOLARIS_MD5], 1, [Define to use Solaris MD5.])
464         LIBS="-lmd5 $LIBS"
465         found_md5=yes
466         AC_MSG_NOTICE([using the Solaris MD5 implementation])
467       ], [AC_MSG_RESULT(no)])
468     ])
469   fi
470
471   dnl Then see if we're linking OpenSSL anyway; if yes, use its md5
472   dnl implementation.
473   if test x"$found_md5" = xno; then
474     if test x"$ssl_success" = xyes; then
475       AC_DEFINE([HAVE_OPENSSL_MD5], 1, [Define to use OpenSSL MD5.])
476       found_md5=yes
477       AC_MSG_NOTICE([using the OpenSSL MD5 implementation])
478     fi
479   fi
480
481   dnl If none of the above worked, use the one we ship with Wget.
482   if test x"$found_md5" = xno; then
483     AC_DEFINE([HAVE_BUILTIN_MD5], 1, [Define to use built-in MD5.])
484     MD5_OBJ="$MD5_OBJ gnu-md5.o"
485     found_md5=yes
486     AC_MSG_NOTICE([using the GNU MD5 implementation])
487   fi
488 fi
489 AC_DEFINE([HAVE_MD5], 1, [Define if we're compiling support for MD5.])
490 AC_SUBST(MD5_OBJ)
491
492 dnl **********************************************************************
493 dnl Checks for IPv6
494 dnl **********************************************************************
495
496 dnl
497 dnl If --enable-ipv6 is specified, we try to use IPv6 (as long as
498 dnl getaddrinfo is also present).  If --disable-ipv6 is specified, we
499 dnl don't use IPv6 or getaddrinfo.  Otherwise we detect IPv6 and use
500 dnl it where available.
501 dnl
502
503 AC_ARG_ENABLE(ipv6,
504   AC_HELP_STRING([--disable-ipv6],[disable IPv6 support]),
505   [case "${enable_ipv6}" in
506     no)
507       AC_MSG_NOTICE([disabling IPv6 at user request])
508       dnl Disable IPv6 checking
509       ipv6=no
510       ;;
511     yes)
512       dnl IPv6 explicitly enabled: force its use (abort if unavailable).
513       ipv6=yes
514       force_ipv6=yes
515       ;;
516     auto)
517       dnl Auto-detect IPv6, i.e. check for IPv6, but don't force it.
518       ipv6=yes
519       ;;
520     *)
521       AC_MSG_ERROR([Invalid --enable-ipv6 argument \`$enable_ipv6'])
522       ;;
523     esac
524   ], [
525     dnl If nothing is specified, assume auto-detection.
526     ipv6=yes
527   ]
528 )
529
530 if test "X$ipv6" = "Xyes"; then
531   AC_CHECK_FUNCS(getaddrinfo, [], [
532     AC_MSG_NOTICE([Disabling IPv6 support: your system does not support getaddrinfo(3)])
533     ipv6=no
534   ])
535 fi
536
537 if test "X$ipv6" = "Xyes"; then
538   PROTO_INET6([], [
539     AC_MSG_NOTICE([Disabling IPv6 support: your system does not support the PF_INET6 protocol family])
540     ipv6=no
541   ])
542 fi
543
544 if test "X$ipv6" = "Xyes"; then
545   TYPE_STRUCT_SOCKADDR_IN6([],[
546     AC_MSG_NOTICE([Disabling IPv6 support: your system does not support \`struct sockaddr_in6'])
547     ipv6=no
548   ])
549   if test "X$ipv6" = "Xyes"; then
550     WGET_STRUCT_SOCKADDR_STORAGE
551     MEMBER_SIN6_SCOPE_ID
552   fi
553 fi
554
555 if test "X$ipv6" = "Xyes"; then
556   AC_DEFINE([ENABLE_IPV6], 1, [Define if IPv6 support is enabled.])
557   AC_MSG_NOTICE([Enabling support for IPv6.])
558 elif test "x$force_ipv6" = "xyes"; then
559   AC_MSG_ERROR([IPv6 support requested but not found; aborting])
560 fi
561
562
563 dnl
564 dnl Set of available languages.
565 dnl
566 ALL_LINGUAS=`(cd ${srcdir}/po && ls *.po | sed -e 's/\.po$//' | tr '\012' ' ')`
567
568 dnl Originally this used to be static, looking like this:
569 dnl     ALL_LINGUAS="cs de hr it ..."
570 dnl The downside was that configure needed to be rebuilt whenever a
571 dnl new language was added.
572
573 dnl internationalization macros
574 WGET_WITH_NLS
575
576 dnl
577 dnl Find makeinfo.  We used to provide support for Emacs processing
578 dnl Texinfo using `emacs -batch -eval ...' where makeinfo is
579 dnl unavailable, but that broke with the addition of makeinfo-specific
580 dnl command-line options, such as `-I'.  Now we depend on makeinfo to
581 dnl build the Info documentation.
582 dnl
583
584 AC_CHECK_PROGS(MAKEINFO, [makeinfo], [true])
585
586 dnl
587 dnl Find perl and pod2man
588 dnl
589
590 AC_PATH_PROGS(PERL, [perl5 perl], no)
591 AC_PATH_PROG(POD2MAN, pod2man, no)
592
593 if test "x${POD2MAN}" = xno; then
594   COMMENT_IF_NO_POD2MAN="# "
595 else
596   COMMENT_IF_NO_POD2MAN=
597 fi
598 AC_SUBST(COMMENT_IF_NO_POD2MAN)
599
600 dnl
601 dnl Create output
602 dnl
603 AC_CONFIG_FILES([Makefile src/Makefile doc/Makefile util/Makefile
604                  po/Makefile.in windows/Makefile])
605 AC_CONFIG_HEADERS([src/config.h])
606 AH_BOTTOM([
607 #include "config-post.h"
608 ])
609 AC_CONFIG_FILES([stamp-h], [echo timestamp > stamp-h])
610 AC_CONFIG_COMMANDS([default], [WGET_PROCESS_PO])
611 AC_OUTPUT