2004-12-21 Timo Schulz <twoaday@g10code.com>
[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 AH_TOP([
32 /* We need this, because some autoconf tests rely on this (e.g. stpcpy)
33    and it should be used for new programs anyway */
34 #define _GNU_SOURCE  1
35 ])
36 AM_MAINTAINER_MODE
37
38 AC_CANONICAL_HOST
39
40 dnl Checks for programs.
41 missing_dir=`cd $ac_aux_dir && pwd`
42 AM_MISSING_PROG(ACLOCAL, aclocal, $missing_dir)
43 AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir)
44 AM_MISSING_PROG(AUTOMAKE, automake, $missing_dir)
45 AM_MISSING_PROG(AUTOHEADER, autoheader, $missing_dir)
46 AM_MISSING_PROG(MAKEINFO, makeinfo, $missing_dir)
47 AC_PROG_CC
48 AC_PROG_CPP
49 AC_PROG_INSTALL
50 AC_PROG_RANLIB
51 # We need to check for cplusplus here becuase we may not do the test
52 # for Qt and autoconf does does not allow that.
53 AC_PROG_CXX
54 AC_PROG_LN_S
55
56 dnl Checks for compiler features.
57 if test "$GCC" = yes; then
58     CFLAGS="$CFLAGS -Wall -Wcast-align -Wshadow -Wstrict-prototypes"
59     CPPFLAGS="$CPPFLAGS -Wall"
60 fi
61
62 dnl Checks for library functions.
63 AC_CHECK_FUNCS(seteuid stpcpy mmap)
64 GNUPG_CHECK_MLOCK
65
66 dnl Checks for libassuan.
67 dnl -> None required becuase we use a stripped down version of libassuan.
68
69
70 dnl Checks for libsecmem.
71 GNUPG_CHECK_TYPEDEF(byte, HAVE_BYTE_TYPEDEF)
72 GNUPG_CHECK_TYPEDEF(ulong, HAVE_ULONG_TYPEDEF)
73
74 AC_PATH_PROG(SETCAP, setcap, :, "$PATH:/sbin:/usr/sbin")
75 AC_CHECK_LIB(cap, cap_set_proc, [
76   AC_DEFINE(USE_CAPABILITIES,1,[The capabilities support library is installed])
77   LIBCAP=-lcap
78 ])
79 AC_SUBST(LIBCAP)
80
81 dnl
82 dnl Check for curses pinentry program.
83 dnl
84 AC_ARG_ENABLE(pinentry-curses,
85             AC_HELP_STRING([--enable-pinentry-curses], [build curses pinentry]),
86             pinentry_curses=$enableval, pinentry_curses=maybe)
87 AC_ARG_ENABLE(fallback-curses,
88             AC_HELP_STRING([--enable-fallback-curses], [include curses fallback]),
89             fallback_curses=$enableval, fallback_curses=maybe)
90
91 dnl
92 dnl Checks for curses libraries.  Deal correctly with $pinentry_curses = maybe
93 dnl and $fallback_curses = maybe.
94 dnl
95 if test "$pinentry_curses" != "no" -o "$fallback_curses" != "no"; then
96   IU_LIB_CURSES
97 fi
98 if test "$LIBCURSES"; then
99   if test "$pinentry_curses" != "no"; then
100     pinentry_curses=yes
101   fi
102   if test "$fallback_curses" != "no"; then
103     fallback_curses=yes
104     AC_DEFINE(FALLBACK_CURSES, 1,
105               [The GUI pinentries should fall back to curses if X is not available.])
106   fi
107 else
108   if test "$pinentry_curses" = "yes" -o "$fallback_curses" = "yes"; then
109     AC_MSG_ERROR([[
110 *** The curses library is required. The latest version of
111 *** ncurses is always available from ftp://ftp.gnu.org/gnu/ncurses/.
112 ]])
113   fi
114   pinentry_curses=no
115   fallback_curses=no
116 fi
117 AM_CONDITIONAL(BUILD_LIBPINENTRY_CURSES, test "$pinentry_curses" = "yes" -o "$fallback_curses" = "yes")
118 AM_CONDITIONAL(BUILD_PINENTRY_CURSES, test "$pinentry_curses" = "yes")
119 AM_CONDITIONAL(FALLBACK_CURSES, test "$fallback_curses" = "yes")
120
121 if test "$pinentry_curses" = "yes"; then
122   AC_DEFINE(PINENTRY_CURSES, 1, [The Curses version of Pinentry is to be build])
123 fi
124
125
126 dnl
127 dnl Check for GTK+ pinentry program.
128 dnl
129 AC_ARG_ENABLE(pinentry-gtk,
130             AC_HELP_STRING([--enable-pinentry-gtk], [build GTK+ pinentry]),
131             pinentry_gtk=$enableval, pinentry_gtk=maybe)
132
133 dnl
134 dnl Checks for GTK+ libraries.  Deal correctly with $pinentry_gtk = maybe.
135 dnl
136 if test "$pinentry_gtk" != "no"; then
137 AM_PATH_GLIB(1.2.0,,
138 if test "$pinentry_gtk" = "yes"; then
139     AC_MSG_ERROR([[
140 *** GLIB 1.2.0 or newer is required. The latest version of GLIB
141 *** is always available from ftp://ftp.gtk.org/.
142 ]])
143 else
144     pinentry_gtk=no
145 fi)
146 fi
147
148 if test "$pinentry_gtk" != "no"; then
149 AM_PATH_GTK(1.2.0,
150     AC_DEFINE(HAVE_GTK, 1, [Defined if GTK is available]),
151 if test "$pinentry_gtk" = "yes"; then
152     AC_MSG_ERROR([[
153 *** GTK+ 1.2.0 or newer is required. The latest version of GTK+
154 *** is always available form ftp://ftp.gtk.org/.
155 ]])
156 else
157     pinentry_gtk=no
158 fi)
159 fi
160
161 dnl If we have come so far, GTK+ pinentry can be build.
162 if test "$pinentry_gtk" != "no"; then
163     pinentry_gtk=yes
164 fi
165 AM_CONDITIONAL(BUILD_PINENTRY_GTK, test "$pinentry_gtk" = "yes")
166 if test "$pinentry_gtk" = "yes"; then
167   AC_DEFINE(PINENTRY_GTK, 1, [The GTK+ version of Pinentry is to be build])
168 fi
169
170 if test "$pinentry_curses" = "yes" \
171         -o "$fallback_curses" = "yes" \
172         -o "$pinentry_gtk" = "yes"; then
173 dnl Additional checks pinentry Curses/GTK+.
174 AM_ICONV
175 fi
176
177 dnl if test "$pinentry_gtk" = "yes"; then
178 dnl Additional checks for GTK+ pinentry.
179 dnl End of additional checks for GTK+ pinentry.
180 dnl fi
181
182
183 dnl
184 dnl Check for GTK+-2 pinentry program.
185 dnl
186 AC_ARG_ENABLE(pinentry-gtk2,
187             AC_HELP_STRING([--enable-pinentry-gtk2], [build GTK+-2 pinentry]),
188             pinentry_gtk_2=$enableval, pinentry_gtk_2=maybe)
189
190 dnl check for pkg-config
191 if test "$pinentry_gtk_2" != "no"; then
192         AC_CHECK_PROG(PKGCONFIG, pkg-config, [yes], [no])
193         if test x"$PKGCONFIG" != xyes ; then
194                 pinentry_gtk_2=no
195         fi
196 fi
197
198 dnl check if the module gtk+-2.0 exists
199 if test "$pinentry_gtk_2" != "no"; then
200         AC_MSG_CHECKING([for gtk+-2])
201         pkg-config --exists gtk+-2.0
202         if test $? -ne 0 ; then
203                 AC_MSG_RESULT([no])
204                 AC_MSG_WARN([pkg-config could not find the module gtk+-2.0])
205                 pinentry_gtk_2=no
206         else
207                 AC_MSG_RESULT([yes])
208                 AC_MSG_CHECKING([gtk+-2 version >= 2.4.0])
209                 modvers=`pkg-config --modversion gtk+-2.0`
210                 AC_MSG_RESULT([$modvers])
211                 pkg-config --atleast-version=2.4.0 gtk+-2.0
212                 if test $? -ne 0 ; then
213                         AC_MSG_WARN([building GTK+-2 pinentry disabled])
214                         pinentry_gtk_2=no
215                 else
216                         GTK2CFLAGS=`pkg-config --cflags gtk+-2.0`
217                         GTK2LIBS=`pkg-config --libs gtk+-2.0`
218                         AC_SUBST(GTK2CFLAGS)
219                         AC_SUBST(GTK2LIBS)
220                         pinentry_gtk_2=yes
221                 fi
222         fi
223 fi
224 AM_CONDITIONAL(BUILD_PINENTRY_GTK_2, test "$pinentry_gtk_2" = "yes")
225
226
227 dnl
228 dnl Check for Qt pinentry program.
229 dnl
230 AC_ARG_ENABLE(pinentry-qt,
231             AC_HELP_STRING([--enable-pinentry-qt], [build Qt pinentry]),
232             pinentry_qt=$enableval, pinentry_qt=maybe)
233 dnl
234 dnl Checks for Qt libraries.  Deal correctly with $pinentry_qt = maybe.
235 dnl
236 if test "$pinentry_qt" != "no"; then
237 QT_CHECK_COMPILERS
238 QT_PATH
239 if test $have_qt = "no"; then
240         if test $pinentry_qt = "yes"; then
241           AC_MSG_ERROR([Qt ($qt_minversion) $ac_qt_notfound not found. Please check your installation!
242           For more details about this problem, look at the end of config.log.$missing_qt_mt])
243         else
244           pinentry_qt="no"        
245         fi
246 fi
247 if test $have_moc = "no"; then
248         if test $pinentry_qt = "yes"; then
249         AC_MSG_ERROR([No Qt meta object compiler (moc) found!
250         Please check whether you installed Qt correctly.
251         You need to have a running moc binary.
252         configure tried to run $ac_cv_path_moc and the test didn't
253         succeed. If configure shouldn't have tried this one, set
254         the environment variable MOC to the right one before running
255         configure.
256         ])
257         else
258           pinentry_qt="no"        
259         fi
260 fi
261 fi
262
263 dnl If we have come so far, Qt pinentry can probably be build.
264 if test "$pinentry_qt" != "no"; then
265     pinentry_qt=yes
266 fi
267 AM_CONDITIONAL(BUILD_PINENTRY_QT, test "$pinentry_qt" = "yes")
268
269 if test "$pinentry_qt" = "yes"; then
270   AC_DEFINE(PINENTRY_QT, 1, [The Qt version of Pinentry is to be build])
271 fi
272
273 dnl if test "$pinentry_qt" = "yes"; then
274 dnl dnl Additional checks for Qt pinentry.
275 dnl dnl End of checks for Qt pinentry.
276 dnl fi
277
278 if test "$pinentry_gtk" = "yes"; then
279    PINENTRY_DEFAULT=pinentry-gtk
280 else
281   if test "$pinentry_qt" = "yes"; then
282     PINENTRY_DEFAULT=pinentry-qt
283   else
284     if test "$pinentry_gtk_2" = "yes"; then
285       PINENTRY_DEFAULT=pinentry-gtk-2
286     else
287       if test "$pinentry_curses" = "yes"; then
288         PINENTRY_DEFAULT=pinentry-curses
289       else
290         AC_MSG_ERROR([[No pinentry enabled.]])
291       fi
292     fi
293   fi
294 fi
295 AC_SUBST(PINENTRY_DEFAULT)
296
297
298 AC_CONFIG_FILES([
299 assuan/Makefile
300 secmem/Makefile
301 pinentry/Makefile
302 curses/Makefile
303 gtk/Makefile
304 gtk+-2/Makefile
305 qt/Makefile
306 doc/Makefile
307 Makefile
308 ])
309
310 AC_OUTPUT
311
312 AC_MSG_NOTICE([
313         Pinentry v${VERSION} has been configured as follows:
314
315         Curses Pinentry: $pinentry_curses
316         GTK+ Pinentry: $pinentry_gtk
317         GTK+-2 Pinentry: $pinentry_gtk_2
318         Qt Pinentry: $pinentry_qt
319
320         Fallback to Curses: $fallback_curses
321
322         Default Pinentry: $PINENTRY_DEFAULT
323 ])