A small step for GnuPG but a huge leap for error codes.
[gnupg.git] / configure.ac
1 # configure.ac - for GnuPG 1.9
2 #       Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc,
3
4 # This file is part of GnuPG.
5
6 # GnuPG 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 2 of the License, or
9 # (at your option) any later version.
10
11 # GnuPG 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, write to the Free Software
18 # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
19
20 # Process this file with autoconf to produce a configure script.
21 AC_PREREQ(2.52)
22 # Version number: Remember to change it immediately *after* a release.
23 #                 Add a "-cvs" prefix for non-released code.
24 AC_INIT(gnupg, 1.9.0-cvs, gnupg-devel@gnupg.org)
25 NEED_LIBGCRYPT_VERSION=1.1.8
26 NEED_LIBASSUAN_VERSION=0.0.1
27 NEED_KSBA_VERSION=0.4.6
28 NEED_OPENSC_VERSION=0.7.0
29
30 PACKAGE=$PACKAGE_NAME
31 VERSION=$PACKAGE_VERSION
32
33 AM_GNU_GETTEXT_VERSION(0.11.5)
34
35 AC_CONFIG_AUX_DIR(scripts)
36 AC_CONFIG_SRCDIR(sm/gpgsm.c)
37 AM_CONFIG_HEADER(config.h)
38 AM_INIT_AUTOMAKE($PACKAGE, $VERSION)
39 AM_MAINTAINER_MODE
40
41 # Some status variables to give feedback at the end of a configure run
42 habe_libassuan=no
43 have_ksba=no
44 have_opensc=no
45 have_pth=no
46
47 GNUPG_BUILD_PROGRAM(gpg, yes)
48 GNUPG_BUILD_PROGRAM(gpgsm, yes)
49 GNUPG_BUILD_PROGRAM(agent, yes)
50 GNUPG_BUILD_PROGRAM(scdaemon, yes)
51
52
53 AH_TOP([
54 /* We need this, because some autoconf tests rely on this (e.g. stpcpy)
55    and it should be used for new programs anyway. */
56 #define _GNU_SOURCE  1
57 ])
58
59 AH_BOTTOM([
60 /* Some global constants. */
61 #ifdef HAVE_DRIVE_LETTERS
62 #define GNUPG_DEFAULT_HOMEDIR "c:/gnupg"
63 #else
64 #define GNUPG_DEFAULT_HOMEDIR "~/.gnupg"
65 #endif 
66 #define GNUPG_PRIVATE_KEYS_DIR "private-keys-v1.d"
67 ])
68
69
70
71 AC_SUBST(PACKAGE)
72 AC_SUBST(VERSION)
73 AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of this package])
74 AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version of this package])
75 AC_DEFINE_UNQUOTED(PACKAGE_BUGREPORT, "$PACKAGE_BUGREPORT",
76                                         [Bug report address])
77 AC_DEFINE_UNQUOTED(NEED_LIBGCRYPT_VERSION, "$NEED_LIBGCRYPT_VERSION",
78                                        [Required version of Libgcrypt])
79 AC_DEFINE_UNQUOTED(NEED_KSBA_VERSION, "$NEED_KSBA_VERSION",
80                                        [Required version of Libksba])
81
82
83
84
85 # Checks for programs.
86 missing_dir=`cd $ac_aux_dir && pwd`
87 AM_MISSING_PROG(ACLOCAL, aclocal, $missing_dir)
88 AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir)
89 AM_MISSING_PROG(AUTOMAKE, automake, $missing_dir)
90 AM_MISSING_PROG(AUTOHEADER, autoheader, $missing_dir)
91 AM_MISSING_PROG(MAKEINFO, makeinfo, $missing_dir)
92 AC_PROG_AWK
93 AC_PROG_CC
94 AC_PROG_CPP
95 AC_PROG_INSTALL
96 AC_PROG_LN_S
97 AC_PROG_MAKE_SET
98 AC_PROG_RANLIB
99 #AC_ARG_PROGRAM
100
101 if test "$GCC" = yes; then
102     CFLAGS="$CFLAGS -Wall -Wcast-align -Wshadow -Wstrict-prototypes"
103 fi
104
105 case "${target}" in
106     *-*-mingw32*)
107         PRINTABLE_OS_NAME="MingW32"
108         AC_DEFINE(HAVE_DOSISH_SYSTEM,1,
109                   [defined if we run on some of the PCDOS like systems 
110                    (DOS, Windoze. OS/2) with special properties like
111                     no file modes])
112         ;;
113     i?86-emx-os2 | i?86-*-os2*emx )
114         PRINTABLE_OS_NAME="OS/2"
115         ;;
116     i?86-*-msdosdjgpp*)
117         PRINTABLE_OS_NAME="MSDOS/DJGPP"
118         try_dynload=no
119         ;;
120     *-linux*)
121         PRINTABLE_OS_NAME="GNU/Linux"
122         ;;
123 dnl let that after linux to avoid gnu-linux problems
124     *-gnu*)
125         PRINTABLE_OS_NAME="GNU/Hurd"
126         ;;
127     *)
128         PRINTABLE_OS_NAME=`uname -s || echo "Unknown"`
129         ;;
130 esac
131 AC_DEFINE_UNQUOTED(PRINTABLE_OS_NAME, "$PRINTABLE_OS_NAME",
132                    [A human readable text with the name of the OS])
133
134
135 # I know that it is in general not a good idea to evaluate bindir in
136 # the configuration but we want to hard code the defaults into some of
137 # the programs and doing this during a make install is not a good
138 # idea.  We also have the problem that 2 of the programs are included
139 # in the package but the others are distributed in other packages.
140 eval my_default_bindir=${exec_prefix}
141 test "x${my_default_bindir}" = xNONE && my_default_bindir=${ac_default_prefix}
142 my_default_bindir=${my_default_bindir}/bin
143
144 # Same goes for the pkglibdir which is used to call the gpg-protect-tool.
145 eval my_default_pkglibdir=${exec_prefix}
146 test "x${my_default_pkglibdir}" = xNONE && my_default_pkglibdir=${ac_default_prefix}
147 my_default_pkglibdir=${my_default_pkglibdir}/lib/${PACKAGE_NAME}
148
149 AC_ARG_WITH(agent-pgm,
150     [  --with-agent-pgm=PATH  Use PATH as the default for the gpg-agent)],
151           gnupg_agent_pgm="$withval",
152           gnupg_agent_pgm="${my_default_bindir}/gpg-agent" )
153 AC_DEFINE_UNQUOTED(GNUPG_DEFAULT_AGENT, "$gnupg_agent_pgm",
154                    [Default location of the gpg-agent program])
155 AC_ARG_WITH(pinentry-pgm,
156     [  --with-pinentry-pgm=PATH  Use PATH as the default for the pinentry)],
157           gnupg_pinentry_pgm="$withval", gnupg_pinentry_pgm="" )
158 if test -z "$gnupg_pinentry_pgm"; then
159   gnupg_pinentry_pgm=${my_default_bindir}/pinentry
160 fi
161 AC_DEFINE_UNQUOTED(GNUPG_DEFAULT_PINENTRY, "$gnupg_pinentry_pgm",
162                    [Default location of the pinentry program])
163 AC_ARG_WITH(scdaemon-pgm,
164     [  --with-scdaemon-pgm=PATH  Use PATH as the default for the scdaemon)],
165           gnupg_scdaemon_pgm="$withval", gnupg_scdaemon_pgm="" )
166 if test -z "$gnupg_scdaemon_pgm"; then
167   gnupg_scdaemon_pgm=${my_default_bindir}/scdaemon
168 fi
169 AC_DEFINE_UNQUOTED(GNUPG_DEFAULT_SCDAEMON, "$gnupg_scdaemon_pgm",
170                    [Default location of the scdaemon program])
171 AC_ARG_WITH(dirmngr-pgm,
172     [  --with-dirmngr-pgm=PATH  Use PATH as the default for the dirmngr)],
173           gnupg_dirmngr_pgm="$withval", gnupg_dirmngr_pgm="" )
174 if test -z "$gnupg_dirmngr_pgm"; then
175   gnupg_dirmngr_pgm=${my_default_bindir}/dirmngr
176 fi
177 AC_DEFINE_UNQUOTED(GNUPG_DEFAULT_DIRMNGR, "$gnupg_dirmngr_pgm",
178                    [Default location of the dirmngr program])
179
180 AC_ARG_WITH(protect-tool,
181     [  --with-protect-tool=PATH  Use PATH as the protect-tool)],
182           gnupg_protect_tool="$withval", gnupg_protect_tool="" )
183 if test -z "$gnupg_protect_tool"; then
184   gnupg_protect_tool=${my_default_pkglibdir}/gpg-protect-tool
185 fi
186 AC_DEFINE_UNQUOTED(GNUPG_PROTECT_TOOL, "$gnupg_protect_tool",
187                    [Name of the protect tool program])
188
189
190 #
191 # Checks for libraries.
192 #
193
194 #
195 # Libgcrypt is our generic crypto library
196 #
197 #AC_PATH_PROG(LIBGCRYPT_CONFIG, libgcrypt-config)
198 #if test -n "$LIBGCRYPT_CONFIG"; then
199 #       LIBGCRYPT_CFLAGS=`$LIBGCRYPT_CONFIG --cflags`
200 #       LIBGCRYPT_LIBS=`$LIBGCRYPT_CONFIG --libs`
201 #else
202 #    AC_MSG_ERROR([[
203 #***
204 #*** You need libgcrypt to build this program.
205 #*** It should be available at the same place you 
206 #*** got this software.
207 #***]])
208 #fi
209 #AC_SUBST(LIBGCRYPT_CFLAGS)
210 #AC_SUBST(LIBGCRYPT_LIBS)
211 AM_PATH_LIBGCRYPT("$NEED_LIBGCRYPT_VERSION",,
212         AC_MSG_ERROR([[
213 ***  
214 *** libgcrypt was not found. You may want to get it from
215 *** ftp://ftp.gnupg.org/pub/gcrypt/alpha/libgcrypt/
216 ***
217 ]]))
218
219
220 #
221 # libassuan is used for IPC
222 #
223 AM_PATH_LIBASSUAN("$NEED_LIBASSUAN_VERSION",
224                   have_libasssuan=yes,have_libasssun=no)
225 if test "$have_libassuan" = "no"; then
226     AC_MSG_ERROR([[
227 ***
228 *** You need libassuan to build this program..
229 *** It should be available at the same place you 
230 *** got this software.
231 ***]])
232 fi
233
234
235 #
236 # libksba is our X.509 support library
237 #
238 AM_PATH_KSBA("$NEED_KSBA_VERSION",have_ksba=yes,have_ksba=no)
239 if test "$have_ksba" = "no"; then
240     AC_MSG_ERROR([[
241 ***
242 *** You need libksba to build this program..
243 *** It should be available at the same place you 
244 *** got this software.
245 ***]])
246 fi
247
248
249 #
250 # OpenSC is needed by the SCdaemon - if it is not availbale we can only
251 # build a limited SCdaemon
252 #
253 AM_PATH_OPENSC("$NEED_OPENSC_VERSION",have_opensc=yes,have_opensc=no)
254 if test $have_opensc = yes; then
255   AC_DEFINE(HAVE_OPENSC,1,
256             [defined if the OpenSC library is available])
257 fi
258
259
260 #
261 # Check whether the (highly desirable) GNU Pth library is available
262 #
263 AC_ARG_WITH(pth-prefix,
264             AC_HELP_STRING([--with-pth-prefix=PFX],
265                            [prefix where GNU Pth is installed (optional)]),
266      pth_config_prefix="$withval", pth_config_prefix="")
267 if test x$pth_config_prefix != x ; then
268    PTH_CONFIG="$pth_config_prefix/bin/pth-config"
269 fi
270 AC_PATH_PROG(PTH_CONFIG, pth-config, no)
271 if test "$PTH_CONFIG" = "no"; then
272     AC_MSG_WARN([[
273 ***
274 *** To support concurrent access to the gpg-agent and the SCdaemon
275 *** we need the support of the GNU Portable Threads Library.
276 *** Download it from ftp://ftp.gnu.org/gnu/pth/
277 *** On a Debian GNU/Linux system you might want to try 
278 ***   apt-get install libpth-dev
279 ***]])
280 else
281   GNUPG_PTH_VERSION_CHECK(1.3.7)
282   if test $have_pth = yes; then      
283      PTH_CFLAGS=`$PTH_CONFIG --cflags`
284      PTH_LIBS=`$PTH_CONFIG --ldflags`
285      PTH_LIBS="$PTH_LIBS `$PTH_CONFIG --libs`"
286      AC_DEFINE(USE_GNU_PTH, 1,
287               [Defined if the GNU Portable Thread Library should be used])
288   fi
289 fi
290 AC_SUBST(PTH_CFLAGS)
291 AC_SUBST(PTH_LIBS)
292
293 AM_GNU_GETTEXT
294
295 # Checks for header files.
296 AC_HEADER_STDC
297 AC_CHECK_HEADERS([string.h locale.h])
298
299 # Checks for typedefs, structures, and compiler characteristics.
300 AC_C_CONST
301 AC_C_INLINE
302 AC_TYPE_SIZE_T
303 AC_TYPE_SIGNAL
304 AC_DECL_SYS_SIGLIST
305
306 GNUPG_CHECK_TYPEDEF(byte, HAVE_BYTE_TYPEDEF)
307 GNUPG_CHECK_TYPEDEF(ushort, HAVE_USHORT_TYPEDEF)
308 GNUPG_CHECK_TYPEDEF(ulong, HAVE_ULONG_TYPEDEF)
309
310 GNUPG_SYS_SO_PEERCRED
311
312 # Checks for library functions.
313
314 # These are needed by libjnlib - fixme: we should have a macros for them
315 AC_CHECK_FUNCS(memicmp stpcpy strlwr strtoul memmove stricmp strtol)
316 AC_CHECK_FUNCS(getrusage setrlimit stat setlocale)
317 AC_CHECK_FUNCS(flockfile funlockfile)
318
319 AC_CHECK_FUNCS(sigaction sigprocmask)
320
321 AC_REPLACE_FUNCS(vasprintf)
322 AC_REPLACE_FUNCS(fopencookie)
323 # FIXME: Print a warning when fopencookie is not available.
324 AC_REPLACE_FUNCS(mkdtemp)
325 AC_REPLACE_FUNCS(fseeko ftello)
326 AC_REPLACE_FUNCS(isascii)
327 AC_REPLACE_FUNCS(putc_unlocked)
328
329 # We use jnlib, so tell other modules about it
330 AC_DEFINE(HAVE_JNLIB_LOGGING, 1,
331         [Defined if jnlib style logging fucntions are available])
332
333
334 #
335 # Decide what to build
336 #
337 if test $have_ksba = no; then
338   build_gpgsm=no
339   build_scdaemon=no
340 fi
341
342 build_agent_threaded=""
343 if test "$build_agent" = "yes"; then
344   if test $have_pth = no; then
345      build_agent_threaded="(not multi-threaded)"
346   fi
347 fi
348
349 build_scdaemon_extra=""
350 if test "$build_scdaemon" = "yes"; then
351   tmp=""
352   if test $have_pth = no; then
353      build_scdaemon_extra="not multi-threaded"
354      tmp=", "
355   fi
356   if test $have_opensc = no; then
357      build_scdaemon_extra="${build_scdaemon_extra}${tmp}no pkcs#15"
358      tmp=", "
359   fi      
360   if test -n "$build_scdaemon_extra"; then
361      build_scdaemon_extra="(${build_scdaemon_extra})"
362   fi
363 fi
364
365
366 AM_CONDITIONAL(BUILD_GPG,   test "$build_gpg" = "yes")
367 AM_CONDITIONAL(BUILD_GPGSM, test "$build_gpgsm" = "yes")
368 AM_CONDITIONAL(BUILD_AGENT, test "$build_agent" = "yes")
369 AM_CONDITIONAL(BUILD_SCDAEMON, test "$build_scdaemon" = "yes")
370
371
372 AC_CONFIG_FILES([ m4/Makefile 
373 Makefile
374 po/Makefile.in
375 intl/Makefile
376 jnlib/Makefile
377 common/Makefile
378 kbx/Makefile
379 g10/Makefile
380 sm/Makefile
381 agent/Makefile
382 scd/Makefile
383 doc/Makefile
384 tests/Makefile
385 ])
386 AC_OUTPUT
387
388
389 echo "
390         GnuPG v${VERSION} has been configured as follows:
391         
392         OpenPGP:   $build_gpg
393         S/MIME:    $build_gpgsm
394         Agent:     $build_agent $build_agent_threaded
395         Smartcard: $build_scdaemon $build_scdaemon_extra
396
397         Protect tool:     $gnupg_protect_tool
398         Default agent:    $gnupg_agent_pgm
399         Default pinentry: $gnupg_pinentry_pgm
400         Default scdaemon: $gnupg_scdaemon_pgm
401         Default dirmngr:  $gnupg_dirmngr_pgm
402 "
403