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