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