]> sjero.net Git - wget/blob - configure.in
3c401c6f79fa297b8c25e014e2ac509822d453d2
[wget] / configure.in
1 dnl Template file for GNU Autoconf
2 dnl Copyright (C) 1995, 1996, 1997, 2001, 2007 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 3 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, see <http://www.gnu.org/licenses/>.
16
17 dnl In addition, as a special exception, the Free Software Foundation
18 dnl gives permission to link the code of its release of Wget with the
19 dnl OpenSSL project's "OpenSSL" library (or with modified versions of it
20 dnl that use the same license as the "OpenSSL" library), and distribute
21 dnl the linked executables.  You must obey the GNU General Public License
22 dnl in all respects for all of the code used other than "OpenSSL".  If you
23 dnl modify this file, you may extend this exception to your version of the
24 dnl file, but you are not obligated to do so.  If you do not wish to do
25 dnl so, delete this exception statement from your version.
26
27 dnl
28 dnl Process this file with autoconf to produce a configure script.
29 dnl
30
31 AC_INIT([wget], 
32         [m4_normalize(esyscmd([sed -e 's/^.*"\(.*\)";$/\1/' src/version.c]))],
33         [bug-wget@gnu.org])
34 AC_PREREQ(2.61)
35
36 # Make configure depend on the VERSION file, since it's used in AC_INIT
37 AC_SUBST([CONFIGURE_DEPENDENCIES], ['$(top_srcdir)/src/version.c'])
38
39 dnl
40 dnl What version of Wget are we building?
41 dnl
42 AC_MSG_NOTICE([configuring for GNU Wget $PACKAGE_VERSION])
43
44 AC_CONFIG_MACRO_DIR([m4])
45 AC_CONFIG_AUX_DIR([.])
46
47 dnl
48 dnl Automake setup
49 dnl
50 AM_INIT_AUTOMAKE(1.9)
51
52 dnl
53 dnl Get cannonical host
54 dnl
55 AC_CANONICAL_HOST
56 AC_DEFINE_UNQUOTED([OS_TYPE], "$host_os",
57                    [Define to be the name of the operating system.])
58
59 dnl
60 dnl Process features.
61 dnl
62
63 AC_ARG_WITH(ssl,
64 [[  --without-ssl           disable SSL autodetection]])
65
66 AC_ARG_ENABLE(opie,
67 [  --disable-opie          disable support for opie or s/key FTP login],
68 ENABLE_OPIE=$enableval, ENABLE_OPIE=yes)
69 test x"${ENABLE_OPIE}" = xyes && AC_DEFINE([ENABLE_OPIE], 1,
70    [Define if you want the Opie support for FTP compiled in.])
71
72 AC_ARG_ENABLE(digest,
73 [  --disable-digest        disable support for HTTP digest authorization],
74 ENABLE_DIGEST=$enableval, ENABLE_DIGEST=yes)
75 test x"${ENABLE_DIGEST}" = xyes && AC_DEFINE([ENABLE_DIGEST], 1,
76    [Define if you want the HTTP Digest Authorization compiled in.])
77
78 AC_ARG_ENABLE(ntlm,
79 [  --disable-ntlm          disable support for NTLM authorization],
80 [ENABLE_NTLM=$enableval], [ENABLE_NTLM=auto])
81
82 AC_ARG_ENABLE(debug,
83 [  --disable-debug         disable support for debugging output],
84 ENABLE_DEBUG=$enableval, ENABLE_DEBUG=yes)
85 test x"${ENABLE_DEBUG}" = xyes && AC_DEFINE([ENABLE_DEBUG], 1,
86    [Define if you want the debug output support compiled in.])
87
88 wget_need_md5=no
89
90 case "${ENABLE_OPIE}${ENABLE_DIGEST}" in
91 *yes*)
92         wget_need_md5=yes
93 esac
94
95 dnl
96 dnl Find the compiler
97 dnl
98
99 dnl We want these before the checks, so the checks can modify their values.
100 test -z "$CFLAGS"  && CFLAGS= auto_cflags=1
101 test -z "$CC" && cc_specified=yes
102
103 AC_PROG_CC
104 AM_PROG_CC_C_O
105 AC_AIX
106
107 AC_PROG_RANLIB
108
109 dnl Turn on optimization by default.  Specifically:
110 dnl
111 dnl if the user hasn't specified CFLAGS, then
112 dnl   if compiler is gcc, then
113 dnl     use -O2 and some warning flags
114 dnl   else
115 dnl     use os-specific flags or -O
116 if test -n "$auto_cflags"; then
117   if test -n "$GCC"; then
118     CFLAGS="$CFLAGS -O2 -Wall"
119   else
120     case "$host_os" in
121       *hpux*)  CFLAGS="$CFLAGS +O3"                      ;;
122       *ultrix* | *osf*) CFLAGS="$CFLAGS -O -Olimit 2000" ;;
123       *)       CFLAGS="$CFLAGS -O" ;;
124     esac
125   fi
126 fi
127
128 dnl
129 dnl Checks for basic compiler characteristics.
130 dnl
131 AC_C_CONST
132 AC_C_INLINE
133 AC_C_VOLATILE
134
135 dnl Check for basic headers, even though we expect them to exist and
136 dnl #include them unconditionally in the code.  Their detection is
137 dnl still needed because test programs used by Autoconf macros check
138 dnl for STDC_HEADERS, HAVE_SYS_TYPES_H, etc. before using them.
139 dnl Without the checks they will fail to be included in test programs,
140 dnl which will subsequently fail.
141 AC_HEADER_STDC
142
143 dnl Check for large file support.  This check needs to come fairly
144 dnl early because it could (in principle) affect whether functions and
145 dnl headers are available, whether they work, etc.
146 AC_SYS_LARGEFILE
147 AC_CHECK_SIZEOF(off_t)
148
149 dnl
150 dnl Checks for system header files that might be missing.
151 dnl
152 AC_HEADER_STDBOOL
153 AC_CHECK_HEADERS(unistd.h sys/time.h)
154 AC_CHECK_HEADERS(termios.h sys/ioctl.h sys/select.h utime.h sys/utime.h)
155 AC_CHECK_HEADERS(stdint.h inttypes.h pwd.h)
156
157 dnl
158 dnl Check sizes of integer types.  These are used to find n-bit
159 dnl integral types on older systems that fail to provide intN_t and
160 dnl uintN_t typedefs.
161 dnl
162 AC_CHECK_SIZEOF(short)
163 AC_CHECK_SIZEOF(int)
164 AC_CHECK_SIZEOF(long)
165 AC_CHECK_SIZEOF(long long)
166 AC_CHECK_SIZEOF(void *)
167
168 dnl
169 dnl Checks for non-universal or system-specific types.
170 dnl
171 AC_TYPE_SIZE_T
172 AC_TYPE_PID_T
173 AC_CHECK_TYPES([uint32_t, uintptr_t, intptr_t, int64_t])
174 AC_CHECK_TYPES(sig_atomic_t, [], [], [
175 #include <stdio.h>
176 #include <sys/types.h>
177 #if HAVE_INTTYPES_H
178 # include <inttypes.h>
179 #endif
180 #include <signal.h>
181 ])
182
183 dnl
184 dnl Checks for library functions.
185 dnl
186 AC_FUNC_ALLOCA
187 AC_FUNC_MMAP
188 AC_FUNC_FSEEKO
189 AC_CHECK_FUNCS(strptime timegm snprintf vsnprintf vasprintf drand48)
190 AC_CHECK_FUNCS(strtoll usleep ftello sigblock sigsetjmp memrchr)
191
192 if test x"$ENABLE_OPIE" = xyes; then
193   AC_LIBOBJ([ftp-opie])
194 fi
195
196 dnl We expect to have these functions on Unix-like systems configure
197 dnl runs on.  The defines are provided to get them in config.h.in so
198 dnl Wget can still be ported to non-Unix systems (such as Windows)
199 dnl that lack some of these functions.
200 AC_DEFINE([HAVE_STRCASECMP], 1, [Define to 1 if you have the `strcasecmp' function.])
201 AC_DEFINE([HAVE_STRNCASECMP], 1, [Define to 1 if you have the `strncasecmp' function.])
202 AC_DEFINE([HAVE_STRDUP], 1, [Define to 1 if you have the `strdup' function.])
203 AC_DEFINE([HAVE_ISATTY], 1, [Define to 1 if you have the `isatty' function.])
204 AC_DEFINE([HAVE_SYMLINK], 1, [Define to 1 if you have the `symlink' function.])
205
206 dnl
207 dnl Call Wget-specific macros defined in aclocal.
208 dnl
209 WGET_STRUCT_UTIMBUF
210 WGET_SOCKLEN_T
211 WGET_FNMATCH
212 WGET_NANOSLEEP
213 WGET_POSIX_CLOCK
214 WGET_NSL_SOCKET
215
216 dnl
217 dnl Check if we need to compile in getopt.c.
218 dnl
219 AC_CHECK_FUNC(getopt_long, [], [
220   AC_LIBOBJ([getopt])
221 ])
222
223 dnl
224 dnl Checks for libraries.
225 dnl
226
227 AS_IF([test x"$with_ssl" = xgnutls], [
228   dnl Now actually check for -lssl
229   AC_LIB_HAVE_LINKFLAGS([gnutls], [], [
230 #include <gnutls/gnutls.h>
231   ], [gnutls_global_init()])
232   if test x"$LIBGNUTLS" != x
233   then
234     AC_MSG_NOTICE([compiling in support for SSL via GnuTLS])
235     AC_LIBOBJ([gnutls])
236   else
237     AC_MSG_ERROR([--with-ssl=gnutls was given, but GNUTLS is not available.])
238   fi
239 ], [
240   # --with-ssl is not gnutls: check if it's no
241   AS_IF([test x"$with_ssl" != xno], [
242     dnl As of this writing (OpenSSL 0.9.6), the libcrypto shared library
243     dnl doesn't record its dependency on libdl, so we need to make sure
244     dnl -ldl ends up in LIBS on systems that have it.  Most OSes use
245     dnl dlopen(), but HP-UX uses shl_load().
246     AC_CHECK_LIB(dl, dlopen, [], [
247       AC_CHECK_LIB(dl, shl_load)
248     ])
249
250     dnl Now actually check for -lssl
251     AC_LIB_HAVE_LINKFLAGS([ssl], [crypto], [
252   #include <openssl/ssl.h>
253   #include <openssl/x509.h>
254   #include <openssl/err.h>
255   #include <openssl/rand.h>
256   #include <openssl/des.h>
257   #include <openssl/md4.h>
258   #include <openssl/md5.h>
259     ], [SSL_library_init ()])
260     if test x"$LIBSSL" != x
261     then
262       AC_MSG_NOTICE([compiling in support for SSL via OpenSSL])
263       AC_LIBOBJ([openssl])
264     elif test x"$with_ssl" != x
265     then
266       AC_MSG_ERROR([--with-ssl was given, but SSL is not available.])
267     fi
268   ]) # endif: --with-ssl == no?
269 ]) # endif: --with-ssl == gnutls?
270
271
272 dnl Enable NTLM if requested and if SSL is available.
273 if test x"$LIBSSL" != x
274 then
275   if test x"$ENABLE_NTLM" != xno
276   then
277     AC_DEFINE([ENABLE_NTLM], 1,
278      [Define if you want the NTLM authorization support compiled in.])
279     AC_LIBOBJ([http-ntlm])
280   fi
281 else
282   dnl If SSL is unavailable and the user explicitly requested NTLM,
283   dnl abort.
284   if test x"$ENABLE_NTLM" = xyes
285   then
286     AC_MSG_ERROR([NTLM authorization requested and OpenSSL not found; aborting])
287   fi
288 fi
289
290 dnl
291 dnl Find an MD5 implementation.  Since Wget rarely needs MD5, we try
292 dnl to use an existing library implementation to save on code size.
293 dnl
294
295 if test x"$wget_need_md5" = xyes
296 then
297   dnl This should be moved to an AC_DEFUN, but I'm not sure how to
298   dnl manipulate MD5_OBJ from the defun.
299
300   AC_LIBOBJ([gen-md5])
301   found_md5=no
302
303   dnl Check for the system MD5 library on Solaris.  We don't check for
304   dnl something simple like "MD5Update" because there are a number of
305   dnl MD5 implementations that use that name, but have an otherwise
306   dnl incompatible interface.  md5_calc is, hopefully, specific to the
307   dnl Solaris MD5 library.
308   if test x"$found_md5" = xno; then
309     AC_CHECK_LIB(md5, md5_calc, [
310       dnl Some installations have bogus <md5.h> in the compiler's
311       dnl include path, making the system md5 library useless.
312       AC_MSG_CHECKING([for working md5.h])
313       AC_COMPILE_IFELSE([#include <md5.h>
314                         ], [
315         AC_MSG_RESULT(yes)
316         AC_DEFINE([HAVE_SOLARIS_MD5], 1, [Define when using Solaris MD5.])
317         LIBS="-lmd5 $LIBS"
318         found_md5=yes
319         AC_MSG_NOTICE([using the Solaris MD5 implementation])
320       ], [AC_MSG_RESULT(no)])
321     ])
322   fi
323
324   dnl Then see if we're linking OpenSSL anyway; if yes, use its md5
325   dnl implementation.
326   if test x"$found_md5" = xno; then
327     if test x"$LIBSSL" != x; then
328       AC_DEFINE([HAVE_OPENSSL_MD5], 1, [Define when using OpenSSL MD5.])
329       found_md5=yes
330       AC_MSG_NOTICE([using the OpenSSL MD5 implementation])
331     fi
332   fi
333
334   dnl If none of the above worked, use the one we ship with Wget.
335   if test x"$found_md5" = xno; then
336     AC_DEFINE([HAVE_BUILTIN_MD5], 1, [Define when using built-in MD5.])
337     AC_LIBOBJ([gnu-md5])
338     found_md5=yes
339     AC_MSG_NOTICE([using the built-in (GNU) MD5 implementation])
340     AC_C_BIGENDIAN
341   fi
342 fi
343 AC_DEFINE([HAVE_MD5], 1, [Define if we're compiling support for MD5.])
344
345 dnl **********************************************************************
346 dnl Checks for IPv6
347 dnl **********************************************************************
348
349 dnl
350 dnl We test for IPv6 by checking, in turn, for availability of
351 dnl getaddrinfo, presence of the INET6 address/protocol family, and
352 dnl the existence of struct sockaddr_in6.  If any of them is missing,
353 dnl IPv6 is disabled, and the code reverts to old-style gethostbyname.
354 dnl
355 dnl If --enable-ipv6 is explicitly specified on the configure command
356 dnl line, we check for IPv6 and abort if not found.  If --disable-ipv6
357 dnl is specified, we disable IPv6 and don't check for it.  The default
358 dnl is to autodetect IPv6 and use it where available.
359 dnl
360
361 AC_ARG_ENABLE(ipv6,
362   AC_HELP_STRING([--disable-ipv6],[disable IPv6 support]),
363   [case "${enable_ipv6}" in
364     no)
365       AC_MSG_NOTICE([disabling IPv6 at user request])
366       dnl Disable IPv6 checking
367       ipv6=no
368       ;;
369     yes)
370       dnl IPv6 explicitly enabled: force its use (abort if unavailable).
371       ipv6=yes
372       force_ipv6=yes
373       ;;
374     auto)
375       dnl Auto-detect IPv6, i.e. check for IPv6, but don't force it.
376       ipv6=yes
377       ;;
378     *)
379       AC_MSG_ERROR([Invalid --enable-ipv6 argument \`$enable_ipv6'])
380       ;;
381     esac
382   ], [
383     dnl If nothing is specified, assume auto-detection.
384     ipv6=yes
385   ]
386 )
387
388 if test "X$ipv6" = "Xyes"; then
389   AC_CHECK_FUNCS(getaddrinfo, [], [
390     AC_MSG_NOTICE([Disabling IPv6 support: your system does not support getaddrinfo(3)])
391     ipv6=no
392   ])
393 fi
394
395 if test "X$ipv6" = "Xyes"; then
396   PROTO_INET6([], [
397     AC_MSG_NOTICE([Disabling IPv6 support: your system does not support the PF_INET6 protocol family])
398     ipv6=no
399   ])
400 fi
401
402 if test "X$ipv6" = "Xyes"; then
403   TYPE_STRUCT_SOCKADDR_IN6([],[
404     AC_MSG_NOTICE([Disabling IPv6 support: your system does not support \`struct sockaddr_in6'])
405     ipv6=no
406   ])
407   if test "X$ipv6" = "Xyes"; then
408     WGET_STRUCT_SOCKADDR_STORAGE
409     MEMBER_SIN6_SCOPE_ID
410   fi
411 fi
412
413 if test "X$ipv6" = "Xyes"; then
414   AC_DEFINE([ENABLE_IPV6], 1, [Define if IPv6 support is enabled.])
415   AC_MSG_NOTICE([Enabling support for IPv6.])
416 elif test "x$force_ipv6" = "xyes"; then
417   AC_MSG_ERROR([IPv6 support requested but not found; aborting])
418 fi
419
420
421 dnl
422 dnl Set of available languages.
423 dnl
424 dnl Originally this used to be static, looking like this:
425 dnl     ALL_LINGUAS="cs de hr it ..."
426 dnl The downside was that configure needed to be rebuilt whenever a
427 dnl new language was added.
428 dnl
429 ALL_LINGUAS=`(cd ${srcdir}/po && ls *.po | sed -e 's/\.po$//' | tr '\012' ' ')`
430
431 dnl internationalization macros
432 WGET_WITH_NLS
433
434 dnl
435 dnl Find makeinfo.  We used to provide support for Emacs processing
436 dnl Texinfo using `emacs -batch -eval ...' where makeinfo is
437 dnl unavailable, but that broke with the addition of makeinfo-specific
438 dnl command-line options, such as `-I'.  Now we depend on makeinfo to
439 dnl build the Info documentation.
440 dnl
441
442 AC_CHECK_PROGS(MAKEINFO, [makeinfo], [true])
443
444 dnl
445 dnl Find perl and pod2man
446 dnl
447
448 AC_PATH_PROGS(PERL, [perl5 perl], no)
449 AC_PATH_PROG(POD2MAN, pod2man, no)
450
451 if test "x${POD2MAN}" = xno; then
452   COMMENT_IF_NO_POD2MAN="# "
453 else
454   COMMENT_IF_NO_POD2MAN=
455 fi
456 AC_SUBST(COMMENT_IF_NO_POD2MAN)
457
458 dnl
459 dnl Create output
460 dnl
461 AC_CONFIG_FILES([Makefile src/Makefile doc/Makefile util/Makefile
462                  po/Makefile.in tests/Makefile tests/WgetTest.pm
463                  windows/Makefile])
464 AC_CONFIG_HEADERS([src/config.h])
465 AH_BOTTOM([
466 #include "config-post.h"
467 ])
468 AC_CONFIG_FILES([stamp-h], [echo timestamp > stamp-h])
469 AC_CONFIG_COMMANDS([default], [WGET_PROCESS_PO])
470 AC_OUTPUT