]> sjero.net Git - wget/blob - configure.ac
Merge SFLC licensing changes for OpenSSL with tip.
[wget] / configure.ac
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 Additional permission under GNU GPL version 3 section 7
18
19 dnl If you modify this program, or any covered work, by linking or
20 dnl combining it with the OpenSSL project's OpenSSL library (or a
21 dnl modified version of that library), containing parts covered by the
22 dnl terms of the OpenSSL or SSLeay licenses, the Free Software Foundation
23 dnl grants you additional permission to convey the resulting work.
24 dnl Corresponding Source for a non-source form of such a combination
25 dnl shall include the source code for the parts of OpenSSL used as well
26 dnl as that of the covered work.
27
28 dnl
29 dnl Process this file with autoconf to produce a configure script.
30 dnl
31
32 AC_INIT([wget], 
33         [1.12-devel],
34         [bug-wget@gnu.org])
35 AC_PREREQ(2.61)
36
37 dnl
38 dnl What version of Wget are we building?
39 dnl
40 AC_MSG_NOTICE([configuring for GNU Wget $PACKAGE_VERSION])
41
42 AC_CONFIG_MACRO_DIR([m4])
43 AC_CONFIG_AUX_DIR([.])
44
45 dnl
46 dnl Automake setup
47 dnl
48 AM_INIT_AUTOMAKE(1.9)
49
50 dnl
51 dnl Gettext
52 dnl
53 AM_GNU_GETTEXT([external],[need-ngettext])
54 AM_GNU_GETTEXT_VERSION([0.16.1])
55
56 dnl
57 dnl Get cannonical host
58 dnl
59 AC_CANONICAL_HOST
60 AC_DEFINE_UNQUOTED([OS_TYPE], "$host_os",
61                    [Define to be the name of the operating system.])
62
63 dnl
64 dnl Process features.
65 dnl
66
67 AC_ARG_WITH(ssl,
68 [[  --without-ssl           disable SSL autodetection]])
69
70 AC_ARG_ENABLE(opie,
71 [  --disable-opie          disable support for opie or s/key FTP login],
72 ENABLE_OPIE=$enableval, ENABLE_OPIE=yes)
73 test x"${ENABLE_OPIE}" = xyes && AC_DEFINE([ENABLE_OPIE], 1,
74    [Define if you want the Opie support for FTP compiled in.])
75
76 AC_ARG_ENABLE(digest,
77 [  --disable-digest        disable support for HTTP digest authorization],
78 ENABLE_DIGEST=$enableval, ENABLE_DIGEST=yes)
79 test x"${ENABLE_DIGEST}" = xyes && AC_DEFINE([ENABLE_DIGEST], 1,
80    [Define if you want the HTTP Digest Authorization compiled in.])
81
82 AC_ARG_ENABLE(ntlm,
83 [  --disable-ntlm          disable support for NTLM authorization],
84 [ENABLE_NTLM=$enableval], [ENABLE_NTLM=auto])
85
86 AC_ARG_ENABLE(debug,
87 [  --disable-debug         disable support for debugging output],
88 ENABLE_DEBUG=$enableval, ENABLE_DEBUG=yes)
89 test x"${ENABLE_DEBUG}" = xyes && AC_DEFINE([ENABLE_DEBUG], 1,
90    [Define if you want the debug output support compiled in.])
91
92 wget_need_md5=no
93
94 case "${ENABLE_OPIE}${ENABLE_DIGEST}" in
95 *yes*)
96         wget_need_md5=yes
97 esac
98
99 dnl
100 dnl Find the compiler
101 dnl
102
103 dnl We want these before the checks, so the checks can modify their values.
104 test -z "$CFLAGS"  && CFLAGS= auto_cflags=1
105 test -z "$CC" && cc_specified=yes
106
107 AC_PROG_CC
108 AM_PROG_CC_C_O
109 AC_AIX
110 gl_EARLY
111
112 AC_PROG_RANLIB
113
114 dnl Turn on optimization by default.  Specifically:
115 dnl
116 dnl if the user hasn't specified CFLAGS, then
117 dnl   if compiler is gcc, then
118 dnl     use -O2 and some warning flags
119 dnl   else
120 dnl     use os-specific flags or -O
121 if test -n "$auto_cflags"; then
122   if test -n "$GCC"; then
123     CFLAGS="$CFLAGS -O2 -Wall"
124   else
125     case "$host_os" in
126       *hpux*)  CFLAGS="$CFLAGS +O3"                      ;;
127       *ultrix* | *osf*) CFLAGS="$CFLAGS -O -Olimit 2000" ;;
128       *)       CFLAGS="$CFLAGS -O" ;;
129     esac
130   fi
131 fi
132
133 dnl
134 dnl Checks for basic compiler characteristics.
135 dnl
136 AC_C_CONST
137 AC_C_INLINE
138 AC_C_VOLATILE
139
140 dnl Check for basic headers, even though we expect them to exist and
141 dnl #include them unconditionally in the code.  Their detection is
142 dnl still needed because test programs used by Autoconf macros check
143 dnl for STDC_HEADERS, HAVE_SYS_TYPES_H, etc. before using them.
144 dnl Without the checks they will fail to be included in test programs,
145 dnl which will subsequently fail.
146 AC_HEADER_STDC
147
148 dnl Check for large file support.  This check needs to come fairly
149 dnl early because it could (in principle) affect whether functions and
150 dnl headers are available, whether they work, etc.
151 AC_SYS_LARGEFILE
152 AC_CHECK_SIZEOF(off_t)
153
154 dnl
155 dnl Checks for system header files that might be missing.
156 dnl
157 AC_HEADER_STDBOOL
158 AC_CHECK_HEADERS(unistd.h sys/time.h)
159 AC_CHECK_HEADERS(termios.h sys/ioctl.h sys/select.h utime.h sys/utime.h)
160 AC_CHECK_HEADERS(stdint.h inttypes.h pwd.h)
161
162 dnl
163 dnl Check sizes of integer types.  These are used to find n-bit
164 dnl integral types on older systems that fail to provide intN_t and
165 dnl uintN_t typedefs.
166 dnl
167 AC_CHECK_SIZEOF(short)
168 AC_CHECK_SIZEOF(int)
169 AC_CHECK_SIZEOF(long)
170 AC_CHECK_SIZEOF(long long)
171 AC_CHECK_SIZEOF(void *)
172
173 dnl
174 dnl Checks for non-universal or system-specific types.
175 dnl
176 AC_TYPE_SIZE_T
177 AC_TYPE_PID_T
178 AC_CHECK_TYPES([uint32_t, uintptr_t, intptr_t, int64_t])
179 AC_CHECK_TYPES(sig_atomic_t, [], [], [
180 #include <stdio.h>
181 #include <sys/types.h>
182 #if HAVE_INTTYPES_H
183 # include <inttypes.h>
184 #endif
185 #include <signal.h>
186 ])
187
188 # gnulib
189 gl_INIT
190
191 dnl
192 dnl Checks for library functions.
193 dnl
194 AC_FUNC_ALLOCA
195 AC_FUNC_MMAP
196 AC_FUNC_FSEEKO
197 AC_CHECK_FUNCS(strptime timegm snprintf vsnprintf vasprintf drand48)
198 AC_CHECK_FUNCS(strtoll usleep ftello sigblock sigsetjmp memrchr)
199
200 if test x"$ENABLE_OPIE" = xyes; then
201   AC_LIBOBJ([ftp-opie])
202 fi
203
204 dnl We expect to have these functions on Unix-like systems configure
205 dnl runs on.  The defines are provided to get them in config.h.in so
206 dnl Wget can still be ported to non-Unix systems (such as Windows)
207 dnl that lack some of these functions.
208 AC_DEFINE([HAVE_STRCASECMP], 1, [Define to 1 if you have the `strcasecmp' function.])
209 AC_DEFINE([HAVE_STRNCASECMP], 1, [Define to 1 if you have the `strncasecmp' function.])
210 AC_DEFINE([HAVE_STRDUP], 1, [Define to 1 if you have the `strdup' function.])
211 AC_DEFINE([HAVE_ISATTY], 1, [Define to 1 if you have the `isatty' function.])
212 AC_DEFINE([HAVE_SYMLINK], 1, [Define to 1 if you have the `symlink' function.])
213
214 dnl
215 dnl Call Wget-specific macros defined in aclocal.
216 dnl
217 WGET_STRUCT_UTIMBUF
218 WGET_SOCKLEN_T
219 WGET_FNMATCH
220 WGET_NANOSLEEP
221 WGET_POSIX_CLOCK
222 WGET_NSL_SOCKET
223
224 dnl
225 dnl Checks for libraries.
226 dnl
227
228 AS_IF([test x"$with_ssl" = xgnutls], [
229   dnl Now actually check for -lssl
230   AC_LIB_HAVE_LINKFLAGS([gnutls], [], [
231 #include <gnutls/gnutls.h>
232   ], [gnutls_global_init()])
233   if test x"$LIBGNUTLS" != x
234   then
235     AC_MSG_NOTICE([compiling in support for SSL via GnuTLS])
236     AC_LIBOBJ([gnutls])
237   else
238     AC_MSG_ERROR([--with-ssl=gnutls was given, but GNUTLS is not available.])
239   fi
240 ], [
241   # --with-ssl is not gnutls: check if it's no
242   AS_IF([test x"$with_ssl" != xno], [
243     dnl As of this writing (OpenSSL 0.9.6), the libcrypto shared library
244     dnl doesn't record its dependency on libdl, so we need to make sure
245     dnl -ldl ends up in LIBS on systems that have it.  Most OSes use
246     dnl dlopen(), but HP-UX uses shl_load().
247     AC_CHECK_LIB(dl, dlopen, [], [
248       AC_CHECK_LIB(dl, shl_load)
249     ])
250
251     dnl Now actually check for -lssl
252     AC_LIB_HAVE_LINKFLAGS([ssl], [crypto], [
253   #include <openssl/ssl.h>
254   #include <openssl/x509.h>
255   #include <openssl/err.h>
256   #include <openssl/rand.h>
257   #include <openssl/des.h>
258   #include <openssl/md4.h>
259   #include <openssl/md5.h>
260     ], [SSL_library_init ()])
261     if test x"$LIBSSL" != x
262     then
263       AC_MSG_NOTICE([compiling in support for SSL via OpenSSL])
264       AC_LIBOBJ([openssl])
265     elif test x"$with_ssl" != x
266     then
267       AC_MSG_ERROR([--with-ssl was given, but SSL is not available.])
268     fi
269   ]) # endif: --with-ssl == no?
270 ]) # endif: --with-ssl == gnutls?
271
272
273 dnl Enable NTLM if requested and if SSL is available.
274 if test x"$LIBSSL" != x
275 then
276   if test x"$ENABLE_NTLM" != xno
277   then
278     AC_DEFINE([ENABLE_NTLM], 1,
279      [Define if you want the NTLM authorization support compiled in.])
280     AC_LIBOBJ([http-ntlm])
281   fi
282 else
283   dnl If SSL is unavailable and the user explicitly requested NTLM,
284   dnl abort.
285   if test x"$ENABLE_NTLM" = xyes
286   then
287     AC_MSG_ERROR([NTLM authorization requested and OpenSSL not found; aborting])
288   fi
289 fi
290
291 dnl
292 dnl Find an MD5 implementation.  Since Wget rarely needs MD5, we try
293 dnl to use an existing library implementation to save on code size.
294 dnl
295
296 if test x"$wget_need_md5" = xyes
297 then
298   dnl This should be moved to an AC_DEFUN, but I'm not sure how to
299   dnl manipulate MD5_OBJ from the defun.
300
301   AC_LIBOBJ([gen-md5])
302   found_md5=no
303
304   dnl Check for the system MD5 library on Solaris.  We don't check for
305   dnl something simple like "MD5Update" because there are a number of
306   dnl MD5 implementations that use that name, but have an otherwise
307   dnl incompatible interface.  md5_calc is, hopefully, specific to the
308   dnl Solaris MD5 library.
309   if test x"$found_md5" = xno; then
310     AC_CHECK_LIB(md5, md5_calc, [
311       dnl Some installations have bogus <md5.h> in the compiler's
312       dnl include path, making the system md5 library useless.
313       AC_MSG_CHECKING([for working md5.h])
314       AC_COMPILE_IFELSE([#include <md5.h>
315                         ], [
316         AC_MSG_RESULT(yes)
317         AC_DEFINE([HAVE_SOLARIS_MD5], 1, [Define when using Solaris MD5.])
318         LIBS="-lmd5 $LIBS"
319         found_md5=yes
320         AC_MSG_NOTICE([using the Solaris MD5 implementation])
321       ], [AC_MSG_RESULT(no)])
322     ])
323   fi
324
325   dnl Then see if we're linking OpenSSL anyway; if yes, use its md5
326   dnl implementation.
327   if test x"$found_md5" = xno; then
328     if test x"$LIBSSL" != x; then
329       AC_DEFINE([HAVE_OPENSSL_MD5], 1, [Define when using OpenSSL MD5.])
330       found_md5=yes
331       AC_MSG_NOTICE([using the OpenSSL MD5 implementation])
332     fi
333   fi
334
335   dnl If none of the above worked, use the one we ship with Wget.
336   if test x"$found_md5" = xno; then
337     AC_DEFINE([HAVE_BUILTIN_MD5], 1, [Define when using built-in 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="en@quot en@boldquot $(cd ${srcdir}/po && ls *.po | grep -v 'en@.*quot' | sed -e 's/\.po$//' | tr '\012' ' ')"
430
431 dnl
432 dnl Find makeinfo.  We used to provide support for Emacs processing
433 dnl Texinfo using `emacs -batch -eval ...' where makeinfo is
434 dnl unavailable, but that broke with the addition of makeinfo-specific
435 dnl command-line options, such as `-I'.  Now we depend on makeinfo to
436 dnl build the Info documentation.
437 dnl
438
439 AC_CHECK_PROGS(MAKEINFO, [makeinfo], [true])
440
441 dnl
442 dnl Find perl and pod2man
443 dnl
444
445 AC_PATH_PROGS(PERL, [perl5 perl], no)
446 AC_PATH_PROG(POD2MAN, pod2man, no)
447
448 if test "x${POD2MAN}" = xno; then
449   COMMENT_IF_NO_POD2MAN="# "
450 else
451   COMMENT_IF_NO_POD2MAN=
452 fi
453 AC_SUBST(COMMENT_IF_NO_POD2MAN)
454
455 dnl
456 dnl Create output
457 dnl
458 AC_CONFIG_FILES([Makefile src/Makefile doc/Makefile util/Makefile
459                  po/Makefile.in tests/Makefile tests/WgetTest.pm
460                  lib/Makefile windows/Makefile])
461 AC_CONFIG_HEADERS([src/config.h])
462 AC_OUTPUT