Fix using CURLOPT_XFERINFOFUNCTION curl option
[libisds.git] / configure.ac
blob4bbda59444b4f8ab64fa2f55f3c47c77d00e0d7d
1 #                                               -*- Autoconf -*-
2 # Process this file with autoconf to produce a configure script.
4 AC_PREREQ([2.63])
5 AC_INIT([libisds], [0.11], [petr.pisar@atlas.cz])
6 AM_INIT_AUTOMAKE
7 AC_LANG([C])
8 AC_CONFIG_SRCDIR([src/isds.c])
9 AC_CONFIG_MACRO_DIR([m4])
10 AC_CONFIG_HEADERS([config.h])
12 # Checks for programs.
13 AC_PROG_CC
14 AC_PROG_CPP
15 #AC_PROG_MAKE_SET
16 LT_INIT
17 # For libtool < 1.9b (Debian lenny).
18 # AC_PROG_LIBTOOL has been obsoleted by LT_INIT
19 AC_PROG_LIBTOOL
22 # Enable example clients
23 AC_ARG_ENABLE(example, [AS_HELP_STRING([--enable-example],
24                               [Build library usage examples])])
25 AM_CONDITIONAL([BUILD_EXAMPLE], [test "$enable_example" = "yes"])
27 # Enable tests
28 AC_ARG_ENABLE(test, [AS_HELP_STRING([--enable-test],
29                               [Enable internal library tests])])
30 AM_CONDITIONAL([BUILD_TEST], [test "$enable_test" = "yes"])
32 # Enable on-line test
33 AC_ARG_ENABLE(online-test, [AS_HELP_STRING([--enable-online-test],
34                               [Enable on-line internal library tests])])
35 # Enable gettext
36 AM_GNU_GETTEXT_VERSION([0.18.2])
37 AM_GNU_GETTEXT([external])
39 # Enable debug
40 AC_ARG_ENABLE(debug, [AS_HELP_STRING([--enable-debug],
41                         [Compile in debugging mode])])
42 AS_IF([test "$enable_debug" = "yes"],
43       CFLAGS="${CFLAGS} -g"
44       dnl AC_SUBST(DEBUG_CFLAGS)
45       AC_DEFINE([ENABLE_DEBUG], [1],
46                 [Define if you want include debugging code])
47       )
49 AC_CHECK_DECL([_WIN32])
50 AM_CONDITIONAL([WIN32], [test "$ac_cv_have_decl__WIN32" = "yes"])
52 # Checks for libraries.
53 #TODO: Verify minimal version. libxml2-2.6.26 is just a guess.
54 AM_PATH_XML2([2.6.26])
56 # Checks for CURL 
57 LIBCURL_CHECK_CONFIG()
58 AS_IF([test -z "$LIBCURL"],
59       AC_MSG_WARN([libcurl disabled or not found. Network features will be
60                    disabled.]),
61     [
62     cppflags_orig="$CPPFLAGS"
63     CPPFLAGS="${CPPFLAGS} ${LIBCURL_CPPFLAGS}"
64     AC_CHECK_DECLS([CURLOPT_HEADEROPT], [],
65         AC_MSG_WARN([Your libcurl does not support not sending custom HTTP
66                      headers to proxies.
67                      Consider upgrade to 7.37.0 version.]),
68         [[#include <curl/curl.h>]])
69     AC_CHECK_DECLS([CURLOPT_TIMEOUT_MS], [],
70         AC_MSG_WARN([Your libcurl does not support subsecond timeout resolution.
71                      Consider upgrade to 7.16.2 version.]),
72         [[#include <curl/curl.h>]])
73     AC_CHECK_DECLS([CURLOPT_USERNAME], [],
74         AC_MSG_WARN([Your libcurl does not support separate username and password.
75                      Your ISDS username could not contain colon.
76                      Consider upgrade to 7.19.1 version.]),
77         [[#include <curl/curl.h>]])
78     AC_CHECK_DECLS([CURLOPT_SSLCERTTYPE], [],
79         AC_MSG_WARN([Your libcurl does not support client certificate format
80                      declaration (PEM vs. DER).
81                      Consider upgrade to 7.9.3 version.]),
82         [[#include <curl/curl.h>]])
83     AC_CHECK_DECLS([CURLOPT_CRLFILE], [],
84         AC_MSG_WARN([Your libcurl does not support certificate revocation list
85                      declaration.
86                      Consider upgrade to 7.19.0 version.]),
87         [[#include <curl/curl.h>]])
88     AC_CHECK_DECLS([CURLINFO_REDIRECT_URL], [],
89         AC_MSG_ERROR([Your libcurl does not support getting redirected URL.
90                      You must upgrade to 7.18.2 version.]),
91         [[#include <curl/curl.h>]])
92     AC_CHECK_DECLS([CURLOPT_KEYPASSWD], [], [], [[#include <curl/curl.h>]])
93     AC_CHECK_DECLS([CURLOPT_SSLKEYPASSWD], [], [], [[#include <curl/curl.h>]])
94     AC_CHECK_DECLS([CURLOPT_XFERINFOFUNCTION], [], [], [[#include <curl/curl.h>]])
95     CPPFLAGS="$cppflags_orig"
96     ])
97 AM_CONDITIONAL([BUILD_CURL], [test -n "$LIBCURL"])
99 dnl libcurl < 7.28.0 suffers from re-authorization bug, unfortunally there is
100 dnl no way how to re-check libcurl version. Thus we use explicit switch.
101 AC_ARG_ENABLE(curlreauthorizationbug,
102               [AS_HELP_STRING([--enable-curlreauthorizationbug],
103                         [Compile in work-around for re-authorization bug in
104                          curl < 7.28.0. Fixed by libcurl commit
105                          ce8311c7e49eca93c136b58efa6763853541ec97.])])
106 AS_IF([test "$enable_curlreauthorizationbug" = "yes"],
107       AC_DEFINE([HAVE_CURL_REAUTHORIZATION_BUG], [1],
108                 [Define if you want work-around re-authorization bug in libcurl])
109       )
111 dnl On-line tests requires libcurl
112 AM_CONDITIONAL([BUILD_ONLINE_TEST],
113                [test -n "$LIBCURL" -a "$enable_test" = "yes" \
114                     -a "$enable_online_test" = "yes"])
116 dnl Simulated tests require gnutls
117 PKG_PROG_PKG_CONFIG()
118 AS_IF([test "$enable_test" = "yes"], [
119      PKG_CHECK_MODULES([LIBGNUTLS], [gnutls >= 2.12.0])
120      AC_SUBST(LIBGNUTLS_CFLAGS)
121      AC_SUBST(LIBGNUTLS_LIBS)
122      ])
124 AC_ARG_ENABLE([openssl-backend],
125   AS_HELP_STRING([--enable-openssl-backend], [Enable OpenSSL as cryptographic back-end.]))
126 AS_IF([test "x${enable_openssl_backend}" = "xyes"], [
127   dnl Use OpenSSL cryptographic back-end.
129   AC_DEFINE([USE_OPENSSL_BACKEND], [1], [Define if you want to use OpenSSL as cryptographic back-end.])
130   AC_SEARCH_LIBS([CMS_get0_content], [crypto], [], [AC_MSG_ERROR([OpenSSL librypto not found.])])
131 ], [
132   dnl Use default cryptographic back-end.
134   #TODO: Determine minimal version
135   AM_PATH_LIBGCRYPT([1:1.4.0])
137   # GPGME is compiled with large file support by default. We need to follow not
138   # to break ABI.
139   AC_SYS_LARGEFILE
140   #TODO: Determine minimal version
141   AM_PATH_GPGME()
143 AM_CONDITIONAL([USE_OPENSSL_BACKEND], [test "x${enable_openssl_backend}" = "xyes"])
145 # Check for expat
146 AC_CHECK_LIB([expat], [XML_ExpatVersionInfo],
147              EXPAT_LIBS=-lexpat
148              AC_SUBST(EXPAT_LIBS))
149 # Verify minimal version. See src/phys.c: init_expat()
150 expat_min_major="2"
151 expat_min_minor="0"
152 expat_min_micro="0"
153 expat_min_version="${expat_min_major}.${expat_min_minor}.${expat_min_micro}"
154 AC_MSG_CHECKING([for expat library version >= ${expat_min_version}])
155 AC_COMPILE_IFELSE(
156         [AC_LANG_PROGRAM(
157             [[#define MIN_MAJOR ${expat_min_major}
158             #define MIN_MINOR ${expat_min_minor}
159             #define MIN_MICRO ${expat_min_micro}
160             #include <expat.h>]],
161             [[#if (XML_MAJOR_VERSION < MIN_MAJOR) || \
162     (XML_MAJOR_VERSION == MIN_MAJOR && XML_MINOR_VERSION < MIN_MINOR) || \
163     (XML_MAJOR_VERSION == MIN_MAJOR && XML_MINOR_VERSION == MIN_MINOR && \
164             XML_MICRO_VERSION < MIN_MICRO)
165             #error "Expat library is too old"
166             #endif]])],
167         AC_MSG_RESULT([yes]),
168         AC_MSG_FAILURE([Upgrade your expat to ${expat_min_version}])
171 # Do not consider compiler warnings as errors
172 # This harms libxml configure test
173 AC_ARG_ENABLE(fatalwarnings, [AS_HELP_STRING([--disable-fatalwarnings],
174                         [Do not consider compiler warnings as errors])])
175 AS_IF([test "$enable_fatalwarnings" = "no"], , CFLAGS="${CFLAGS} -Werror")
178 # Build and install documentation
179 AC_ARG_ENABLE(doc, [AS_HELP_STRING([--disable-doc],
180               [Do not build and install documentation])])
181 AS_IF([test "$enable_doc" = "no"], , [
182     AC_CHECK_PROG([HAVE_XSLTPROC], [xsltproc], [yes])
183     AS_IF([test "$HAVE_XSLTPROC" != "yes"],
184           AC_MSG_FAILURE([Missing xsltproc!])
185     )
187     # Find DocBook XSLT sheets
188     AC_ARG_WITH(docbook-xsl-stylesheets,
189                 [AS_HELP_STRING([--with-docbook-xsl-stylesheets=DIR],
190                         [Specify XSL style sheet root directory for manual page
191                          generation from DocBook source])],
192                 , with_docbook_xsl_stylesheets=yes)
194     DOCBOOK_STYLE="/usr/share/sgml/docbook/xsl-stylesheets"
195     AS_IF([test "$with_docbook_xsl_stylesheets" != "yes"],
196         [DOCBOOK_STYLE="$with_docbook_xsl_stylesheets"])
197     AC_MSG_CHECKING([for DocBook XSLT stylesheet location in "$DOCBOOK_STYLE"])
198     AS_IF([echo '<para/>' |
199            xsltproc "${DOCBOOK_STYLE}/manpages/docbook.xsl" - 2>/dev/null],
200         AC_MSG_RESULT([ok]) AC_SUBST(DOCBOOK_STYLE),
201         DOCBOOK_STYLE=""
202         AC_MSG_FAILURE([missing!])
203     )
205     ]
207 AM_CONDITIONAL([BUILD_MAN], [test -n "$DOCBOOK_STYLE"])
210 # Checks for header files.
211 AC_CHECK_HEADERS([fcntl.h locale.h stdint.h stdlib.h string.h unistd.h])
213 # Checks for typedefs, structures, and compiler characteristics.
214 AC_TYPE_SIZE_T
215 #AC_TYPE_SSIZE_T
216 AC_TYPE_UINT8_T
218 # Checks for library functions.
219 AC_FUNC_MALLOC
220 AC_FUNC_MKTIME
221 AC_FUNC_MMAP
222 AC_CHECK_FUNCS([localtime_r memset munmap setlocale strdup strerror])
224 # Default CFLAGS
225 CFLAGS="${CFLAGS} -std=c99 -Wall"
227 dnl Check for strdup() feature test macros
228 dnl strdup() is provided since SUSv2, thus _XOPEN_SOURCE >= 500 has to be
229 dnl defined with -std=c99. However Mac OS X requires 600. Reported as
230 dnl <rdar://problem/19363342>.
231 AC_MSG_CHECKING([Checking for _XOPEN_SOURCE level needed for strdup()])
232 AC_COMPILE_IFELSE(
233     [AC_LANG_PROGRAM([[#define _XOPEN_SOURCE 500
234        #include <string.h>]], [[(void)strdup("");]])],
235     [xopen_source_level_for_strdup=500],
236     [AC_COMPILE_IFELSE(
237         [AC_LANG_PROGRAM([[#define _XOPEN_SOURCE 600
238             #include <string.h>]], [[(void)strdup("");]])],
239         [xopen_source_level_for_strdup=600],
240         [AC_MSG_FAILURE([Cannot determine _XOPEN_SOURCE level for strdup()])]
241     )])
242 AC_MSG_RESULT([$xopen_source_level_for_strdup])
243 AC_DEFINE_UNQUOTED([XOPEN_SOURCE_LEVEL_FOR_STRDUP],
244                    [$xopen_source_level_for_strdup],
245                    [_XOPEN_SOURCE level needed for strdup()])
248 AC_CONFIG_FILES([Makefile src/Makefile po/Makefile.in client/Makefile
249                  doc/Makefile
250                  test/Makefile test/offline/Makefile test/simline/Makefile
251                  test/online/Makefile libisds.pc])
253 #AC_CONFIG_SUBDIRS([src])
254 AC_OUTPUT