Git init
[external/curl.git] / m4 / curl-confopts.m4
1 #***************************************************************************
2 #                                  _   _ ____  _
3 #  Project                     ___| | | |  _ \| |
4 #                             / __| | | | |_) | |
5 #                            | (__| |_| |  _ <| |___
6 #                             \___|\___/|_| \_\_____|
7 #
8 # Copyright (C) 1998 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al.
9 #
10 # This software is licensed as described in the file COPYING, which
11 # you should have received as part of this distribution. The terms
12 # are also available at http://curl.haxx.se/docs/copyright.html.
13 #
14 # You may opt to use, copy, modify, merge, publish, distribute and/or sell
15 # copies of the Software, and permit persons to whom the Software is
16 # furnished to do so, under the terms of the COPYING file.
17 #
18 # This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
19 # KIND, either express or implied.
20 #
21 #***************************************************************************
22
23 # File version for 'aclocal' use. Keep it a single number.
24 # serial 14
25
26 dnl CURL_CHECK_OPTION_THREADED_RESOLVER
27 dnl -------------------------------------------------
28 dnl Verify if configure has been invoked with option
29 dnl --enable-threaded-resolver or --disable-threaded-resolver, and
30 dnl set shell variable want_thres as appropriate.
31
32 AC_DEFUN([CURL_CHECK_OPTION_THREADED_RESOLVER], [
33   AC_MSG_CHECKING([whether to enable the threaded resolver])
34   OPT_THRES="default"
35   AC_ARG_ENABLE(threaded_resolver,
36 AC_HELP_STRING([--enable-threaded-resolver],[Enable threaded resolver])
37 AC_HELP_STRING([--disable-threaded-resolver],[Disable threaded resolver]),
38   OPT_THRES=$enableval)
39   case "$OPT_THRES" in
40     yes)
41       dnl --enable-threaded-resolver option used
42       want_thres="yes"
43       ;;
44     *)
45       dnl configure option not specified
46       want_thres="no"
47       ;;
48   esac
49   AC_MSG_RESULT([$want_thres])
50 ])
51
52 dnl CURL_CHECK_OPTION_ARES
53 dnl -------------------------------------------------
54 dnl Verify if configure has been invoked with option
55 dnl --enable-ares or --disable-ares, and
56 dnl set shell variable want_ares as appropriate.
57
58 AC_DEFUN([CURL_CHECK_OPTION_ARES], [
59 dnl   AC_BEFORE([$0],[CURL_CHECK_OPTION_THREADS])dnl
60   AC_BEFORE([$0],[CURL_CHECK_LIB_ARES])dnl
61   AC_MSG_CHECKING([whether to enable c-ares for DNS lookups])
62   OPT_ARES="default"
63   AC_ARG_ENABLE(ares,
64 AC_HELP_STRING([--enable-ares@<:@=PATH@:>@],[Enable c-ares for DNS lookups])
65 AC_HELP_STRING([--disable-ares],[Disable c-ares for DNS lookups]),
66   OPT_ARES=$enableval)
67   case "$OPT_ARES" in
68     no)
69       dnl --disable-ares option used
70       want_ares="no"
71       ;;
72     default)
73       dnl configure option not specified
74       want_ares="no"
75       ;;
76     *)
77       dnl --enable-ares option used
78       want_ares="yes"
79       if test -n "$enableval" && test "$enableval" != "yes"; then
80         want_ares_path="$enableval"
81       fi
82       ;;
83   esac
84   AC_MSG_RESULT([$want_ares])
85 ])
86
87
88 dnl CURL_CHECK_OPTION_CURLDEBUG
89 dnl -------------------------------------------------
90 dnl Verify if configure has been invoked with option
91 dnl --enable-curldebug or --disable-curldebug, and set
92 dnl shell variable want_curldebug value as appropriate.
93
94 AC_DEFUN([CURL_CHECK_OPTION_CURLDEBUG], [
95   AC_BEFORE([$0],[CURL_CHECK_CURLDEBUG])dnl
96   AC_MSG_CHECKING([whether to enable curl debug memory tracking])
97   OPT_CURLDEBUG_BUILD="default"
98   AC_ARG_ENABLE(curldebug,
99 AC_HELP_STRING([--enable-curldebug],[Enable curl debug memory tracking])
100 AC_HELP_STRING([--disable-curldebug],[Disable curl debug memory tracking]),
101   OPT_CURLDEBUG_BUILD=$enableval)
102   case "$OPT_CURLDEBUG_BUILD" in
103     no)
104       dnl --disable-curldebug option used
105       want_curldebug="no"
106       AC_MSG_RESULT([no])
107       ;;
108     default)
109       dnl configure's curldebug option not specified. Initially we will
110       dnl handle this as a a request to use the same setting as option
111       dnl --enable-debug. IOW, initially, for debug-enabled builds
112       dnl this will be handled as a request to enable curldebug if
113       dnl possible, and for debug-disabled builds this will be handled
114       dnl as a request to disable curldebug.
115       if test "$want_debug" = "yes"; then
116         AC_MSG_RESULT([(assumed) yes])
117       else
118         AC_MSG_RESULT([no])
119       fi
120       want_curldebug_assumed="yes"
121       want_curldebug="$want_debug"
122       ;;
123     *)
124       dnl --enable-curldebug option used.
125       dnl The use of this option value is a request to enable curl's
126       dnl debug memory tracking for the libcurl library. This can only
127       dnl be done when some requisites are simultaneously satisfied.
128       dnl Later on, these requisites are verified and if they are not
129       dnl fully satisfied the option will be ignored and act as if
130       dnl --disable-curldebug had been given setting shell variable
131       dnl want_curldebug to 'no'.
132       want_curldebug="yes"
133       AC_MSG_RESULT([yes])
134       ;;
135   esac
136 ])
137
138
139 dnl CURL_CHECK_OPTION_DEBUG
140 dnl -------------------------------------------------
141 dnl Verify if configure has been invoked with option
142 dnl --enable-debug or --disable-debug, and set shell
143 dnl variable want_debug value as appropriate.
144
145 AC_DEFUN([CURL_CHECK_OPTION_DEBUG], [
146   AC_BEFORE([$0],[CURL_CHECK_OPTION_WARNINGS])dnl
147   AC_BEFORE([$0],[CURL_CHECK_OPTION_CURLDEBUG])dnl
148   AC_BEFORE([$0],[CURL_CHECK_PROG_CC])dnl
149   AC_MSG_CHECKING([whether to enable debug build options])
150   OPT_DEBUG_BUILD="default"
151   AC_ARG_ENABLE(debug,
152 AC_HELP_STRING([--enable-debug],[Enable debug build options])
153 AC_HELP_STRING([--disable-debug],[Disable debug build options]),
154   OPT_DEBUG_BUILD=$enableval)
155   case "$OPT_DEBUG_BUILD" in
156     no)
157       dnl --disable-debug option used
158       want_debug="no"
159       ;;
160     default)
161       dnl configure option not specified
162       want_debug="no"
163       ;;
164     *)
165       dnl --enable-debug option used
166       want_debug="yes"
167       ;;
168   esac
169   AC_MSG_RESULT([$want_debug])
170 ])
171
172
173 dnl CURL_CHECK_OPTION_NONBLOCKING
174 dnl -------------------------------------------------
175 dnl Verify if configure has been invoked with option
176 dnl --enable-nonblocking or --disable-nonblocking, and
177 dnl set shell variable want_nonblocking as appropriate.
178
179 AC_DEFUN([CURL_CHECK_OPTION_NONBLOCKING], [
180   AC_BEFORE([$0],[CURL_CHECK_NONBLOCKING_SOCKET])dnl
181   AC_MSG_CHECKING([whether to enable non-blocking communications])
182   OPT_NONBLOCKING="default"
183   AC_ARG_ENABLE(nonblocking,
184 AC_HELP_STRING([--enable-nonblocking],[Enable non-blocking communications])
185 AC_HELP_STRING([--disable-nonblocking],[Disable non-blocking communications]),
186   OPT_NONBLOCKING=$enableval)
187   case "$OPT_NONBLOCKING" in
188     no)
189       dnl --disable-nonblocking option used
190       want_nonblocking="no"
191       ;;
192     default)
193       dnl configure option not specified
194       want_nonblocking="yes"
195       ;;
196     *)
197       dnl --enable-nonblocking option used
198       want_nonblocking="yes"
199       ;;
200   esac
201   AC_MSG_RESULT([$want_nonblocking])
202 ])
203
204
205 dnl CURL_CHECK_OPTION_OPTIMIZE
206 dnl -------------------------------------------------
207 dnl Verify if configure has been invoked with option
208 dnl --enable-optimize or --disable-optimize, and set
209 dnl shell variable want_optimize value as appropriate.
210
211 AC_DEFUN([CURL_CHECK_OPTION_OPTIMIZE], [
212   AC_REQUIRE([CURL_CHECK_OPTION_DEBUG])dnl
213   AC_BEFORE([$0],[CURL_CHECK_PROG_CC])dnl
214   AC_MSG_CHECKING([whether to enable compiler optimizer])
215   OPT_COMPILER_OPTIMIZE="default"
216   AC_ARG_ENABLE(optimize,
217 AC_HELP_STRING([--enable-optimize],[Enable compiler optimizations])
218 AC_HELP_STRING([--disable-optimize],[Disable compiler optimizations]),
219   OPT_COMPILER_OPTIMIZE=$enableval)
220   case "$OPT_COMPILER_OPTIMIZE" in
221     no)
222       dnl --disable-optimize option used. We will handle this as
223       dnl a request to disable compiler optimizations if possible.
224       dnl If the compiler is known CFLAGS and CPPFLAGS will be
225       dnl overridden, otherwise this can not be honored.
226       want_optimize="no"
227       AC_MSG_RESULT([no])
228       ;;
229     default)
230       dnl configure's optimize option not specified. Initially we will
231       dnl handle this as a a request contrary to configure's setting
232       dnl for --enable-debug. IOW, initially, for debug-enabled builds
233       dnl this will be handled as a request to disable optimizations if
234       dnl possible, and for debug-disabled builds this will be handled
235       dnl initially as a request to enable optimizations if possible.
236       dnl Finally, if the compiler is known and CFLAGS and CPPFLAGS do
237       dnl not have any optimizer flag the request will be honored, in
238       dnl any other case the request can not be honored.
239       dnl IOW, existing optimizer flags defined in CFLAGS or CPPFLAGS
240       dnl will always take precedence over any initial assumption.
241       if test "$want_debug" = "yes"; then
242         want_optimize="assume_no"
243         AC_MSG_RESULT([(assumed) no])
244       else
245         want_optimize="assume_yes"
246         AC_MSG_RESULT([(assumed) yes])
247       fi
248       ;;
249     *)
250       dnl --enable-optimize option used. We will handle this as
251       dnl a request to enable compiler optimizations if possible.
252       dnl If the compiler is known CFLAGS and CPPFLAGS will be
253       dnl overridden, otherwise this can not be honored.
254       want_optimize="yes"
255       AC_MSG_RESULT([yes])
256       ;;
257   esac
258 ])
259
260
261 dnl CURL_CHECK_OPTION_THREADS
262 dnl -------------------------------------------------
263 dnl Verify if configure has been invoked with option
264 dnl --enable-threads or --disable-threads, and
265 dnl set shell variable want_threads as appropriate.
266
267 dnl AC_DEFUN([CURL_CHECK_OPTION_THREADS], [
268 dnl   AC_BEFORE([$0],[CURL_CHECK_LIB_THREADS])dnl
269 dnl   AC_MSG_CHECKING([whether to enable threads for DNS lookups])
270 dnl   OPT_THREADS="default"
271 dnl   AC_ARG_ENABLE(threads,
272 dnl AC_HELP_STRING([--enable-threads@<:@=PATH@:>@],[Enable threads for DNS lookups])
273 dnl AC_HELP_STRING([--disable-threads],[Disable threads for DNS lookups]),
274 dnl   OPT_THREADS=$enableval)
275 dnl   case "$OPT_THREADS" in
276 dnl     no)
277 dnl       dnl --disable-threads option used
278 dnl       want_threads="no"
279 dnl       AC_MSG_RESULT([no])
280 dnl       ;;
281 dnl     default)
282 dnl       dnl configure option not specified
283 dnl       want_threads="no"
284 dnl       AC_MSG_RESULT([(assumed) no])
285 dnl       ;;
286 dnl     *)
287 dnl       dnl --enable-threads option used
288 dnl       want_threads="yes"
289 dnl       want_threads_path="$enableval"
290 dnl       AC_MSG_RESULT([yes])
291 dnl       ;;
292 dnl   esac
293 dnl   #
294 dnl   if test "$want_ares" = "assume_yes"; then
295 dnl     if test "$want_threads" = "yes"; then
296 dnl       AC_MSG_CHECKING([whether to ignore c-ares enabling assumed setting])
297 dnl       AC_MSG_RESULT([yes])
298 dnl       want_ares="no"
299 dnl     else
300 dnl       want_ares="yes"
301 dnl     fi
302 dnl   fi
303 dnl   if test "$want_threads" = "yes" && test "$want_ares" = "yes"; then
304 dnl     AC_MSG_ERROR([options --enable-ares and --enable-threads are mutually exclusive, at most one may be enabled.])
305 dnl   fi
306 dnl ])
307
308
309 dnl CURL_CHECK_OPTION_WARNINGS
310 dnl -------------------------------------------------
311 dnl Verify if configure has been invoked with option
312 dnl --enable-warnings or --disable-warnings, and set
313 dnl shell variable want_warnings as appropriate.
314
315 AC_DEFUN([CURL_CHECK_OPTION_WARNINGS], [
316   AC_REQUIRE([CURL_CHECK_OPTION_DEBUG])dnl
317   AC_BEFORE([$0],[CURL_CHECK_OPTION_WERROR])dnl
318   AC_BEFORE([$0],[CURL_CHECK_PROG_CC])dnl
319   AC_MSG_CHECKING([whether to enable strict compiler warnings])
320   OPT_COMPILER_WARNINGS="default"
321   AC_ARG_ENABLE(warnings,
322 AC_HELP_STRING([--enable-warnings],[Enable strict compiler warnings])
323 AC_HELP_STRING([--disable-warnings],[Disable strict compiler warnings]),
324   OPT_COMPILER_WARNINGS=$enableval)
325   case "$OPT_COMPILER_WARNINGS" in
326     no)
327       dnl --disable-warnings option used
328       want_warnings="no"
329       ;;
330     default)
331       dnl configure option not specified, so
332       dnl use same setting as --enable-debug
333       want_warnings="$want_debug"
334       ;;
335     *)
336       dnl --enable-warnings option used
337       want_warnings="yes"
338       ;;
339   esac
340   AC_MSG_RESULT([$want_warnings])
341 ])
342
343 dnl CURL_CHECK_OPTION_WERROR
344 dnl -------------------------------------------------
345 dnl Verify if configure has been invoked with option
346 dnl --enable-werror or --disable-werror, and set
347 dnl shell variable want_werror as appropriate.
348
349 AC_DEFUN([CURL_CHECK_OPTION_WERROR], [
350   AC_BEFORE([$0],[CURL_CHECK_COMPILER])dnl
351   AC_MSG_CHECKING([whether to enable compiler warnings as errors])
352   OPT_COMPILER_WERROR="default"
353   AC_ARG_ENABLE(werror,
354 AC_HELP_STRING([--enable-werror],[Enable compiler warnings as errors])
355 AC_HELP_STRING([--disable-werror],[Disable compiler warnings as errors]),
356   OPT_COMPILER_WERROR=$enableval)
357   case "$OPT_COMPILER_WERROR" in
358     no)
359       dnl --disable-werror option used
360       want_werror="no"
361       ;;
362     default)
363       dnl configure option not specified
364       want_werror="no"
365       ;;
366     *)
367       dnl --enable-werror option used
368       want_werror="yes"
369       ;;
370   esac
371   AC_MSG_RESULT([$want_werror])
372 ])
373
374
375 dnl CURL_CHECK_NONBLOCKING_SOCKET
376 dnl -------------------------------------------------
377 dnl Check for how to set a socket into non-blocking state.
378
379 AC_DEFUN([CURL_CHECK_NONBLOCKING_SOCKET], [
380   AC_REQUIRE([CURL_CHECK_OPTION_NONBLOCKING])dnl
381   AC_REQUIRE([CURL_CHECK_FUNC_FCNTL])dnl
382   AC_REQUIRE([CURL_CHECK_FUNC_IOCTL])dnl
383   AC_REQUIRE([CURL_CHECK_FUNC_IOCTLSOCKET])dnl
384   AC_REQUIRE([CURL_CHECK_FUNC_IOCTLSOCKET_CAMEL])dnl
385   AC_REQUIRE([CURL_CHECK_FUNC_SETSOCKOPT])dnl
386   #
387   tst_method="unknown"
388   if test "$want_nonblocking" = "yes"; then
389     AC_MSG_CHECKING([how to set a socket into non-blocking mode])
390     if test "x$ac_cv_func_fcntl_o_nonblock" = "xyes"; then
391       tst_method="fcntl O_NONBLOCK"
392     elif test "x$ac_cv_func_ioctl_fionbio" = "xyes"; then
393       tst_method="ioctl FIONBIO"
394     elif test "x$ac_cv_func_ioctlsocket_fionbio" = "xyes"; then
395       tst_method="ioctlsocket FIONBIO"
396     elif test "x$ac_cv_func_ioctlsocket_camel_fionbio" = "xyes"; then
397       tst_method="IoctlSocket FIONBIO"
398     elif test "x$ac_cv_func_setsockopt_so_nonblock" = "xyes"; then
399       tst_method="setsockopt SO_NONBLOCK"
400     fi
401     AC_MSG_RESULT([$tst_method])
402     if test "$tst_method" = "unknown"; then
403       AC_MSG_WARN([cannot determine non-blocking socket method.])
404     fi
405   fi
406   if test "$tst_method" = "unknown"; then
407     AC_DEFINE_UNQUOTED(USE_BLOCKING_SOCKETS, 1,
408       [Define to disable non-blocking sockets.])
409     AC_MSG_WARN([non-blocking sockets disabled.])
410   fi
411 ])
412
413
414 dnl CURL_CHECK_LIB_ARES
415 dnl -------------------------------------------------
416 dnl When c-ares library support has been requested,
417 dnl performs necessary checks and adjustsments needed
418 dnl to enable support of this library.
419
420 AC_DEFUN([CURL_CHECK_LIB_ARES], [
421   #
422   if test "$want_ares" = "yes"; then
423     dnl c-ares library support has been requested
424     clean_CPPFLAGS="$CPPFLAGS"
425     clean_LDFLAGS="$LDFLAGS"
426     clean_LIBS="$LIBS"
427     embedded_ares="unknown"
428     configure_runpath=`pwd`
429     embedded_ares_builddir="$configure_runpath/ares"
430     if test -n "$want_ares_path"; then
431       dnl c-ares library path has been specified
432       ares_CPPFLAGS="-I$want_ares_path/include"
433       ares_LDFLAGS="-L$want_ares_path/lib"
434       ares_LIBS="-lcares"
435     else
436       dnl c-ares library path has not been given
437       if test -d "$srcdir/ares"; then
438         dnl c-ares sources embedded in curl tree
439         embedded_ares="yes"
440         AC_CONFIG_SUBDIRS(ares)
441         dnl c-ares has installable configured header files, path
442         dnl inclusion fully done in makefiles for in-tree builds.
443         ares_CPPFLAGS=""
444         ares_LDFLAGS="-L$embedded_ares_builddir"
445         ares_LIBS="-lcares"
446       else
447         dnl c-ares path not specified, use defaults
448         ares_CPPFLAGS=""
449         ares_LDFLAGS=""
450         ares_LIBS="-lcares"
451       fi
452     fi
453     #
454     CPPFLAGS="$ares_CPPFLAGS $clean_CPPFLAGS"
455     LDFLAGS="$ares_LDFLAGS $clean_LDFLAGS"
456     LIBS="$ares_LIBS $clean_LIBS"
457     #
458     if test "$embedded_ares" != "yes"; then
459       dnl check if c-ares new enough when not using an embedded
460       dnl source tree one which normally has not been built yet.
461       AC_MSG_CHECKING([that c-ares is good and recent enough])
462       AC_LINK_IFELSE([
463         AC_LANG_PROGRAM([[
464 #include <ares.h>
465           /* set of dummy functions in case c-ares was built with debug */
466           void curl_dofree() { }
467           void curl_sclose() { }
468           void curl_domalloc() { }
469           void curl_docalloc() { }
470           void curl_socket() { }
471         ]],[[
472           ares_channel channel;
473           ares_cancel(channel); /* added in 1.2.0 */
474           ares_process_fd(channel, 0, 0); /* added in 1.4.0 */
475           ares_dup(&channel, channel); /* added in 1.6.0 */
476         ]])
477       ],[
478         AC_MSG_RESULT([yes])
479       ],[
480         AC_MSG_RESULT([no])
481         AC_MSG_ERROR([c-ares library defective or too old])
482         dnl restore initial settings
483         CPPFLAGS="$clean_CPPFLAGS"
484         LDFLAGS="$clean_LDFLAGS"
485         LIBS="$clean_LIBS"
486         # prevent usage
487         want_ares="no"
488       ])
489     fi
490     if test "$want_ares" = "yes"; then
491       dnl finally c-ares will be used
492       AC_DEFINE(USE_ARES, 1, [Define to enable c-ares support])
493       AC_SUBST([USE_ARES], [1])
494       curl_res_msg="c-ares"
495     fi
496   fi
497 ])
498