1#***************************************************************************
2#                                  _   _ ____  _
3#  Project                     ___| | | |  _ \| |
4#                             / __| | | | |_) | |
5#                            | (__| |_| |  _ <| |___
6#                             \___|\___/|_| \_\_____|
7#
8# Copyright (C) 1998 - 2019, 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 https://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#***************************************************************************
22dnl Process this file with autoconf to produce a configure script.
23
24AC_PREREQ(2.57)
25
26dnl We don't know the version number "statically" so we use a dash here
27AC_INIT([curl], [-], [a suitable curl mailing list: https://curl.haxx.se/mail/])
28
29XC_OVR_ZZ50
30XC_OVR_ZZ60
31CURL_OVERRIDE_AUTOCONF
32
33dnl configure script copyright
34AC_COPYRIGHT([Copyright (c) 1998 - 2019 Daniel Stenberg, <daniel@haxx.se>
35This configure script may be copied, distributed and modified under the
36terms of the curl license; see COPYING for more details])
37
38AC_CONFIG_SRCDIR([lib/urldata.h])
39AC_CONFIG_HEADERS(lib/curl_config.h)
40AC_CONFIG_MACRO_DIR([m4])
41AM_MAINTAINER_MODE
42m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
43
44CURL_CHECK_OPTION_DEBUG
45CURL_CHECK_OPTION_OPTIMIZE
46CURL_CHECK_OPTION_WARNINGS
47CURL_CHECK_OPTION_WERROR
48CURL_CHECK_OPTION_CURLDEBUG
49CURL_CHECK_OPTION_SYMBOL_HIDING
50CURL_CHECK_OPTION_ARES
51CURL_CHECK_OPTION_RT
52
53XC_CHECK_PATH_SEPARATOR
54
55#
56# save the configure arguments
57#
58CONFIGURE_OPTIONS="\"$ac_configure_args\""
59AC_SUBST(CONFIGURE_OPTIONS)
60
61CURL_CFLAG_EXTRAS=""
62if test X"$want_werror" = Xyes; then
63  CURL_CFLAG_EXTRAS="-Werror"
64  if test "$compiler_id" = "GNU_C"; then
65    dnl enable -pedantic-errors for GCC 5 and later,
66    dnl as before that it was the same as -Werror=pedantic
67    if test "$compiler_num" -ge "500"; then
68      CURL_CFLAG_EXTRAS="$CURL_CFLAG_EXTRAS -pedantic-errors"
69    fi
70  fi
71fi
72AC_SUBST(CURL_CFLAG_EXTRAS)
73
74dnl SED is mandatory for configure process and libtool.
75dnl Set it now, allowing it to be changed later.
76if test -z "$SED"; then
77  dnl allow it to be overridden
78  AC_PATH_PROG([SED], [sed], [not_found],
79    [$PATH:/usr/bin:/usr/local/bin])
80  if test -z "$SED" || test "$SED" = "not_found"; then
81    AC_MSG_ERROR([sed not found in PATH. Cannot continue without sed.])
82  fi
83fi
84AC_SUBST([SED])
85
86dnl GREP is mandatory for configure process and libtool.
87dnl Set it now, allowing it to be changed later.
88if test -z "$GREP"; then
89  dnl allow it to be overridden
90  AC_PATH_PROG([GREP], [grep], [not_found],
91    [$PATH:/usr/bin:/usr/local/bin])
92  if test -z "$GREP" || test "$GREP" = "not_found"; then
93    AC_MSG_ERROR([grep not found in PATH. Cannot continue without grep.])
94  fi
95fi
96AC_SUBST([GREP])
97
98dnl EGREP is mandatory for configure process and libtool.
99dnl Set it now, allowing it to be changed later.
100if test -z "$EGREP"; then
101  dnl allow it to be overridden
102  if echo a | ($GREP -E '(a|b)') >/dev/null 2>&1; then
103    AC_MSG_CHECKING([for egrep])
104    EGREP="$GREP -E"
105    AC_MSG_RESULT([$EGREP])
106  else
107    AC_PATH_PROG([EGREP], [egrep], [not_found],
108      [$PATH:/usr/bin:/usr/local/bin])
109  fi
110fi
111if test -z "$EGREP" || test "$EGREP" = "not_found"; then
112  AC_MSG_ERROR([egrep not found in PATH. Cannot continue without egrep.])
113fi
114AC_SUBST([EGREP])
115
116dnl AR is mandatory for configure process and libtool.
117dnl This is target dependent, so check it as a tool.
118if test -z "$AR"; then
119  dnl allow it to be overridden
120  AC_PATH_TOOL([AR], [ar], [not_found],
121    [$PATH:/usr/bin:/usr/local/bin])
122  if test -z "$AR" || test "$AR" = "not_found"; then
123    AC_MSG_ERROR([ar not found in PATH. Cannot continue without ar.])
124  fi
125fi
126AC_SUBST([AR])
127
128AC_SUBST(libext)
129
130dnl figure out the libcurl version
131CURLVERSION=`$SED -ne 's/^#define LIBCURL_VERSION "\(.*\)".*/\1/p' ${srcdir}/include/curl/curlver.h`
132XC_CHECK_PROG_CC
133
134dnl for --enable-code-coverage
135CURL_COVERAGE
136
137XC_AUTOMAKE
138AC_MSG_CHECKING([curl version])
139AC_MSG_RESULT($CURLVERSION)
140
141AC_SUBST(CURLVERSION)
142
143dnl
144dnl we extract the numerical version for curl-config only
145VERSIONNUM=`$SED -ne 's/^#define LIBCURL_VERSION_NUM 0x\([0-9A-Fa-f]*\).*/\1/p' ${srcdir}/include/curl/curlver.h`
146AC_SUBST(VERSIONNUM)
147
148dnl Solaris pkgadd support definitions
149PKGADD_PKG="HAXXcurl"
150PKGADD_NAME="curl - a client that groks URLs"
151PKGADD_VENDOR="curl.haxx.se"
152AC_SUBST(PKGADD_PKG)
153AC_SUBST(PKGADD_NAME)
154AC_SUBST(PKGADD_VENDOR)
155
156dnl
157dnl initialize all the info variables
158    curl_ssl_msg="no      (--with-{ssl,gnutls,nss,polarssl,mbedtls,cyassl,schannel,secure-transport,mesalink,amissl} )"
159    curl_ssh_msg="no      (--with-libssh2)"
160   curl_zlib_msg="no      (--with-zlib)"
161 curl_brotli_msg="no      (--with-brotli)"
162    curl_gss_msg="no      (--with-gssapi)"
163curl_tls_srp_msg="no      (--enable-tls-srp)"
164    curl_res_msg="default (--enable-ares / --enable-threaded-resolver)"
165   curl_ipv6_msg="no      (--enable-ipv6)"
166curl_unix_sockets_msg="no      (--enable-unix-sockets)"
167    curl_idn_msg="no      (--with-{libidn2,winidn})"
168 curl_manual_msg="no      (--enable-manual)"
169curl_libcurl_msg="enabled (--disable-libcurl-option)"
170curl_verbose_msg="enabled (--disable-verbose)"
171   curl_sspi_msg="no      (--enable-sspi)"
172   curl_ldap_msg="no      (--enable-ldap / --with-ldap-lib / --with-lber-lib)"
173  curl_ldaps_msg="no      (--enable-ldaps)"
174   curl_rtsp_msg="no      (--enable-rtsp)"
175   curl_rtmp_msg="no      (--with-librtmp)"
176  curl_mtlnk_msg="no      (--with-libmetalink)"
177    curl_psl_msg="no      (--with-libpsl)"
178
179    ssl_backends=
180
181dnl
182dnl Save some initial values the user might have provided
183dnl
184INITIAL_LDFLAGS=$LDFLAGS
185INITIAL_LIBS=$LIBS
186
187dnl
188dnl Detect the canonical host and target build environment
189dnl
190
191AC_CANONICAL_HOST
192dnl Get system canonical name
193AC_DEFINE_UNQUOTED(OS, "${host}", [cpu-machine-OS])
194
195# Silence warning: ar: 'u' modifier ignored since 'D' is the default
196AC_SUBST(AR_FLAGS, [cr])
197
198dnl This defines _ALL_SOURCE for AIX
199CURL_CHECK_AIX_ALL_SOURCE
200
201dnl Our configure and build reentrant settings
202CURL_CONFIGURE_THREAD_SAFE
203CURL_CONFIGURE_REENTRANT
204
205dnl check for how to do large files
206AC_SYS_LARGEFILE
207
208XC_LIBTOOL
209
210#
211# Automake conditionals based on libtool related checks
212#
213
214AM_CONDITIONAL([CURL_LT_SHLIB_USE_VERSION_INFO],
215  [test "x$xc_lt_shlib_use_version_info" = 'xyes'])
216AM_CONDITIONAL([CURL_LT_SHLIB_USE_NO_UNDEFINED],
217  [test "x$xc_lt_shlib_use_no_undefined" = 'xyes'])
218AM_CONDITIONAL([CURL_LT_SHLIB_USE_MIMPURE_TEXT],
219  [test "x$xc_lt_shlib_use_mimpure_text" = 'xyes'])
220
221#
222# Due to libtool and automake machinery limitations of not allowing
223# specifying separate CPPFLAGS or CFLAGS when compiling objects for
224# inclusion of these in shared or static libraries, we are forced to
225# build using separate configure runs for shared and static libraries
226# on systems where different CPPFLAGS or CFLAGS are mandatory in order
227# to compile objects for each kind of library. Notice that relying on
228# the '-DPIC' CFLAG that libtool provides is not valid given that the
229# user might for example choose to build static libraries with PIC.
230#
231
232#
233# Make our Makefile.am files use the staticlib CPPFLAG only when strictly
234# targeting a static library and not building its shared counterpart.
235#
236
237AM_CONDITIONAL([USE_CPPFLAG_CURL_STATICLIB],
238  [test "x$xc_lt_build_static_only" = 'xyes'])
239
240#
241# Make staticlib CPPFLAG variable and its definition visible in output
242# files unconditionally, providing an empty definition unless strictly
243# targeting a static library and not building its shared counterpart.
244#
245
246CPPFLAG_CURL_STATICLIB=
247if test "x$xc_lt_build_static_only" = 'xyes'; then
248  CPPFLAG_CURL_STATICLIB='-DCURL_STATICLIB'
249fi
250AC_SUBST([CPPFLAG_CURL_STATICLIB])
251
252
253# Determine whether all dependent libraries must be specified when linking
254if test "X$enable_shared" = "Xyes" -a "X$link_all_deplibs" = "Xno"
255then
256    REQUIRE_LIB_DEPS=no
257else
258    REQUIRE_LIB_DEPS=yes
259fi
260AC_SUBST(REQUIRE_LIB_DEPS)
261AM_CONDITIONAL(USE_EXPLICIT_LIB_DEPS, test x$REQUIRE_LIB_DEPS = xyes)
262
263dnl check if there's a way to force code inline
264AC_C_INLINE
265
266dnl **********************************************************************
267dnl platform/compiler/architecture specific checks/flags
268dnl **********************************************************************
269
270CURL_CHECK_COMPILER
271CURL_SET_COMPILER_BASIC_OPTS
272CURL_SET_COMPILER_DEBUG_OPTS
273CURL_SET_COMPILER_OPTIMIZE_OPTS
274CURL_SET_COMPILER_WARNING_OPTS
275
276if test "$compiler_id" = "INTEL_UNIX_C"; then
277  #
278  if test "$compiler_num" -ge "1000"; then
279    dnl icc 10.X or later
280    CFLAGS="$CFLAGS -shared-intel"
281  elif test "$compiler_num" -ge "900"; then
282    dnl icc 9.X specific
283    CFLAGS="$CFLAGS -i-dynamic"
284  fi
285  #
286fi
287
288CURL_CHECK_COMPILER_HALT_ON_ERROR
289CURL_CHECK_COMPILER_ARRAY_SIZE_NEGATIVE
290CURL_CHECK_COMPILER_PROTOTYPE_MISMATCH
291CURL_CHECK_COMPILER_SYMBOL_HIDING
292
293CURL_CHECK_CURLDEBUG
294AM_CONDITIONAL(CURLDEBUG, test x$want_curldebug = xyes)
295
296supports_unittests=yes
297# cross-compilation of unit tests static library/programs fails when
298# libcurl shared library is built. This might be due to a libtool or
299# automake issue. In this case we disable unit tests.
300if test "x$cross_compiling" != "xno" &&
301   test "x$enable_shared" != "xno"; then
302  supports_unittests=no
303fi
304
305# IRIX 6.5.24 gcc 3.3 autobuilds fail unittests library compilation due to
306# a problem related with OpenSSL headers and library versions not matching.
307# Disable unit tests while time to further investigate this is found.
308case $host in
309  mips-sgi-irix6.5)
310    if test "$compiler_id" = "GNU_C"; then
311      supports_unittests=no
312    fi
313    ;;
314esac
315
316# All AIX autobuilds fails unit tests linking against unittests library
317# due to unittests library being built with no symbols or members. Libtool ?
318# Disable unit tests while time to further investigate this is found.
319case $host_os in
320  aix*)
321    supports_unittests=no
322    ;;
323esac
324
325dnl Build unit tests when option --enable-debug is given.
326if test "x$want_debug" = "xyes" &&
327   test "x$supports_unittests" = "xyes"; then
328  want_unittests=yes
329else
330  want_unittests=no
331fi
332AM_CONDITIONAL(BUILD_UNITTESTS, test x$want_unittests = xyes)
333
334dnl **********************************************************************
335dnl Compilation based checks should not be done before this point.
336dnl **********************************************************************
337
338dnl **********************************************************************
339dnl Make sure that our checks for headers windows.h winsock.h winsock2.h
340dnl and ws2tcpip.h take precedence over any other further checks which
341dnl could be done later using AC_CHECK_HEADER or AC_CHECK_HEADERS for
342dnl this specific header files. And do them before its results are used.
343dnl **********************************************************************
344
345CURL_CHECK_HEADER_WINDOWS
346CURL_CHECK_NATIVE_WINDOWS
347case X-"$curl_cv_native_windows" in
348  X-yes)
349    CURL_CHECK_HEADER_WINSOCK
350    CURL_CHECK_HEADER_WINSOCK2
351    CURL_CHECK_HEADER_WS2TCPIP
352    CURL_CHECK_HEADER_WINLDAP
353    CURL_CHECK_HEADER_WINBER
354    ;;
355  *)
356    curl_cv_header_winsock_h="no"
357    curl_cv_header_winsock2_h="no"
358    curl_cv_header_ws2tcpip_h="no"
359    curl_cv_header_winldap_h="no"
360    curl_cv_header_winber_h="no"
361    ;;
362esac
363CURL_CHECK_WIN32_LARGEFILE
364
365CURL_MAC_CFLAGS
366CURL_SUPPORTS_BUILTIN_AVAILABLE
367
368
369dnl ************************************************************
370dnl switch off particular protocols
371dnl
372AC_MSG_CHECKING([whether to support http])
373AC_ARG_ENABLE(http,
374AC_HELP_STRING([--enable-http],[Enable HTTP support])
375AC_HELP_STRING([--disable-http],[Disable HTTP support]),
376[ case "$enableval" in
377  no)
378       AC_MSG_RESULT(no)
379       AC_DEFINE(CURL_DISABLE_HTTP, 1, [to disable HTTP])
380       disable_http="yes"
381       AC_MSG_WARN([disable HTTP disables FTP over proxy and RTSP])
382       AC_SUBST(CURL_DISABLE_HTTP, [1])
383       AC_DEFINE(CURL_DISABLE_RTSP, 1, [to disable RTSP])
384       AC_SUBST(CURL_DISABLE_RTSP, [1])
385       ;;
386  *)   AC_MSG_RESULT(yes)
387       ;;
388  esac ],
389       AC_MSG_RESULT(yes)
390)
391AC_MSG_CHECKING([whether to support ftp])
392AC_ARG_ENABLE(ftp,
393AC_HELP_STRING([--enable-ftp],[Enable FTP support])
394AC_HELP_STRING([--disable-ftp],[Disable FTP support]),
395[ case "$enableval" in
396  no)
397       AC_MSG_RESULT(no)
398       AC_DEFINE(CURL_DISABLE_FTP, 1, [to disable FTP])
399       AC_SUBST(CURL_DISABLE_FTP, [1])
400       ;;
401  *)   AC_MSG_RESULT(yes)
402       ;;
403  esac ],
404       AC_MSG_RESULT(yes)
405)
406AC_MSG_CHECKING([whether to support file])
407AC_ARG_ENABLE(file,
408AC_HELP_STRING([--enable-file],[Enable FILE support])
409AC_HELP_STRING([--disable-file],[Disable FILE support]),
410[ case "$enableval" in
411  no)
412       AC_MSG_RESULT(no)
413       AC_DEFINE(CURL_DISABLE_FILE, 1, [to disable FILE])
414       AC_SUBST(CURL_DISABLE_FILE, [1])
415       ;;
416  *)   AC_MSG_RESULT(yes)
417       ;;
418  esac ],
419       AC_MSG_RESULT(yes)
420)
421AC_MSG_CHECKING([whether to support ldap])
422AC_ARG_ENABLE(ldap,
423AC_HELP_STRING([--enable-ldap],[Enable LDAP support])
424AC_HELP_STRING([--disable-ldap],[Disable LDAP support]),
425[ case "$enableval" in
426  no)
427       AC_MSG_RESULT(no)
428       AC_DEFINE(CURL_DISABLE_LDAP, 1, [to disable LDAP])
429       AC_SUBST(CURL_DISABLE_LDAP, [1])
430       ;;
431  *)
432       AC_MSG_RESULT(yes)
433       ;;
434  esac ],[
435       AC_MSG_RESULT(yes) ]
436)
437AC_MSG_CHECKING([whether to support ldaps])
438AC_ARG_ENABLE(ldaps,
439AC_HELP_STRING([--enable-ldaps],[Enable LDAPS support])
440AC_HELP_STRING([--disable-ldaps],[Disable LDAPS support]),
441[ case "$enableval" in
442  no)
443       AC_MSG_RESULT(no)
444       AC_DEFINE(CURL_DISABLE_LDAPS, 1, [to disable LDAPS])
445       AC_SUBST(CURL_DISABLE_LDAPS, [1])
446       ;;
447  *)   if test "x$CURL_DISABLE_LDAP" = "x1" ; then
448         AC_MSG_RESULT(LDAP needs to be enabled to support LDAPS)
449         AC_DEFINE(CURL_DISABLE_LDAPS, 1, [to disable LDAPS])
450         AC_SUBST(CURL_DISABLE_LDAPS, [1])
451       else
452         AC_MSG_RESULT(yes)
453         AC_DEFINE(HAVE_LDAP_SSL, 1, [Use LDAPS implementation])
454         AC_SUBST(HAVE_LDAP_SSL, [1])
455       fi
456       ;;
457  esac ],[
458       if test "x$CURL_DISABLE_LDAP" = "x1" ; then
459         AC_MSG_RESULT(no)
460         AC_DEFINE(CURL_DISABLE_LDAPS, 1, [to disable LDAPS])
461         AC_SUBST(CURL_DISABLE_LDAPS, [1])
462       else
463         AC_MSG_RESULT(yes)
464         AC_DEFINE(HAVE_LDAP_SSL, 1, [Use LDAPS implementation])
465         AC_SUBST(HAVE_LDAP_SSL, [1])
466       fi ]
467)
468
469AC_MSG_CHECKING([whether to support rtsp])
470AC_ARG_ENABLE(rtsp,
471AC_HELP_STRING([--enable-rtsp],[Enable RTSP support])
472AC_HELP_STRING([--disable-rtsp],[Disable RTSP support]),
473[ case "$enableval" in
474  no)
475       AC_MSG_RESULT(no)
476       AC_DEFINE(CURL_DISABLE_RTSP, 1, [to disable RTSP])
477       AC_SUBST(CURL_DISABLE_RTSP, [1])
478       ;;
479  *)   if test x$CURL_DISABLE_HTTP = x1 ; then
480          AC_MSG_ERROR(HTTP support needs to be enabled in order to enable RTSP support!)
481       else
482          AC_MSG_RESULT(yes)
483          curl_rtsp_msg="enabled"
484       fi
485       ;;
486  esac ],
487       if test "x$CURL_DISABLE_HTTP" != "x1"; then
488          AC_MSG_RESULT(yes)
489          curl_rtsp_msg="enabled"
490       else
491          AC_MSG_RESULT(no)
492       fi
493)
494
495AC_MSG_CHECKING([whether to support proxies])
496AC_ARG_ENABLE(proxy,
497AC_HELP_STRING([--enable-proxy],[Enable proxy support])
498AC_HELP_STRING([--disable-proxy],[Disable proxy support]),
499[ case "$enableval" in
500  no)
501       AC_MSG_RESULT(no)
502       AC_DEFINE(CURL_DISABLE_PROXY, 1, [to disable proxies])
503       AC_SUBST(CURL_DISABLE_PROXY, [1])
504       ;;
505  *)   AC_MSG_RESULT(yes)
506       ;;
507  esac ],
508       AC_MSG_RESULT(yes)
509)
510
511AC_MSG_CHECKING([whether to support dict])
512AC_ARG_ENABLE(dict,
513AC_HELP_STRING([--enable-dict],[Enable DICT support])
514AC_HELP_STRING([--disable-dict],[Disable DICT support]),
515[ case "$enableval" in
516  no)
517       AC_MSG_RESULT(no)
518       AC_DEFINE(CURL_DISABLE_DICT, 1, [to disable DICT])
519       AC_SUBST(CURL_DISABLE_DICT, [1])
520       ;;
521  *)   AC_MSG_RESULT(yes)
522       ;;
523  esac ],
524       AC_MSG_RESULT(yes)
525)
526AC_MSG_CHECKING([whether to support telnet])
527AC_ARG_ENABLE(telnet,
528AC_HELP_STRING([--enable-telnet],[Enable TELNET support])
529AC_HELP_STRING([--disable-telnet],[Disable TELNET support]),
530[ case "$enableval" in
531  no)
532       AC_MSG_RESULT(no)
533       AC_DEFINE(CURL_DISABLE_TELNET, 1, [to disable TELNET])
534       AC_SUBST(CURL_DISABLE_TELNET, [1])
535       ;;
536  *)   AC_MSG_RESULT(yes)
537       ;;
538  esac ],
539       AC_MSG_RESULT(yes)
540)
541AC_MSG_CHECKING([whether to support tftp])
542AC_ARG_ENABLE(tftp,
543AC_HELP_STRING([--enable-tftp],[Enable TFTP support])
544AC_HELP_STRING([--disable-tftp],[Disable TFTP support]),
545[ case "$enableval" in
546  no)
547       AC_MSG_RESULT(no)
548       AC_DEFINE(CURL_DISABLE_TFTP, 1, [to disable TFTP])
549       AC_SUBST(CURL_DISABLE_TFTP, [1])
550       ;;
551  *)   AC_MSG_RESULT(yes)
552       ;;
553  esac ],
554       AC_MSG_RESULT(yes)
555)
556
557AC_MSG_CHECKING([whether to support pop3])
558AC_ARG_ENABLE(pop3,
559AC_HELP_STRING([--enable-pop3],[Enable POP3 support])
560AC_HELP_STRING([--disable-pop3],[Disable POP3 support]),
561[ case "$enableval" in
562  no)
563       AC_MSG_RESULT(no)
564       AC_DEFINE(CURL_DISABLE_POP3, 1, [to disable POP3])
565       AC_SUBST(CURL_DISABLE_POP3, [1])
566       ;;
567  *)   AC_MSG_RESULT(yes)
568       ;;
569  esac ],
570       AC_MSG_RESULT(yes)
571)
572
573
574AC_MSG_CHECKING([whether to support imap])
575AC_ARG_ENABLE(imap,
576AC_HELP_STRING([--enable-imap],[Enable IMAP support])
577AC_HELP_STRING([--disable-imap],[Disable IMAP support]),
578[ case "$enableval" in
579  no)
580       AC_MSG_RESULT(no)
581       AC_DEFINE(CURL_DISABLE_IMAP, 1, [to disable IMAP])
582       AC_SUBST(CURL_DISABLE_IMAP, [1])
583       ;;
584  *)   AC_MSG_RESULT(yes)
585       ;;
586  esac ],
587       AC_MSG_RESULT(yes)
588)
589
590
591AC_MSG_CHECKING([whether to support smb])
592AC_ARG_ENABLE(smb,
593AC_HELP_STRING([--enable-smb],[Enable SMB/CIFS support])
594AC_HELP_STRING([--disable-smb],[Disable SMB/CIFS support]),
595[ case "$enableval" in
596  no)
597       AC_MSG_RESULT(no)
598       AC_DEFINE(CURL_DISABLE_SMB, 1, [to disable SMB/CIFS])
599       AC_SUBST(CURL_DISABLE_SMB, [1])
600       ;;
601  *)   AC_MSG_RESULT(yes)
602       ;;
603  esac ],
604       AC_MSG_RESULT(yes)
605)
606
607AC_MSG_CHECKING([whether to support smtp])
608AC_ARG_ENABLE(smtp,
609AC_HELP_STRING([--enable-smtp],[Enable SMTP support])
610AC_HELP_STRING([--disable-smtp],[Disable SMTP support]),
611[ case "$enableval" in
612  no)
613       AC_MSG_RESULT(no)
614       AC_DEFINE(CURL_DISABLE_SMTP, 1, [to disable SMTP])
615       AC_SUBST(CURL_DISABLE_SMTP, [1])
616       ;;
617  *)   AC_MSG_RESULT(yes)
618       ;;
619  esac ],
620       AC_MSG_RESULT(yes)
621)
622
623AC_MSG_CHECKING([whether to support gopher])
624AC_ARG_ENABLE(gopher,
625AC_HELP_STRING([--enable-gopher],[Enable Gopher support])
626AC_HELP_STRING([--disable-gopher],[Disable Gopher support]),
627[ case "$enableval" in
628  no)
629       AC_MSG_RESULT(no)
630       AC_DEFINE(CURL_DISABLE_GOPHER, 1, [to disable Gopher])
631       AC_SUBST(CURL_DISABLE_GOPHER, [1])
632       ;;
633  *)   AC_MSG_RESULT(yes)
634       ;;
635  esac ],
636       AC_MSG_RESULT(yes)
637)
638
639
640dnl **********************************************************************
641dnl Check for built-in manual
642dnl **********************************************************************
643
644AC_MSG_CHECKING([whether to provide built-in manual])
645AC_ARG_ENABLE(manual,
646AC_HELP_STRING([--enable-manual],[Enable built-in manual])
647AC_HELP_STRING([--disable-manual],[Disable built-in manual]),
648[ case "$enableval" in
649  no)
650       AC_MSG_RESULT(no)
651       ;;
652  *)   AC_MSG_RESULT(yes)
653       USE_MANUAL="1"
654       ;;
655  esac ],
656       AC_MSG_RESULT(yes)
657       USE_MANUAL="1"
658)
659dnl The actual use of the USE_MANUAL variable is done much later in this
660dnl script to allow other actions to disable it as well.
661
662dnl ************************************************************
663dnl disable C code generation support
664dnl
665AC_MSG_CHECKING([whether to enable generation of C code])
666AC_ARG_ENABLE(libcurl_option,
667AC_HELP_STRING([--enable-libcurl-option],[Enable --libcurl C code generation support])
668AC_HELP_STRING([--disable-libcurl-option],[Disable --libcurl C code generation support]),
669[ case "$enableval" in
670  no)
671       AC_MSG_RESULT(no)
672       AC_DEFINE(CURL_DISABLE_LIBCURL_OPTION, 1, [to disable --libcurl C code generation option])
673       curl_libcurl_msg="no"
674       ;;
675  *)   AC_MSG_RESULT(yes)
676       ;;
677  esac ],
678       AC_MSG_RESULT(yes)
679)
680
681dnl **********************************************************************
682dnl Checks for libraries.
683dnl **********************************************************************
684
685AC_MSG_CHECKING([whether to use libgcc])
686AC_ARG_ENABLE(libgcc,
687AC_HELP_STRING([--enable-libgcc],[use libgcc when linking]),
688[ case "$enableval" in
689  yes)
690       LIBS="-lgcc $LIBS"
691       AC_MSG_RESULT(yes)
692       ;;
693  *)   AC_MSG_RESULT(no)
694       ;;
695  esac ],
696       AC_MSG_RESULT(no)
697)
698
699CURL_CHECK_LIB_XNET
700
701dnl gethostbyname without lib or in the nsl lib?
702AC_CHECK_FUNC(gethostbyname,
703              [HAVE_GETHOSTBYNAME="1"
704              ],
705              [ AC_CHECK_LIB(nsl, gethostbyname,
706                             [HAVE_GETHOSTBYNAME="1"
707                             LIBS="-lnsl $LIBS"
708                             ])
709              ])
710
711if test "$HAVE_GETHOSTBYNAME" != "1"
712then
713  dnl gethostbyname in the socket lib?
714  AC_CHECK_LIB(socket, gethostbyname,
715               [HAVE_GETHOSTBYNAME="1"
716               LIBS="-lsocket $LIBS"
717               ])
718fi
719
720if test "$HAVE_GETHOSTBYNAME" != "1"
721then
722  dnl gethostbyname in the watt lib?
723  AC_CHECK_LIB(watt, gethostbyname,
724               [HAVE_GETHOSTBYNAME="1"
725               CPPFLAGS="-I/dev/env/WATT_ROOT/inc"
726               LDFLAGS="-L/dev/env/WATT_ROOT/lib"
727               LIBS="-lwatt $LIBS"
728               ])
729fi
730
731dnl At least one system has been identified to require BOTH nsl and socket
732dnl libs at the same time to link properly.
733if test "$HAVE_GETHOSTBYNAME" != "1"
734then
735  AC_MSG_CHECKING([for gethostbyname with both nsl and socket libs])
736  my_ac_save_LIBS=$LIBS
737  LIBS="-lnsl -lsocket $LIBS"
738  AC_LINK_IFELSE([
739    AC_LANG_PROGRAM([[
740    ]],[[
741      gethostbyname();
742    ]])
743  ],[
744    AC_MSG_RESULT([yes])
745    HAVE_GETHOSTBYNAME="1"
746  ],[
747    AC_MSG_RESULT([no])
748    LIBS=$my_ac_save_LIBS
749  ])
750fi
751
752if test "$HAVE_GETHOSTBYNAME" != "1"
753then
754  dnl This is for winsock systems
755  if test "$curl_cv_header_windows_h" = "yes"; then
756    if test "$curl_cv_header_winsock_h" = "yes"; then
757      case $host in
758        *-*-mingw32ce*)
759          winsock_LIB="-lwinsock"
760          ;;
761        *)
762          winsock_LIB="-lwsock32"
763          ;;
764      esac
765    fi
766    if test "$curl_cv_header_winsock2_h" = "yes"; then
767      winsock_LIB="-lws2_32"
768    fi
769    if test ! -z "$winsock_LIB"; then
770      my_ac_save_LIBS=$LIBS
771      LIBS="$winsock_LIB $LIBS"
772      AC_MSG_CHECKING([for gethostbyname in $winsock_LIB])
773      AC_LINK_IFELSE([
774        AC_LANG_PROGRAM([[
775#ifdef HAVE_WINDOWS_H
776#ifndef WIN32_LEAN_AND_MEAN
777#define WIN32_LEAN_AND_MEAN
778#endif
779#include <windows.h>
780#ifdef HAVE_WINSOCK2_H
781#include <winsock2.h>
782#else
783#ifdef HAVE_WINSOCK_H
784#include <winsock.h>
785#endif
786#endif
787#endif
788        ]],[[
789          gethostbyname("www.dummysite.com");
790        ]])
791      ],[
792        AC_MSG_RESULT([yes])
793        HAVE_GETHOSTBYNAME="1"
794      ],[
795        AC_MSG_RESULT([no])
796        winsock_LIB=""
797        LIBS=$my_ac_save_LIBS
798      ])
799    fi
800  fi
801fi
802
803if test "$HAVE_GETHOSTBYNAME" != "1"
804then
805  dnl This is for Minix 3.1
806  AC_MSG_CHECKING([for gethostbyname for Minix 3])
807  AC_LINK_IFELSE([
808    AC_LANG_PROGRAM([[
809/* Older Minix versions may need <net/gen/netdb.h> here instead */
810#include <netdb.h>
811    ]],[[
812      gethostbyname("www.dummysite.com");
813    ]])
814  ],[
815    AC_MSG_RESULT([yes])
816    HAVE_GETHOSTBYNAME="1"
817  ],[
818    AC_MSG_RESULT([no])
819  ])
820fi
821
822if test "$HAVE_GETHOSTBYNAME" != "1"
823then
824  dnl This is for eCos with a stubbed DNS implementation
825  AC_MSG_CHECKING([for gethostbyname for eCos])
826  AC_LINK_IFELSE([
827    AC_LANG_PROGRAM([[
828#include <stdio.h>
829#include <netdb.h>
830    ]],[[
831      gethostbyname("www.dummysite.com");
832    ]])
833  ],[
834    AC_MSG_RESULT([yes])
835    HAVE_GETHOSTBYNAME="1"
836  ],[
837    AC_MSG_RESULT([no])
838  ])
839fi
840
841if test "$HAVE_GETHOSTBYNAME" != "1"
842then
843  dnl This is for AmigaOS with bsdsocket.library - needs testing before -lnet
844  AC_MSG_CHECKING([for gethostbyname for AmigaOS bsdsocket.library])
845  AC_LINK_IFELSE([
846    AC_LANG_PROGRAM([[
847#include <proto/bsdsocket.h>
848struct Library *SocketBase = NULL;
849    ]],[[
850      gethostbyname("www.dummysite.com");
851    ]])
852  ],[
853    AC_MSG_RESULT([yes])
854    HAVE_GETHOSTBYNAME="1"
855    HAVE_PROTO_BSDSOCKET_H="1"
856    AC_DEFINE(HAVE_PROTO_BSDSOCKET_H, 1, [if Amiga bsdsocket.library is in use])
857    AC_SUBST(HAVE_PROTO_BSDSOCKET_H, [1])
858  ],[
859    AC_MSG_RESULT([no])
860  ])
861fi
862
863if test "$HAVE_GETHOSTBYNAME" != "1"
864then
865  dnl gethostbyname in the network lib - for Haiku OS
866  AC_CHECK_LIB(network, gethostbyname,
867               [HAVE_GETHOSTBYNAME="1"
868               LIBS="-lnetwork $LIBS"
869               ])
870fi
871
872if test "$HAVE_GETHOSTBYNAME" != "1"
873then
874  dnl gethostbyname in the net lib - for BeOS
875  AC_CHECK_LIB(net, gethostbyname,
876               [HAVE_GETHOSTBYNAME="1"
877               LIBS="-lnet $LIBS"
878               ])
879fi
880
881
882if test "$HAVE_GETHOSTBYNAME" != "1"; then
883  AC_MSG_ERROR([couldn't find libraries for gethostbyname()])
884fi
885
886CURL_CHECK_LIBS_CONNECT
887
888CURL_NETWORK_LIBS=$LIBS
889
890dnl **********************************************************************
891dnl In case that function clock_gettime with monotonic timer is available,
892dnl check for additional required libraries.
893dnl **********************************************************************
894CURL_CHECK_LIBS_CLOCK_GETTIME_MONOTONIC
895
896dnl **********************************************************************
897dnl The preceding library checks are all potentially useful for test
898dnl servers and libtest cases which require networking and clock_gettime
899dnl support.  Save the list of required libraries at this point for use
900dnl while linking those test servers and programs.
901dnl **********************************************************************
902CURL_NETWORK_AND_TIME_LIBS=$LIBS
903
904dnl **********************************************************************
905dnl Check for the presence of ZLIB libraries and headers
906dnl **********************************************************************
907
908dnl Check for & handle argument to --with-zlib.
909
910clean_CPPFLAGS=$CPPFLAGS
911clean_LDFLAGS=$LDFLAGS
912clean_LIBS=$LIBS
913ZLIB_LIBS=""
914AC_ARG_WITH(zlib,
915AC_HELP_STRING([--with-zlib=PATH],[search for zlib in PATH])
916AC_HELP_STRING([--without-zlib],[disable use of zlib]),
917               [OPT_ZLIB="$withval"])
918
919if test "$OPT_ZLIB" = "no" ; then
920    AC_MSG_WARN([zlib disabled])
921else
922  if test "$OPT_ZLIB" = "yes" ; then
923    OPT_ZLIB=""
924  fi
925
926  if test -z "$OPT_ZLIB" ; then
927    CURL_CHECK_PKGCONFIG(zlib)
928
929    if test "$PKGCONFIG" != "no" ; then
930      LIBS="`$PKGCONFIG --libs-only-l zlib` $LIBS"
931      LDFLAGS="$LDFLAGS `$PKGCONFIG --libs-only-L zlib`"
932      CPPFLAGS="$CPPFLAGS `$PKGCONFIG --cflags-only-I zlib`"
933      OPT_ZLIB=""
934      HAVE_LIBZ="1"
935    fi
936
937    if test -z "$HAVE_LIBZ"; then
938
939      dnl Check for the lib without setting any new path, since many
940      dnl people have it in the default path
941
942      AC_CHECK_LIB(z, inflateEnd,
943                   dnl libz found, set the variable
944                   [HAVE_LIBZ="1"
945                    LIBS="-lz $LIBS"],
946                   dnl if no lib found, try /usr/local
947                   [OPT_ZLIB="/usr/local"])
948    fi
949  fi
950
951  dnl Add a nonempty path to the compiler flags
952  if test -n "$OPT_ZLIB"; then
953     CPPFLAGS="$CPPFLAGS -I$OPT_ZLIB/include"
954     LDFLAGS="$LDFLAGS -L$OPT_ZLIB/lib$libsuff"
955  fi
956
957  AC_CHECK_HEADER(zlib.h,
958    [
959    dnl zlib.h was found
960    HAVE_ZLIB_H="1"
961    dnl if the lib wasn't found already, try again with the new paths
962    if test "$HAVE_LIBZ" != "1"; then
963      AC_CHECK_LIB(z, gzread,
964                   [
965                   dnl the lib was found!
966                   HAVE_LIBZ="1"
967                   LIBS="-lz $LIBS"
968                   ],
969                   [ CPPFLAGS=$clean_CPPFLAGS
970                   LDFLAGS=$clean_LDFLAGS])
971    fi
972    ],
973    [
974      dnl zlib.h was not found, restore the flags
975      CPPFLAGS=$clean_CPPFLAGS
976      LDFLAGS=$clean_LDFLAGS]
977    )
978
979  if test "$HAVE_LIBZ" = "1" && test "$HAVE_ZLIB_H" != "1"
980  then
981    AC_MSG_WARN([configure found only the libz lib, not the header file!])
982    HAVE_LIBZ=""
983    CPPFLAGS=$clean_CPPFLAGS
984    LDFLAGS=$clean_LDFLAGS
985    LIBS=$clean_LIBS
986  elif test "$HAVE_LIBZ" != "1" && test "$HAVE_ZLIB_H" = "1"
987  then
988    AC_MSG_WARN([configure found only the libz header file, not the lib!])
989    CPPFLAGS=$clean_CPPFLAGS
990    LDFLAGS=$clean_LDFLAGS
991    LIBS=$clean_LIBS
992  elif test "$HAVE_LIBZ" = "1" && test "$HAVE_ZLIB_H" = "1"
993  then
994    dnl both header and lib were found!
995    AC_SUBST(HAVE_LIBZ)
996    AC_DEFINE(HAVE_ZLIB_H, 1, [if you have the zlib.h header file])
997    AC_DEFINE(HAVE_LIBZ, 1, [if zlib is available])
998
999    ZLIB_LIBS="-lz"
1000    LIBS="-lz $clean_LIBS"
1001
1002    dnl replace 'HAVE_LIBZ' in the automake makefile.ams
1003    AMFIXLIB="1"
1004    AC_MSG_NOTICE([found both libz and libz.h header])
1005    curl_zlib_msg="enabled"
1006  fi
1007fi
1008
1009dnl set variable for use in automakefile(s)
1010AM_CONDITIONAL(HAVE_LIBZ, test x"$AMFIXLIB" = x1)
1011AC_SUBST(ZLIB_LIBS)
1012
1013dnl **********************************************************************
1014dnl Check for the presence of BROTLI decoder libraries and headers
1015dnl **********************************************************************
1016
1017dnl Brotli project home page: https://github.com/google/brotli
1018
1019dnl Default to compiler & linker defaults for BROTLI files & libraries.
1020OPT_BROTLI=off
1021AC_ARG_WITH(brotli,dnl
1022AC_HELP_STRING([--with-brotli=PATH],[Where to look for brotli, PATH points to the BROTLI installation; when possible, set the PKG_CONFIG_PATH environment variable instead of using this option])
1023AC_HELP_STRING([--without-brotli], [disable BROTLI]),
1024  OPT_BROTLI=$withval)
1025
1026if test X"$OPT_BROTLI" != Xno; then
1027  dnl backup the pre-brotli variables
1028  CLEANLDFLAGS="$LDFLAGS"
1029  CLEANCPPFLAGS="$CPPFLAGS"
1030  CLEANLIBS="$LIBS"
1031
1032  case "$OPT_BROTLI" in
1033  yes)
1034    dnl --with-brotli (without path) used
1035    CURL_CHECK_PKGCONFIG(libbrotlidec)
1036
1037    if test "$PKGCONFIG" != "no" ; then
1038      LIB_BROTLI=`$PKGCONFIG --libs-only-l libbrotlidec`
1039      LD_BROTLI=`$PKGCONFIG --libs-only-L libbrotlidec`
1040      CPP_BROTLI=`$PKGCONFIG --cflags-only-I libbrotlidec`
1041      version=`$PKGCONFIG --modversion libbrotlidec`
1042      DIR_BROTLI=`echo $LD_BROTLI | $SED -e 's/-L//'`
1043    fi
1044
1045    ;;
1046  off)
1047    dnl no --with-brotli option given, just check default places
1048    ;;
1049  *)
1050    dnl use the given --with-brotli spot
1051    PREFIX_BROTLI=$OPT_BROTLI
1052    ;;
1053  esac
1054
1055  dnl if given with a prefix, we set -L and -I based on that
1056  if test -n "$PREFIX_BROTLI"; then
1057    LIB_BROTLI="-lbrotlidec"
1058    LD_BROTLI=-L${PREFIX_BROTLI}/lib$libsuff
1059    CPP_BROTLI=-I${PREFIX_BROTLI}/include
1060    DIR_BROTLI=${PREFIX_BROTLI}/lib$libsuff
1061  fi
1062
1063  LDFLAGS="$LDFLAGS $LD_BROTLI"
1064  CPPFLAGS="$CPPFLAGS $CPP_BROTLI"
1065  LIBS="$LIB_BROTLI $LIBS"
1066
1067  AC_CHECK_LIB(brotlidec, BrotliDecoderDecompress)
1068
1069  AC_CHECK_HEADERS(brotli/decode.h,
1070    curl_brotli_msg="enabled (libbrotlidec)"
1071    HAVE_BROTLI=1
1072    AC_DEFINE(HAVE_BROTLI, 1, [if BROTLI is in use])
1073    AC_SUBST(HAVE_BROTLI, [1])
1074  )
1075
1076  if test X"$OPT_BROTLI" != Xoff &&
1077     test "$HAVE_BROTLI" != "1"; then
1078    AC_MSG_ERROR([BROTLI libs and/or directories were not found where specified!])
1079  fi
1080
1081  if test "$HAVE_BROTLI" = "1"; then
1082    if test -n "$DIR_BROTLI"; then
1083       dnl when the brotli shared libs were found in a path that the run-time
1084       dnl linker doesn't search through, we need to add it to CURL_LIBRARY_PATH
1085       dnl to prevent further configure tests to fail due to this
1086
1087       if test "x$cross_compiling" != "xyes"; then
1088         CURL_LIBRARY_PATH="$CURL_LIBRARY_PATH:$DIR_BROTLI"
1089         export CURL_LIBRARY_PATH
1090         AC_MSG_NOTICE([Added $DIR_BROTLI to CURL_LIBRARY_PATH])
1091       fi
1092    fi
1093  else
1094    dnl no brotli, revert back to clean variables
1095    LDFLAGS=$CLEANLDFLAGS
1096    CPPFLAGS=$CLEANCPPFLAGS
1097    LIBS=$CLEANLIBS
1098  fi
1099fi
1100
1101dnl **********************************************************************
1102dnl Check for LDAP
1103dnl **********************************************************************
1104
1105LDAPLIBNAME=""
1106AC_ARG_WITH(ldap-lib,
1107AC_HELP_STRING([--with-ldap-lib=libname],[Specify name of ldap lib file]),
1108 [LDAPLIBNAME="$withval"])
1109
1110LBERLIBNAME=""
1111AC_ARG_WITH(lber-lib,
1112AC_HELP_STRING([--with-lber-lib=libname],[Specify name of lber lib file]),
1113 [LBERLIBNAME="$withval"])
1114
1115if test x$CURL_DISABLE_LDAP != x1 ; then
1116
1117  CURL_CHECK_HEADER_LBER
1118  CURL_CHECK_HEADER_LDAP
1119  CURL_CHECK_HEADER_LDAPSSL
1120  CURL_CHECK_HEADER_LDAP_SSL
1121
1122  if test -z "$LDAPLIBNAME" ; then
1123    if test "$curl_cv_native_windows" = "yes"; then
1124      dnl Windows uses a single and unique LDAP library name
1125      LDAPLIBNAME="wldap32"
1126      LBERLIBNAME="no"
1127    fi
1128  fi
1129
1130  if test "$LDAPLIBNAME" ; then
1131    AC_CHECK_LIB("$LDAPLIBNAME", ldap_init,, [
1132      AC_MSG_WARN(["$LDAPLIBNAME" is not an LDAP library: LDAP disabled])
1133      AC_DEFINE(CURL_DISABLE_LDAP, 1, [to disable LDAP])
1134      AC_SUBST(CURL_DISABLE_LDAP, [1])
1135      AC_DEFINE(CURL_DISABLE_LDAPS, 1, [to disable LDAPS])
1136      AC_SUBST(CURL_DISABLE_LDAPS, [1])])
1137  else
1138    dnl Try to find the right ldap libraries for this system
1139    CURL_CHECK_LIBS_LDAP
1140    case X-"$curl_cv_ldap_LIBS" in
1141      X-unknown)
1142        AC_MSG_WARN([Cannot find libraries for LDAP support: LDAP disabled])
1143        AC_DEFINE(CURL_DISABLE_LDAP, 1, [to disable LDAP])
1144        AC_SUBST(CURL_DISABLE_LDAP, [1])
1145        AC_DEFINE(CURL_DISABLE_LDAPS, 1, [to disable LDAPS])
1146        AC_SUBST(CURL_DISABLE_LDAPS, [1])
1147        ;;
1148    esac
1149  fi
1150fi
1151
1152if test x$CURL_DISABLE_LDAP != x1 ; then
1153
1154  if test "$LBERLIBNAME" ; then
1155    dnl If name is "no" then don't define this library at all
1156    dnl (it's only needed if libldap.so's dependencies are broken).
1157    if test "$LBERLIBNAME" != "no" ; then
1158      AC_CHECK_LIB("$LBERLIBNAME", ber_free,, [
1159        AC_MSG_WARN(["$LBERLIBNAME" is not an LBER library: LDAP disabled])
1160        AC_DEFINE(CURL_DISABLE_LDAP, 1, [to disable LDAP])
1161        AC_SUBST(CURL_DISABLE_LDAP, [1])
1162        AC_DEFINE(CURL_DISABLE_LDAPS, 1, [to disable LDAPS])
1163        AC_SUBST(CURL_DISABLE_LDAPS, [1])])
1164    fi
1165  fi
1166fi
1167
1168if test x$CURL_DISABLE_LDAP != x1 ; then
1169  AC_CHECK_FUNCS([ldap_url_parse ldap_init_fd])
1170
1171  if test "$LDAPLIBNAME" = "wldap32"; then
1172    curl_ldap_msg="enabled (winldap)"
1173    AC_DEFINE(USE_WIN32_LDAP, 1, [Use Windows LDAP implementation])
1174  else
1175    curl_ldap_msg="enabled (OpenLDAP)"
1176    if test "x$ac_cv_func_ldap_init_fd" = "xyes"; then
1177      AC_DEFINE(USE_OPENLDAP, 1, [Use OpenLDAP-specific code])
1178      AC_SUBST(USE_OPENLDAP, [1])
1179    fi
1180  fi
1181fi
1182
1183if test x$CURL_DISABLE_LDAPS != x1 ; then
1184    curl_ldaps_msg="enabled"
1185fi
1186
1187dnl **********************************************************************
1188dnl Checks for IPv6
1189dnl **********************************************************************
1190
1191AC_MSG_CHECKING([whether to enable IPv6])
1192AC_ARG_ENABLE(ipv6,
1193AC_HELP_STRING([--enable-ipv6],[Enable IPv6 (with IPv4) support])
1194AC_HELP_STRING([--disable-ipv6],[Disable IPv6 support]),
1195[ case "$enableval" in
1196  no)
1197       AC_MSG_RESULT(no)
1198       ipv6=no
1199       ;;
1200  *)   AC_MSG_RESULT(yes)
1201       ipv6=yes
1202       ;;
1203  esac ],
1204
1205  AC_TRY_RUN([ /* is AF_INET6 available? */
1206#include <sys/types.h>
1207#ifdef HAVE_WINSOCK2_H
1208#include <winsock2.h>
1209#else
1210#include <sys/socket.h>
1211#endif
1212#include <stdlib.h> /* for exit() */
1213main()
1214{
1215 if (socket(AF_INET6, SOCK_STREAM, 0) < 0)
1216   exit(1);
1217 else
1218   exit(0);
1219}
1220],
1221  AC_MSG_RESULT(yes)
1222  ipv6=yes,
1223  AC_MSG_RESULT(no)
1224  ipv6=no,
1225  AC_MSG_RESULT(yes)
1226  ipv6=yes
1227))
1228
1229if test "$ipv6" = "yes"; then
1230  curl_ipv6_msg="enabled"
1231fi
1232
1233# Check if struct sockaddr_in6 have sin6_scope_id member
1234if test "$ipv6" = yes; then
1235  AC_MSG_CHECKING([if struct sockaddr_in6 has sin6_scope_id member])
1236  AC_TRY_COMPILE([
1237#include <sys/types.h>
1238#ifdef HAVE_WINSOCK2_H
1239#include <winsock2.h>
1240#include <ws2tcpip.h>
1241#else
1242#include <netinet/in.h>
1243#if defined (__TANDEM)
1244# include <netinet/in6.h>
1245#endif
1246#endif] ,
1247  struct sockaddr_in6 s; s.sin6_scope_id = 0; , have_sin6_scope_id=yes)
1248  if test "$have_sin6_scope_id" = yes; then
1249    AC_MSG_RESULT([yes])
1250    AC_DEFINE(HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID, 1, [Define to 1 if struct sockaddr_in6 has the sin6_scope_id member])
1251  else
1252    AC_MSG_RESULT([no])
1253  fi
1254fi
1255
1256dnl **********************************************************************
1257dnl Check if the operating system allows programs to write to their own argv[]
1258dnl **********************************************************************
1259
1260AC_MSG_CHECKING([if argv can be written to])
1261CURL_RUN_IFELSE([
1262int main(int argc, char ** argv) {
1263    argv[0][0] = ' ';
1264    return (argv[0][0] == ' ')?0:1;
1265}
1266],[
1267  curl_cv_writable_argv=yes
1268],[
1269  curl_cv_writable_argv=no
1270],[
1271  curl_cv_writable_argv=cross
1272])
1273case $curl_cv_writable_argv in
1274yes)
1275        AC_DEFINE(HAVE_WRITABLE_ARGV, 1, [Define this symbol if your OS supports changing the contents of argv])
1276        AC_MSG_RESULT(yes)
1277        ;;
1278no)
1279        AC_MSG_RESULT(no)
1280        ;;
1281*)
1282        AC_MSG_RESULT(no)
1283        AC_MSG_WARN([the previous check could not be made default was used])
1284        ;;
1285esac
1286
1287dnl **********************************************************************
1288dnl Check for GSS-API libraries
1289dnl **********************************************************************
1290
1291dnl check for GSS-API stuff in the /usr as default
1292
1293GSSAPI_ROOT="/usr"
1294AC_ARG_WITH(gssapi-includes,
1295  AC_HELP_STRING([--with-gssapi-includes=DIR],
1296                 [Specify location of GSS-API headers]),
1297  [ GSSAPI_INCS="-I$withval"
1298    want_gss="yes" ]
1299)
1300
1301AC_ARG_WITH(gssapi-libs,
1302  AC_HELP_STRING([--with-gssapi-libs=DIR],
1303                 [Specify location of GSS-API libs]),
1304  [ GSSAPI_LIB_DIR="-L$withval"
1305    want_gss="yes" ]
1306)
1307
1308AC_ARG_WITH(gssapi,
1309  AC_HELP_STRING([--with-gssapi=DIR],
1310                 [Where to look for GSS-API]), [
1311  GSSAPI_ROOT="$withval"
1312  if test x"$GSSAPI_ROOT" != xno; then
1313    want_gss="yes"
1314    if test x"$GSSAPI_ROOT" = xyes; then
1315      dnl if yes, then use default root
1316      GSSAPI_ROOT="/usr"
1317    fi
1318  fi
1319])
1320
1321: ${KRB5CONFIG:="$GSSAPI_ROOT/bin/krb5-config"}
1322
1323save_CPPFLAGS="$CPPFLAGS"
1324AC_MSG_CHECKING([if GSS-API support is requested])
1325if test x"$want_gss" = xyes; then
1326  AC_MSG_RESULT(yes)
1327
1328  if test -z "$GSSAPI_INCS"; then
1329     if test -n "$host_alias" -a -f "$GSSAPI_ROOT/bin/$host_alias-krb5-config"; then
1330        GSSAPI_INCS=`$GSSAPI_ROOT/bin/$host_alias-krb5-config --cflags gssapi`
1331     elif test -f "$KRB5CONFIG"; then
1332        GSSAPI_INCS=`$KRB5CONFIG --cflags gssapi`
1333     elif test "$GSSAPI_ROOT" != "yes"; then
1334        GSSAPI_INCS="-I$GSSAPI_ROOT/include"
1335     fi
1336  fi
1337
1338  CPPFLAGS="$CPPFLAGS $GSSAPI_INCS"
1339
1340  AC_CHECK_HEADER(gss.h,
1341    [
1342      dnl found in the given dirs
1343      AC_DEFINE(HAVE_GSSGNU, 1, [if you have GNU GSS])
1344      gnu_gss=yes
1345    ],
1346    [
1347      dnl not found, check Heimdal or MIT
1348      AC_CHECK_HEADERS([gssapi/gssapi.h], [], [not_mit=1])
1349      AC_CHECK_HEADERS(
1350        [gssapi/gssapi_generic.h gssapi/gssapi_krb5.h],
1351        [],
1352        [not_mit=1],
1353        [
1354AC_INCLUDES_DEFAULT
1355#ifdef HAVE_GSSAPI_GSSAPI_H
1356#include <gssapi/gssapi.h>
1357#endif
1358        ])
1359      if test "x$not_mit" = "x1"; then
1360        dnl MIT not found, check for Heimdal
1361        AC_CHECK_HEADER(gssapi.h,
1362            [
1363              dnl found
1364              AC_DEFINE(HAVE_GSSHEIMDAL, 1, [if you have Heimdal])
1365            ],
1366            [
1367              dnl no header found, disabling GSS
1368              want_gss=no
1369              AC_MSG_WARN(disabling GSS-API support since no header files were found)
1370            ]
1371          )
1372      else
1373        dnl MIT found
1374        AC_DEFINE(HAVE_GSSMIT, 1, [if you have MIT Kerberos])
1375        dnl check if we have a really old MIT Kerberos version (<= 1.2)
1376        AC_MSG_CHECKING([if GSS-API headers declare GSS_C_NT_HOSTBASED_SERVICE])
1377        AC_COMPILE_IFELSE([
1378          AC_LANG_PROGRAM([[
1379#include <gssapi/gssapi.h>
1380#include <gssapi/gssapi_generic.h>
1381#include <gssapi/gssapi_krb5.h>
1382          ]],[[
1383            gss_import_name(
1384                            (OM_uint32 *)0,
1385                            (gss_buffer_t)0,
1386                            GSS_C_NT_HOSTBASED_SERVICE,
1387                            (gss_name_t *)0);
1388          ]])
1389        ],[
1390          AC_MSG_RESULT([yes])
1391        ],[
1392          AC_MSG_RESULT([no])
1393          AC_DEFINE(HAVE_OLD_GSSMIT, 1,
1394            [if you have an old MIT Kerberos version, lacking GSS_C_NT_HOSTBASED_SERVICE])
1395        ])
1396      fi
1397    ]
1398  )
1399else
1400  AC_MSG_RESULT(no)
1401fi
1402if test x"$want_gss" = xyes; then
1403  AC_DEFINE(HAVE_GSSAPI, 1, [if you have GSS-API libraries])
1404  HAVE_GSSAPI=1
1405  curl_gss_msg="enabled (MIT Kerberos/Heimdal)"
1406
1407  if test -n "$gnu_gss"; then
1408    curl_gss_msg="enabled (GNU GSS)"
1409    LDFLAGS="$LDFLAGS $GSSAPI_LIB_DIR"
1410    LIBS="-lgss $LIBS"
1411  elif test -z "$GSSAPI_LIB_DIR"; then
1412     case $host in
1413     *-*-darwin*)
1414        LIBS="-lgssapi_krb5 -lresolv $LIBS"
1415        ;;
1416     *)
1417        if test -n "$host_alias" -a -f "$GSSAPI_ROOT/bin/$host_alias-krb5-config"; then
1418           dnl krb5-config doesn't have --libs-only-L or similar, put everything
1419           dnl into LIBS
1420           gss_libs=`$GSSAPI_ROOT/bin/$host_alias-krb5-config --libs gssapi`
1421           LIBS="$gss_libs $LIBS"
1422        elif test -f "$KRB5CONFIG"; then
1423           dnl krb5-config doesn't have --libs-only-L or similar, put everything
1424           dnl into LIBS
1425           gss_libs=`$KRB5CONFIG --libs gssapi`
1426           LIBS="$gss_libs $LIBS"
1427        else
1428           case $host in
1429           *-hp-hpux*)
1430              gss_libname="gss"
1431              ;;
1432           *)
1433              gss_libname="gssapi"
1434              ;;
1435           esac
1436
1437           if test "$GSSAPI_ROOT" != "yes"; then
1438              LDFLAGS="$LDFLAGS -L$GSSAPI_ROOT/lib$libsuff"
1439              LIBS="-l$gss_libname $LIBS"
1440           else
1441              LIBS="-l$gss_libname $LIBS"
1442           fi
1443        fi
1444        ;;
1445     esac
1446  else
1447     LDFLAGS="$LDFLAGS $GSSAPI_LIB_DIR"
1448     case $host in
1449     *-hp-hpux*)
1450        LIBS="-lgss $LIBS"
1451        ;;
1452     *)
1453        LIBS="-lgssapi $LIBS"
1454        ;;
1455     esac
1456  fi
1457else
1458  CPPFLAGS="$save_CPPFLAGS"
1459fi
1460
1461build_libstubgss=no
1462if test x"$want_gss" = "xyes"; then
1463  build_libstubgss=yes
1464fi
1465
1466AM_CONDITIONAL(BUILD_STUB_GSS, test "x$build_libstubgss" = "xyes")
1467
1468dnl -------------------------------------------------------------
1469dnl parse --with-default-ssl-backend so it can be validated below
1470dnl -------------------------------------------------------------
1471
1472DEFAULT_SSL_BACKEND=no
1473VALID_DEFAULT_SSL_BACKEND=
1474AC_ARG_WITH(default-ssl-backend,
1475AC_HELP_STRING([--with-default-ssl-backend=NAME],[Use NAME as default SSL backend])
1476AC_HELP_STRING([--without-default-ssl-backend],[Use implicit default SSL backend]),
1477  [DEFAULT_SSL_BACKEND=$withval])
1478case "$DEFAULT_SSL_BACKEND" in
1479  no)
1480    dnl --without-default-ssl-backend option used
1481    ;;
1482  default|yes)
1483    dnl --with-default-ssl-backend option used without name
1484    AC_MSG_ERROR([The name of the default SSL backend is required.])
1485    ;;
1486  *)
1487    dnl --with-default-ssl-backend option used with name
1488    AC_SUBST(DEFAULT_SSL_BACKEND)
1489    dnl needs to be validated below
1490    VALID_DEFAULT_SSL_BACKEND=no
1491    ;;
1492esac
1493
1494dnl **********************************************************************
1495
1496dnl -------------------------------------------------
1497dnl check winssl option before other SSL libraries
1498dnl -------------------------------------------------
1499
1500OPT_WINSSL=no
1501AC_ARG_WITH(winssl,dnl
1502AC_HELP_STRING([--with-winssl],[enable Windows native SSL/TLS])
1503AC_HELP_STRING([--without-winssl], [disable Windows native SSL/TLS]),
1504  OPT_WINSSL=$withval)
1505
1506AC_ARG_WITH(schannel,dnl
1507AC_HELP_STRING([--with-schannel],[enable Windows native SSL/TLS])
1508AC_HELP_STRING([--without-schannel], [disable Windows native SSL/TLS]),
1509  OPT_WINSSL=$withval)
1510
1511AC_MSG_CHECKING([whether to enable Windows native SSL/TLS (Windows native builds only)])
1512if test -z "$ssl_backends" -o "x$OPT_WINSSL" != xno; then
1513  ssl_msg=
1514  if test "x$OPT_WINSSL" != "xno"  &&
1515     test "x$curl_cv_native_windows" = "xyes"; then
1516    AC_MSG_RESULT(yes)
1517    AC_DEFINE(USE_SCHANNEL, 1, [to enable Windows native SSL/TLS support])
1518    AC_SUBST(USE_SCHANNEL, [1])
1519    ssl_msg="Windows-native"
1520    test schannel != "$DEFAULT_SSL_BACKEND" || VALID_DEFAULT_SSL_BACKEND=yes
1521    WINSSL_ENABLED=1
1522    # --with-winssl implies --enable-sspi
1523    AC_DEFINE(USE_WINDOWS_SSPI, 1, [to enable SSPI support])
1524    AC_SUBST(USE_WINDOWS_SSPI, [1])
1525    curl_sspi_msg="enabled"
1526    LIBS="-lcrypt32 $LIBS"
1527  else
1528    AC_MSG_RESULT(no)
1529  fi
1530  test -z "$ssl_msg" || ssl_backends="${ssl_backends:+$ssl_backends, }$ssl_msg"
1531else
1532  AC_MSG_RESULT(no)
1533fi
1534
1535OPT_SECURETRANSPORT=no
1536AC_ARG_WITH(darwinssl,dnl
1537AC_HELP_STRING([--with-darwinssl],[enable Apple OS native SSL/TLS])
1538AC_HELP_STRING([--without-darwinssl], [disable Apple OS native SSL/TLS]),
1539  OPT_SECURETRANSPORT=$withval)
1540
1541AC_ARG_WITH(secure-transport,dnl
1542AC_HELP_STRING([--with-secure-transport],[enable Apple OS native SSL/TLS])
1543AC_HELP_STRING([--without-secure-transport], [disable Apple OS native SSL/TLS]),
1544  OPT_SECURETRANSPORT=$withval)
1545
1546AC_MSG_CHECKING([whether to enable Secure Transport])
1547if test -z "$ssl_backends" -o "x$OPT_SECURETRANSPORT" != xno; then
1548  if test "x$OPT_SECURETRANSPORT" != "xno" &&
1549     test -d "/System/Library/Frameworks/Security.framework"; then
1550    AC_MSG_RESULT(yes)
1551    AC_DEFINE(USE_SECTRANSP, 1, [enable Secure Transport])
1552    AC_SUBST(USE_SECTRANSP, [1])
1553    ssl_msg="Secure Transport"
1554    test secure-transport != "$DEFAULT_SSL_BACKEND" || VALID_DEFAULT_SSL_BACKEND=yes
1555    SECURETRANSPORT_ENABLED=1
1556    LDFLAGS="$LDFLAGS -framework CoreFoundation -framework Security"
1557  else
1558    AC_MSG_RESULT(no)
1559  fi
1560  test -z "$ssl_msg" || ssl_backends="${ssl_backends:+$ssl_backends, }$ssl_msg"
1561else
1562  AC_MSG_RESULT(no)
1563fi
1564
1565OPT_AMISSL=no
1566AC_ARG_WITH(amissl,dnl
1567AC_HELP_STRING([--with-amissl],[enable Amiga native SSL/TLS (AmiSSL)])
1568AC_HELP_STRING([--without-amissl], [disable Amiga native SSL/TLS (AmiSSL)]),
1569  OPT_AMISSL=$withval)
1570
1571AC_MSG_CHECKING([whether to enable Amiga native SSL/TLS (AmiSSL)])
1572if test "$HAVE_PROTO_BSDSOCKET_H" == "1"; then
1573  if test -z "$ssl_backends" -o "x$OPT_AMISSL" != xno; then
1574    ssl_msg=
1575    if test "x$OPT_AMISSL" != "xno"; then
1576      AC_MSG_RESULT(yes)
1577      ssl_msg="AmiSSL"
1578      test amissl != "$DEFAULT_SSL_BACKEND" || VALID_DEFAULT_SSL_BACKEND=yes
1579      AMISSL_ENABLED=1
1580      LIBS="-lamisslauto $LIBS"
1581      AC_DEFINE(USE_AMISSL, 1, [if AmiSSL is in use])
1582      AC_DEFINE(USE_OPENSSL, 1, [if OpenSSL is in use])
1583    else
1584      AC_MSG_RESULT(no)
1585    fi
1586    test -z "$ssl_msg" || ssl_backends="${ssl_backends:+$ssl_backends, }$ssl_msg"
1587  else
1588    AC_MSG_RESULT(no)
1589  fi
1590else
1591  AC_MSG_RESULT(no)
1592fi
1593
1594dnl **********************************************************************
1595dnl Check for the presence of SSL libraries and headers
1596dnl **********************************************************************
1597
1598dnl Default to compiler & linker defaults for SSL files & libraries.
1599OPT_SSL=off
1600dnl Default to no CA bundle
1601ca="no"
1602AC_ARG_WITH(ssl,dnl
1603AC_HELP_STRING([--with-ssl=PATH],[Where to look for OpenSSL, PATH points to the SSL installation (default: /usr/local/ssl); when possible, set the PKG_CONFIG_PATH environment variable instead of using this option])
1604AC_HELP_STRING([--without-ssl], [disable OpenSSL]),
1605  OPT_SSL=$withval)
1606
1607if test -z "$ssl_backends" -o "x$OPT_SSL" != xno &&
1608   test X"$OPT_SSL" != Xno; then
1609  ssl_msg=
1610
1611  dnl backup the pre-ssl variables
1612  CLEANLDFLAGS="$LDFLAGS"
1613  CLEANCPPFLAGS="$CPPFLAGS"
1614  CLEANLIBS="$LIBS"
1615
1616  dnl This is for Msys/Mingw
1617  case $host in
1618    *-*-msys* | *-*-mingw*)
1619      AC_MSG_CHECKING([for gdi32])
1620      my_ac_save_LIBS=$LIBS
1621      LIBS="-lgdi32 $LIBS"
1622      AC_TRY_LINK([#include <windef.h>
1623                   #include <wingdi.h>],
1624                   [GdiFlush();],
1625                   [ dnl worked!
1626                   AC_MSG_RESULT([yes])],
1627                   [ dnl failed, restore LIBS
1628                   LIBS=$my_ac_save_LIBS
1629                   AC_MSG_RESULT(no)]
1630                  )
1631      ;;
1632  esac
1633
1634  case "$OPT_SSL" in
1635  yes)
1636    dnl --with-ssl (without path) used
1637    if test x$cross_compiling != xyes; then
1638      dnl only do pkg-config magic when not cross-compiling
1639      PKGTEST="yes"
1640    fi
1641    PREFIX_OPENSSL=/usr/local/ssl
1642    LIB_OPENSSL="$PREFIX_OPENSSL/lib$libsuff"
1643    ;;
1644  off)
1645    dnl no --with-ssl option given, just check default places
1646    if test x$cross_compiling != xyes; then
1647      dnl only do pkg-config magic when not cross-compiling
1648      PKGTEST="yes"
1649    fi
1650    PREFIX_OPENSSL=
1651    ;;
1652  *)
1653    dnl check the given --with-ssl spot
1654    PKGTEST="no"
1655    PREFIX_OPENSSL=$OPT_SSL
1656
1657    dnl Try pkg-config even when cross-compiling.  Since we
1658    dnl specify PKG_CONFIG_LIBDIR we're only looking where
1659    dnl the user told us to look
1660    OPENSSL_PCDIR="$OPT_SSL/lib/pkgconfig"
1661    if test -f "$OPENSSL_PCDIR/openssl.pc"; then
1662      AC_MSG_NOTICE([PKG_CONFIG_LIBDIR will be set to "$OPENSSL_PCDIR"])
1663      PKGTEST="yes"
1664    elif test ! -f "$PREFIX_OPENSSL/include/openssl/ssl.h"; then
1665      AC_MSG_ERROR([$PREFIX_OPENSSL is a bad --with-ssl prefix!])
1666    fi
1667
1668    dnl in case pkg-config comes up empty, use what we got
1669    dnl via --with-ssl
1670    LIB_OPENSSL="$PREFIX_OPENSSL/lib$libsuff"
1671    if test "$PREFIX_OPENSSL" != "/usr" ; then
1672      SSL_LDFLAGS="-L$LIB_OPENSSL"
1673      SSL_CPPFLAGS="-I$PREFIX_OPENSSL/include"
1674    fi
1675    SSL_CPPFLAGS="$SSL_CPPFLAGS -I$PREFIX_OPENSSL/include/openssl"
1676    ;;
1677  esac
1678
1679  if test "$PKGTEST" = "yes"; then
1680
1681    CURL_CHECK_PKGCONFIG(openssl, [$OPENSSL_PCDIR])
1682
1683    if test "$PKGCONFIG" != "no" ; then
1684      SSL_LIBS=`CURL_EXPORT_PCDIR([$OPENSSL_PCDIR]) dnl
1685        $PKGCONFIG --libs-only-l --libs-only-other openssl 2>/dev/null`
1686
1687      SSL_LDFLAGS=`CURL_EXPORT_PCDIR([$OPENSSL_PCDIR]) dnl
1688        $PKGCONFIG --libs-only-L openssl 2>/dev/null`
1689
1690      SSL_CPPFLAGS=`CURL_EXPORT_PCDIR([$OPENSSL_PCDIR]) dnl
1691        $PKGCONFIG --cflags-only-I openssl 2>/dev/null`
1692
1693      AC_SUBST(SSL_LIBS)
1694      AC_MSG_NOTICE([pkg-config: SSL_LIBS: "$SSL_LIBS"])
1695      AC_MSG_NOTICE([pkg-config: SSL_LDFLAGS: "$SSL_LDFLAGS"])
1696      AC_MSG_NOTICE([pkg-config: SSL_CPPFLAGS: "$SSL_CPPFLAGS"])
1697
1698      LIB_OPENSSL=`echo $SSL_LDFLAGS | sed -e 's/-L//g'`
1699
1700      dnl use the values pkg-config reported.  This is here
1701      dnl instead of below with CPPFLAGS and LDFLAGS because we only
1702      dnl learn about this via pkg-config.  If we only have
1703      dnl the argument to --with-ssl we don't know what
1704      dnl additional libs may be necessary.  Hope that we
1705      dnl don't need any.
1706      LIBS="$SSL_LIBS $LIBS"
1707    fi
1708  fi
1709
1710  dnl finally, set flags to use SSL
1711  CPPFLAGS="$CPPFLAGS $SSL_CPPFLAGS"
1712  LDFLAGS="$LDFLAGS $SSL_LDFLAGS"
1713
1714  AC_CHECK_LIB(crypto, HMAC_Update,[
1715     HAVECRYPTO="yes"
1716     LIBS="-lcrypto $LIBS"
1717     ],[
1718     LDFLAGS="$CLEANLDFLAGS -L$LIB_OPENSSL"
1719     if test "$PKGCONFIG" = "no" ; then
1720       # only set this if pkg-config wasn't used
1721       CPPFLAGS="$CLEANCPPFLAGS -I$PREFIX_OPENSSL/include/openssl -I$PREFIX_OPENSSL/include"
1722     fi
1723     AC_CHECK_LIB(crypto, HMAC_Init_ex,[
1724       HAVECRYPTO="yes"
1725       LIBS="-lcrypto $LIBS"], [
1726
1727       dnl still no, but what about with -ldl?
1728       AC_MSG_CHECKING([OpenSSL linking with -ldl])
1729       LIBS="$CLEANLIBS -lcrypto -ldl"
1730       AC_TRY_LINK(
1731       [
1732         #include <openssl/err.h>
1733       ],
1734       [
1735         ERR_clear_error();
1736       ],
1737       [
1738         AC_MSG_RESULT(yes)
1739         HAVECRYPTO="yes"
1740       ],
1741       [
1742         AC_MSG_RESULT(no)
1743         dnl ok, so what about both -ldl and -lpthread?
1744
1745         AC_MSG_CHECKING([OpenSSL linking with -ldl and -lpthread])
1746         LIBS="$CLEANLIBS -lcrypto -ldl -lpthread"
1747         AC_TRY_LINK(
1748         [
1749           #include <openssl/err.h>
1750         ],
1751         [
1752           ERR_clear_error();
1753         ],
1754         [
1755           AC_MSG_RESULT(yes)
1756           HAVECRYPTO="yes"
1757         ],
1758         [
1759           AC_MSG_RESULT(no)
1760           LDFLAGS="$CLEANLDFLAGS"
1761           CPPFLAGS="$CLEANCPPFLAGS"
1762           LIBS="$CLEANLIBS"
1763
1764         ])
1765
1766       ])
1767
1768     ])
1769  ])
1770
1771  if test X"$HAVECRYPTO" = X"yes"; then
1772    dnl This is only reasonable to do if crypto actually is there: check for
1773    dnl SSL libs NOTE: it is important to do this AFTER the crypto lib
1774
1775    AC_CHECK_LIB(ssl, SSL_connect)
1776
1777    if test "$ac_cv_lib_ssl_SSL_connect" != yes; then
1778        dnl we didn't find the SSL lib, try the RSAglue/rsaref stuff
1779        AC_MSG_CHECKING(for ssl with RSAglue/rsaref libs in use);
1780        OLIBS=$LIBS
1781        LIBS="-lRSAglue -lrsaref $LIBS"
1782        AC_CHECK_LIB(ssl, SSL_connect)
1783        if test "$ac_cv_lib_ssl_SSL_connect" != yes; then
1784            dnl still no SSL_connect
1785            AC_MSG_RESULT(no)
1786            LIBS=$OLIBS
1787        else
1788            AC_MSG_RESULT(yes)
1789        fi
1790
1791    else
1792
1793      dnl Have the libraries--check for OpenSSL headers
1794      AC_CHECK_HEADERS(openssl/x509.h openssl/rsa.h openssl/crypto.h \
1795                       openssl/pem.h openssl/ssl.h openssl/err.h,
1796        ssl_msg="OpenSSL"
1797	test openssl != "$DEFAULT_SSL_BACKEND" || VALID_DEFAULT_SSL_BACKEND=yes
1798        OPENSSL_ENABLED=1
1799        AC_DEFINE(USE_OPENSSL, 1, [if OpenSSL is in use]))
1800
1801      if test $ac_cv_header_openssl_x509_h = no; then
1802        dnl we don't use the "action" part of the AC_CHECK_HEADERS macro
1803        dnl since 'err.h' might in fact find a krb4 header with the same
1804        dnl name
1805        AC_CHECK_HEADERS(x509.h rsa.h crypto.h pem.h ssl.h err.h)
1806
1807        if test $ac_cv_header_x509_h = yes &&
1808           test $ac_cv_header_crypto_h = yes &&
1809           test $ac_cv_header_ssl_h = yes; then
1810          dnl three matches
1811          ssl_msg="OpenSSL"
1812          OPENSSL_ENABLED=1
1813        fi
1814      fi
1815    fi
1816
1817    if test X"$OPENSSL_ENABLED" != X"1"; then
1818       LIBS="$CLEANLIBS"
1819    fi
1820
1821    if test X"$OPT_SSL" != Xoff &&
1822       test "$OPENSSL_ENABLED" != "1"; then
1823      AC_MSG_ERROR([OpenSSL libs and/or directories were not found where specified!])
1824    fi
1825  fi
1826
1827  if test X"$OPENSSL_ENABLED" = X"1"; then
1828    dnl These can only exist if OpenSSL exists
1829    dnl Older versions of Cyassl (some time before 2.9.4) don't have
1830    dnl SSL_get_shutdown (but this check won't actually detect it there
1831    dnl as it's a macro that needs the header files be included)
1832    dnl OpenSSL_version is introduced in 3.0.0
1833
1834    AC_CHECK_FUNCS( RAND_egd \
1835                    SSL_get_shutdown \
1836                    SSLv2_client_method \
1837                    OpenSSL_version )
1838
1839    AC_MSG_CHECKING([for BoringSSL])
1840    AC_COMPILE_IFELSE([
1841        AC_LANG_PROGRAM([[
1842                #include <openssl/base.h>
1843                ]],[[
1844                #ifndef OPENSSL_IS_BORINGSSL
1845                #error not boringssl
1846                #endif
1847       ]])
1848    ],[
1849        AC_MSG_RESULT([yes])
1850        AC_DEFINE_UNQUOTED(HAVE_BORINGSSL, 1,
1851                           [Define to 1 if using BoringSSL.])
1852        ssl_msg="BoringSSL"
1853    ],[
1854        AC_MSG_RESULT([no])
1855    ])
1856
1857    AC_MSG_CHECKING([for libressl])
1858    AC_COMPILE_IFELSE([
1859      AC_LANG_PROGRAM([[
1860#include <openssl/opensslv.h>
1861      ]],[[
1862        int dummy = LIBRESSL_VERSION_NUMBER;
1863      ]])
1864    ],[
1865      AC_MSG_RESULT([yes])
1866      AC_DEFINE_UNQUOTED(HAVE_LIBRESSL, 1,
1867        [Define to 1 if using libressl.])
1868      ssl_msg="libressl"
1869    ],[
1870      AC_MSG_RESULT([no])
1871    ])
1872  fi
1873
1874  if test "$OPENSSL_ENABLED" = "1"; then
1875    if test -n "$LIB_OPENSSL"; then
1876       dnl when the ssl shared libs were found in a path that the run-time
1877       dnl linker doesn't search through, we need to add it to CURL_LIBRARY_PATH
1878       dnl to prevent further configure tests to fail due to this
1879       if test "x$cross_compiling" != "xyes"; then
1880         CURL_LIBRARY_PATH="$CURL_LIBRARY_PATH:$LIB_OPENSSL"
1881         export CURL_LIBRARY_PATH
1882         AC_MSG_NOTICE([Added $LIB_OPENSSL to CURL_LIBRARY_PATH])
1883       fi
1884    fi
1885    CURL_CHECK_OPENSSL_API
1886    check_for_ca_bundle=1
1887  fi
1888
1889  test -z "$ssl_msg" || ssl_backends="${ssl_backends:+$ssl_backends, }$ssl_msg"
1890fi
1891
1892dnl **********************************************************************
1893dnl Check for the random seed preferences
1894dnl **********************************************************************
1895
1896if test X"$OPENSSL_ENABLED" = X"1"; then
1897  AC_ARG_WITH(egd-socket,
1898  AC_HELP_STRING([--with-egd-socket=FILE],
1899                 [Entropy Gathering Daemon socket pathname]),
1900      [ EGD_SOCKET="$withval" ]
1901  )
1902  if test -n "$EGD_SOCKET" ; then
1903          AC_DEFINE_UNQUOTED(EGD_SOCKET, "$EGD_SOCKET",
1904          [your Entropy Gathering Daemon socket pathname] )
1905  fi
1906
1907  dnl Check for user-specified random device
1908  AC_ARG_WITH(random,
1909  AC_HELP_STRING([--with-random=FILE],
1910                 [read randomness from FILE (default=/dev/urandom)]),
1911      [ RANDOM_FILE="$withval" ],
1912      [
1913          if test x$cross_compiling != xyes; then
1914            dnl Check for random device
1915            AC_CHECK_FILE("/dev/urandom", [ RANDOM_FILE="/dev/urandom"] )
1916          else
1917            AC_MSG_WARN([skipped the /dev/urandom detection when cross-compiling])
1918          fi
1919      ]
1920  )
1921  if test -n "$RANDOM_FILE" && test X"$RANDOM_FILE" != Xno ; then
1922          AC_SUBST(RANDOM_FILE)
1923          AC_DEFINE_UNQUOTED(RANDOM_FILE, "$RANDOM_FILE",
1924          [a suitable file to read random data from])
1925  fi
1926fi
1927
1928dnl ---
1929dnl We require OpenSSL with SRP support.
1930dnl ---
1931if test "$OPENSSL_ENABLED" = "1"; then
1932  AC_CHECK_LIB(crypto, SRP_Calc_client_key,
1933   [
1934     AC_DEFINE(HAVE_OPENSSL_SRP, 1, [if you have the function SRP_Calc_client_key])
1935     AC_SUBST(HAVE_OPENSSL_SRP, [1])
1936   ])
1937fi
1938
1939dnl ---
1940dnl Whether the OpenSSL configuration will be loaded automatically
1941dnl ---
1942if test X"$OPENSSL_ENABLED" = X"1"; then
1943AC_ARG_ENABLE(openssl-auto-load-config,
1944AC_HELP_STRING([--enable-openssl-auto-load-config],[Enable automatic loading of OpenSSL configuration])
1945AC_HELP_STRING([--disable-openssl-auto-load-config],[Disable automatic loading of OpenSSL configuration]),
1946[ if test X"$enableval" = X"no"; then
1947    AC_MSG_NOTICE([automatic loading of OpenSSL configuration disabled])
1948    AC_DEFINE(CURL_DISABLE_OPENSSL_AUTO_LOAD_CONFIG, 1, [if the OpenSSL configuration won't be loaded automatically])
1949  fi
1950])
1951fi
1952
1953dnl ----------------------------------------------------
1954dnl check for GnuTLS
1955dnl ----------------------------------------------------
1956
1957dnl Default to compiler & linker defaults for GnuTLS files & libraries.
1958OPT_GNUTLS=no
1959
1960AC_ARG_WITH(gnutls,dnl
1961AC_HELP_STRING([--with-gnutls=PATH],[where to look for GnuTLS, PATH points to the installation root])
1962AC_HELP_STRING([--without-gnutls], [disable GnuTLS detection]),
1963  OPT_GNUTLS=$withval)
1964
1965if test -z "$ssl_backends" -o "x$OPT_GNUTLS" != xno; then
1966  ssl_msg=
1967
1968  if test X"$OPT_GNUTLS" != Xno; then
1969
1970    addld=""
1971    addlib=""
1972    gtlslib=""
1973    version=""
1974    addcflags=""
1975
1976    if test "x$OPT_GNUTLS" = "xyes"; then
1977      dnl this is with no partiular path given
1978      CURL_CHECK_PKGCONFIG(gnutls)
1979
1980      if test "$PKGCONFIG" != "no" ; then
1981        addlib=`$PKGCONFIG --libs-only-l gnutls`
1982        addld=`$PKGCONFIG --libs-only-L gnutls`
1983        addcflags=`$PKGCONFIG --cflags-only-I gnutls`
1984        version=`$PKGCONFIG --modversion gnutls`
1985        gtlslib=`echo $addld | $SED -e 's/-L//'`
1986      else
1987        dnl without pkg-config, we try libgnutls-config as that was how it
1988        dnl used to be done
1989        check=`libgnutls-config --version 2>/dev/null`
1990        if test -n "$check"; then
1991          addlib=`libgnutls-config --libs`
1992          addcflags=`libgnutls-config --cflags`
1993          version=`libgnutls-config --version`
1994          gtlslib=`libgnutls-config --prefix`/lib$libsuff
1995        fi
1996      fi
1997    else
1998      dnl this is with a given path, first check if there's a libgnutls-config
1999      dnl there and if not, make an educated guess
2000      cfg=$OPT_GNUTLS/bin/libgnutls-config
2001      check=`$cfg --version 2>/dev/null`
2002      if test -n "$check"; then
2003        addlib=`$cfg --libs`
2004        addcflags=`$cfg --cflags`
2005        version=`$cfg --version`
2006        gtlslib=`$cfg --prefix`/lib$libsuff
2007      else
2008        dnl without pkg-config and libgnutls-config, we guess a lot!
2009        addlib=-lgnutls
2010        addld=-L$OPT_GNUTLS/lib$libsuff
2011        addcflags=-I$OPT_GNUTLS/include
2012        version="" # we just don't know
2013        gtlslib=$OPT_GNUTLS/lib$libsuff
2014      fi
2015    fi
2016
2017    if test -z "$version"; then
2018      dnl lots of efforts, still no go
2019      version="unknown"
2020    fi
2021
2022    if test -n "$addlib"; then
2023
2024      CLEANLIBS="$LIBS"
2025      CLEANCPPFLAGS="$CPPFLAGS"
2026      CLEANLDFLAGS="$LDFLAGS"
2027
2028      LIBS="$addlib $LIBS"
2029      LDFLAGS="$LDFLAGS $addld"
2030      if test "$addcflags" != "-I/usr/include"; then
2031         CPPFLAGS="$CPPFLAGS $addcflags"
2032      fi
2033
2034      AC_CHECK_LIB(gnutls, gnutls_check_version,
2035       [
2036       AC_DEFINE(USE_GNUTLS, 1, [if GnuTLS is enabled])
2037       AC_SUBST(USE_GNUTLS, [1])
2038       GNUTLS_ENABLED=1
2039       USE_GNUTLS="yes"
2040       ssl_msg="GnuTLS"
2041       test gnutls != "$DEFAULT_SSL_BACKEND" || VALID_DEFAULT_SSL_BACKEND=yes
2042       ],
2043       [
2044         LIBS="$CLEANLIBS"
2045         CPPFLAGS="$CLEANCPPFLAGS"
2046       ])
2047
2048      if test "x$USE_GNUTLS" = "xyes"; then
2049        AC_MSG_NOTICE([detected GnuTLS version $version])
2050        check_for_ca_bundle=1
2051        if test -n "$gtlslib"; then
2052          dnl when shared libs were found in a path that the run-time
2053          dnl linker doesn't search through, we need to add it to
2054          dnl CURL_LIBRARY_PATH to prevent further configure tests to fail
2055          dnl due to this
2056          if test "x$cross_compiling" != "xyes"; then
2057            CURL_LIBRARY_PATH="$CURL_LIBRARY_PATH:$gtlslib"
2058            export CURL_LIBRARY_PATH
2059            AC_MSG_NOTICE([Added $gtlslib to CURL_LIBRARY_PATH])
2060          fi
2061        fi
2062        AC_CHECK_FUNCS([gnutls_certificate_set_x509_key_file2 gnutls_alpn_set_protocols gnutls_ocsp_req_init])
2063      fi
2064
2065    fi
2066
2067  fi dnl GNUTLS not disabled
2068
2069  test -z "$ssl_msg" || ssl_backends="${ssl_backends:+$ssl_backends, }$ssl_msg"
2070fi
2071
2072dnl ---
2073dnl Check which crypto backend GnuTLS uses
2074dnl ---
2075
2076if test "$GNUTLS_ENABLED" = "1"; then
2077  USE_GNUTLS_NETTLE=
2078  # First check if we can detect either crypto library via transitive linking
2079  AC_CHECK_LIB(gnutls, nettle_MD5Init, [ USE_GNUTLS_NETTLE=1 ])
2080  if test "$USE_GNUTLS_NETTLE" = ""; then
2081    AC_CHECK_LIB(gnutls, gcry_control, [ USE_GNUTLS_NETTLE=0 ])
2082  fi
2083  # If not, try linking directly to both of them to see if they are available
2084  if test "$USE_GNUTLS_NETTLE" = ""; then
2085    AC_CHECK_LIB(nettle, nettle_MD5Init, [ USE_GNUTLS_NETTLE=1 ])
2086  fi
2087  if test "$USE_GNUTLS_NETTLE" = ""; then
2088    AC_CHECK_LIB(gcrypt, gcry_control, [ USE_GNUTLS_NETTLE=0 ])
2089  fi
2090  if test "$USE_GNUTLS_NETTLE" = ""; then
2091    AC_MSG_ERROR([GnuTLS found, but neither gcrypt nor nettle found])
2092  fi
2093  if test "$USE_GNUTLS_NETTLE" = "1"; then
2094    AC_DEFINE(USE_GNUTLS_NETTLE, 1, [if GnuTLS uses nettle as crypto backend])
2095    AC_SUBST(USE_GNUTLS_NETTLE, [1])
2096    LIBS="-lnettle $LIBS"
2097  else
2098    LIBS="-lgcrypt $LIBS"
2099  fi
2100fi
2101
2102dnl ---
2103dnl We require GnuTLS with SRP support.
2104dnl ---
2105if test "$GNUTLS_ENABLED" = "1"; then
2106  AC_CHECK_LIB(gnutls, gnutls_srp_verifier,
2107   [
2108     AC_DEFINE(HAVE_GNUTLS_SRP, 1, [if you have the function gnutls_srp_verifier])
2109     AC_SUBST(HAVE_GNUTLS_SRP, [1])
2110   ])
2111fi
2112
2113dnl ----------------------------------------------------
2114dnl check for PolarSSL
2115dnl ----------------------------------------------------
2116
2117dnl Default to compiler & linker defaults for PolarSSL files & libraries.
2118OPT_POLARSSL=no
2119
2120_cppflags=$CPPFLAGS
2121_ldflags=$LDFLAGS
2122AC_ARG_WITH(polarssl,dnl
2123AC_HELP_STRING([--with-polarssl=PATH],[where to look for PolarSSL, PATH points to the installation root])
2124AC_HELP_STRING([--without-polarssl], [disable PolarSSL detection]),
2125  OPT_POLARSSL=$withval)
2126
2127if test -z "$ssl_backends" -o "x$OPT_POLARSSL" != xno; then
2128  ssl_msg=
2129
2130  if test X"$OPT_POLARSSL" != Xno; then
2131
2132    if test "$OPT_POLARSSL" = "yes"; then
2133      OPT_POLARSSL=""
2134    fi
2135
2136    if test -z "$OPT_POLARSSL" ; then
2137      dnl check for lib first without setting any new path
2138
2139      AC_CHECK_LIB(polarssl, havege_init,
2140      dnl libpolarssl found, set the variable
2141       [
2142         AC_DEFINE(USE_POLARSSL, 1, [if PolarSSL is enabled])
2143         AC_SUBST(USE_POLARSSL, [1])
2144         POLARSSL_ENABLED=1
2145         USE_POLARSSL="yes"
2146         ssl_msg="PolarSSL"
2147	 test polarssl != "$DEFAULT_SSL_BACKEND" || VALID_DEFAULT_SSL_BACKEND=yes
2148        ])
2149    fi
2150
2151    addld=""
2152    addlib=""
2153    addcflags=""
2154    polarssllib=""
2155
2156    if test "x$USE_POLARSSL" != "xyes"; then
2157      dnl add the path and test again
2158      addld=-L$OPT_POLARSSL/lib$libsuff
2159      addcflags=-I$OPT_POLARSSL/include
2160      polarssllib=$OPT_POLARSSL/lib$libsuff
2161
2162      LDFLAGS="$LDFLAGS $addld"
2163      if test "$addcflags" != "-I/usr/include"; then
2164         CPPFLAGS="$CPPFLAGS $addcflags"
2165      fi
2166
2167      AC_CHECK_LIB(polarssl, ssl_init,
2168       [
2169       AC_DEFINE(USE_POLARSSL, 1, [if PolarSSL is enabled])
2170       AC_SUBST(USE_POLARSSL, [1])
2171       POLARSSL_ENABLED=1
2172       USE_POLARSSL="yes"
2173       ssl_msg="PolarSSL"
2174       test polarssl != "$DEFAULT_SSL_BACKEND" || VALID_DEFAULT_SSL_BACKEND=yes
2175       ],
2176       [
2177         CPPFLAGS=$_cppflags
2178         LDFLAGS=$_ldflags
2179       ])
2180    fi
2181
2182    if test "x$USE_POLARSSL" = "xyes"; then
2183      AC_MSG_NOTICE([detected PolarSSL])
2184      check_for_ca_bundle=1
2185      LIBS="-lpolarssl $LIBS"
2186
2187      if test -n "$polarssllib"; then
2188        dnl when shared libs were found in a path that the run-time
2189        dnl linker doesn't search through, we need to add it to
2190        dnl CURL_LIBRARY_PATH to prevent further configure tests to fail
2191        dnl due to this
2192        if test "x$cross_compiling" != "xyes"; then
2193          CURL_LIBRARY_PATH="$CURL_LIBRARY_PATH:$polarssllib"
2194          export CURL_LIBRARY_PATH
2195          AC_MSG_NOTICE([Added $polarssllib to CURL_LIBRARY_PATH])
2196        fi
2197      fi
2198    fi
2199
2200  fi dnl PolarSSL not disabled
2201
2202  test -z "$ssl_msg" || ssl_backends="${ssl_backends:+$ssl_backends, }$ssl_msg"
2203fi
2204
2205dnl ----------------------------------------------------
2206dnl check for mbedTLS
2207dnl ----------------------------------------------------
2208
2209OPT_MBEDTLS=no
2210
2211_cppflags=$CPPFLAGS
2212_ldflags=$LDFLAGS
2213AC_ARG_WITH(mbedtls,dnl
2214AC_HELP_STRING([--with-mbedtls=PATH],[where to look for mbedTLS, PATH points to the installation root])
2215AC_HELP_STRING([--without-mbedtls], [disable mbedTLS detection]),
2216  OPT_MBEDTLS=$withval)
2217
2218if test -z "$ssl_backends" -o "x$OPT_MBEDTLS" != xno; then
2219  ssl_msg=
2220
2221  if test X"$OPT_MBEDTLS" != Xno; then
2222
2223    if test "$OPT_MBEDTLS" = "yes"; then
2224      OPT_MBEDTLS=""
2225    fi
2226
2227    if test -z "$OPT_MBEDTLS" ; then
2228      dnl check for lib first without setting any new path
2229
2230      AC_CHECK_LIB(mbedtls, mbedtls_havege_init,
2231      dnl libmbedtls found, set the variable
2232       [
2233         AC_DEFINE(USE_MBEDTLS, 1, [if mbedTLS is enabled])
2234         AC_SUBST(USE_MBEDTLS, [1])
2235         MBEDTLS_ENABLED=1
2236         USE_MBEDTLS="yes"
2237         ssl_msg="mbedTLS"
2238	 test mbedtls != "$DEFAULT_SSL_BACKEND" || VALID_DEFAULT_SSL_BACKEND=yes
2239        ], [], -lmbedx509 -lmbedcrypto)
2240    fi
2241
2242    addld=""
2243    addlib=""
2244    addcflags=""
2245    mbedtlslib=""
2246
2247    if test "x$USE_MBEDTLS" != "xyes"; then
2248      dnl add the path and test again
2249      addld=-L$OPT_MBEDTLS/lib$libsuff
2250      addcflags=-I$OPT_MBEDTLS/include
2251      mbedtlslib=$OPT_MBEDTLS/lib$libsuff
2252
2253      LDFLAGS="$LDFLAGS $addld"
2254      if test "$addcflags" != "-I/usr/include"; then
2255         CPPFLAGS="$CPPFLAGS $addcflags"
2256      fi
2257
2258      AC_CHECK_LIB(mbedtls, mbedtls_ssl_init,
2259       [
2260       AC_DEFINE(USE_MBEDTLS, 1, [if mbedTLS is enabled])
2261       AC_SUBST(USE_MBEDTLS, [1])
2262       MBEDTLS_ENABLED=1
2263       USE_MBEDTLS="yes"
2264       ssl_msg="mbedTLS"
2265       test mbedtls != "$DEFAULT_SSL_BACKEND" || VALID_DEFAULT_SSL_BACKEND=yes
2266       ],
2267       [
2268         CPPFLAGS=$_cppflags
2269         LDFLAGS=$_ldflags
2270       ], -lmbedx509 -lmbedcrypto)
2271    fi
2272
2273    if test "x$USE_MBEDTLS" = "xyes"; then
2274      AC_MSG_NOTICE([detected mbedTLS])
2275      check_for_ca_bundle=1
2276
2277      LIBS="-lmbedtls -lmbedx509 -lmbedcrypto $LIBS"
2278
2279      if test -n "$mbedtlslib"; then
2280        dnl when shared libs were found in a path that the run-time
2281        dnl linker doesn't search through, we need to add it to
2282        dnl CURL_LIBRARY_PATH to prevent further configure tests to fail
2283        dnl due to this
2284        if test "x$cross_compiling" != "xyes"; then
2285          CURL_LIBRARY_PATH="$CURL_LIBRARY_PATH:$mbedtlslib"
2286          export CURL_LIBRARY_PATH
2287          AC_MSG_NOTICE([Added $mbedtlslib to CURL_LIBRARY_PATH])
2288        fi
2289      fi
2290    fi
2291
2292  fi dnl mbedTLS not disabled
2293
2294  test -z "$ssl_msg" || ssl_backends="${ssl_backends:+$ssl_backends, }$ssl_msg"
2295fi
2296
2297dnl ----------------------------------------------------
2298dnl check for CyaSSL
2299dnl ----------------------------------------------------
2300
2301dnl Default to compiler & linker defaults for CyaSSL files & libraries.
2302OPT_CYASSL=no
2303
2304_cppflags=$CPPFLAGS
2305_ldflags=$LDFLAGS
2306AC_ARG_WITH(cyassl,dnl
2307AC_HELP_STRING([--with-cyassl=PATH],[where to look for CyaSSL, PATH points to the installation root (default: system lib default)])
2308AC_HELP_STRING([--without-cyassl], [disable CyaSSL detection]),
2309  OPT_CYASSL=$withval)
2310
2311dnl provide --with-wolfssl as an alias for --with-cyassl
2312AC_ARG_WITH(wolfssl,dnl
2313AC_HELP_STRING([--with-wolfssl=PATH],[where to look for WolfSSL, PATH points to the installation root (default: system lib default)])
2314AC_HELP_STRING([--without-wolfssl], [disable WolfSSL detection]),
2315  OPT_CYASSL=$withval)
2316
2317if test -z "$ssl_backends" -o "x$OPT_CYASSL" != xno; then
2318  ssl_msg=
2319
2320  if test X"$OPT_CYASSL" != Xno; then
2321
2322    if test "$OPT_CYASSL" = "yes"; then
2323      OPT_CYASSL=""
2324    fi
2325
2326    dnl This should be reworked to use pkg-config instead
2327
2328    cyassllibname=cyassl
2329
2330    if test -z "$OPT_CYASSL" ; then
2331      dnl check for lib in system default first
2332
2333      AC_CHECK_LIB(cyassl, CyaSSL_Init,
2334      dnl libcyassl found, set the variable
2335       [
2336         AC_DEFINE(USE_CYASSL, 1, [if CyaSSL is enabled])
2337         AC_SUBST(USE_CYASSL, [1])
2338         CYASSL_ENABLED=1
2339         USE_CYASSL="yes"
2340         ssl_msg="CyaSSL"
2341	 test cyassl != "$DEFAULT_SSL_BACKEND" || VALID_DEFAULT_SSL_BACKEND=yes
2342        ])
2343    fi
2344
2345    addld=""
2346    addlib=""
2347    addcflags=""
2348    cyassllib=""
2349
2350    if test "x$USE_CYASSL" != "xyes"; then
2351      dnl add the path and test again
2352      addld=-L$OPT_CYASSL/lib$libsuff
2353      addcflags=-I$OPT_CYASSL/include
2354      cyassllib=$OPT_CYASSL/lib$libsuff
2355
2356      LDFLAGS="$LDFLAGS $addld"
2357      if test "$addcflags" != "-I/usr/include"; then
2358         CPPFLAGS="$CPPFLAGS $addcflags"
2359      fi
2360
2361      AC_CHECK_LIB(cyassl, CyaSSL_Init,
2362       [
2363       AC_DEFINE(USE_CYASSL, 1, [if CyaSSL is enabled])
2364       AC_SUBST(USE_CYASSL, [1])
2365       CYASSL_ENABLED=1
2366       USE_CYASSL="yes"
2367       ssl_msg="CyaSSL"
2368       test cyassl != "$DEFAULT_SSL_BACKEND" || VALID_DEFAULT_SSL_BACKEND=yes
2369       ],
2370       [
2371         CPPFLAGS=$_cppflags
2372         LDFLAGS=$_ldflags
2373         cyassllib=""
2374       ])
2375    fi
2376
2377    addld=""
2378    addlib=""
2379    addcflags=""
2380
2381    if test "x$USE_CYASSL" != "xyes"; then
2382      dnl libcyassl renamed to libwolfssl as of 3.4.0
2383      addld=-L$OPT_CYASSL/lib$libsuff
2384      addcflags=-I$OPT_CYASSL/include
2385      cyassllib=$OPT_CYASSL/lib$libsuff
2386
2387      LDFLAGS="$LDFLAGS $addld"
2388      if test "$addcflags" != "-I/usr/include"; then
2389         CPPFLAGS="$CPPFLAGS $addcflags"
2390      fi
2391
2392      cyassllibname=wolfssl
2393      my_ac_save_LIBS="$LIBS"
2394      LIBS="-l$cyassllibname -lm $LIBS"
2395
2396      AC_MSG_CHECKING([for CyaSSL_Init in -lwolfssl])
2397      AC_LINK_IFELSE([
2398	AC_LANG_PROGRAM([[
2399/* These aren't needed for detection and confuse WolfSSL.
2400   They are set up properly later if it is detected.  */
2401#undef SIZEOF_LONG
2402#undef SIZEOF_LONG_LONG
2403#include <cyassl/ssl.h>
2404	]],[[
2405	  return CyaSSL_Init();
2406	]])
2407      ],[
2408         AC_MSG_RESULT(yes)
2409         AC_DEFINE(USE_CYASSL, 1, [if CyaSSL/WolfSSL is enabled])
2410         AC_SUBST(USE_CYASSL, [1])
2411         CYASSL_ENABLED=1
2412         USE_CYASSL="yes"
2413         ssl_msg="WolfSSL"
2414	 test cyassl != "$DEFAULT_SSL_BACKEND" || VALID_DEFAULT_SSL_BACKEND=yes
2415       ],
2416       [
2417         AC_MSG_RESULT(no)
2418         CPPFLAGS=$_cppflags
2419         LDFLAGS=$_ldflags
2420         cyassllib=""
2421       ])
2422      LIBS="$my_ac_save_LIBS"
2423    fi
2424
2425    if test "x$USE_CYASSL" = "xyes"; then
2426      AC_MSG_NOTICE([detected $cyassllibname])
2427      check_for_ca_bundle=1
2428
2429      dnl cyassl/ctaocrypt/types.h needs SIZEOF_LONG_LONG defined!
2430      AX_COMPILE_CHECK_SIZEOF(long long)
2431
2432      dnl Versions since at least 2.6.0 may have options.h
2433      AC_CHECK_HEADERS(cyassl/options.h)
2434
2435      dnl Versions since at least 2.9.4 renamed error.h to error-ssl.h
2436      AC_CHECK_HEADERS(cyassl/error-ssl.h)
2437
2438      LIBS="-l$cyassllibname -lm $LIBS"
2439
2440      if test "x$cyassllibname" = "xwolfssl"; then
2441        dnl Recent WolfSSL versions build without SSLv3 by default
2442        dnl WolfSSL needs configure --enable-opensslextra to have *get_peer*
2443        AC_CHECK_FUNCS(wolfSSLv3_client_method \
2444                       wolfSSL_get_peer_certificate \
2445                       wolfSSL_UseALPN)
2446      else
2447        dnl Cyassl needs configure --enable-opensslextra to have *get_peer*
2448        AC_CHECK_FUNCS(CyaSSL_CTX_UseSupportedCurve \
2449                       CyaSSL_get_peer_certificate)
2450      fi
2451
2452      if test -n "$cyassllib"; then
2453        dnl when shared libs were found in a path that the run-time
2454        dnl linker doesn't search through, we need to add it to
2455        dnl CURL_LIBRARY_PATH to prevent further configure tests to fail
2456        dnl due to this
2457        if test "x$cross_compiling" != "xyes"; then
2458          CURL_LIBRARY_PATH="$CURL_LIBRARY_PATH:$cyassllib"
2459          export CURL_LIBRARY_PATH
2460          AC_MSG_NOTICE([Added $cyassllib to CURL_LIBRARY_PATH])
2461        fi
2462      fi
2463
2464    fi
2465
2466  fi dnl CyaSSL not disabled
2467
2468  test -z "$ssl_msg" || ssl_backends="${ssl_backends:+$ssl_backends, }$ssl_msg"
2469fi
2470
2471dnl ----------------------------------------------------
2472dnl check for MesaLink
2473dnl ----------------------------------------------------
2474
2475dnl Default to compiler & linker defaults for MesaLink files & libraries.
2476OPT_MESALINK=no
2477
2478_cppflags=$CPPFLAGS
2479_ldflags=$LDFLAGS
2480AC_ARG_WITH(mesalink,dnl
2481AC_HELP_STRING([--with-mesalink=PATH],[where to look for MesaLink, PATH points to the installation root])
2482AC_HELP_STRING([--without-mesalink], [disable MesaLink detection]),
2483  OPT_MESALINK=$withval)
2484
2485if test -z "$ssl_backends" -o "x$OPT_MESALINK" != xno; then
2486  ssl_msg=
2487
2488  if test X"$OPT_MESALINK" != Xno; then
2489
2490    if test "$OPT_MESALINK" = "yes"; then
2491      OPT_MESALINK=""
2492    fi
2493
2494    if test -z "$OPT_MESALINK" ; then
2495      dnl check for lib first without setting any new path
2496
2497      AC_CHECK_LIB(mesalink, mesalink_library_init,
2498      dnl libmesalink found, set the variable
2499       [
2500         AC_DEFINE(USE_MESALINK, 1, [if MesaLink is enabled])
2501         AC_SUBST(USE_MESALINK, [1])
2502         MESALINK_ENABLED=1
2503         USE_MESALINK="yes"
2504         ssl_msg="MesaLink"
2505	 test mesalink != "$DEFAULT_SSL_BACKEND" || VALID_DEFAULT_SSL_BACKEND=yes
2506        ])
2507    fi
2508
2509    addld=""
2510    addlib=""
2511    addcflags=""
2512    mesalinklib=""
2513
2514    if test "x$USE_MESALINK" != "xyes"; then
2515      dnl add the path and test again
2516      addld=-L$OPT_MESALINK/lib$libsuff
2517      addcflags=-I$OPT_MESALINK/include
2518      mesalinklib=$OPT_MESALINK/lib$libsuff
2519
2520      LDFLAGS="$LDFLAGS $addld"
2521      if test "$addcflags" != "-I/usr/include"; then
2522         CPPFLAGS="$CPPFLAGS $addcflags"
2523      fi
2524
2525      AC_CHECK_LIB(mesalink, mesalink_library_init,
2526       [
2527       AC_DEFINE(USE_MESALINK, 1, [if MesaLink is enabled])
2528       AC_SUBST(USE_MESALINK, [1])
2529       MESALINK_ENABLED=1
2530       USE_MESALINK="yes"
2531       ssl_msg="MesaLink"
2532       test mesalink != "$DEFAULT_SSL_BACKEND" || VALID_DEFAULT_SSL_BACKEND=yes
2533       ],
2534       [
2535         CPPFLAGS=$_cppflags
2536         LDFLAGS=$_ldflags
2537       ])
2538    fi
2539
2540    if test "x$USE_MESALINK" = "xyes"; then
2541      AC_MSG_NOTICE([detected MesaLink])
2542
2543      LIBS="-lmesalink $LIBS"
2544
2545      if test -n "$mesalinklib"; then
2546        dnl when shared libs were found in a path that the run-time
2547        dnl linker doesn't search through, we need to add it to
2548        dnl LD_LIBRARY_PATH to prevent further configure tests to fail
2549        dnl due to this
2550        if test "x$cross_compiling" != "xyes"; then
2551          LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$mesalinklib"
2552          export LD_LIBRARY_PATH
2553          AC_MSG_NOTICE([Added $mesalinklib to LD_LIBRARY_PATH])
2554        fi
2555      fi
2556    fi
2557
2558  fi dnl MesaLink not disabled
2559
2560  test -z "$ssl_msg" || ssl_backends="${ssl_backends:+$ssl_backends, }$ssl_msg"
2561fi
2562
2563dnl ----------------------------------------------------
2564dnl NSS. Only check if GnuTLS and OpenSSL are not enabled
2565dnl ----------------------------------------------------
2566
2567dnl Default to compiler & linker defaults for NSS files & libraries.
2568OPT_NSS=no
2569
2570AC_ARG_WITH(nss,dnl
2571AC_HELP_STRING([--with-nss=PATH],[where to look for NSS, PATH points to the installation root])
2572AC_HELP_STRING([--without-nss], [disable NSS detection]),
2573  OPT_NSS=$withval)
2574
2575if test -z "$ssl_backends" -o "x$OPT_NSS" != xno; then
2576  ssl_msg=
2577
2578  if test X"$OPT_NSS" != Xno; then
2579
2580    addld=""
2581    addlib=""
2582    addcflags=""
2583    nssprefix=""
2584    version=""
2585
2586    if test "x$OPT_NSS" = "xyes"; then
2587
2588      CURL_CHECK_PKGCONFIG(nss)
2589
2590      if test "$PKGCONFIG" != "no" ; then
2591        addlib=`$PKGCONFIG --libs nss`
2592        addcflags=`$PKGCONFIG --cflags nss`
2593        version=`$PKGCONFIG --modversion nss`
2594        nssprefix=`$PKGCONFIG --variable=prefix nss`
2595      else
2596        dnl Without pkg-config, we check for nss-config
2597
2598        check=`nss-config --version 2>/dev/null`
2599        if test -n "$check"; then
2600          addlib=`nss-config --libs`
2601          addcflags=`nss-config --cflags`
2602          version=`nss-config --version`
2603          nssprefix=`nss-config --prefix`
2604        else
2605          addlib="-lnss3"
2606          addcflags=""
2607          version="unknown"
2608        fi
2609      fi
2610    else
2611      NSS_PCDIR="$OPT_NSS/lib/pkgconfig"
2612      if test -f "$NSS_PCDIR/nss.pc"; then
2613        CURL_CHECK_PKGCONFIG(nss, [$NSS_PCDIR])
2614        if test "$PKGCONFIG" != "no" ; then
2615          addld=`CURL_EXPORT_PCDIR([$NSS_PCDIR]) $PKGCONFIG --libs-only-L nss`
2616          addlib=`CURL_EXPORT_PCDIR([$NSS_PCDIR]) $PKGCONFIG --libs-only-l nss`
2617          addcflags=`CURL_EXPORT_PCDIR([$NSS_PCDIR]) $PKGCONFIG --cflags nss`
2618          version=`CURL_EXPORT_PCDIR([$NSS_PCDIR]) $PKGCONFIG --modversion nss`
2619          nssprefix=`CURL_EXPORT_PCDIR([$NSS_PCDIR]) $PKGCONFIG --variable=prefix nss`
2620        fi
2621      fi
2622    fi
2623
2624    if test -z "$addlib"; then
2625      # Without pkg-config, we'll kludge in some defaults
2626      AC_MSG_WARN([Using hard-wired libraries and compilation flags for NSS.])
2627      addld="-L$OPT_NSS/lib"
2628      addlib="-lssl3 -lsmime3 -lnss3 -lplds4 -lplc4 -lnspr4"
2629      addcflags="-I$OPT_NSS/include"
2630      version="unknown"
2631      nssprefix=$OPT_NSS
2632    fi
2633
2634    CLEANLDFLAGS="$LDFLAGS"
2635    CLEANLIBS="$LIBS"
2636    CLEANCPPFLAGS="$CPPFLAGS"
2637
2638    LDFLAGS="$addld $LDFLAGS"
2639    LIBS="$addlib $LIBS"
2640    if test "$addcflags" != "-I/usr/include"; then
2641       CPPFLAGS="$CPPFLAGS $addcflags"
2642    fi
2643
2644    dnl The function SSL_VersionRangeSet() is needed to enable TLS > 1.0
2645    AC_CHECK_LIB(nss3, SSL_VersionRangeSet,
2646     [
2647     AC_DEFINE(USE_NSS, 1, [if NSS is enabled])
2648     AC_SUBST(USE_NSS, [1])
2649     USE_NSS="yes"
2650     NSS_ENABLED=1
2651     ssl_msg="NSS"
2652     test nss != "$DEFAULT_SSL_BACKEND" || VALID_DEFAULT_SSL_BACKEND=yes
2653     ],
2654     [
2655       LDFLAGS="$CLEANLDFLAGS"
2656       LIBS="$CLEANLIBS"
2657       CPPFLAGS="$CLEANCPPFLAGS"
2658     ])
2659
2660    if test "x$USE_NSS" = "xyes"; then
2661      AC_MSG_NOTICE([detected NSS version $version])
2662
2663      dnl PK11_CreateManagedGenericObject() was introduced in NSS 3.34 because
2664      dnl PK11_DestroyGenericObject() does not release resources allocated by
2665      dnl PK11_CreateGenericObject() early enough.
2666      AC_CHECK_FUNC(PK11_CreateManagedGenericObject,
2667        [
2668          AC_DEFINE(HAVE_PK11_CREATEMANAGEDGENERICOBJECT, 1,
2669                    [if you have the PK11_CreateManagedGenericObject function])
2670        ])
2671
2672      dnl needed when linking the curl tool without USE_EXPLICIT_LIB_DEPS
2673      NSS_LIBS=$addlib
2674      AC_SUBST([NSS_LIBS])
2675
2676      dnl when shared libs were found in a path that the run-time
2677      dnl linker doesn't search through, we need to add it to
2678      dnl CURL_LIBRARY_PATH to prevent further configure tests to fail
2679      dnl due to this
2680      if test "x$cross_compiling" != "xyes"; then
2681        CURL_LIBRARY_PATH="$CURL_LIBRARY_PATH:$nssprefix/lib$libsuff"
2682        export CURL_LIBRARY_PATH
2683        AC_MSG_NOTICE([Added $nssprefix/lib$libsuff to CURL_LIBRARY_PATH])
2684      fi
2685
2686    fi dnl NSS found
2687
2688  fi dnl NSS not disabled
2689
2690  test -z "$ssl_msg" || ssl_backends="${ssl_backends:+$ssl_backends, }$ssl_msg"
2691fi
2692
2693case "x$OPENSSL_ENABLED$GNUTLS_ENABLED$NSS_ENABLED$POLARSSL_ENABLED$MBEDTLS_ENABLED$CYASSL_ENABLED$WINSSL_ENABLED$SECURETRANSPORT_ENABLED$MESALINK_ENABLED$AMISSL_ENABLED" in
2694x)
2695  AC_MSG_WARN([SSL disabled, you will not be able to use HTTPS, FTPS, NTLM and more.])
2696  AC_MSG_WARN([Use --with-ssl, --with-gnutls, --with-polarssl, --with-cyassl, --with-nss, --with-schannel, --with-secure-transport, --with-mesalink or --with-amissl to address this.])
2697  ;;
2698x1)
2699  # one SSL backend is enabled
2700  AC_SUBST(SSL_ENABLED)
2701  SSL_ENABLED="1"
2702  AC_MSG_NOTICE([built with one SSL backend])
2703  ;;
2704*)
2705  # more than one SSL backend is enabled
2706  AC_SUBST(SSL_ENABLED)
2707  SSL_ENABLED="1"
2708  AC_SUBST(CURL_WITH_MULTI_SSL)
2709  CURL_WITH_MULTI_SSL="1"
2710  AC_DEFINE(CURL_WITH_MULTI_SSL, 1, [built with multiple SSL backends])
2711  AC_MSG_NOTICE([built with multiple SSL backends])
2712  ;;
2713esac
2714
2715if test -n "$ssl_backends"; then
2716  curl_ssl_msg="enabled ($ssl_backends)"
2717fi
2718
2719if test no = "$VALID_DEFAULT_SSL_BACKEND"
2720then
2721  if test -n "$SSL_ENABLED"
2722  then
2723    AC_MSG_ERROR([Default SSL backend $DEFAULT_SSL_BACKEND not enabled!])
2724  else
2725    AC_MSG_ERROR([Default SSL backend requires SSL!])
2726  fi
2727elif test yes = "$VALID_DEFAULT_SSL_BACKEND"
2728then
2729  AC_DEFINE_UNQUOTED([CURL_DEFAULT_SSL_BACKEND], ["$DEFAULT_SSL_BACKEND"], [Default SSL backend])
2730fi
2731
2732dnl **********************************************************************
2733dnl Check for the CA bundle
2734dnl **********************************************************************
2735
2736if test "$check_for_ca_bundle" -gt 0; then
2737  CURL_CHECK_CA_BUNDLE
2738fi
2739
2740dnl **********************************************************************
2741dnl Check for libpsl
2742dnl **********************************************************************
2743
2744AC_ARG_WITH(libpsl,
2745           AS_HELP_STRING([--without-libpsl],
2746           [disable support for libpsl cookie checking]),
2747           with_libpsl=$withval,
2748           with_libpsl=yes)
2749if test $with_libpsl != "no"; then
2750  AC_SEARCH_LIBS(psl_builtin, psl,
2751    [curl_psl_msg="enabled";
2752     AC_DEFINE([USE_LIBPSL], [1], [PSL support enabled])
2753     ],
2754    [curl_psl_msg="no      (libpsl not found)";
2755     AC_MSG_WARN([libpsl was not found])
2756     ]
2757  )
2758fi
2759AM_CONDITIONAL([USE_LIBPSL], [test "$curl_psl_msg" = "enabled"])
2760
2761dnl **********************************************************************
2762dnl Check for libmetalink
2763dnl **********************************************************************
2764
2765OPT_LIBMETALINK=no
2766
2767AC_ARG_WITH(libmetalink,dnl
2768AC_HELP_STRING([--with-libmetalink=PATH],[where to look for libmetalink, PATH points to the installation root])
2769AC_HELP_STRING([--without-libmetalink], [disable libmetalink detection]),
2770  OPT_LIBMETALINK=$withval)
2771
2772if test X"$OPT_LIBMETALINK" != Xno; then
2773
2774  addld=""
2775  addlib=""
2776  addcflags=""
2777  version=""
2778  libmetalinklib=""
2779
2780  PKGTEST="no"
2781  if test "x$OPT_LIBMETALINK" = "xyes"; then
2782    dnl this is with no partiular path given
2783    PKGTEST="yes"
2784    CURL_CHECK_PKGCONFIG(libmetalink)
2785  else
2786    dnl When particular path is given, set PKG_CONFIG_LIBDIR using the path.
2787    LIBMETALINK_PCDIR="$OPT_LIBMETALINK/lib/pkgconfig"
2788    AC_MSG_NOTICE([PKG_CONFIG_LIBDIR will be set to "$LIBMETALINK_PCDIR"])
2789    if test -f "$LIBMETALINK_PCDIR/libmetalink.pc"; then
2790      PKGTEST="yes"
2791    fi
2792    if test "$PKGTEST" = "yes"; then
2793      CURL_CHECK_PKGCONFIG(libmetalink, [$LIBMETALINK_PCDIR])
2794    fi
2795  fi
2796  if test "$PKGTEST" = "yes" && test "$PKGCONFIG" != "no"; then
2797    addlib=`CURL_EXPORT_PCDIR([$LIBMETALINK_PCDIR]) dnl
2798      $PKGCONFIG --libs-only-l libmetalink`
2799    addld=`CURL_EXPORT_PCDIR([$LIBMETALINK_PCDIR]) dnl
2800      $PKGCONFIG --libs-only-L libmetalink`
2801    addcflags=`CURL_EXPORT_PCDIR([$LIBMETALINK_PCDIR]) dnl
2802      $PKGCONFIG --cflags-only-I libmetalink`
2803    version=`CURL_EXPORT_PCDIR([$LIBMETALINK_PCDIR]) dnl
2804      $PKGCONFIG --modversion libmetalink`
2805    libmetalinklib=`echo $addld | $SED -e 's/-L//'`
2806  fi
2807  if test -n "$addlib"; then
2808
2809    clean_CPPFLAGS="$CPPFLAGS"
2810    clean_LDFLAGS="$LDFLAGS"
2811    clean_LIBS="$LIBS"
2812    CPPFLAGS="$clean_CPPFLAGS $addcflags"
2813    LDFLAGS="$clean_LDFLAGS $addld"
2814    LIBS="$addlib $clean_LIBS"
2815    AC_MSG_CHECKING([if libmetalink is recent enough])
2816    AC_LINK_IFELSE([
2817      AC_LANG_PROGRAM([[
2818#       include <metalink/metalink.h>
2819      ]],[[
2820        if(0 != metalink_strerror(0)) /* added in 0.1.0 */
2821          return 1;
2822      ]])
2823    ],[
2824      AC_MSG_RESULT([yes ($version)])
2825      want_metalink="yes"
2826    ],[
2827      AC_MSG_RESULT([no ($version)])
2828      AC_MSG_NOTICE([libmetalink library defective or too old])
2829      want_metalink="no"
2830    ])
2831    CPPFLAGS="$clean_CPPFLAGS"
2832    LDFLAGS="$clean_LDFLAGS"
2833    LIBS="$clean_LIBS"
2834    if test "$want_metalink" = "yes"; then
2835      dnl finally libmetalink will be used
2836      AC_DEFINE(USE_METALINK, 1, [Define to enable metalink support])
2837      LIBMETALINK_LIBS=$addlib
2838      LIBMETALINK_LDFLAGS=$addld
2839      LIBMETALINK_CPPFLAGS=$addcflags
2840      AC_SUBST([LIBMETALINK_LIBS])
2841      AC_SUBST([LIBMETALINK_LDFLAGS])
2842      AC_SUBST([LIBMETALINK_CPPFLAGS])
2843      curl_mtlnk_msg="enabled"
2844    fi
2845
2846  fi
2847fi
2848
2849dnl **********************************************************************
2850dnl Check for the presence of LIBSSH2 libraries and headers
2851dnl **********************************************************************
2852
2853dnl Default to compiler & linker defaults for LIBSSH2 files & libraries.
2854OPT_LIBSSH2=off
2855AC_ARG_WITH(libssh2,dnl
2856AC_HELP_STRING([--with-libssh2=PATH],[Where to look for libssh2, PATH points to the LIBSSH2 installation; when possible, set the PKG_CONFIG_PATH environment variable instead of using this option])
2857AC_HELP_STRING([--with-libssh2], [enable LIBSSH2]),
2858  OPT_LIBSSH2=$withval, OPT_LIBSSH2=no)
2859
2860
2861OPT_LIBSSH=off
2862AC_ARG_WITH(libssh,dnl
2863AC_HELP_STRING([--with-libssh=PATH],[Where to look for libssh, PATH points to the LIBSSH installation; when possible, set the PKG_CONFIG_PATH environment variable instead of using this option])
2864AC_HELP_STRING([--with-libssh], [enable LIBSSH]),
2865  OPT_LIBSSH=$withval, OPT_LIBSSH=no)
2866
2867if test X"$OPT_LIBSSH2" != Xno; then
2868  dnl backup the pre-libssh2 variables
2869  CLEANLDFLAGS="$LDFLAGS"
2870  CLEANCPPFLAGS="$CPPFLAGS"
2871  CLEANLIBS="$LIBS"
2872
2873  case "$OPT_LIBSSH2" in
2874  yes)
2875    dnl --with-libssh2 (without path) used
2876    CURL_CHECK_PKGCONFIG(libssh2)
2877
2878    if test "$PKGCONFIG" != "no" ; then
2879      LIB_SSH2=`$PKGCONFIG --libs libssh2`
2880      LD_SSH2=`$PKGCONFIG --libs-only-L libssh2`
2881      CPP_SSH2=`$PKGCONFIG --cflags-only-I libssh2`
2882      version=`$PKGCONFIG --modversion libssh2`
2883      DIR_SSH2=`echo $LD_SSH2 | $SED -e 's/-L//'`
2884    fi
2885
2886    ;;
2887  off)
2888    dnl no --with-libssh2 option given, just check default places
2889    ;;
2890  *)
2891    dnl use the given --with-libssh2 spot
2892    PREFIX_SSH2=$OPT_LIBSSH2
2893    ;;
2894  esac
2895
2896  dnl if given with a prefix, we set -L and -I based on that
2897  if test -n "$PREFIX_SSH2"; then
2898    LIB_SSH2="-lssh2"
2899    LD_SSH2=-L${PREFIX_SSH2}/lib$libsuff
2900    CPP_SSH2=-I${PREFIX_SSH2}/include
2901    DIR_SSH2=${PREFIX_SSH2}/lib$libsuff
2902  fi
2903
2904  LDFLAGS="$LDFLAGS $LD_SSH2"
2905  CPPFLAGS="$CPPFLAGS $CPP_SSH2"
2906  LIBS="$LIB_SSH2 $LIBS"
2907
2908  AC_CHECK_LIB(ssh2, libssh2_channel_open_ex)
2909
2910  AC_CHECK_HEADERS(libssh2.h,
2911    curl_ssh_msg="enabled (libSSH2)"
2912    LIBSSH2_ENABLED=1
2913    AC_DEFINE(USE_LIBSSH2, 1, [if libSSH2 is in use])
2914    AC_SUBST(USE_LIBSSH2, [1])
2915  )
2916
2917  if test X"$OPT_LIBSSH2" != Xoff &&
2918     test "$LIBSSH2_ENABLED" != "1"; then
2919    AC_MSG_ERROR([libSSH2 libs and/or directories were not found where specified!])
2920  fi
2921
2922  if test "$LIBSSH2_ENABLED" = "1"; then
2923    if test -n "$DIR_SSH2"; then
2924       dnl when the libssh2 shared libs were found in a path that the run-time
2925       dnl linker doesn't search through, we need to add it to CURL_LIBRARY_PATH
2926       dnl to prevent further configure tests to fail due to this
2927
2928       if test "x$cross_compiling" != "xyes"; then
2929         CURL_LIBRARY_PATH="$CURL_LIBRARY_PATH:$DIR_SSH2"
2930         export CURL_LIBRARY_PATH
2931         AC_MSG_NOTICE([Added $DIR_SSH2 to CURL_LIBRARY_PATH])
2932       fi
2933    fi
2934  else
2935    dnl no libssh2, revert back to clean variables
2936    LDFLAGS=$CLEANLDFLAGS
2937    CPPFLAGS=$CLEANCPPFLAGS
2938    LIBS=$CLEANLIBS
2939  fi
2940elif test X"$OPT_LIBSSH" != Xno; then
2941  dnl backup the pre-libssh variables
2942  CLEANLDFLAGS="$LDFLAGS"
2943  CLEANCPPFLAGS="$CPPFLAGS"
2944  CLEANLIBS="$LIBS"
2945
2946  case "$OPT_LIBSSH" in
2947  yes)
2948    dnl --with-libssh (without path) used
2949    CURL_CHECK_PKGCONFIG(libssh)
2950
2951    if test "$PKGCONFIG" != "no" ; then
2952      LIB_SSH=`$PKGCONFIG --libs-only-l libssh`
2953      LD_SSH=`$PKGCONFIG --libs-only-L libssh`
2954      CPP_SSH=`$PKGCONFIG --cflags-only-I libssh`
2955      version=`$PKGCONFIG --modversion libssh`
2956      DIR_SSH=`echo $LD_SSH | $SED -e 's/-L//'`
2957    fi
2958
2959    ;;
2960  off)
2961    dnl no --with-libssh option given, just check default places
2962    ;;
2963  *)
2964    dnl use the given --with-libssh spot
2965    PREFIX_SSH=$OPT_LIBSSH
2966    ;;
2967  esac
2968
2969  dnl if given with a prefix, we set -L and -I based on that
2970  if test -n "$PREFIX_SSH"; then
2971    LIB_SSH="-lssh"
2972    LD_SSH=-L${PREFIX_SSH}/lib$libsuff
2973    CPP_SSH=-I${PREFIX_SSH}/include
2974    DIR_SSH=${PREFIX_SSH}/lib$libsuff
2975  fi
2976
2977  LDFLAGS="$LDFLAGS $LD_SSH"
2978  CPPFLAGS="$CPPFLAGS $CPP_SSH"
2979  LIBS="$LIB_SSH $LIBS"
2980
2981  AC_CHECK_LIB(ssh, ssh_new)
2982
2983  AC_CHECK_HEADERS(libssh/libssh.h,
2984    curl_ssh_msg="enabled (libSSH)"
2985    LIBSSH_ENABLED=1
2986    AC_DEFINE(USE_LIBSSH, 1, [if libSSH is in use])
2987    AC_SUBST(USE_LIBSSH, [1])
2988  )
2989
2990  if test X"$OPT_LIBSSH" != Xoff &&
2991     test "$LIBSSH_ENABLED" != "1"; then
2992    AC_MSG_ERROR([libSSH libs and/or directories were not found where specified!])
2993  fi
2994
2995  if test "$LIBSSH_ENABLED" = "1"; then
2996    if test -n "$DIR_SSH"; then
2997       dnl when the libssh shared libs were found in a path that the run-time
2998       dnl linker doesn't search through, we need to add it to CURL_LIBRARY_PATH
2999       dnl to prevent further configure tests to fail due to this
3000
3001       if test "x$cross_compiling" != "xyes"; then
3002         CURL_LIBRARY_PATH="$CURL_LIBRARY_PATH:$DIR_SSH"
3003         export CURL_LIBRARY_PATH
3004         AC_MSG_NOTICE([Added $DIR_SSH to CURL_LIBRARY_PATH])
3005       fi
3006    fi
3007  else
3008    dnl no libssh, revert back to clean variables
3009    LDFLAGS=$CLEANLDFLAGS
3010    CPPFLAGS=$CLEANCPPFLAGS
3011    LIBS=$CLEANLIBS
3012  fi
3013fi
3014
3015dnl **********************************************************************
3016dnl Check for the presence of LIBRTMP libraries and headers
3017dnl **********************************************************************
3018
3019dnl Default to compiler & linker defaults for LIBRTMP files & libraries.
3020OPT_LIBRTMP=off
3021AC_ARG_WITH(librtmp,dnl
3022AC_HELP_STRING([--with-librtmp=PATH],[Where to look for librtmp, PATH points to the LIBRTMP installation; when possible, set the PKG_CONFIG_PATH environment variable instead of using this option])
3023AC_HELP_STRING([--without-librtmp], [disable LIBRTMP]),
3024  OPT_LIBRTMP=$withval)
3025
3026if test X"$OPT_LIBRTMP" != Xno; then
3027  dnl backup the pre-librtmp variables
3028  CLEANLDFLAGS="$LDFLAGS"
3029  CLEANCPPFLAGS="$CPPFLAGS"
3030  CLEANLIBS="$LIBS"
3031
3032  case "$OPT_LIBRTMP" in
3033  yes)
3034    dnl --with-librtmp (without path) used
3035    CURL_CHECK_PKGCONFIG(librtmp)
3036
3037    if test "$PKGCONFIG" != "no" ; then
3038      LIB_RTMP=`$PKGCONFIG --libs-only-l librtmp`
3039      LD_RTMP=`$PKGCONFIG --libs-only-L librtmp`
3040      CPP_RTMP=`$PKGCONFIG --cflags-only-I librtmp`
3041      version=`$PKGCONFIG --modversion librtmp`
3042      DIR_RTMP=`echo $LD_RTMP | $SED -e 's/-L//'`
3043    else
3044      dnl To avoid link errors, we do not allow --librtmp without
3045      dnl a pkgconfig file
3046      AC_MSG_ERROR([--librtmp was specified but could not find librtmp pkgconfig file.])
3047    fi
3048
3049    ;;
3050  off)
3051    dnl no --with-librtmp option given, just check default places
3052    LIB_RTMP="-lrtmp"
3053    ;;
3054  *)
3055    dnl use the given --with-librtmp spot
3056    LIB_RTMP="-lrtmp"
3057    PREFIX_RTMP=$OPT_LIBRTMP
3058    ;;
3059  esac
3060
3061  dnl if given with a prefix, we set -L and -I based on that
3062  if test -n "$PREFIX_RTMP"; then
3063    LD_RTMP=-L${PREFIX_RTMP}/lib$libsuff
3064    CPP_RTMP=-I${PREFIX_RTMP}/include
3065    DIR_RTMP=${PREFIX_RTMP}/lib$libsuff
3066  fi
3067
3068  LDFLAGS="$LDFLAGS $LD_RTMP"
3069  CPPFLAGS="$CPPFLAGS $CPP_RTMP"
3070  LIBS="$LIB_RTMP $LIBS"
3071
3072  AC_CHECK_LIB(rtmp, RTMP_Init,
3073    [
3074     AC_CHECK_HEADERS(librtmp/rtmp.h,
3075        curl_rtmp_msg="enabled (librtmp)"
3076        LIBRTMP_ENABLED=1
3077        AC_DEFINE(USE_LIBRTMP, 1, [if librtmp is in use])
3078        AC_SUBST(USE_LIBRTMP, [1])
3079     )
3080    ],
3081      dnl not found, revert back to clean variables
3082      LDFLAGS=$CLEANLDFLAGS
3083      CPPFLAGS=$CLEANCPPFLAGS
3084      LIBS=$CLEANLIBS
3085  )
3086
3087  if test X"$OPT_LIBRTMP" != Xoff &&
3088     test "$LIBRTMP_ENABLED" != "1"; then
3089    AC_MSG_ERROR([librtmp libs and/or directories were not found where specified!])
3090  fi
3091
3092fi
3093
3094dnl **********************************************************************
3095dnl Check for linker switch for versioned symbols
3096dnl **********************************************************************
3097
3098versioned_symbols_flavour=
3099AC_MSG_CHECKING([whether versioned symbols are wanted])
3100AC_ARG_ENABLE(versioned-symbols,
3101AC_HELP_STRING([--enable-versioned-symbols], [Enable versioned symbols in shared library])
3102AC_HELP_STRING([--disable-versioned-symbols], [Disable versioned symbols in shared library]),
3103[ case "$enableval" in
3104  yes) AC_MSG_RESULT(yes)
3105    AC_MSG_CHECKING([if libraries can be versioned])
3106    GLD=`$LD --help < /dev/null 2>/dev/null | grep version-script`
3107    if test -z "$GLD"; then
3108        AC_MSG_RESULT(no)
3109        AC_MSG_WARN([You need an ld version supporting the --version-script option])
3110    else
3111        AC_MSG_RESULT(yes)
3112        if test "x$CURL_WITH_MULTI_SSL" = "x1"; then
3113          versioned_symbols_flavour="MULTISSL_"
3114        elif test "x$OPENSSL_ENABLED" = "x1"; then
3115          versioned_symbols_flavour="OPENSSL_"
3116        elif test "x$GNUTLS_ENABLED" = "x1"; then
3117          versioned_symbols_flavour="GNUTLS_"
3118        elif test "x$NSS_ENABLED" = "x1"; then
3119          versioned_symbols_flavour="NSS_"
3120        elif test "x$POLARSSL_ENABLED" = "x1"; then
3121          versioned_symbols_flavour="POLARSSL_"
3122        elif test "x$CYASSL_ENABLED" = "x1"; then
3123          versioned_symbols_flavour="CYASSL_"
3124        elif test "x$WINSSL_ENABLED" = "x1"; then
3125          versioned_symbols_flavour="SCHANNEL_"
3126        elif test "x$SECURETRANSPORT_ENABLED" = "x1"; then
3127          versioned_symbols_flavour="SECURE_TRANSPORT_"
3128        else
3129          versioned_symbols_flavour=""
3130        fi
3131        versioned_symbols="yes"
3132    fi
3133    ;;
3134
3135  *)   AC_MSG_RESULT(no)
3136    ;;
3137  esac
3138], [
3139AC_MSG_RESULT(no)
3140]
3141)
3142
3143AC_SUBST([CURL_LT_SHLIB_VERSIONED_FLAVOUR],
3144  ["$versioned_symbols_flavour"])
3145AM_CONDITIONAL([CURL_LT_SHLIB_USE_VERSIONED_SYMBOLS],
3146  [test "x$versioned_symbols" = 'xyes'])
3147
3148dnl -------------------------------------------------
3149dnl check winidn option before other IDN libraries
3150dnl -------------------------------------------------
3151
3152AC_MSG_CHECKING([whether to enable Windows native IDN (Windows native builds only)])
3153OPT_WINIDN="default"
3154AC_ARG_WITH(winidn,
3155AC_HELP_STRING([--with-winidn=PATH],[enable Windows native IDN])
3156AC_HELP_STRING([--without-winidn], [disable Windows native IDN]),
3157  OPT_WINIDN=$withval)
3158case "$OPT_WINIDN" in
3159  no|default)
3160    dnl --without-winidn option used or configure option not specified
3161    want_winidn="no"
3162    AC_MSG_RESULT([no])
3163    ;;
3164  yes)
3165    dnl --with-winidn option used without path
3166    want_winidn="yes"
3167    want_winidn_path="default"
3168    AC_MSG_RESULT([yes])
3169    ;;
3170  *)
3171    dnl --with-winidn option used with path
3172    want_winidn="yes"
3173    want_winidn_path="$withval"
3174    AC_MSG_RESULT([yes ($withval)])
3175    ;;
3176esac
3177
3178if test "$want_winidn" = "yes"; then
3179  dnl winidn library support has been requested
3180  clean_CPPFLAGS="$CPPFLAGS"
3181  clean_LDFLAGS="$LDFLAGS"
3182  clean_LIBS="$LIBS"
3183  WINIDN_LIBS="-lnormaliz"
3184  WINIDN_CPPFLAGS="-DWINVER=0x0600"
3185  #
3186  if test "$want_winidn_path" != "default"; then
3187    dnl path has been specified
3188    dnl pkg-config not available or provides no info
3189    WINIDN_LDFLAGS="-L$want_winidn_path/lib$libsuff"
3190    WINIDN_CPPFLAGS="-I$want_winidn_path/include"
3191    WINIDN_DIR="$want_winidn_path/lib$libsuff"
3192  fi
3193  #
3194  CPPFLAGS="$CPPFLAGS $WINIDN_CPPFLAGS"
3195  LDFLAGS="$LDFLAGS $WINIDN_LDFLAGS"
3196  LIBS="$WINIDN_LIBS $LIBS"
3197  #
3198  AC_MSG_CHECKING([if IdnToUnicode can be linked])
3199  AC_LINK_IFELSE([
3200    AC_LANG_PROGRAM([[
3201      #include <windows.h>
3202    ]],[[
3203      IdnToUnicode(0, NULL, 0, NULL, 0);
3204    ]])
3205  ],[
3206    AC_MSG_RESULT([yes])
3207    tst_links_winidn="yes"
3208  ],[
3209    AC_MSG_RESULT([no])
3210    tst_links_winidn="no"
3211  ])
3212  #
3213  if test "$tst_links_winidn" = "yes"; then
3214    AC_DEFINE(USE_WIN32_IDN, 1, [Define to 1 if you have the `normaliz' (WinIDN) library (-lnormaliz).])
3215    AC_DEFINE(WANT_IDN_PROTOTYPES, 1, [Define to 1 to provide own prototypes.])
3216    AC_SUBST([IDN_ENABLED], [1])
3217    curl_idn_msg="enabled (Windows-native)"
3218  else
3219    AC_MSG_WARN([Cannot find libraries for IDN support: IDN disabled])
3220    CPPFLAGS="$clean_CPPFLAGS"
3221    LDFLAGS="$clean_LDFLAGS"
3222    LIBS="$clean_LIBS"
3223  fi
3224fi
3225
3226dnl **********************************************************************
3227dnl Check for the presence of IDN libraries and headers
3228dnl **********************************************************************
3229
3230AC_MSG_CHECKING([whether to build with libidn2])
3231OPT_IDN="default"
3232AC_ARG_WITH(libidn2,
3233AC_HELP_STRING([--with-libidn2=PATH],[Enable libidn2 usage])
3234AC_HELP_STRING([--without-libidn2],[Disable libidn2 usage]),
3235  [OPT_IDN=$withval])
3236case "$OPT_IDN" in
3237  no)
3238    dnl --without-libidn2 option used
3239    want_idn="no"
3240    AC_MSG_RESULT([no])
3241    ;;
3242  default)
3243    dnl configure option not specified
3244    want_idn="yes"
3245    want_idn_path="default"
3246    AC_MSG_RESULT([(assumed) yes])
3247    ;;
3248  yes)
3249    dnl --with-libidn2 option used without path
3250    want_idn="yes"
3251    want_idn_path="default"
3252    AC_MSG_RESULT([yes])
3253    ;;
3254  *)
3255    dnl --with-libidn2 option used with path
3256    want_idn="yes"
3257    want_idn_path="$withval"
3258    AC_MSG_RESULT([yes ($withval)])
3259    ;;
3260esac
3261
3262if test "$want_idn" = "yes"; then
3263  dnl idn library support has been requested
3264  clean_CPPFLAGS="$CPPFLAGS"
3265  clean_LDFLAGS="$LDFLAGS"
3266  clean_LIBS="$LIBS"
3267  PKGCONFIG="no"
3268  #
3269  if test "$want_idn_path" != "default"; then
3270    dnl path has been specified
3271    IDN_PCDIR="$want_idn_path/lib$libsuff/pkgconfig"
3272    CURL_CHECK_PKGCONFIG(libidn2, [$IDN_PCDIR])
3273    if test "$PKGCONFIG" != "no"; then
3274      IDN_LIBS=`CURL_EXPORT_PCDIR([$IDN_PCDIR]) dnl
3275        $PKGCONFIG --libs-only-l libidn2 2>/dev/null`
3276      IDN_LDFLAGS=`CURL_EXPORT_PCDIR([$IDN_PCDIR]) dnl
3277        $PKGCONFIG --libs-only-L libidn2 2>/dev/null`
3278      IDN_CPPFLAGS=`CURL_EXPORT_PCDIR([$IDN_PCDIR]) dnl
3279        $PKGCONFIG --cflags-only-I libidn2 2>/dev/null`
3280      IDN_DIR=`echo $IDN_LDFLAGS | $SED -e 's/-L//'`
3281    else
3282      dnl pkg-config not available or provides no info
3283      IDN_LIBS="-lidn2"
3284      IDN_LDFLAGS="-L$want_idn_path/lib$libsuff"
3285      IDN_CPPFLAGS="-I$want_idn_path/include"
3286      IDN_DIR="$want_idn_path/lib$libsuff"
3287    fi
3288  else
3289    dnl path not specified
3290    CURL_CHECK_PKGCONFIG(libidn2)
3291    if test "$PKGCONFIG" != "no"; then
3292      IDN_LIBS=`$PKGCONFIG --libs-only-l libidn2 2>/dev/null`
3293      IDN_LDFLAGS=`$PKGCONFIG --libs-only-L libidn2 2>/dev/null`
3294      IDN_CPPFLAGS=`$PKGCONFIG --cflags-only-I libidn2 2>/dev/null`
3295      IDN_DIR=`echo $IDN_LDFLAGS | $SED -e 's/-L//'`
3296    else
3297      dnl pkg-config not available or provides no info
3298      IDN_LIBS="-lidn2"
3299    fi
3300  fi
3301  #
3302  if test "$PKGCONFIG" != "no"; then
3303    AC_MSG_NOTICE([pkg-config: IDN_LIBS: "$IDN_LIBS"])
3304    AC_MSG_NOTICE([pkg-config: IDN_LDFLAGS: "$IDN_LDFLAGS"])
3305    AC_MSG_NOTICE([pkg-config: IDN_CPPFLAGS: "$IDN_CPPFLAGS"])
3306    AC_MSG_NOTICE([pkg-config: IDN_DIR: "$IDN_DIR"])
3307  else
3308    AC_MSG_NOTICE([IDN_LIBS: "$IDN_LIBS"])
3309    AC_MSG_NOTICE([IDN_LDFLAGS: "$IDN_LDFLAGS"])
3310    AC_MSG_NOTICE([IDN_CPPFLAGS: "$IDN_CPPFLAGS"])
3311    AC_MSG_NOTICE([IDN_DIR: "$IDN_DIR"])
3312  fi
3313  #
3314  CPPFLAGS="$CPPFLAGS $IDN_CPPFLAGS"
3315  LDFLAGS="$LDFLAGS $IDN_LDFLAGS"
3316  LIBS="$IDN_LIBS $LIBS"
3317  #
3318  AC_MSG_CHECKING([if idn2_lookup_ul can be linked])
3319  AC_LINK_IFELSE([
3320    AC_LANG_FUNC_LINK_TRY([idn2_lookup_ul])
3321  ],[
3322    AC_MSG_RESULT([yes])
3323    tst_links_libidn="yes"
3324  ],[
3325    AC_MSG_RESULT([no])
3326    tst_links_libidn="no"
3327  ])
3328  #
3329  AC_CHECK_HEADERS( idn2.h )
3330
3331  if test "$tst_links_libidn" = "yes"; then
3332    AC_DEFINE(HAVE_LIBIDN2, 1, [Define to 1 if you have the `idn2' library (-lidn2).])
3333    dnl different versions of libidn have different setups of these:
3334
3335    AC_SUBST([IDN_ENABLED], [1])
3336    curl_idn_msg="enabled (libidn2)"
3337    if test -n "$IDN_DIR" -a "x$cross_compiling" != "xyes"; then
3338      CURL_LIBRARY_PATH="$CURL_LIBRARY_PATH:$IDN_DIR"
3339      export CURL_LIBRARY_PATH
3340      AC_MSG_NOTICE([Added $IDN_DIR to CURL_LIBRARY_PATH])
3341    fi
3342  else
3343    AC_MSG_WARN([Cannot find libraries for IDN support: IDN disabled])
3344    CPPFLAGS="$clean_CPPFLAGS"
3345    LDFLAGS="$clean_LDFLAGS"
3346    LIBS="$clean_LIBS"
3347  fi
3348fi
3349
3350
3351dnl Let's hope this split URL remains working:
3352dnl https://www15.software.ibm.com/doc_link/en_US/a_doc_lib/aixprggd/ \
3353dnl genprogc/thread_quick_ref.htm
3354
3355
3356dnl **********************************************************************
3357dnl Check for nghttp2
3358dnl **********************************************************************
3359
3360OPT_H2="yes"
3361
3362if test "x$disable_http" = "xyes"; then
3363  # without HTTP, nghttp2 is no use
3364  OPT_H2="no"
3365fi
3366
3367AC_ARG_WITH(nghttp2,
3368AC_HELP_STRING([--with-nghttp2=PATH],[Enable nghttp2 usage])
3369AC_HELP_STRING([--without-nghttp2],[Disable nghttp2 usage]),
3370  [OPT_H2=$withval])
3371case "$OPT_H2" in
3372  no)
3373    dnl --without-nghttp2 option used
3374    want_h2="no"
3375    ;;
3376  yes)
3377    dnl --with-nghttp2 option used without path
3378    want_h2="default"
3379    want_h2_path=""
3380    ;;
3381  *)
3382    dnl --with-nghttp2 option used with path
3383    want_h2="yes"
3384    want_h2_path="$withval/lib/pkgconfig"
3385    ;;
3386esac
3387
3388curl_h2_msg="disabled (--with-nghttp2)"
3389if test X"$want_h2" != Xno; then
3390  dnl backup the pre-nghttp2 variables
3391  CLEANLDFLAGS="$LDFLAGS"
3392  CLEANCPPFLAGS="$CPPFLAGS"
3393  CLEANLIBS="$LIBS"
3394
3395  CURL_CHECK_PKGCONFIG(libnghttp2, $want_h2_path)
3396
3397  if test "$PKGCONFIG" != "no" ; then
3398    LIB_H2=`CURL_EXPORT_PCDIR([$want_h2_path])
3399      $PKGCONFIG --libs-only-l libnghttp2`
3400    AC_MSG_NOTICE([-l is $LIB_H2])
3401
3402    CPP_H2=`CURL_EXPORT_PCDIR([$want_h2_path]) dnl
3403      $PKGCONFIG --cflags-only-I libnghttp2`
3404    AC_MSG_NOTICE([-I is $CPP_H2])
3405
3406    LD_H2=`CURL_EXPORT_PCDIR([$want_h2_path])
3407      $PKGCONFIG --libs-only-L libnghttp2`
3408    AC_MSG_NOTICE([-L is $LD_H2])
3409
3410    LDFLAGS="$LDFLAGS $LD_H2"
3411    CPPFLAGS="$CPPFLAGS $CPP_H2"
3412    LIBS="$LIB_H2 $LIBS"
3413
3414    # use nghttp2_option_set_no_recv_client_magic to require nghttp2
3415    # >= 1.0.0
3416    AC_CHECK_LIB(nghttp2, nghttp2_option_set_no_recv_client_magic,
3417      [
3418       AC_CHECK_HEADERS(nghttp2/nghttp2.h,
3419          curl_h2_msg="enabled (nghttp2)"
3420          NGHTTP2_ENABLED=1
3421          AC_DEFINE(USE_NGHTTP2, 1, [if nghttp2 is in use])
3422          AC_SUBST(USE_NGHTTP2, [1])
3423       )
3424      ],
3425        dnl not found, revert back to clean variables
3426        LDFLAGS=$CLEANLDFLAGS
3427        CPPFLAGS=$CLEANCPPFLAGS
3428        LIBS=$CLEANLIBS
3429    )
3430
3431  else
3432    dnl no nghttp2 pkg-config found, deal with it
3433    if test X"$want_h2" != Xdefault; then
3434      dnl To avoid link errors, we do not allow --with-nghttp2 without
3435      dnl a pkgconfig file
3436      AC_MSG_ERROR([--with-nghttp2 was specified but could not find libnghttp2 pkg-config file.])
3437    fi
3438  fi
3439
3440fi
3441
3442dnl **********************************************************************
3443dnl Check for zsh completion path
3444dnl **********************************************************************
3445
3446OPT_ZSH_FPATH=default
3447AC_ARG_WITH(zsh-functions-dir,
3448AC_HELP_STRING([--with-zsh-functions-dir=PATH],[Install zsh completions to PATH])
3449AC_HELP_STRING([--without-zsh-functions-dir],[Do not install zsh completions]),
3450  [OPT_ZSH_FPATH=$withval])
3451case "$OPT_ZSH_FPATH" in
3452  no)
3453    dnl --without-zsh-functions-dir option used
3454    ;;
3455  default|yes)
3456    dnl --with-zsh-functions-dir option used without path
3457    ZSH_FUNCTIONS_DIR="$datarootdir/zsh/site-functions"
3458    AC_SUBST(ZSH_FUNCTIONS_DIR)
3459    ;;
3460  *)
3461    dnl --with-zsh-functions-dir option used with path
3462    ZSH_FUNCTIONS_DIR="$withval"
3463    AC_SUBST(ZSH_FUNCTIONS_DIR)
3464    ;;
3465esac
3466
3467dnl **********************************************************************
3468dnl Check for fish completion path
3469dnl **********************************************************************
3470
3471OPT_FISH_FPATH=default
3472AC_ARG_WITH(fish-functions-dir,
3473AC_HELP_STRING([--with-fish-functions-dir=PATH],[Install fish completions to PATH])
3474AC_HELP_STRING([--without-fish-functions-dir],[Do not install fish completions]),
3475  [OPT_FISH_FPATH=$withval])
3476case "$OPT_FISH_FPATH" in
3477  no)
3478    dnl --without-fish-functions-dir option used
3479    ;;
3480  default|yes)
3481    dnl --with-fish-functions-dir option used without path
3482    FISH_FUNCTIONS_DIR="$datarootdir/fish/completions"
3483    AC_SUBST(FISH_FUNCTIONS_DIR)
3484    ;;
3485  *)
3486    dnl --with-fish-functions-dir option used with path
3487    FISH_FUNCTIONS_DIR="$withval"
3488    AC_SUBST(FISH_FUNCTIONS_DIR)
3489    ;;
3490esac
3491
3492dnl **********************************************************************
3493dnl Back to "normal" configuring
3494dnl **********************************************************************
3495
3496dnl Checks for header files.
3497AC_HEADER_STDC
3498
3499CURL_CHECK_HEADER_MALLOC
3500CURL_CHECK_HEADER_MEMORY
3501
3502dnl Now check for the very most basic headers. Then we can use these
3503dnl ones as default-headers when checking for the rest!
3504AC_CHECK_HEADERS(
3505        sys/types.h \
3506        sys/time.h \
3507        sys/select.h \
3508        sys/socket.h \
3509        sys/ioctl.h \
3510        sys/uio.h \
3511        assert.h \
3512        unistd.h \
3513        stdlib.h \
3514        arpa/inet.h \
3515        net/if.h \
3516        netinet/in.h \
3517	netinet/in6.h \
3518        sys/un.h \
3519        linux/tcp.h \
3520        netinet/tcp.h \
3521        netdb.h \
3522        sys/sockio.h \
3523        sys/stat.h \
3524        sys/param.h \
3525        termios.h \
3526        termio.h \
3527        sgtty.h \
3528        fcntl.h \
3529        alloca.h \
3530        time.h \
3531        io.h \
3532        pwd.h \
3533        utime.h \
3534        sys/utime.h \
3535        sys/poll.h \
3536        poll.h \
3537        socket.h \
3538        sys/resource.h \
3539        libgen.h \
3540        locale.h \
3541        errno.h \
3542        stdbool.h \
3543        arpa/tftp.h \
3544        sys/filio.h \
3545        sys/wait.h \
3546        setjmp.h,
3547dnl to do if not found
3548[],
3549dnl to do if found
3550[],
3551dnl default includes
3552[
3553#ifdef HAVE_SYS_TYPES_H
3554#include <sys/types.h>
3555#endif
3556#ifdef HAVE_SYS_TIME_H
3557#include <sys/time.h>
3558#endif
3559#ifdef HAVE_SYS_SELECT_H
3560#include <sys/select.h>
3561#endif
3562#ifdef HAVE_SYS_SOCKET_H
3563#include <sys/socket.h>
3564#endif
3565#ifdef HAVE_NETINET_IN_H
3566#include <netinet/in.h>
3567#endif
3568#ifdef HAVE_NETINET_IN6_H
3569#include <netinet/in6.h>
3570#endif
3571#ifdef HAVE_SYS_UN_H
3572#include <sys/un.h>
3573#endif
3574]
3575)
3576
3577
3578dnl Checks for typedefs, structures, and compiler characteristics.
3579AC_C_CONST
3580CURL_CHECK_VARIADIC_MACROS
3581AC_TYPE_SIZE_T
3582AC_HEADER_TIME
3583CURL_CHECK_STRUCT_TIMEVAL
3584CURL_VERIFY_RUNTIMELIBS
3585
3586AX_COMPILE_CHECK_SIZEOF(size_t)
3587AX_COMPILE_CHECK_SIZEOF(long)
3588AX_COMPILE_CHECK_SIZEOF(int)
3589AX_COMPILE_CHECK_SIZEOF(short)
3590AX_COMPILE_CHECK_SIZEOF(time_t)
3591AX_COMPILE_CHECK_SIZEOF(off_t)
3592
3593o=$CPPFLAGS
3594CPPFLAGS="-I$srcdir/include $CPPFLAGS"
3595AX_COMPILE_CHECK_SIZEOF(curl_off_t, [
3596#include <curl/system.h>
3597])
3598CPPFLAGS=$o
3599
3600AC_CHECK_TYPE(long long,
3601   [AC_DEFINE(HAVE_LONGLONG, 1,
3602      [Define to 1 if the compiler supports the 'long long' data type.])]
3603   longlong="yes"
3604)
3605
3606if test "xyes" = "x$longlong"; then
3607  AC_MSG_CHECKING([if numberLL works])
3608  AC_COMPILE_IFELSE([
3609    AC_LANG_PROGRAM([[
3610    ]],[[
3611      long long val = 1000LL;
3612    ]])
3613  ],[
3614    AC_MSG_RESULT([yes])
3615    AC_DEFINE(HAVE_LL, 1, [if your compiler supports LL])
3616  ],[
3617    AC_MSG_RESULT([no])
3618  ])
3619fi
3620
3621
3622# check for ssize_t
3623AC_CHECK_TYPE(ssize_t, ,
3624   AC_DEFINE(ssize_t, int, [the signed version of size_t]))
3625
3626# check for bool type
3627AC_CHECK_TYPE([bool],[
3628  AC_DEFINE(HAVE_BOOL_T, 1,
3629    [Define to 1 if bool is an available type.])
3630], ,[
3631#ifdef HAVE_SYS_TYPES_H
3632#include <sys/types.h>
3633#endif
3634#ifdef HAVE_STDBOOL_H
3635#include <stdbool.h>
3636#endif
3637])
3638
3639# check for sa_family_t
3640AC_CHECK_TYPE(sa_family_t,
3641   AC_DEFINE(CURL_SA_FAMILY_T, sa_family_t, [IP address type in sockaddr]),
3642   [
3643   # The windows name?
3644   AC_CHECK_TYPE(ADDRESS_FAMILY,
3645     AC_DEFINE(CURL_SA_FAMILY_T, ADDRESS_FAMILY, [IP address type in sockaddr]),
3646     AC_DEFINE(CURL_SA_FAMILY_T, unsigned short, [IP address type in sockaddr]),
3647    [
3648#ifdef HAVE_SYS_SOCKET_H
3649#include <sys/socket.h>
3650#endif
3651    ])
3652   ],
3653[
3654#ifdef HAVE_SYS_SOCKET_H
3655#include <sys/socket.h>
3656#endif
3657])
3658
3659AC_MSG_CHECKING([if time_t is unsigned])
3660CURL_RUN_IFELSE(
3661  [
3662  #include <time.h>
3663  #include <limits.h>
3664  time_t t = -1;
3665  return (t > 0);
3666  ],[
3667  AC_MSG_RESULT([yes])
3668  AC_DEFINE(HAVE_TIME_T_UNSIGNED, 1, [Define this if time_t is unsigned])
3669],[
3670  AC_MSG_RESULT([no])
3671],[
3672  dnl cross-compiling, most systems are unsigned
3673  AC_MSG_RESULT([no])
3674])
3675
3676CURL_CONFIGURE_PULL_SYS_POLL
3677
3678TYPE_IN_ADDR_T
3679
3680TYPE_SOCKADDR_STORAGE
3681
3682TYPE_SIG_ATOMIC_T
3683
3684AC_TYPE_SIGNAL
3685
3686CURL_CHECK_FUNC_SELECT
3687
3688CURL_CHECK_FUNC_RECV
3689CURL_CHECK_FUNC_SEND
3690CURL_CHECK_MSG_NOSIGNAL
3691
3692CURL_CHECK_FUNC_ALARM
3693CURL_CHECK_FUNC_BASENAME
3694CURL_CHECK_FUNC_CLOSESOCKET
3695CURL_CHECK_FUNC_CLOSESOCKET_CAMEL
3696CURL_CHECK_FUNC_CONNECT
3697CURL_CHECK_FUNC_FCNTL
3698CURL_CHECK_FUNC_FREEADDRINFO
3699CURL_CHECK_FUNC_FREEIFADDRS
3700CURL_CHECK_FUNC_FSETXATTR
3701CURL_CHECK_FUNC_FTRUNCATE
3702CURL_CHECK_FUNC_GETADDRINFO
3703CURL_CHECK_FUNC_GAI_STRERROR
3704CURL_CHECK_FUNC_GETHOSTBYADDR
3705CURL_CHECK_FUNC_GETHOSTBYADDR_R
3706CURL_CHECK_FUNC_GETHOSTBYNAME
3707CURL_CHECK_FUNC_GETHOSTBYNAME_R
3708CURL_CHECK_FUNC_GETHOSTNAME
3709CURL_CHECK_FUNC_GETIFADDRS
3710CURL_CHECK_FUNC_GETSERVBYPORT_R
3711CURL_CHECK_FUNC_GMTIME_R
3712CURL_CHECK_FUNC_INET_NTOA_R
3713CURL_CHECK_FUNC_INET_NTOP
3714CURL_CHECK_FUNC_INET_PTON
3715CURL_CHECK_FUNC_IOCTL
3716CURL_CHECK_FUNC_IOCTLSOCKET
3717CURL_CHECK_FUNC_IOCTLSOCKET_CAMEL
3718CURL_CHECK_FUNC_LOCALTIME_R
3719CURL_CHECK_FUNC_MEMRCHR
3720CURL_CHECK_FUNC_POLL
3721CURL_CHECK_FUNC_SETSOCKOPT
3722CURL_CHECK_FUNC_SIGACTION
3723CURL_CHECK_FUNC_SIGINTERRUPT
3724CURL_CHECK_FUNC_SIGNAL
3725CURL_CHECK_FUNC_SIGSETJMP
3726CURL_CHECK_FUNC_SOCKET
3727CURL_CHECK_FUNC_SOCKETPAIR
3728CURL_CHECK_FUNC_STRCASECMP
3729CURL_CHECK_FUNC_STRCMPI
3730CURL_CHECK_FUNC_STRDUP
3731CURL_CHECK_FUNC_STRERROR_R
3732CURL_CHECK_FUNC_STRICMP
3733CURL_CHECK_FUNC_STRNCASECMP
3734CURL_CHECK_FUNC_STRNCMPI
3735CURL_CHECK_FUNC_STRNICMP
3736CURL_CHECK_FUNC_STRSTR
3737CURL_CHECK_FUNC_STRTOK_R
3738CURL_CHECK_FUNC_STRTOLL
3739CURL_CHECK_FUNC_WRITEV
3740
3741case $host in
3742  *msdosdjgpp)
3743     ac_cv_func_pipe=no
3744     skipcheck_pipe=yes
3745     AC_MSG_NOTICE([skip check for pipe on msdosdjgpp])
3746    ;;
3747esac
3748
3749AC_CHECK_DECLS([getpwuid_r], [], [AC_DEFINE(HAVE_DECL_GETPWUID_R_MISSING, 1, "Set if getpwuid_r() declaration is missing")],
3750        [[#include <pwd.h>
3751          #include <sys/types.h>]])
3752
3753
3754AC_CHECK_FUNCS([fnmatch \
3755  geteuid \
3756  getpass_r \
3757  getppid \
3758  getpwuid \
3759  getpwuid_r \
3760  getrlimit \
3761  gettimeofday \
3762  if_nametoindex \
3763  mach_absolute_time \
3764  pipe \
3765  setlocale \
3766  setmode \
3767  setrlimit \
3768  utime \
3769  utimes
3770],[
3771],[
3772  func="$ac_func"
3773  eval skipcheck=\$skipcheck_$func
3774  if test "x$skipcheck" != "xyes"; then
3775    AC_MSG_CHECKING([deeper for $func])
3776    AC_LINK_IFELSE([
3777      AC_LANG_PROGRAM([[
3778      ]],[[
3779        $func ();
3780      ]])
3781    ],[
3782      AC_MSG_RESULT([yes])
3783      eval "ac_cv_func_$func=yes"
3784      AC_DEFINE_UNQUOTED(XC_SH_TR_CPP([HAVE_$func]), [1],
3785        [Define to 1 if you have the $func function.])
3786    ],[
3787      AC_MSG_RESULT([but still no])
3788    ])
3789  fi
3790])
3791
3792if test "$ipv6" = "yes"; then
3793  if test "$curl_cv_func_getaddrinfo" = "yes"; then
3794    AC_DEFINE(ENABLE_IPV6, 1, [Define if you want to enable IPv6 support])
3795    IPV6_ENABLED=1
3796    AC_SUBST(IPV6_ENABLED)
3797  fi
3798fi
3799
3800CURL_CHECK_NONBLOCKING_SOCKET
3801
3802dnl ************************************************************
3803dnl nroff tool stuff
3804dnl
3805
3806AC_PATH_PROG( PERL, perl, ,
3807  $PATH:/usr/local/bin/perl:/usr/bin/:/usr/local/bin )
3808AC_SUBST(PERL)
3809
3810AC_PATH_PROGS( NROFF, gnroff nroff, ,
3811  $PATH:/usr/bin/:/usr/local/bin )
3812AC_SUBST(NROFF)
3813
3814if test -n "$NROFF"; then
3815  dnl only check for nroff options if an nroff command was found
3816
3817  AC_MSG_CHECKING([how to use *nroff to get plain text from man pages])
3818  MANOPT="-man"
3819  mancheck=`echo foo | $NROFF $MANOPT 2>/dev/null`
3820  if test -z "$mancheck"; then
3821    MANOPT="-mandoc"
3822   mancheck=`echo foo | $NROFF $MANOPT 2>/dev/null`
3823    if test -z "$mancheck"; then
3824      MANOPT=""
3825      AC_MSG_RESULT([failed])
3826      AC_MSG_WARN([found no *nroff option to get plaintext from man pages])
3827    else
3828      AC_MSG_RESULT([$MANOPT])
3829    fi
3830  else
3831    AC_MSG_RESULT([$MANOPT])
3832  fi
3833  AC_SUBST(MANOPT)
3834fi
3835
3836if test -z "$MANOPT"
3837then
3838  dnl if no nroff tool was found, or no option that could convert man pages
3839  dnl was found, then disable the built-in manual stuff
3840  AC_MSG_WARN([disabling built-in manual])
3841  USE_MANUAL="no";
3842fi
3843
3844dnl *************************************************************************
3845dnl If the manual variable still is set, then we go with providing a built-in
3846dnl manual
3847
3848if test "$USE_MANUAL" = "1"; then
3849  AC_DEFINE(USE_MANUAL, 1, [If you want to build curl with the built-in manual])
3850  curl_manual_msg="enabled"
3851fi
3852
3853dnl set variable for use in automakefile(s)
3854AM_CONDITIONAL(USE_MANUAL, test x"$USE_MANUAL" = x1)
3855
3856CURL_CHECK_LIB_ARES
3857AM_CONDITIONAL(USE_EMBEDDED_ARES, test x$embedded_ares = xyes)
3858
3859if test "x$curl_cv_native_windows" != "xyes" &&
3860   test "x$enable_shared" = "xyes"; then
3861  build_libhostname=yes
3862else
3863  build_libhostname=no
3864fi
3865AM_CONDITIONAL(BUILD_LIBHOSTNAME, test x$build_libhostname = xyes)
3866
3867if test "x$want_ares" != xyes; then
3868  CURL_CHECK_OPTION_THREADED_RESOLVER
3869fi
3870
3871dnl ************************************************************
3872dnl disable POSIX threads
3873dnl
3874AC_MSG_CHECKING([whether to use POSIX threads for threaded resolver])
3875AC_ARG_ENABLE(pthreads,
3876AC_HELP_STRING([--enable-pthreads],
3877               [Enable POSIX threads (default for threaded resolver)])
3878AC_HELP_STRING([--disable-pthreads],[Disable POSIX threads]),
3879[ case "$enableval" in
3880  no)  AC_MSG_RESULT(no)
3881       want_pthreads=no
3882       ;;
3883  *)   AC_MSG_RESULT(yes)
3884       want_pthreads=yes
3885       ;;
3886  esac ], [
3887       AC_MSG_RESULT(auto)
3888       want_pthreads=auto
3889       ]
3890)
3891
3892dnl turn off pthreads if rt is disabled
3893if test "$want_pthreads" != "no"; then
3894  if test "$want_pthreads" = "yes" && test "$dontwant_rt" = "yes"; then
3895    AC_MSG_ERROR([options --enable-pthreads and --disable-rt are mutually exclusive])
3896  fi
3897  if test "$dontwant_rt" != "no"; then
3898    dnl if --enable-pthreads was explicit then warn it's being ignored
3899    if test "$want_pthreads" = "yes"; then
3900      AC_MSG_WARN([--enable-pthreads Ignored since librt is disabled.])
3901    fi
3902    want_pthreads=no
3903  fi
3904fi
3905
3906dnl turn off pthreads if no threaded resolver
3907if test "$want_pthreads" != "no" && test "$want_thres" != "yes"; then
3908  want_pthreads=no
3909fi
3910
3911dnl detect pthreads
3912if test "$want_pthreads" != "no"; then
3913  AC_CHECK_HEADER(pthread.h,
3914    [ AC_DEFINE(HAVE_PTHREAD_H, 1, [if you have <pthread.h>])
3915      save_CFLAGS="$CFLAGS"
3916
3917      dnl first check for function without lib
3918      AC_CHECK_FUNC(pthread_create, [USE_THREADS_POSIX=1] )
3919
3920      dnl on HPUX, life is more complicated...
3921      case $host in
3922      *-hp-hpux*)
3923         dnl it doesn't actually work without -lpthread
3924         USE_THREADS_POSIX=""
3925         ;;
3926      *)
3927         ;;
3928      esac
3929
3930      dnl if it wasn't found without lib, search for it in pthread lib
3931      if test "$USE_THREADS_POSIX" != "1"
3932      then
3933        CFLAGS="$CFLAGS -pthread"
3934        AC_CHECK_LIB(pthread, pthread_create,
3935                     [USE_THREADS_POSIX=1],
3936                     [ CFLAGS="$save_CFLAGS"])
3937      fi
3938
3939      if test "x$USE_THREADS_POSIX" = "x1"
3940      then
3941        AC_DEFINE(USE_THREADS_POSIX, 1, [if you want POSIX threaded DNS lookup])
3942        curl_res_msg="POSIX threaded"
3943      fi
3944  ])
3945fi
3946
3947dnl threaded resolver check
3948if test "$want_thres" = "yes" && test "x$USE_THREADS_POSIX" != "x1"; then
3949  if test "$want_pthreads" = "yes"; then
3950    AC_MSG_ERROR([--enable-pthreads but pthreads was not found])
3951  fi
3952  dnl If native Windows fallback on Win32 threads since no POSIX threads
3953  if test "$curl_cv_native_windows" = "yes"; then
3954    USE_THREADS_WIN32=1
3955    AC_DEFINE(USE_THREADS_WIN32, 1, [if you want Win32 threaded DNS lookup])
3956    curl_res_msg="Win32 threaded"
3957  else
3958    AC_MSG_ERROR([Threaded resolver enabled but no thread library found])
3959  fi
3960fi
3961
3962dnl ************************************************************
3963dnl disable verbose text strings
3964dnl
3965AC_MSG_CHECKING([whether to enable verbose strings])
3966AC_ARG_ENABLE(verbose,
3967AC_HELP_STRING([--enable-verbose],[Enable verbose strings])
3968AC_HELP_STRING([--disable-verbose],[Disable verbose strings]),
3969[ case "$enableval" in
3970  no)
3971       AC_MSG_RESULT(no)
3972       AC_DEFINE(CURL_DISABLE_VERBOSE_STRINGS, 1, [to disable verbose strings])
3973       curl_verbose_msg="no"
3974       ;;
3975  *)   AC_MSG_RESULT(yes)
3976       ;;
3977  esac ],
3978       AC_MSG_RESULT(yes)
3979)
3980
3981dnl ************************************************************
3982dnl enable SSPI support
3983dnl
3984AC_MSG_CHECKING([whether to enable SSPI support (Windows native builds only)])
3985AC_ARG_ENABLE(sspi,
3986AC_HELP_STRING([--enable-sspi],[Enable SSPI])
3987AC_HELP_STRING([--disable-sspi],[Disable SSPI]),
3988[ case "$enableval" in
3989  yes)
3990       if test "$curl_cv_native_windows" = "yes"; then
3991         AC_MSG_RESULT(yes)
3992         AC_DEFINE(USE_WINDOWS_SSPI, 1, [to enable SSPI support])
3993         AC_SUBST(USE_WINDOWS_SSPI, [1])
3994         curl_sspi_msg="enabled"
3995       else
3996         AC_MSG_RESULT(no)
3997         AC_MSG_WARN([--enable-sspi Ignored. Only supported on native Windows builds.])
3998       fi
3999       ;;
4000  *)
4001       if test "x$WINSSL_ENABLED" = "x1"; then
4002         # --with-winssl implies --enable-sspi
4003         AC_MSG_RESULT(yes)
4004       else
4005         AC_MSG_RESULT(no)
4006       fi
4007       ;;
4008  esac ],
4009       if test "x$WINSSL_ENABLED" = "x1"; then
4010         # --with-winssl implies --enable-sspi
4011         AC_MSG_RESULT(yes)
4012       else
4013         AC_MSG_RESULT(no)
4014       fi
4015)
4016
4017dnl ************************************************************
4018dnl disable cryptographic authentication
4019dnl
4020AC_MSG_CHECKING([whether to enable cryptographic authentication methods])
4021AC_ARG_ENABLE(crypto-auth,
4022AC_HELP_STRING([--enable-crypto-auth],[Enable cryptographic authentication])
4023AC_HELP_STRING([--disable-crypto-auth],[Disable cryptographic authentication]),
4024[ case "$enableval" in
4025  no)
4026       AC_MSG_RESULT(no)
4027       AC_DEFINE(CURL_DISABLE_CRYPTO_AUTH, 1, [to disable cryptographic authentication])
4028       CURL_DISABLE_CRYPTO_AUTH=1
4029       ;;
4030  *)   AC_MSG_RESULT(yes)
4031       ;;
4032  esac ],
4033       AC_MSG_RESULT(yes)
4034)
4035
4036CURL_CHECK_OPTION_NTLM_WB
4037
4038CURL_CHECK_NTLM_WB
4039
4040dnl ************************************************************
4041dnl disable TLS-SRP authentication
4042dnl
4043AC_MSG_CHECKING([whether to enable TLS-SRP authentication])
4044AC_ARG_ENABLE(tls-srp,
4045AC_HELP_STRING([--enable-tls-srp],[Enable TLS-SRP authentication])
4046AC_HELP_STRING([--disable-tls-srp],[Disable TLS-SRP authentication]),
4047[ case "$enableval" in
4048  no)
4049       AC_MSG_RESULT(no)
4050       AC_DEFINE(CURL_DISABLE_TLS_SRP, 1, [to disable TLS-SRP authentication])
4051       want_tls_srp=no
4052       ;;
4053  *)   AC_MSG_RESULT(yes)
4054       want_tls_srp=yes
4055       ;;
4056  esac ],
4057       AC_MSG_RESULT(yes)
4058       want_tls_srp=yes
4059)
4060
4061if test "$want_tls_srp" = "yes" && ( test "x$HAVE_GNUTLS_SRP" = "x1" || test "x$HAVE_OPENSSL_SRP" = "x1") ; then
4062   AC_DEFINE(USE_TLS_SRP, 1, [Use TLS-SRP authentication])
4063   USE_TLS_SRP=1
4064   curl_tls_srp_msg="enabled"
4065fi
4066
4067dnl ************************************************************
4068dnl disable Unix domain sockets support
4069dnl
4070AC_MSG_CHECKING([whether to enable Unix domain sockets])
4071AC_ARG_ENABLE(unix-sockets,
4072AC_HELP_STRING([--enable-unix-sockets],[Enable Unix domain sockets])
4073AC_HELP_STRING([--disable-unix-sockets],[Disable Unix domain sockets]),
4074[ case "$enableval" in
4075  no)  AC_MSG_RESULT(no)
4076       want_unix_sockets=no
4077       ;;
4078  *)   AC_MSG_RESULT(yes)
4079       want_unix_sockets=yes
4080       ;;
4081  esac ], [
4082       AC_MSG_RESULT(auto)
4083       want_unix_sockets=auto
4084       ]
4085)
4086if test "x$want_unix_sockets" != "xno"; then
4087  AC_CHECK_MEMBER([struct sockaddr_un.sun_path], [
4088    AC_DEFINE(USE_UNIX_SOCKETS, 1, [Use Unix domain sockets])
4089    AC_SUBST(USE_UNIX_SOCKETS, [1])
4090    curl_unix_sockets_msg="enabled"
4091  ], [
4092    if test "x$want_unix_sockets" = "xyes"; then
4093      AC_MSG_ERROR([--enable-unix-sockets is not available on this platform!])
4094    fi
4095  ], [
4096    #include <sys/un.h>
4097  ])
4098fi
4099
4100dnl ************************************************************
4101dnl disable cookies support
4102dnl
4103AC_MSG_CHECKING([whether to enable support for cookies])
4104AC_ARG_ENABLE(cookies,
4105AC_HELP_STRING([--enable-cookies],[Enable cookies support])
4106AC_HELP_STRING([--disable-cookies],[Disable cookies support]),
4107[ case "$enableval" in
4108  no)
4109       AC_MSG_RESULT(no)
4110       AC_DEFINE(CURL_DISABLE_COOKIES, 1, [to disable cookies support])
4111       ;;
4112  *)   AC_MSG_RESULT(yes)
4113       ;;
4114  esac ],
4115       AC_MSG_RESULT(yes)
4116)
4117
4118dnl ************************************************************
4119dnl switch on/off alt-svc
4120dnl
4121curl_altsvc_msg="no      (--enable-alt-svc)";
4122AC_MSG_CHECKING([whether to support alt-svc])
4123AC_ARG_ENABLE(alt-svc,
4124AC_HELP_STRING([--enable-alt-svc],[Enable alt-svc support])
4125AC_HELP_STRING([--disable-alt-svc],[Disable alt-svc support]),
4126[ case "$enableval" in
4127  no)
4128       AC_MSG_RESULT(no)
4129       ;;
4130  *) AC_MSG_RESULT(yes)
4131       curl_altsvc_msg="enabled";
4132       enable_altsvc="yes"
4133       experimental="alt-svc"
4134       ;;
4135  esac ],
4136       AC_MSG_RESULT(no)
4137)
4138
4139if test "$enable_altsvc" = "yes"; then
4140  AC_DEFINE(USE_ALTSVC, 1, [to enable alt-svc])
4141  experimental="alt-svc"
4142fi
4143
4144dnl ************************************************************
4145dnl hiding of library internal symbols
4146dnl
4147CURL_CONFIGURE_SYMBOL_HIDING
4148
4149dnl
4150dnl All the library dependencies put into $LIB apply to libcurl only.
4151dnl
4152LIBCURL_LIBS=$LIBS
4153
4154AC_SUBST(LIBCURL_LIBS)
4155AC_SUBST(CURL_NETWORK_LIBS)
4156AC_SUBST(CURL_NETWORK_AND_TIME_LIBS)
4157
4158dnl BLANK_AT_MAKETIME may be used in our Makefile.am files to blank
4159dnl LIBS variable used in generated makefile at makefile processing
4160dnl time. Doing this functionally prevents LIBS from being used for
4161dnl all link targets in given makefile.
4162BLANK_AT_MAKETIME=
4163AC_SUBST(BLANK_AT_MAKETIME)
4164
4165AM_CONDITIONAL(CROSSCOMPILING, test x$cross_compiling = xyes)
4166
4167dnl yes or no
4168ENABLE_SHARED="$enable_shared"
4169AC_SUBST(ENABLE_SHARED)
4170
4171dnl to let curl-config output the static libraries correctly
4172ENABLE_STATIC="$enable_static"
4173AC_SUBST(ENABLE_STATIC)
4174
4175
4176dnl
4177dnl For keeping supported features and protocols also in pkg-config file
4178dnl since it is more cross-compile friendly than curl-config
4179dnl
4180
4181if test "x$OPENSSL_ENABLED" = "x1"; then
4182  SUPPORT_FEATURES="$SUPPORT_FEATURES SSL"
4183elif test -n "$SSL_ENABLED"; then
4184  SUPPORT_FEATURES="$SUPPORT_FEATURES SSL"
4185fi
4186if test "x$IPV6_ENABLED" = "x1"; then
4187  SUPPORT_FEATURES="$SUPPORT_FEATURES IPv6"
4188fi
4189if test "x$USE_UNIX_SOCKETS" = "x1"; then
4190  SUPPORT_FEATURES="$SUPPORT_FEATURES UnixSockets"
4191fi
4192if test "x$HAVE_LIBZ" = "x1"; then
4193  SUPPORT_FEATURES="$SUPPORT_FEATURES libz"
4194fi
4195if test "x$HAVE_BROTLI" = "x1"; then
4196  SUPPORT_FEATURES="$SUPPORT_FEATURES brotli"
4197fi
4198if test "x$USE_ARES" = "x1" -o "x$USE_THREADS_POSIX" = "x1" \
4199                            -o "x$USE_THREADS_WIN32" = "x1"; then
4200  SUPPORT_FEATURES="$SUPPORT_FEATURES AsynchDNS"
4201fi
4202if test "x$IDN_ENABLED" = "x1"; then
4203  SUPPORT_FEATURES="$SUPPORT_FEATURES IDN"
4204fi
4205if test "x$USE_WINDOWS_SSPI" = "x1"; then
4206  SUPPORT_FEATURES="$SUPPORT_FEATURES SSPI"
4207fi
4208
4209if test "x$HAVE_GSSAPI" = "x1"; then
4210  SUPPORT_FEATURES="$SUPPORT_FEATURES GSS-API"
4211fi
4212
4213if test "x$curl_psl_msg" = "xenabled"; then
4214  SUPPORT_FEATURES="$SUPPORT_FEATURES PSL"
4215fi
4216
4217if test "x$enable_altsvc" = "xyes"; then
4218  SUPPORT_FEATURES="$SUPPORT_FEATURES alt-svc"
4219fi
4220
4221if test "x$CURL_DISABLE_CRYPTO_AUTH" != "x1" -a \
4222    \( "x$HAVE_GSSAPI" = "x1" -o "x$USE_WINDOWS_SSPI" = "x1" \); then
4223  SUPPORT_FEATURES="$SUPPORT_FEATURES SPNEGO"
4224fi
4225
4226if test "x$CURL_DISABLE_CRYPTO_AUTH" != "x1" -a \
4227    \( "x$HAVE_GSSAPI" = "x1" -o "x$USE_WINDOWS_SSPI" = "x1" \); then
4228  SUPPORT_FEATURES="$SUPPORT_FEATURES Kerberos"
4229fi
4230
4231if test "x$CURL_DISABLE_CRYPTO_AUTH" != "x1"; then
4232  if test "x$OPENSSL_ENABLED" = "x1" -o "x$USE_WINDOWS_SSPI" = "x1" \
4233      -o "x$GNUTLS_ENABLED" = "x1" -o "x$MBEDTLS_ENABLED" = "x1" \
4234      -o "x$NSS_ENABLED" = "x1" -o "x$SECURETRANSPORT_ENABLED" = "x1"; then
4235    SUPPORT_FEATURES="$SUPPORT_FEATURES NTLM"
4236
4237    if test "x$CURL_DISABLE_HTTP" != "x1" -a \
4238        "x$NTLM_WB_ENABLED" = "x1"; then
4239      SUPPORT_FEATURES="$SUPPORT_FEATURES NTLM_WB"
4240    fi
4241  fi
4242fi
4243
4244if test "x$USE_TLS_SRP" = "x1"; then
4245  SUPPORT_FEATURES="$SUPPORT_FEATURES TLS-SRP"
4246fi
4247
4248if test "x$USE_NGHTTP2" = "x1"; then
4249  SUPPORT_FEATURES="$SUPPORT_FEATURES HTTP2"
4250fi
4251
4252if test "x$CURL_WITH_MULTI_SSL" = "x1"; then
4253  SUPPORT_FEATURES="$SUPPORT_FEATURES MultiSSL"
4254fi
4255
4256if test "x$OPENSSL_ENABLED" = "x1" -o "x$GNUTLS_ENABLED" = "x1" \
4257    -o "x$NSS_ENABLED" = "x1"; then
4258  SUPPORT_FEATURES="$SUPPORT_FEATURES HTTPS-proxy"
4259fi
4260
4261AC_SUBST(SUPPORT_FEATURES)
4262
4263dnl For supported protocols in pkg-config file
4264if test "x$CURL_DISABLE_HTTP" != "x1"; then
4265  SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS HTTP"
4266  if test "x$SSL_ENABLED" = "x1"; then
4267    SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS HTTPS"
4268  fi
4269fi
4270if test "x$CURL_DISABLE_FTP" != "x1"; then
4271  SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS FTP"
4272  if test "x$SSL_ENABLED" = "x1"; then
4273    SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS FTPS"
4274  fi
4275fi
4276if test "x$CURL_DISABLE_FILE" != "x1"; then
4277  SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS FILE"
4278fi
4279if test "x$CURL_DISABLE_TELNET" != "x1"; then
4280  SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS TELNET"
4281fi
4282if test "x$CURL_DISABLE_LDAP" != "x1"; then
4283  SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS LDAP"
4284  if test "x$CURL_DISABLE_LDAPS" != "x1"; then
4285    if (test "x$USE_OPENLDAP" = "x1" && test "x$SSL_ENABLED" = "x1") ||
4286      (test "x$USE_OPENLDAP" != "x1"  && test "x$HAVE_LDAP_SSL" = "x1"); then
4287      SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS LDAPS"
4288    fi
4289  fi
4290fi
4291if test "x$CURL_DISABLE_DICT" != "x1"; then
4292  SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS DICT"
4293fi
4294if test "x$CURL_DISABLE_TFTP" != "x1"; then
4295  SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS TFTP"
4296fi
4297if test "x$CURL_DISABLE_GOPHER" != "x1"; then
4298  SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS GOPHER"
4299fi
4300if test "x$CURL_DISABLE_POP3" != "x1"; then
4301  SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS POP3"
4302  if test "x$SSL_ENABLED" = "x1"; then
4303    SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS POP3S"
4304  fi
4305fi
4306if test "x$CURL_DISABLE_IMAP" != "x1"; then
4307  SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS IMAP"
4308  if test "x$SSL_ENABLED" = "x1"; then
4309    SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS IMAPS"
4310  fi
4311fi
4312if test "x$CURL_DISABLE_SMB" != "x1" \
4313    -a "x$CURL_DISABLE_CRYPTO_AUTH" != "x1" \
4314    -a \( "x$OPENSSL_ENABLED" = "x1" -o "x$USE_WINDOWS_SSPI" = "x1" \
4315      -o "x$GNUTLS_ENABLED" = "x1" -o "x$MBEDTLS_ENABLED" = "x1" \
4316      -o "x$NSS_ENABLED" = "x1" -o "x$SECURETRANSPORT_ENABLED" = "x1" \); then
4317  SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS SMB"
4318  if test "x$SSL_ENABLED" = "x1"; then
4319    SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS SMBS"
4320  fi
4321fi
4322if test "x$CURL_DISABLE_SMTP" != "x1"; then
4323  SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS SMTP"
4324  if test "x$SSL_ENABLED" = "x1"; then
4325    SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS SMTPS"
4326  fi
4327fi
4328if test "x$USE_LIBSSH2" = "x1"; then
4329  SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS SCP"
4330  SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS SFTP"
4331fi
4332if test "x$USE_LIBSSH" = "x1"; then
4333  SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS SCP"
4334  SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS SFTP"
4335fi
4336if test "x$CURL_DISABLE_RTSP" != "x1"; then
4337  SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS RTSP"
4338fi
4339if test "x$USE_LIBRTMP" = "x1"; then
4340  SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS RTMP"
4341fi
4342
4343dnl replace spaces with newlines
4344dnl sort the lines
4345dnl replace the newlines back to spaces
4346SUPPORT_PROTOCOLS=`echo $SUPPORT_PROTOCOLS | tr ' ' '\012' | sort | tr '\012' ' '`
4347
4348AC_SUBST(SUPPORT_PROTOCOLS)
4349
4350dnl squeeze whitespace out of some variables
4351
4352squeeze CFLAGS
4353squeeze CPPFLAGS
4354squeeze DEFS
4355squeeze LDFLAGS
4356squeeze LIBS
4357
4358squeeze LIBCURL_LIBS
4359squeeze CURL_NETWORK_LIBS
4360squeeze CURL_NETWORK_AND_TIME_LIBS
4361
4362squeeze SUPPORT_FEATURES
4363squeeze SUPPORT_PROTOCOLS
4364
4365XC_CHECK_BUILD_FLAGS
4366
4367SSL_BACKENDS=${ssl_backends}
4368AC_SUBST(SSL_BACKENDS)
4369
4370if test "x$want_curldebug_assumed" = "xyes" &&
4371  test "x$want_curldebug" = "xyes" && test "x$USE_ARES" = "x1"; then
4372  ac_configure_args="$ac_configure_args --enable-curldebug"
4373fi
4374
4375AC_CONFIG_FILES([Makefile \
4376           docs/Makefile \
4377           docs/examples/Makefile \
4378           docs/libcurl/Makefile \
4379           docs/libcurl/opts/Makefile \
4380           docs/cmdline-opts/Makefile \
4381           include/Makefile \
4382           include/curl/Makefile \
4383           src/Makefile \
4384           lib/Makefile \
4385           scripts/Makefile \
4386           lib/libcurl.vers \
4387           tests/Makefile \
4388           tests/certs/Makefile \
4389           tests/certs/scripts/Makefile \
4390           tests/data/Makefile \
4391           tests/server/Makefile \
4392           tests/libtest/Makefile \
4393           tests/unit/Makefile \
4394           packages/Makefile \
4395           packages/vms/Makefile \
4396           curl-config \
4397           libcurl.pc
4398])
4399AC_OUTPUT
4400
4401CURL_GENERATE_CONFIGUREHELP_PM
4402
4403XC_AMEND_DISTCLEAN([lib src tests/unit tests/server tests/libtest docs/examples])
4404
4405AC_MSG_NOTICE([Configured to build curl/libcurl:
4406
4407  Host setup:       ${host}
4408  Install prefix:   ${prefix}
4409  Compiler:         ${CC}
4410   CFLAGS:          ${CFLAGS}
4411   CPPFLAGS:        ${CPPFLAGS}
4412   LDFLAGS:         ${LDFLAGS}
4413   LIBS:            ${LIBS}
4414
4415  curl version:     ${CURLVERSION}
4416  SSL:              ${curl_ssl_msg}
4417  SSH:              ${curl_ssh_msg}
4418  zlib:             ${curl_zlib_msg}
4419  brotli:           ${curl_brotli_msg}
4420  GSS-API:          ${curl_gss_msg}
4421  TLS-SRP:          ${curl_tls_srp_msg}
4422  resolver:         ${curl_res_msg}
4423  IPv6:             ${curl_ipv6_msg}
4424  Unix sockets:     ${curl_unix_sockets_msg}
4425  IDN:              ${curl_idn_msg}
4426  Build libcurl:    Shared=${enable_shared}, Static=${enable_static}
4427  Built-in manual:  ${curl_manual_msg}
4428  --libcurl option: ${curl_libcurl_msg}
4429  Verbose errors:   ${curl_verbose_msg}
4430  Code coverage:    ${curl_coverage_msg}
4431  SSPI:             ${curl_sspi_msg}
4432  ca cert bundle:   ${ca}${ca_warning}
4433  ca cert path:     ${capath}${capath_warning}
4434  ca fallback:      ${with_ca_fallback}
4435  LDAP:             ${curl_ldap_msg}
4436  LDAPS:            ${curl_ldaps_msg}
4437  RTSP:             ${curl_rtsp_msg}
4438  RTMP:             ${curl_rtmp_msg}
4439  Metalink:         ${curl_mtlnk_msg}
4440  PSL:              ${curl_psl_msg}
4441  Alt-svc:          ${curl_altsvc_msg}
4442  HTTP2:            ${curl_h2_msg}
4443  Protocols:        ${SUPPORT_PROTOCOLS}
4444  Features:         ${SUPPORT_FEATURES}
4445])
4446if test -n "$experimental"; then
4447 cat >&2 << _EOF
4448  WARNING: $experimental is enabled but marked EXPERIMENTAL. Use with caution!
4449_EOF
4450fi
4451