]> sjero.net Git - wget/blob - configure.in
[svn] Use the standard AC_C_PROTOTYPES macro.
[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 AC_ARG_WITH(socks,
55   [  --with-socks            use the socks library],
56   [AC_DEFINE([HAVE_SOCKS], 1,
57              [Define if you wish to compile with socks support.])]
58 )
59
60 AC_ARG_WITH(ssl,
61 [[  --with-ssl[=SSL-ROOT]   link with SSL support [default=auto]
62   --without-ssl           disable SSL autodetection]])
63
64 AC_ARG_ENABLE(opie,
65 [  --disable-opie          disable support for opie or s/key FTP login],
66 USE_OPIE=$enableval, USE_OPIE=yes)
67 test x"${USE_OPIE}" = xyes && AC_DEFINE([USE_OPIE], 1,
68    [Define if you want the Opie support for FTP compiled in.])
69
70 AC_ARG_ENABLE(digest,
71 [  --disable-digest        disable support for HTTP digest authorization],
72 USE_DIGEST=$enableval, USE_DIGEST=yes)
73 test x"${USE_DIGEST}" = xyes && AC_DEFINE([USE_DIGEST], 1,
74    [Define if you want the HTTP Digest Authorization compiled in.])
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 "${USE_OPIE}${USE_DIGEST}" in
85 *yes*)
86         wget_need_md5=yes
87 esac
88 if test x"$USE_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
113 dnl
114 dnl if the user hasn't specified CFLAGS, then
115 dnl   if compiler is gcc, then use -O2 and some warning flags
116 dnl   else use os-specific flags or -O
117 dnl
118 if test -n "$auto_cflags"; then
119   if test -n "$GCC"; then
120     CFLAGS="$CFLAGS -O2 -Wall -Wno-implicit"
121   else
122     case "$host_os" in
123       *hpux*)  CFLAGS="$CFLAGS +O3"                      ;;
124       *ultrix* | *osf*) CFLAGS="$CFLAGS -O -Olimit 2000" ;;
125       *)       CFLAGS="$CFLAGS -O" ;;
126     esac
127   fi
128 fi
129
130 dnl
131 dnl Handle AIX
132 dnl
133 AC_AIX
134
135 dnl
136 dnl Configure our included libtool and make sure it's regenerated when needed
137 dnl
138 AC_PROG_LIBTOOL
139 AC_SUBST(LIBTOOL_DEPS)
140
141 dnl
142 dnl In case of {cyg,gnu}win32.  Should be a _target_ test.
143 dnl Might also be erelevant for DJGPP.
144 dnl
145 case "$host_os" in
146   *win32) exeext='.exe';;
147   *) exeext='';;
148 esac
149 AC_SUBST(exeext)
150
151 dnl
152 dnl Checks for basic compiler characteristics.
153 dnl
154 AC_C_CONST
155 AC_C_INLINE
156 AC_C_VOLATILE
157 AC_C_BIGENDIAN
158 AC_C_PROTOTYPES
159
160 dnl
161 dnl Checks for headers that might be missing.
162 dnl
163
164 dnl Check for basic headers, even those we assume the presence of.
165 dnl This is because Autoconf default includes check for STDC_HEADERS,
166 dnl HAVE_SYS_TYPES_H, etc. before including them.
167 AC_HEADER_STDC
168 AC_CHECK_HEADERS(sys/types.h sys/stat.h)
169 dnl Now check for the others.
170 AC_CHECK_HEADERS(string.h strings.h stdarg.h unistd.h sys/time.h)
171 AC_CHECK_HEADERS(termios.h sys/ioctl.h sys/select.h utime.h sys/utime.h)
172 AC_CHECK_HEADERS(stdint.h inttypes.h signal.h setjmp.h pwd.h)
173 AC_HEADER_TIME
174
175 dnl
176 dnl Check integral type sizes.
177 dnl
178 AC_CHECK_SIZEOF(short)
179 AC_CHECK_SIZEOF(int)
180 AC_CHECK_SIZEOF(long)
181 AC_CHECK_SIZEOF(long long)
182
183 dnl
184 dnl Checks for non-universal or system-specific types.
185 dnl
186 AC_TYPE_SIZE_T
187 AC_TYPE_PID_T
188 AC_CHECK_TYPES(uint32_t)
189 AC_TYPE_SIGNAL
190 AC_CHECK_TYPES(sig_atomic_t, [], [], [
191 #include <stdio.h>
192 #include <sys/types.h>
193 #if HAVE_INTTYPES_H
194 # include <inttypes.h>
195 #endif
196 #ifdef HAVE_SIGNAL_H
197 # include <signal.h>
198 #endif
199 ])
200
201 dnl
202 dnl Checks for library functions.
203 dnl
204 AC_FUNC_ALLOCA
205 AC_FUNC_MMAP
206 AC_CHECK_FUNCS(strdup strstr strcasecmp strncasecmp strpbrk memmove)
207 AC_CHECK_FUNCS(gettimeofday mktime strptime strerror snprintf vsnprintf)
208 AC_CHECK_FUNCS(usleep select sigblock sigsetjmp signal symlink access isatty)
209
210 dnl
211 dnl Call Wget's local macros defined in aclocal.
212 dnl
213 WGET_STRUCT_UTIMBUF
214 WGET_SOCKLEN_T
215 WGET_FNMATCH
216 WGET_NANOSLEEP
217 WGET_NSL_SOCKET
218
219 dnl
220 dnl Check if we need to compile in getopt.c.
221 dnl
222 AC_CHECK_FUNC(getopt_long, [], [
223   GETOPT_OBJ='getopt$o'
224 ])
225 AC_SUBST(GETOPT_OBJ)
226
227 dnl
228 dnl Checks for libraries.
229 dnl
230
231 dnl #### This appears to be deficient with later versions of SOCKS.
232 if test "x${with_socks}" = xyes
233 then
234   AC_CHECK_LIB(resolv, main)
235   AC_CHECK_LIB(socks, Rconnect)
236 fi
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     AC_MSG_CHECKING([for includes])
321
322     AC_TRY_CPP([#include <openssl/ssl.h>
323 #include <openssl/rsa.h>
324 ],
325       AC_MSG_RESULT(found); ssl_found_includes=yes,
326       AC_MSG_RESULT([not found])
327     )
328
329     if test x"$ssl_found_includes" = xno; then
330       continue
331     fi
332
333     ssl_link_failure=no
334
335     dnl Make sure that the checks don't run afoul of the cache.  It
336     dnl would be nicer to temporarily turn off the cache, but
337     dnl apparently Autoconf doesn't allow that.
338
339     unset ac_cv_lib_crypto_RSA_new
340     unset ac_cv_lib_ssl_SSL_new
341
342     dnl These checks need to be in this order, or you'll get a link
343     dnl failure if you use a static libcrypto.a and libssl.a rather
344     dnl than shared libraries.
345
346     AC_CHECK_LIB(crypto, RSA_new, , ssl_link_failure=yes)
347     AC_CHECK_LIB(ssl, SSL_new, , ssl_link_failure=yes)
348
349     if test x"$ssl_link_failure" = xyes; then
350       dnl One or both libs failed to link.
351       continue
352     fi
353
354     dnl The libraries link.  But we still need to check if the program
355     dnl linked with those libraries under these settings with run.  On
356     dnl some systems (Solaris), Gcc adds -L/usr/local/lib to the
357     dnl linking line, but fails to add -R/usr/local/lib, thus creating
358     dnl executables that link, but fail to run.
359
360     dnl If we are cross-compiling, just assume that working linkage
361     dnl implies working executable.
362
363     ssl_run_failure=no
364
365     AC_MSG_CHECKING([whether SSL libs are resolved at runtime])
366     AC_TRY_RUN([
367 int RSA_new();
368 int SSL_new();
369 main(){return 0;}
370 ],
371       AC_MSG_RESULT(yes),
372       AC_MSG_RESULT(no); ssl_run_failure=yes,
373       AC_MSG_RESULT(cross)
374     )
375
376     if test x"$ssl_run_failure" = xno; then
377       ssl_success=yes
378       break
379     fi
380   done
381
382   if test x"$ssl_success" = xyes; then
383     AC_MSG_NOTICE([compiling in support for SSL in $ssl_root])
384     AC_DEFINE([HAVE_SSL], 1,
385               [Define if SSL support should be compiled in.])
386     AC_SUBST(SSL_INCLUDES)
387     SSL_OBJ='gen_sslfunc$o'
388     AC_SUBST(SSL_OBJ)
389   else
390     LDFLAGS=$wget_save_LDFLAGS
391     LIBS=$wget_save_LIBS
392
393     dnl If linking with SSL was forced rather than auto-detected, then
394     dnl bail out if SSL failed.
395     if test x"$wget_force_ssl" = x"yes"; then
396       AC_MSG_ERROR([failed to find OpenSSL libraries], 2)
397     fi
398   fi
399
400   dnl Restore the compiler setting.
401   CC=$wget_save_CC
402
403   dnl Restore the CPPFLAGS.  Do this regardless of whether linking
404   dnl with SSL succeeded -- SSL includes will be handled using
405   dnl @SSL_INCLUDES@.
406   CPPFLAGS=$wget_save_CPPFLAGS
407 fi
408
409 dnl
410 dnl Find an md5 implementation.
411 dnl
412
413 if test x"$wget_need_md5" = xyes
414 then
415   dnl This should be moved to an AC_DEFUN, but I'm not sure how to
416   dnl manipulate MD5_OBJ from the defun.
417
418   MD5_OBJ='gen-md5$o'
419   found_md5=no
420
421   dnl Check for the system MD5 library on Solaris.  We don't check for
422   dnl something simple like "MD5Update" because there are a number of
423   dnl MD5 implementations that use that name.  md5_calc is, hopefully,
424   dnl specific to the Solaris MD5 library.
425   if test x"$found_md5" = xno; then
426     AC_CHECK_LIB(md5, md5_calc, [
427       dnl Some installations have bogus <md5.h> in the compiler's
428       dnl include path, making the system md5 library useless.
429       AC_MSG_CHECKING([whether md5.h can be included])
430       AC_COMPILE_IFELSE([#include <md5.h>
431                         ], [
432         AC_MSG_RESULT(yes)
433         AC_DEFINE([HAVE_SOLARIS_MD5], 1, [Define to use Solaris MD5.])
434         LIBS="-lmd5 $LIBS"
435         found_md5=yes
436         AC_MSG_NOTICE([using the Solaris MD5 implementation])
437       ], [AC_MSG_RESULT(no)])
438     ])
439   fi
440
441   dnl Then see if we're linking OpenSSL anyway; if yes, use its md5
442   dnl implementation.
443   if test x"$found_md5" = xno; then
444     if test x"$ssl_success" = xyes; then
445       AC_DEFINE([HAVE_OPENSSL_MD5], 1, [Define to use OpenSSL MD5.])
446       found_md5=yes
447       AC_MSG_NOTICE([using the OpenSSL MD5 implementation])
448     fi
449   fi
450
451   dnl If none of the above worked, use the one we ship with Wget.
452   if test x"$found_md5" = xno; then
453     AC_DEFINE([HAVE_BUILTIN_MD5], 1, [Define to use built-in MD5.])
454     MD5_OBJ="$MD5_OBJ gnu-md5\$o"
455     found_md5=yes
456     AC_MSG_NOTICE([using the GNU MD5 implementation])
457   fi
458 fi
459 AC_DEFINE([HAVE_MD5], 1, [Define if we're compiling support for MD5.])
460 AC_SUBST(MD5_OBJ)
461
462 dnl **********************************************************************
463 dnl Checks for IPv6
464 dnl **********************************************************************
465
466 dnl
467 dnl If --enable-ipv6 is specified, we try to use IPv6 (as long as
468 dnl getaddrinfo is also present).  If --disable-ipv6 is specified, we
469 dnl don't use IPv6 or getaddrinfo.
470 dnl
471
472 ipv6=
473 check_for_ipv6=no
474 AC_ARG_ENABLE(ipv6,
475   AC_HELP_STRING([--disable-ipv6],[disable IPv6 support]),
476   [case "${enable_ipv6}" in
477   no)
478     AC_MSG_NOTICE([disabling IPv6 at user request])
479     ipv6=no
480     ;;
481   *)
482     ipv6=yes
483     ;;
484   esac],
485   dnl If unspecified, check for IPv6 and use it where available.
486   [check_for_ipv6=yes]
487 )
488
489 if test "X$ipv6" = "Xyes" || test "X$check_for_ipv6" = "Xyes"; then
490   AC_CHECK_FUNCS(getaddrinfo,[
491     GETADDRINFO_AI_ADDRCONFIG(
492       AC_DEFINE(
493         [HAVE_GETADDRINFO_AI_ADDRCONFIG], 1, 
494         [Define if the system headers support the AI_ADDRCONFIG flag.]
495       )
496     )
497     GETADDRINFO_AI_V4MAPPED(
498       AC_DEFINE(
499         [HAVE_GETADDRINFO_AI_V4MAPPED], 1, 
500         [Define if the system headers support the AI_V4MAPPED flag.]
501       )
502     )
503     GETADDRINFO_AI_ALL(
504       AC_DEFINE(
505         [HAVE_GETADDRINFO_AI_ALL], 1, 
506         [Define if the system headers support the AI_ALL flag.]
507       )
508     )
509   ],[
510     AC_MSG_NOTICE([Disabling IPv6 support: your system does not support getaddrinfo(3)])
511     ipv6=no
512   ])
513 fi
514
515 if test "X$ipv6" = "Xyes" || test "X$check_for_ipv6" = "Xyes"; then
516   PROTO_INET6(,[
517     AC_MSG_NOTICE([Disabling IPv6 support: your system does not support the PF_INET6 protocol family])
518     ipv6=no
519   ])
520 fi
521
522 if test "X$ipv6" = "Xyes" || test "X$check_for_ipv6" = "Xyes"; then
523   TYPE_STRUCT_SOCKADDR_IN6([
524     ipv6=yes
525   ],[
526     AC_MSG_NOTICE([Disabling IPv6 support: your system does not support 'struct sockaddr_in6'])
527     ipv6=no
528   ])
529   if test "X$ipv6" = "Xyes"; then
530     MEMBER_SIN6_SCOPE_ID
531   fi
532 fi
533
534 if test "X$ipv6" = "Xyes"; then
535   AC_DEFINE([ENABLE_IPV6], 1, [Define if IPv6 support is enabled.])
536 fi
537
538
539 dnl
540 dnl Set of available languages.
541 dnl
542 ALL_LINGUAS=`(cd ${srcdir}/po && ls *.po | sed -e 's/\.po$//' | tr '\012' ' ')`
543
544 dnl Originally this used to be static, looking like this:
545 dnl     ALL_LINGUAS="cs de hr it ..."
546 dnl The downside was that configure needed to be rebuilt whenever a
547 dnl new language was added.
548
549 dnl internationalization macros
550 WGET_WITH_NLS
551
552 dnl
553 dnl Find makeinfo.  If makeinfo is not found, look for Emacs.  If
554 dnl Emacs cannot be found, look for XEmacs.
555 dnl
556
557 AC_CHECK_PROGS(MAKEINFO, makeinfo emacs xemacs)
558
559 case "${MAKEINFO}" in
560    *makeinfo) MAKEINFO="${MAKEINFO} \$(srcdir)/wget.texi"  ;;
561    *emacs | *xemacs) MAKEINFO="${MAKEINFO} -batch -q -no-site-file -eval '(find-file \"\$(srcdir)/wget.texi\")' -l texinfmt -f texinfo-format-buffer -f save-buffer"  ;;
562    *) MAKEINFO="makeinfo \$(srcdir)/wget.texi"            ;;
563 esac
564
565 dnl
566 dnl Find perl and pod2man
567 dnl
568
569 AC_PATH_PROGS(PERL, perl5 perl, no)
570 AC_PATH_PROG(POD2MAN, pod2man, no)
571
572 if test "x${POD2MAN}" = xno; then
573   COMMENT_IF_NO_POD2MAN="# "
574 else
575   COMMENT_IF_NO_POD2MAN=
576 fi
577 AC_SUBST(COMMENT_IF_NO_POD2MAN)
578
579 dnl
580 dnl Create output
581 dnl
582 AC_CONFIG_FILES([Makefile src/Makefile doc/Makefile util/Makefile
583                  po/Makefile.in windows/Makefile])
584 AC_CONFIG_HEADERS([src/config.h])
585 AH_BOTTOM([
586 #include "config-post.h"
587 ])
588 AC_CONFIG_FILES([stamp-h], [echo timestamp > stamp-h])
589 AC_CONFIG_COMMANDS([default], [WGET_PROCESS_PO])
590 AC_OUTPUT