* assuan.h (assuan_error_t, assuan_context_t): New aliases.
[pinentry.git] / configure.ac
1 # configure.ac
2 # Copyright (C) 1999 Robert Bihlmeyer <robbe@orcus.priv.at>
3 # Copyright (C) 2001, 2002, 2003, 2004 g10 Code GmbH
4
5 # This file is part of PINENTRY.
6
7 # PINENTRY is free software; you can redistribute it and/or modify
8 # it under the terms of the GNU General Public License as published by
9 # the Free Software Foundation; either version 2 of the License, or
10 # (at your option) any later version.
11
12 # PINENTRY is distributed in the hope that it will be useful,
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 # GNU General Public License for more details.
16
17 # You should have received a copy of the GNU General Public License
18 # along with this program; if not, write to the Free Software
19 # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
20  
21 # (Process this file with autoconf to produce a configure script.)
22 AC_PREREQ(2.57)
23 min_automake_version="1.7.6"
24
25 # Remember to remove the "-cvs" suffix *before* a release and to bump the
26 # version number immediately *after* a release and to re-append the suffix.
27 AC_INIT(pinentry, 0.7.2-cvs, [gpa-dev@gnupg.org])
28 AM_CONFIG_HEADER(config.h)
29 AC_CONFIG_SRCDIR(pinentry/pinentry.h)
30 AM_INIT_AUTOMAKE($PACKAGE_NAME, $PACKAGE_VERSION)
31
32 AH_TOP([
33 /* We need this, because some autoconf tests rely on this (e.g. stpcpy)
34    and it should be used for new programs anyway */
35 #define _GNU_SOURCE  1
36 ])
37
38 AM_MAINTAINER_MODE
39
40 AC_CANONICAL_HOST
41
42 dnl Checks for programs.
43 missing_dir=`cd $ac_aux_dir && pwd`
44 AM_MISSING_PROG(ACLOCAL, aclocal, $missing_dir)
45 AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir)
46 AM_MISSING_PROG(AUTOMAKE, automake, $missing_dir)
47 AM_MISSING_PROG(AUTOHEADER, autoheader, $missing_dir)
48 AM_MISSING_PROG(MAKEINFO, makeinfo, $missing_dir)
49 AC_PROG_CC
50 AC_PROG_CPP
51 AC_PROG_INSTALL
52 AC_PROG_RANLIB
53 # We need to check for cplusplus here becuase we may not do the test
54 # for Qt and autoconf does does not allow that.
55 AC_PROG_CXX
56 AC_PROG_LN_S
57 AC_CHECK_TOOL(WINDRES, windres, :)
58
59
60 have_dosish_system=no
61 have_w32_system=no
62 case "${host}" in
63     *-mingw32*)
64         AC_DEFINE(USE_ONLY_8DOT3,1,
65                   [set this to limit filenames to the 8.3 format])
66         AC_DEFINE(HAVE_DRIVE_LETTERS,1,
67                   [defined if we must run on a stupid file system])
68         have_dosish_system=yes
69         have_w32_system=yes
70         ;;
71     i?86-emx-os2 | i?86-*-os2*emx )
72         # OS/2 with the EMX environment
73         AC_DEFINE(HAVE_DRIVE_LETTERS)
74         have_dosish_system=yes
75         ;;
76
77     i?86-*-msdosdjgpp*)
78         # DOS with the DJGPP environment
79         AC_DEFINE(HAVE_DRIVE_LETTERS)
80         have_dosish_system=yes
81         ;;
82 esac
83
84 if test "$have_dosish_system" = yes; then
85    AC_DEFINE(HAVE_DOSISH_SYSTEM,1,
86              [Defined if we run on some of the PCDOS like systems 
87               (DOS, Windoze. OS/2) with special properties like
88               no file modes])
89 fi
90 AM_CONDITIONAL(HAVE_DOSISH_SYSTEM, test "$have_dosish_system" = yes)
91
92 if test "$have_w32_system" = yes; then
93    AC_DEFINE(HAVE_W32_SYSTEM,1, [Defined if we run on a W32 API based system])
94 fi
95 AM_CONDITIONAL(HAVE_W32_SYSTEM, test "$have_w32_system" = yes)
96
97
98
99
100 dnl Checks for compiler features.
101 if test "$GCC" = yes; then
102     CFLAGS="$CFLAGS -Wall -Wcast-align -Wshadow -Wstrict-prototypes"
103     CPPFLAGS="$CPPFLAGS -Wall"
104 fi
105
106
107 # Checks for header files.
108 AC_HEADER_STDC
109 AC_CHECK_HEADERS(string.h unistd.h langinfo.h termio.h locale.h)
110
111 dnl Checks for library functions.
112 AC_CHECK_FUNCS(seteuid stpcpy mmap)
113 GNUPG_CHECK_MLOCK
114
115 dnl Checks for libassuan.
116 dnl -> None required becuase we use a stripped down version of libassuan.
117
118
119 dnl Checks for libsecmem.
120 GNUPG_CHECK_TYPEDEF(byte, HAVE_BYTE_TYPEDEF)
121 GNUPG_CHECK_TYPEDEF(ulong, HAVE_ULONG_TYPEDEF)
122
123 AC_PATH_PROG(SETCAP, setcap, :, "$PATH:/sbin:/usr/sbin")
124 AC_CHECK_LIB(cap, cap_set_proc, [
125   AC_DEFINE(USE_CAPABILITIES,1,[The capabilities support library is installed])
126   LIBCAP=-lcap
127 ])
128 AC_SUBST(LIBCAP)
129
130 dnl
131 dnl Check for curses pinentry program.
132 dnl
133 AC_ARG_ENABLE(pinentry-curses,
134             AC_HELP_STRING([--enable-pinentry-curses], [build curses pinentry]),
135             pinentry_curses=$enableval, pinentry_curses=maybe)
136 AC_ARG_ENABLE(fallback-curses,
137             AC_HELP_STRING([--enable-fallback-curses], [include curses fallback]),
138             fallback_curses=$enableval, fallback_curses=maybe)
139
140 dnl
141 dnl Checks for curses libraries.  Deal correctly with $pinentry_curses = maybe
142 dnl and $fallback_curses = maybe.
143 dnl
144 if test "$pinentry_curses" != "no" -o "$fallback_curses" != "no"; then
145   IU_LIB_CURSES
146 fi
147 if test "$LIBCURSES"; then
148   if test "$pinentry_curses" != "no"; then
149     pinentry_curses=yes
150   fi
151   if test "$fallback_curses" != "no"; then
152     fallback_curses=yes
153     AC_DEFINE(FALLBACK_CURSES, 1,
154      [The GUI pinentries should fall back to curses if X is not available.])
155   fi
156 else
157   if test "$pinentry_curses" = "yes" -o "$fallback_curses" = "yes"; then
158     AC_MSG_ERROR([[
159 ***
160 *** The curses library is required. The latest version of
161 *** ncurses is always available from ftp://ftp.gnu.org/gnu/ncurses/.
162 ***]])
163   fi
164   pinentry_curses=no
165   fallback_curses=no
166 fi
167 AM_CONDITIONAL(BUILD_LIBPINENTRY_CURSES,
168               test "$pinentry_curses" = "yes" -o "$fallback_curses" = "yes")
169 AM_CONDITIONAL(BUILD_PINENTRY_CURSES, test "$pinentry_curses" = "yes")
170 AM_CONDITIONAL(FALLBACK_CURSES, test "$fallback_curses" = "yes")
171
172 if test "$pinentry_curses" = "yes"; then
173   AC_DEFINE(PINENTRY_CURSES, 1,
174            [The Curses version of Pinentry is to be build])
175 fi
176
177
178 dnl
179 dnl Check for GTK+ pinentry program.
180 dnl
181 AC_ARG_ENABLE(pinentry-gtk,
182             AC_HELP_STRING([--enable-pinentry-gtk], [build GTK+ pinentry]),
183             pinentry_gtk=$enableval, pinentry_gtk=maybe)
184
185 dnl
186 dnl Checks for GTK+ libraries.  Deal correctly with $pinentry_gtk = maybe.
187 dnl
188 if test "$pinentry_gtk" != "no"; then
189 AM_PATH_GLIB(1.2.0,,
190 if test "$pinentry_gtk" = "yes"; then
191     AC_MSG_ERROR([[
192 ***
193 *** GLIB 1.2.0 or newer is required. The latest version of GLIB
194 *** is always available from ftp://ftp.gtk.org/.
195 ***]])
196 else
197     pinentry_gtk=no
198 fi)
199 fi
200
201 if test "$pinentry_gtk" != "no"; then
202 AM_PATH_GTK(1.2.0,
203     AC_DEFINE(HAVE_GTK, 1, [Defined if GTK is available]),
204 if test "$pinentry_gtk" = "yes"; then
205     AC_MSG_ERROR([[
206 ***
207 *** GTK+ 1.2.0 or newer is required. The latest version of GTK+
208 *** is always available form ftp://ftp.gtk.org/.
209 ***]])
210 else
211     pinentry_gtk=no
212 fi)
213 fi
214
215 dnl If we have come so far, GTK+ pinentry can be build.
216 if test "$pinentry_gtk" != "no"; then
217     pinentry_gtk=yes
218 fi
219 AM_CONDITIONAL(BUILD_PINENTRY_GTK, test "$pinentry_gtk" = "yes")
220 if test "$pinentry_gtk" = "yes"; then
221   AC_DEFINE(PINENTRY_GTK, 1, [The GTK+ version of Pinentry is to be build])
222 fi
223
224 if test "$pinentry_curses" = "yes" \
225         -o "$fallback_curses" = "yes" \
226         -o "$pinentry_gtk" = "yes"; then
227 dnl Additional checks pinentry Curses/GTK+.
228 AM_ICONV
229 fi
230
231 dnl if test "$pinentry_gtk" = "yes"; then
232 dnl Additional checks for GTK+ pinentry.
233 dnl End of additional checks for GTK+ pinentry.
234 dnl fi
235
236
237 dnl
238 dnl Check for GTK+-2 pinentry program.
239 dnl
240 AC_ARG_ENABLE(pinentry-gtk2,
241             AC_HELP_STRING([--enable-pinentry-gtk2], [build GTK+-2 pinentry]),
242             pinentry_gtk_2=$enableval, pinentry_gtk_2=maybe)
243
244 dnl check for pkg-config
245 if test "$pinentry_gtk_2" != "no"; then
246         AC_CHECK_PROG(PKGCONFIG, pkg-config, [yes], [no])
247         if test x"$PKGCONFIG" != xyes ; then
248                 pinentry_gtk_2=no
249         fi
250 fi
251
252 dnl check if the module gtk+-2.0 exists
253 if test "$pinentry_gtk_2" != "no"; then
254         AC_MSG_CHECKING([for gtk+-2])
255         pkg-config --exists gtk+-2.0
256         if test $? -ne 0 ; then
257                 AC_MSG_RESULT([no])
258                 AC_MSG_WARN([pkg-config could not find the module gtk+-2.0])
259                 pinentry_gtk_2=no
260         else
261                 AC_MSG_RESULT([yes])
262                 AC_MSG_CHECKING([gtk+-2 version >= 2.4.0])
263                 modvers=`pkg-config --modversion gtk+-2.0`
264                 AC_MSG_RESULT([$modvers])
265                 pkg-config --atleast-version=2.4.0 gtk+-2.0
266                 if test $? -ne 0 ; then
267                         AC_MSG_WARN([building GTK+-2 pinentry disabled])
268                         pinentry_gtk_2=no
269                 else
270                         GTK2CFLAGS=`pkg-config --cflags gtk+-2.0`
271                         GTK2LIBS=`pkg-config --libs gtk+-2.0`
272                         AC_SUBST(GTK2CFLAGS)
273                         AC_SUBST(GTK2LIBS)
274                         pinentry_gtk_2=yes
275                 fi
276         fi
277 fi
278 AM_CONDITIONAL(BUILD_PINENTRY_GTK_2, test "$pinentry_gtk_2" = "yes")
279
280
281 dnl
282 dnl Check for Qt pinentry program.
283 dnl
284 AC_ARG_ENABLE(pinentry-qt,
285             AC_HELP_STRING([--enable-pinentry-qt], [build Qt pinentry]),
286             pinentry_qt=$enableval, pinentry_qt=maybe)
287 dnl
288 dnl Checks for Qt libraries.  Deal correctly with $pinentry_qt = maybe.
289 dnl
290 if test "$pinentry_qt" != "no"; then
291 QT_CHECK_COMPILERS
292 QT_PATH
293 if test $have_qt = "no"; then
294         if test $pinentry_qt = "yes"; then
295           AC_MSG_ERROR([[
296 ***
297 *** Qt ($qt_minversion) $ac_qt_notfound not found. Please check your
298 *** installation!  For more details about this problem, look at the
299 *** end of config.log.$missing_qt_mt
300 ***]])
301         else
302           pinentry_qt="no"        
303         fi
304 fi
305 if test $have_moc = "no"; then
306         if test $pinentry_qt = "yes"; then
307         AC_MSG_ERROR([[
308 ***
309 *** No Qt meta object compiler (moc) found!
310 *** Please check whether you installed Qt correctly.
311 *** You need to have a running moc binary.
312 *** configure tried to run $ac_cv_path_moc and the test didn't
313 *** succeed. If configure shouldn't have tried this one, set
314 *** the environment variable MOC to the right one before running
315 *** configure.
316 ***]])
317         else
318           pinentry_qt="no"        
319         fi
320 fi
321 fi
322
323 dnl If we have come so far, Qt pinentry can probably be build.
324 if test "$pinentry_qt" != "no"; then
325     pinentry_qt=yes
326 fi
327 AM_CONDITIONAL(BUILD_PINENTRY_QT, test "$pinentry_qt" = "yes")
328
329 if test "$pinentry_qt" = "yes"; then
330   AC_DEFINE(PINENTRY_QT, 1, [The Qt version of Pinentry is to be build])
331 fi
332
333 dnl if test "$pinentry_qt" = "yes"; then
334 dnl dnl Additional checks for Qt pinentry.
335 dnl dnl End of checks for Qt pinentry.
336 dnl fi
337
338
339 #
340 # Check whether we should build the W32 pinentry.  This is actually
341 # the simplest check as we do this only for that platform.
342 #
343 pinentry_w32=no
344 test $have_w32_system = yes && pinentry_w32=yes
345 AM_CONDITIONAL(BUILD_PINENTRY_W32, test "$pinentry_w32" = "yes")
346
347
348 #
349 # Figure out the default pinentry
350 #
351 if test "$pinentry_gtk" = "yes"; then
352    PINENTRY_DEFAULT=pinentry-gtk
353 else
354   if test "$pinentry_qt" = "yes"; then
355     PINENTRY_DEFAULT=pinentry-qt
356   else
357     if test "$pinentry_gtk_2" = "yes"; then
358       PINENTRY_DEFAULT=pinentry-gtk-2
359     else
360       if test "$pinentry_curses" = "yes"; then
361         PINENTRY_DEFAULT=pinentry-curses
362       else
363         if test "$pinentry_w32" = "yes"; then
364           PINENTRY_DEFAULT=pinentry-w32
365         else
366           AC_MSG_ERROR([[No pinentry enabled.]])
367         fi
368       fi
369     fi
370   fi
371 fi
372 AC_SUBST(PINENTRY_DEFAULT)
373
374
375 AC_CONFIG_FILES([
376 assuan/Makefile
377 secmem/Makefile
378 pinentry/Makefile
379 curses/Makefile
380 gtk/Makefile
381 gtk+-2/Makefile
382 qt/Makefile
383 w32/Makefile
384 doc/Makefile
385 Makefile
386 ])
387
388 AC_OUTPUT
389
390 AC_MSG_NOTICE([
391         Pinentry v${VERSION} has been configured as follows:
392
393         Curses Pinentry: $pinentry_curses
394         GTK+ Pinentry: $pinentry_gtk
395         GTK+-2 Pinentry: $pinentry_gtk_2
396         Qt Pinentry: $pinentry_qt
397         W32 Pinentry: $pinentry_w32
398
399         Fallback to Curses: $fallback_curses
400
401         Default Pinentry: $PINENTRY_DEFAULT
402 ])