Add zb32_index function.
[payproc.git] / configure.ac
1 # configure.ac - for Payproc
2 # Copyright (C) 2014 g10 Code GmbH
3 #
4 # This file is part of Payproc.
5 #
6 # Payproc is free software; you can redistribute it and/or modify
7 # it under the terms of the GNU General Public License as published by
8 # the Free Software Foundation; either version 3 of the License, or
9 # (at your option) any later version.
10 #
11 # Payproc is distributed in the hope that it will be useful,
12 # but WITHOUT ANY WARRANTY; without even the implied warranty of
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 # GNU General Public License for more details.
15 #
16 # You should have received a copy of the GNU General Public License
17 # along with this program; if not, see <http://www.gnu.org/licenses/>.
18
19 # Process this file with autoconf to produce a configure script.
20 AC_PREREQ(2.69)
21 min_automake_version="1.10"
22
23 # To build a release you need to create a tag with the version number
24 # (git tag -s payproc-0.n.m) and run "./autogen.sh --force".  Please
25 # bump the version number immediately *after* the release and do
26 # another commit and push so that the git magic is able to work.
27 m4_define([mym4_version], [0.1.0])
28
29 # Below is m4 magic to extract and compute the git revision number,
30 # the decimalized short revision number, a beta version string and a
31 # flag indicating a development version (mym4_isgit).  Note that the
32 # m4 processing is done by autoconf and not during the configure run.
33 m4_define([mym4_revision],
34           m4_esyscmd([git rev-parse --short HEAD | tr -d '\n\r']))
35 m4_define([mym4_revision_dec],
36           m4_esyscmd_s([echo $((0x$(echo ]mym4_revision[|head -c 4)))]))
37 m4_define([mym4_betastring],
38           m4_esyscmd_s([git describe --match 'payproc-0.[0-9].*[0-9]' --long|\
39                         awk -F- '$3!=0{print"-beta"$3}']))
40 m4_define([mym4_isgit],m4_if(mym4_betastring,[],[no],[yes]))
41 m4_define([mym4_full_version],[mym4_version[]mym4_betastring])
42
43 AC_INIT([payproc],[mym4_full_version], [http://bugs.gnupg.org])
44
45 NEED_GPG_ERROR_VERSION=1.10
46
47 NEED_LIBASSUAN_API=2
48 NEED_LIBASSUAN_VERSION=2.1.0
49
50 NEED_NPTH_API=1
51 NEED_NPTH_VERSION=0.91
52
53 NEED_GNUTLS_VERSION=3.0
54
55 development_version=mym4_isgit
56
57 AC_CONFIG_AUX_DIR(build-aux)
58 AC_CONFIG_SRCDIR(src/payprocd.c)
59 AM_CONFIG_HEADER(config.h)
60 AM_INIT_AUTOMAKE($PACKAGE_NAME, $PACKAGE_VERSION)
61 AC_CANONICAL_HOST
62
63 AC_GNU_SOURCE
64
65 AC_DEFINE_UNQUOTED(PACKAGE_BUGREPORT, "$PACKAGE_BUGREPORT",
66                                         [Bug report address])
67
68
69 #
70 # To avoid double inclusion of config.h which might happen at some
71 # places, we add the usual double inclusion protection at the top of
72 # config.h.
73 #
74 AH_TOP([
75 #ifndef PAYPROC_CONFIG_H_INCLUDED
76 #define PAYPROC_CONFIG_H_INCLUDED
77 ])
78
79 #
80 # Stuff which goes at the bottom of config.h.
81 #
82 AH_BOTTOM([
83
84 #endif /*GNUPG_CONFIG_H_INCLUDED*/
85 ])
86
87
88 AM_MAINTAINER_MODE
89
90 # Checks for programs.
91 AC_MSG_NOTICE([checking for programs])
92 AC_PROG_MAKE_SET
93 AM_SANITY_CHECK
94 missing_dir=`cd $ac_aux_dir && pwd`
95 AM_MISSING_PROG(ACLOCAL, aclocal, $missing_dir)
96 AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir)
97 AM_MISSING_PROG(AUTOMAKE, automake, $missing_dir)
98 AM_MISSING_PROG(AUTOHEADER, autoheader, $missing_dir)
99 AM_MISSING_PROG(MAKEINFO, makeinfo, $missing_dir)
100 AC_PROG_AWK
101 AC_PROG_CC
102 AC_PROG_CPP
103 AM_PROG_CC_C_O
104 if test "x$ac_cv_prog_cc_c89" = "xno" ; then
105   AC_MSG_ERROR([[No C-89 compiler found]])
106 fi
107 AC_PROG_INSTALL
108 AC_PROG_LN_S
109 AC_PROG_RANLIB
110 AC_CHECK_TOOL(AR, ar, :)
111 AC_CHECK_TOOL(WINDRES, windres, :)
112 AC_ISC_POSIX
113 AC_SYS_LARGEFILE
114
115 #
116 # Checks for libraries.
117 #
118 AC_MSG_NOTICE([checking for libraries])
119
120
121 #
122 # libgpg-error is a library with error codes shared between GnuPG
123 # related projects.
124 #
125 AM_PATH_GPG_ERROR("$NEED_GPG_ERROR_VERSION",
126                   have_gpg_error=yes,have_gpg_error=no)
127
128
129 #
130 # Check whether the nPth library is available
131 #
132 AM_PATH_NPTH("$NEED_NPTH_API:$NEED_NPTH_VERSION",have_npth=yes,have_npth=no)
133 if test "$have_npth" = "yes"; then
134   # We define this macro because some code parts require it.
135   AC_DEFINE(HAVE_NPTH, 1,
136               [Defined if the New Portable Thread Library is available])
137 else
138   AC_MSG_WARN([[
139 ***
140 *** To support concurrent access
141 *** we need the New Portable Threads Library.
142 ***]])
143 fi
144 AC_DEFINE(USE_NPTH, 1, [Defined to use New Portable Thread Library])
145
146 #
147 # GNUTLS
148 #
149 PKG_CHECK_MODULES([LIBGNUTLS], [gnutls >= $NEED_GNUTLS_VERSION],
150                                [have_gnutls=yes],
151                                [have_gnutls=no])
152 AC_SUBST([LIBGNUTLS_CFLAGS])
153 AC_SUBST([LIBGNUTLS_LIBS])
154 AC_DEFINE(HTTP_USE_GNUTLS, 1, [Enable GNUTLS support in http.c])
155
156
157 AC_MSG_NOTICE([checking for networking options])
158
159 #
160 # Must check for network library requirements before doing link tests
161 # for ldap, for example. If ldap libs are static (or dynamic and without
162 # ELF runtime link paths), then link will fail and LDAP support won't
163 # be detected.
164 #
165 AC_CHECK_FUNC(gethostbyname, , AC_CHECK_LIB(nsl, gethostbyname,
166         [NETLIBS="-lnsl $NETLIBS"]))
167 AC_CHECK_FUNC(setsockopt, , AC_CHECK_LIB(socket, setsockopt,
168         [NETLIBS="-lsocket $NETLIBS"]))
169
170
171 #
172 # Checking for iconv
173 #
174 AM_ICONV
175
176
177 #
178 # Checks for header files.
179 #
180 AC_MSG_NOTICE([checking for header files])
181 AC_HEADER_STDC
182 AC_CHECK_HEADERS([unistd.h inttypes.h signal.h])
183 AC_HEADER_TIME
184
185
186 #
187 # Checks for typedefs, structures, and compiler characteristics.
188 #
189 AC_MSG_NOTICE([checking for system characteristics])
190 AC_C_CONST
191 AC_C_INLINE
192 AC_C_VOLATILE
193 AC_TYPE_SIZE_T
194 AC_TYPE_MODE_T
195 AC_TYPE_SIGNAL
196 AC_DECL_SYS_SIGLIST
197
198
199 #
200 # Checks for library functions.
201 #
202 AC_MSG_NOTICE([checking for library functions])
203 AC_CHECK_FUNCS([strerror strlwr gmtime_r])
204
205 # For http.c
206 AC_CHECK_FUNCS([strtoull])
207
208 # Check for the getsockopt SO_PEERCRED
209 AC_MSG_CHECKING(for SO_PEERCRED)
210 AC_CACHE_VAL(payproc_cv_sys_so_peercred,
211       [AC_TRY_COMPILE([#include <sys/socket.h>],
212          [struct ucred cr;
213           int cl = sizeof cr;
214           getsockopt (1, SOL_SOCKET, SO_PEERCRED, &cr, &cl);],
215           payproc_cv_sys_so_peercred=yes,
216           payproc_cv_sys_so_peercred=no)
217        ])
218 AC_MSG_RESULT($payproc_cv_sys_so_peercred)
219
220 if test $payproc_cv_sys_so_peercred = yes; then
221   AC_DEFINE(HAVE_SO_PEERCRED, 1,
222             [Defined if SO_PEERCRED is supported (Linux specific)])
223 else
224   # Check for the getsockopt LOCAL_PEEREID (NetBSD)
225   AC_MSG_CHECKING(for LOCAL_PEEREID)
226   AC_CACHE_VAL(payproc_cv_sys_so_local_peereid,
227       [AC_TRY_COMPILE([#include <sys/socket.>
228          #include <sys/un.h>],
229          [struct unpcbid unp;
230           int unpl = sizeof unp;
231           getsockopt (1, SOL_SOCKET, LOCAL_PEEREID, &unp, &unpl);],
232           payproc_cv_sys_so_local_peereid=yes,
233           payproc_cv_sys_so_local_peereid=no)
234        ])
235   AC_MSG_RESULT($payproc_cv_sys_so_local_peereid)
236
237   if test $payproc_cv_sys_so_local_peereid = yes; then
238     AC_DEFINE(HAVE_LOCAL_PEEREID, 1,
239               [Defined if LOCAL_PEEREID is supported (NetBSD specific)])
240   else
241     # (Open)Solaris
242     AC_CHECK_FUNCS([getpeerucred], AC_CHECK_HEADERS([ucred.h]))
243     if test $ac_cv_func_getpeerucred != yes; then
244         # FreeBSD
245         AC_CHECK_FUNCS([getpeereid])
246     fi
247   fi
248 fi
249
250
251 #
252 # Setup gcc specific options
253 #
254 AC_MSG_NOTICE([checking for cc features])
255 if test "$GCC" = yes; then
256     # Note that it is okay to use CFLAGS here because this are just
257     # warning options and the user should have a chance of overriding
258     # them.
259     if test "$USE_MAINTAINER_MODE" = "yes"; then
260         CFLAGS="$CFLAGS -O3 -Wall -Wcast-align -Wshadow -Wstrict-prototypes"
261         CFLAGS="$CFLAGS -Wformat -Wno-format-y2k -Wformat-security"
262         AC_MSG_CHECKING([if gcc supports -Wno-missing-field-initializers])
263         _gcc_cflags_save=$CFLAGS
264         CFLAGS="-Wno-missing-field-initializers"
265         AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])],_gcc_wopt=yes,_gcc_wopt=no)
266         AC_MSG_RESULT($_gcc_wopt)
267         CFLAGS=$_gcc_cflags_save;
268         if test x"$_gcc_wopt" = xyes ; then
269           CFLAGS="$CFLAGS -W -Wno-sign-compare -Wno-missing-field-initializers"
270         fi
271         AC_MSG_CHECKING([if gcc supports -Wdeclaration-after-statement])
272         _gcc_cflags_save=$CFLAGS
273         CFLAGS="-Wdeclaration-after-statement"
274         AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])],_gcc_wopt=yes,_gcc_wopt=no)
275         AC_MSG_RESULT($_gcc_wopt)
276         CFLAGS=$_gcc_cflags_save;
277         if test x"$_gcc_wopt" = xyes ; then
278           CFLAGS="$CFLAGS -Wdeclaration-after-statement"
279         fi
280     else
281         CFLAGS="$CFLAGS -Wall"
282     fi
283
284     AC_MSG_CHECKING([if gcc supports -Wno-pointer-sign])
285     _gcc_cflags_save=$CFLAGS
286     CFLAGS="-Wno-pointer-sign"
287     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])],_gcc_psign=yes,_gcc_psign=no)
288     AC_MSG_RESULT($_gcc_psign)
289     CFLAGS=$_gcc_cflags_save;
290     if test x"$_gcc_psign" = xyes ; then
291        CFLAGS="$CFLAGS -Wno-pointer-sign"
292     fi
293
294     AC_MSG_CHECKING([if gcc supports -Wpointer-arith])
295     _gcc_cflags_save=$CFLAGS
296     CFLAGS="-Wpointer-arith"
297     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])],_gcc_psign=yes,_gcc_psign=no)
298     AC_MSG_RESULT($_gcc_psign)
299     CFLAGS=$_gcc_cflags_save;
300     if test x"$_gcc_psign" = xyes ; then
301        CFLAGS="$CFLAGS -Wpointer-arith"
302     fi
303 fi
304
305
306 #
307 # This is handy for debugging so the compiler doesn't rearrange
308 # things and eliminate variables.
309 #
310 AC_ARG_ENABLE(optimization,
311    AC_HELP_STRING([--disable-optimization],
312                   [disable compiler optimization]),
313                   [if test $enableval = no ; then
314                       CFLAGS=`echo $CFLAGS | sed s/-O[[1-9]]\ /-O0\ /g`
315                    fi])
316
317 #
318 # Prepare building of estream
319 #
320 estream_INIT
321
322
323 #
324 # Print errors here so that they are visible all
325 # together and the user can acquire them all together.
326 #
327 die=no
328 if test "$have_gpg_error" = "no"; then
329    die=yes
330    AC_MSG_NOTICE([[
331 ***
332 *** You need libgpg-error to build this program.
333 **  This library is for example available at
334 ***   ftp://ftp.gnupg.org/gcrypt/libgpg-error
335 *** (at least version $NEED_GPG_ERROR_VERSION is required.)
336 ***]])
337 fi
338 if test "$have_npth" = "no"; then
339     die=yes
340     AC_MSG_NOTICE([[
341 ***
342 *** It is now required to build with support for the
343 *** New Portable Threads Library (nPth). Please install this
344 *** library first.  The library is for example available at
345 ***   ftp://ftp.gnupg.org/gcrypt/npth/
346 *** (at least version $NEED_NPTH_VERSION (API $NEED_NPTH_API) is required).
347 ***]])
348 fi
349
350 if test "$die" = "yes"; then
351     AC_MSG_ERROR([[
352 ***
353 *** Required libraries not found. Please consult the above messages
354 *** and install them before running configure again.
355 ***]])
356 fi
357
358
359
360 AC_CONFIG_FILES([Makefile
361 m4/Makefile
362 src/Makefile
363 doc/Makefile
364 tests/Makefile
365 ])
366
367
368 AC_OUTPUT
369
370
371 echo "
372         Payproc v${PACKAGE_VERSION} has been configured as follows:
373
374         Revision:  mym4_revision
375         Platform:  $host
376
377 "