Get GPG Agent's socket directly from the agent.
[scute.git] / configure.ac
1 # configure.ac: Configure script for Scute.
2 # Copyright (C) 2006, 2007, 2008, 2009, 2010, 2015 g10 Code GmbH
3 #
4 # This file is part of Scute.
5 #
6 # Scute is free software; you can redistribute it and/or modify it
7 # 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 # Scute is distributed in the hope that it will be useful, but
12 # WITHOUT ANY WARRANTY; without even the implied warranty of
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14 # 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 # In addition, as a special exception, g10 Code GmbH gives permission
20 # to link this library: with the Mozilla Foundation's code for
21 # Mozilla (or with modified versions of it that use the same license
22 # as the "Mozilla" code), and distribute the linked executables.  You
23 # must obey the GNU General Public License in all respects for all of
24 # the code used other than "Mozilla".  If you modify this file, you
25 # may extend this exception to your version of the file, but you are
26 # not obligated to do so.  If you do not wish to do so, delete this
27 # exception statement from your version.
28
29 # Process this file with autoconf to produce a configure script.
30
31 AC_PREREQ(2.61)
32 min_automake_version="1.14"
33
34 # To build a release you need to create a tag with the version number
35 # (git tag -s scute-1.n.m) and run "./autogen.sh --force".  Please
36 # bump the version number immediately *after* the release and do
37 # another commit and push so that the git magic is able to work.
38 m4_define([mym4_package],[scute])
39 m4_define([mym4_major], [1])
40 m4_define([mym4_minor], [5])
41 m4_define([mym4_micro], [0])
42
43 # To start a new development series, i.e a new major or minor number
44 # you need to mark an arbitrary commit before the first beta release
45 # with an annotated tag.  For example the 1.5 branch starts off with
46 # the tag "scute-1.5-base".  This is used as the base for counting
47 # beta numbers before the first release of a series.
48
49 # Below is m4 magic to extract and compute the git revision number,
50 # the decimalized short revision number, a beta version string and a
51 # flag indicating a development version (mym4_isbeta).  Note that the
52 # m4 processing is done by autoconf and not during the configure run.
53 m4_define([mym4_verslist], m4_split(m4_esyscmd([./autogen.sh --find-version] \
54                            mym4_package mym4_major mym4_minor mym4_micro),[:]))
55 m4_define([mym4_isbeta],       m4_argn(2, mym4_verslist))
56 m4_define([mym4_version],      m4_argn(4, mym4_verslist))
57 m4_define([mym4_revision],     m4_argn(7, mym4_verslist))
58 m4_define([mym4_revision_dec], m4_argn(8, mym4_verslist))
59 m4_esyscmd([echo ]mym4_version[>VERSION])
60 AC_INIT([mym4_package],[mym4_version], [http://bugs.gnupg.org])
61
62 # LT Version numbers, remember to change them just *before* a release.
63 #   (Code changed:                      REVISION++)
64 #   (Interfaces added/removed/changed:  CURRENT++, REVISION=0)
65 #   (Interfaces added:                  AGE++)
66 #   (Interfaces removed/changed:        AGE=0)
67 #
68 LIBSCUTE_LT_CURRENT=0
69 LIBSCUTE_LT_AGE=0
70 LIBSCUTE_LT_REVISION=2
71
72 # Version numbers reported by the PKCS #11 module to its users.
73 VERSION_MAJOR=1
74 VERSION_MINOR=0
75
76 NEED_GPG_ERROR_VERSION=1.14
77 NEED_LIBASSUAN_VERSION=2.0.0
78 NEED_GPGSM_VERSION=1.9.6
79 # Some status variables to give feedback at the end of a configure run.
80 have_gpg_error=no
81 have_libassuan=no
82
83 #
84 # Provide information about the build.
85 #
86 BUILD_REVISION="mym4_revision"
87 BUILD_REVISION_DEC="mym4_revision_dec"
88
89 PACKAGE=$PACKAGE_NAME
90 VERSION=$PACKAGE_VERSION
91
92 AC_CONFIG_AUX_DIR([build-aux])
93 AC_CONFIG_SRCDIR([src/cryptoki.h])
94 AC_CONFIG_HEADER([config.h])
95 AC_CONFIG_MACRO_DIR(m4)
96 AM_INIT_AUTOMAKE
97 AM_MAINTAINER_MODE
98 AC_CANONICAL_HOST
99
100 # Autobuilder support.
101 AB_INIT
102
103 # Enable GNU extensions on systems that have them.
104 AC_GNU_SOURCE
105
106 AH_VERBATIM([_REENTRANT],
107 [/* To allow the use of scute in multithreaded programs we have to use
108   special features from the library.  */
109 #ifndef _REENTRANT
110 # define _REENTRANT 1
111 #endif])
112
113 # Checks for programs.
114 AC_PROG_CC
115
116 #
117 # Setup gcc specific options
118 #
119 AC_MSG_NOTICE([checking for cc features])
120 if test "$GCC" = yes; then
121     mycflags=
122     mycflags_save=$CFLAGS
123
124     # Check whether gcc does not emit a diagnositc for unknow -Wno-*
125     # options.  This is the case for gcc >= 4.6
126     AC_MSG_CHECKING([if gcc ignores unknown -Wno-* options])
127     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
128 #if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 6 )
129 #kickerror
130 #endif]],[])],[_gcc_silent_wno=yes],[_gcc_silent_wno=no])
131     AC_MSG_RESULT($_gcc_silent_wno)
132
133     # Note that it is okay to use CFLAGS here because these are just
134     # warning options and the user should have a chance of overriding
135     # them.
136     if test "$USE_MAINTAINER_MODE" = "yes"; then
137         mycflags="$mycflags -O3 -Wall -Wcast-align -Wshadow -Wstrict-prototypes"
138         mycflags="$mycflags -Wformat -Wno-format-y2k -Wformat-security"
139         if test x"$_gcc_silent_wno" = xyes ; then
140           _gcc_wopt=yes
141         else
142           AC_MSG_CHECKING([if gcc supports -Wno-missing-field-initializers])
143           CFLAGS="-Wno-missing-field-initializers"
144           AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])],
145                             [_gcc_wopt=yes],[_gcc_wopt=no])
146           AC_MSG_RESULT($_gcc_wopt)
147         fi
148         if test x"$_gcc_wopt" = xyes ; then
149           mycflags="$mycflags -W -Wno-sign-compare"
150           mycflags="$mycflags -Wno-missing-field-initializers"
151         fi
152
153         AC_MSG_CHECKING([if gcc supports -Wdeclaration-after-statement])
154         CFLAGS="-Wdeclaration-after-statement"
155         AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])],_gcc_wopt=yes,_gcc_wopt=no)
156         AC_MSG_RESULT($_gcc_wopt)
157         if test x"$_gcc_wopt" = xyes ; then
158           mycflags="$mycflags -Wdeclaration-after-statement"
159         fi
160     else
161         mycflags="$mycflags -Wall"
162     fi
163
164     if test x"$_gcc_silent_wno" = xyes ; then
165       _gcc_psign=yes
166     else
167       AC_MSG_CHECKING([if gcc supports -Wno-pointer-sign])
168       CFLAGS="-Wno-pointer-sign"
169       AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])],
170                         [_gcc_psign=yes],[_gcc_psign=no])
171       AC_MSG_RESULT($_gcc_psign)
172     fi
173     if test x"$_gcc_psign" = xyes ; then
174        mycflags="$mycflags -Wno-pointer-sign"
175     fi
176
177     AC_MSG_CHECKING([if gcc supports -Wpointer-arith])
178     CFLAGS="-Wpointer-arith"
179     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])],_gcc_psign=yes,_gcc_psign=no)
180     AC_MSG_RESULT($_gcc_psign)
181     if test x"$_gcc_psign" = xyes ; then
182        mycflags="$mycflags -Wpointer-arith"
183     fi
184
185     CFLAGS="$mycflags $mycflags_save"
186 fi
187
188 AC_ARG_ENABLE(optimization,
189    AC_HELP_STRING([--disable-optimization],
190                   [disable compiler optimization]),
191                   [if test $enableval = no ; then
192                       CFLAGS=`echo $CFLAGS | sed 's/-O[[0-9]]//'`
193                    fi])
194
195
196 AC_SUBST(LIBSCUTE_LT_CURRENT)
197 AC_SUBST(LIBSCUTE_LT_AGE)
198 AC_SUBST(LIBSCUTE_LT_REVISION)
199 AC_DEFINE_UNQUOTED(NEED_GPGSM_VERSION, "$NEED_GPGSM_VERSION",
200                                        [Min. needed GPGSM version.])
201
202 AC_SUBST(PACKAGE)
203 AC_SUBST(VERSION)
204 AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of this package])
205 AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version of this package])
206 AC_DEFINE_UNQUOTED(VERSION_MAJOR, $VERSION_MAJOR, [Major version number])
207 AC_DEFINE_UNQUOTED(VERSION_MINOR, $VERSION_MINOR, [Minor version number])
208
209 # Don't default to build static libs.
210 # FIXME: Caution: Evil hack ahead.  Libtool does not support linking a
211 # static library to a shared library.  But for libassuan, we need this.
212 # Instead adding a lot of junk to Makefile.am to get this, we just override
213 # all safety checks here.  We are driving without seat belts now!
214 # http://lists.cairographics.org/archives/cairo/2009-April/016962.html
215 lt_cv_deplibs_check_method=pass_all
216 LT_PREREQ([2.2.6])
217 LT_INIT([win32-dll disable-static])
218 LT_LANG([Windows Resource])
219
220 # For now we hardcode the use of version scripts.  It would be better
221 # to write a test for this or even implement this within libtool.
222 have_ld_version_script=no
223 case "${host}" in
224     *-*-linux*)
225         have_ld_version_script=yes
226         ;;
227     *-*-gnu*)
228         have_ld_version_script=yes
229         ;;
230 esac
231 AM_CONDITIONAL(HAVE_LD_VERSION_SCRIPT, test "$have_ld_version_script" = "yes")
232
233 GPGSM_DEFAULT=no
234 GPG_AGENT_DEFAULT=no
235 GPG_CONNECT_AGENT_DEFAULT=no
236 have_w32_system=no
237 case "${host}" in
238     *-mingw32*)
239         # special stuff for Windoze NT
240         GPGSM_DEFAULT='c:\\gnupg\\gpgsm.exe'
241         GPG_AGENT_DEFAULT='c:\\gnupg\\gpg-agent.exe'
242         GPG_CONNECT_AGENT_DEFAULT='c:\\gnupg\\gpg-connect-agent.exe'
243         have_w32_system=yes
244         ;;
245     *)
246         ;;
247 esac
248
249 if test "$have_w32_system" = yes; then
250    AC_DEFINE(HAVE_W32_SYSTEM,1, [Defined if we run on a W32 API based system])
251 fi
252 AM_CONDITIONAL(HAVE_W32_SYSTEM, test "$have_w32_system" = yes)
253
254 # Generate values for the DLL version info
255 if test "$have_w32_system" = yes; then
256     BUILD_TIMESTAMP=`date --iso-8601=minutes`
257     changequote(,)dnl 
258     BUILD_FILEVERSION=`echo "$VERSION" | sed 's/\([0-9.]*\).*/\1./;s/\./,/g'`
259     changequote([,])dnl
260     BUILD_FILEVERSION="${BUILD_FILEVERSION}${BUILD_REVISION_DEC}"
261 fi
262 AC_SUBST(BUILD_REVISION)
263 AC_SUBST(BUILD_REVISION_DEC)
264 AC_SUBST(BUILD_TIMESTAMP)
265 AC_SUBST(BUILD_FILEVERSION)
266
267 # Checks for libraries.
268
269 AC_CHECK_FUNCS([ttyname localtime_r timegm stpcpy])
270
271 # Run the checks needed for estream-printf.c
272 estream_PRINTF_INIT
273
274 # The error code library.  Error codes are sent over the IPC layer and
275 # have to be interpreted.
276 AM_PATH_GPG_ERROR("$NEED_GPG_ERROR_VERSION",
277                   have_gpg_error=yes, have_gpg_error=no)
278
279 # The IPC library.
280 AM_PATH_LIBASSUAN("$NEED_LIBASSUAN_VERSION",
281                   have_libassuan=yes, have_libassuan=no)
282
283 # GPGSM
284 NO_OVERRIDE=no
285 AC_ARG_WITH(gpgsm,
286             AC_HELP_STRING([--with-gpgsm=PATH], [use GpgSM binary at PATH]),
287             GPGSM=$withval, NO_OVERRIDE=yes)
288 if test "$NO_OVERRIDE" = "yes" || test "$GPGSM" = "yes"; then
289   GPGSM=
290   NO_OVERRIDE=yes
291   if test "$cross_compiling" != "yes"; then
292     AC_PATH_PROG(GPGSM, gpgsm)
293   fi
294   if test -z "$GPGSM"; then
295     GPGSM="$GPGSM_DEFAULT"
296   fi
297 fi
298 if test "$GPGSM" = no; then
299   if test "$NO_OVERRIDE" = "yes"; then
300     if test "$cross_compiling" != "yes"; then
301       AC_MSG_WARN([
302 ***
303 *** Could not find GpgSM, install GpgSM or use --with-gpgsm=PATH to enable it
304 ***])
305     else
306       AC_MSG_ERROR([
307 ***
308 *** Can not determine path to GpgSM when cross-compiling, use --with-gpgsm=PATH
309 ***])
310     fi
311   fi
312 else
313   AC_DEFINE_UNQUOTED(GPGSM_PATH, "$GPGSM", [Path to the GPGSM binary.])
314   AC_DEFINE(ENABLE_GPGSM,1,[Whether GPGSM support is enabled])
315 fi
316 AM_CONDITIONAL(HAVE_GPGSM, test "$GPGSM" != "no")
317
318
319 dnl Check for GPGSM version requirement.
320 GPGSM_VERSION=unknown
321 ok=maybe
322 if test -z "$GPGSM" -o "x$GPGSM" = "xno"; then
323   ok=no
324 else
325   if test "$cross_compiling" = "yes"; then
326     AC_MSG_WARN([GPGSM version can not be checked when cross compiling])
327     ok=no
328   else
329     if test ! -x "$GPGSM"; then
330       AC_MSG_WARN([GPGSM not executable, version check disabled])
331       ok=no
332     fi
333   fi
334 fi
335 if test "$ok" = "maybe"; then
336   AC_MSG_CHECKING(for GPGSM >= $NEED_GPGSM_VERSION)
337   req_major=`echo $NEED_GPGSM_VERSION | \
338              sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\1/'`
339   req_minor=`echo $NEED_GPGSM_VERSION | \
340              sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\2/'`
341   req_micro=`echo $NEED_GPGSM_VERSION | \
342              sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\3/'`
343   gpgsm_version=`$GPGSM --version | grep ^gpgsm`
344   major=`echo $gpgsm_version | \
345          sed 's/^gpgsm (GnuPG) \([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\).*/\1/'`
346   minor=`echo $gpgsm_version | \
347          sed 's/^gpgsm (GnuPG) \([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\).*/\2/'`
348   micro=`echo $gpgsm_version | \
349          sed 's/^gpgsm (GnuPG) \([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\).*/\3/'`
350   GPGSM_VERSION=`echo $gpgsm_version | sed 's/^gpgsm (GnuPG) //'`
351
352   if test "$major" -gt "$req_major"; then
353     ok=yes
354   else
355     if test "$major" -eq "$req_major"; then
356       if test "$minor" -gt "$req_minor"; then
357         ok=yes
358       else
359         if test "$minor" -eq "$req_minor"; then
360           if test "$micro" -ge "$req_micro"; then
361             ok=yes
362           fi
363         fi
364       fi
365     fi
366   fi
367   if test "$ok" = "yes"; then
368     AC_MSG_RESULT(yes)
369   else
370     AC_MSG_RESULT(no)
371     AC_MSG_WARN([GPGSM must be at least version $NEED_GPGSM_VERSION])
372   fi
373 fi
374 gpgsm_ok="$ok"
375
376 # GPG_AGENT
377 NO_OVERRIDE=no
378 AC_ARG_WITH(gpg-agent,
379             AC_HELP_STRING([--with-gpg-agent=PATH], [use GPG Agent binary at PATH]),
380             GPG_AGENT=$withval, NO_OVERRIDE=yes)
381 if test "$NO_OVERRIDE" = "yes" || test "$GPG_AGENT" = "yes"; then
382   GPG_AGENT=
383   NO_OVERRIDE=yes
384   if test "$cross_compiling" != "yes"; then
385     AC_PATH_PROG(GPG_AGENT, gpg-agent)
386   fi
387   if test -z "$GPG_AGENT"; then
388     GPG_AGENT="$GPG_AGENT_DEFAULT"
389   fi
390 fi
391 if test "$GPG_AGENT" = no; then
392   if test "$NO_OVERRIDE" = "yes"; then
393     if test "$cross_compiling" != "yes"; then
394       AC_MSG_WARN([
395 ***
396 *** Could not find GPG Agent, install GPG Agent or use --with-gpg-agent=PATH to enable it
397 ***])
398     else
399       AC_MSG_ERROR([
400 ***
401 *** Can not determine path to GPG Agent when cross-compiling, use --with-gpg-agent=PATH
402 ***])
403     fi
404   fi
405 else
406   AC_DEFINE_UNQUOTED(GPG_AGENT_PATH, "$GPG_AGENT", [Path to the GPG_AGENT binary.])
407   AC_DEFINE(ENABLE_GPG_AGENT,1, [Whether GPG Agent support is enabled])
408 fi
409 AM_CONDITIONAL(HAVE_GPG_AGENT, test "$GPG_AGENT" != "no")
410
411 # GPG_CONNECT_AGENT
412 NO_OVERRIDE=no
413 AC_ARG_WITH(gpg-connect-agent,
414             AC_HELP_STRING([--with-gpg-connect-agent=PATH],
415                            [use gpg-connect-agent binary at PATH]),
416             GPG_CONNECT_AGENT=$withval, NO_OVERRIDE=yes)
417 if test "$NO_OVERRIDE" = "yes" || test "$GPG_CONNECT_AGENT" = "yes"; then
418   GPG_CONNECT_AGENT=
419   NO_OVERRIDE=yes
420   if test "$cross_compiling" != "yes"; then
421     AC_PATH_PROG(GPG_CONNECT_AGENT, gpg-connect-agent)
422   fi
423   if test -z "$GPG_CONNECT_AGENT"; then
424     GPG_CONNECT_AGENT="$GPG_CONNECT_AGENT_DEFAULT"
425   fi
426 fi
427 if test "$GPG_CONNECT_AGENT" = no; then
428   if test "$NO_OVERRIDE" = "yes"; then
429     if test "$cross_compiling" != "yes"; then
430       AC_MSG_WARN([
431 ***
432 *** Could not find gpg-connect-agent, use --with-gpg-connect-agent=PATH to enable it
433 ***])
434     else
435       AC_MSG_WARN([
436 ***
437 *** Can not determine path to gpg-connect-agent when cross-compiling, use --with-gpg-connect-agent=PATH
438 ***])
439     fi
440   fi
441 else
442   AC_DEFINE_UNQUOTED(GPG_CONNECT_AGENT_PATH, "$GPG_CONNECT_AGENT",
443                      [Path to the GPG_CONNECT_AGENT binary.])
444 fi
445
446
447 # Checks for header files.
448 AC_HEADER_STDC
449 AC_CHECK_HEADERS([stdlib.h string.h])
450
451 # Checks for typedefs, structures, and compiler characteristics.
452 AC_HEADER_STDBOOL
453 AC_C_INLINE
454
455 # Checks for library functions.
456
457 # Check for programs needed for the manual.
458 AC_CHECK_PROG(CONVERT, convert, convert)
459 AC_CHECK_PROG(EPSTOPDF, epstopdf, epstopdf)
460
461 # Test if tests can be run
462 ok=yes
463 AM_CONDITIONAL(RUN_TESTS, test "$ok" = "yes")
464
465
466 AH_BOTTOM([
467 /* Prefix all estream functions.  */
468 #define _ESTREAM_EXT_SYM_PREFIX _scute_
469 ])
470
471
472 # Print errors here so that they are visible all
473 # together and the user can acquire them all together.
474
475 die=no
476 if test "$have_gpg_error" = "no"; then
477    die=yes
478    AC_MSG_NOTICE([[
479 ***  
480 *** You need libgpg-error to build this program.
481 **  This library is for example available at
482 ***   ftp://ftp.gnupg.org/pub/gcrypt/libgpg-error
483 *** (at least version $NEED_GPG_ERROR_VERSION is required.)
484 ***]])
485 fi
486 if test "$have_libassuan" = "no"; then
487    die=yes
488    AC_MSG_NOTICE([[
489 ***
490 *** You need libassuan to build this program.
491 *** This library is for example available at
492 ***   ftp://ftp.gnupg.org/pub/gcrypt/alpha/libassuan/
493 *** (at least version $NEED_LIBASSUAN_VERSION is required).
494 ***]])
495 fi
496
497 if test "$die" = "yes"; then
498     AC_MSG_ERROR([[
499 ***
500 *** Required libraries not found. Please consult the above messages
501 *** and install them before running configure again.
502 ***]])
503 fi
504
505 AC_CONFIG_FILES([Makefile
506                  m4/Makefile
507                  src/Makefile
508                  tests/Makefile
509                  doc/manual/Makefile
510                  doc/Makefile
511                  src/versioninfo.rc])
512 AC_OUTPUT
513
514 echo "
515         Scute v${VERSION} has been configured as follows:
516
517         Revision: mym4_revision  (mym4_revision_dec)
518         Platform: $host
519 "