Add a manual section for card-stored certificates.
[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_CONNECT_AGENT_DEFAULT=no
235 have_w32_system=no
236 case "${host}" in
237     *-mingw32*)
238         # special stuff for Windoze NT
239         GPGSM_DEFAULT='c:\\gnupg\\gpgsm.exe'
240         GPG_CONNECT_AGENT_DEFAULT='c:\\gnupg\\gpg-connect-agent.exe'
241         have_w32_system=yes
242         ;;
243     *)
244         ;;
245 esac
246
247 if test "$have_w32_system" = yes; then
248    AC_DEFINE(HAVE_W32_SYSTEM,1, [Defined if we run on a W32 API based system])
249 fi
250 AM_CONDITIONAL(HAVE_W32_SYSTEM, test "$have_w32_system" = yes)
251
252 # Generate values for the DLL version info
253 if test "$have_w32_system" = yes; then
254     BUILD_TIMESTAMP=`date --iso-8601=minutes`
255     changequote(,)dnl 
256     BUILD_FILEVERSION=`echo "$VERSION" | sed 's/\([0-9.]*\).*/\1./;s/\./,/g'`
257     changequote([,])dnl
258     BUILD_FILEVERSION="${BUILD_FILEVERSION}${BUILD_REVISION_DEC}"
259 fi
260 AC_SUBST(BUILD_REVISION)
261 AC_SUBST(BUILD_REVISION_DEC)
262 AC_SUBST(BUILD_TIMESTAMP)
263 AC_SUBST(BUILD_FILEVERSION)
264
265 # Checks for libraries.
266
267 AC_CHECK_FUNCS([ttyname localtime_r timegm stpcpy])
268
269 # Run the checks needed for estream-printf.c
270 estream_PRINTF_INIT
271
272 # The error code library.  Error codes are sent over the IPC layer and
273 # have to be interpreted.
274 AM_PATH_GPG_ERROR("$NEED_GPG_ERROR_VERSION",
275                   have_gpg_error=yes, have_gpg_error=no)
276
277 # The IPC library.
278 AM_PATH_LIBASSUAN("$NEED_LIBASSUAN_VERSION",
279                   have_libassuan=yes, have_libassuan=no)
280
281 # GPGSM
282 NO_OVERRIDE=no
283 AC_ARG_WITH(gpgsm,
284             AC_HELP_STRING([--with-gpgsm=PATH], [use GpgSM binary at PATH]),
285             GPGSM=$withval, NO_OVERRIDE=yes)
286 if test "$NO_OVERRIDE" = "yes" || test "$GPGSM" = "yes"; then
287   GPGSM=
288   NO_OVERRIDE=yes
289   if test "$cross_compiling" != "yes"; then
290     AC_PATH_PROG(GPGSM, gpgsm)
291   fi
292   if test -z "$GPGSM"; then
293     GPGSM="$GPGSM_DEFAULT"
294   fi
295 fi
296 if test "$GPGSM" = no; then
297   if test "$NO_OVERRIDE" = "yes"; then
298     if test "$cross_compiling" != "yes"; then
299       AC_MSG_WARN([
300 ***
301 *** Could not find GpgSM, install GpgSM or use --with-gpgsm=PATH to enable it
302 ***])
303     else
304       AC_MSG_ERROR([
305 ***
306 *** Can not determine path to GpgSM when cross-compiling, use --with-gpgsm=PATH
307 ***])
308     fi
309   fi
310 else
311   AC_DEFINE_UNQUOTED(GPGSM_PATH, "$GPGSM", [Path to the GPGSM binary.])
312   AC_DEFINE(ENABLE_GPGSM,1,[Whether GPGSM support is enabled])
313 fi
314 AM_CONDITIONAL(HAVE_GPGSM, test "$GPGSM" != "no")
315
316
317 dnl Check for GPGSM version requirement.
318 GPGSM_VERSION=unknown
319 ok=maybe
320 if test -z "$GPGSM" -o "x$GPGSM" = "xno"; then
321   ok=no
322 else
323   if test "$cross_compiling" = "yes"; then
324     AC_MSG_WARN([GPGSM version can not be checked when cross compiling])
325     ok=no
326   else
327     if test ! -x "$GPGSM"; then
328       AC_MSG_WARN([GPGSM not executable, version check disabled])
329       ok=no
330     fi
331   fi
332 fi
333 if test "$ok" = "maybe"; then
334   AC_MSG_CHECKING(for GPGSM >= $NEED_GPGSM_VERSION)
335   req_major=`echo $NEED_GPGSM_VERSION | \
336              sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\1/'`
337   req_minor=`echo $NEED_GPGSM_VERSION | \
338              sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\2/'`
339   req_micro=`echo $NEED_GPGSM_VERSION | \
340              sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\3/'`
341   gpgsm_version=`$GPGSM --version | grep ^gpgsm`
342   major=`echo $gpgsm_version | \
343          sed 's/^gpgsm (GnuPG) \([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\).*/\1/'`
344   minor=`echo $gpgsm_version | \
345          sed 's/^gpgsm (GnuPG) \([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\).*/\2/'`
346   micro=`echo $gpgsm_version | \
347          sed 's/^gpgsm (GnuPG) \([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\).*/\3/'`
348   GPGSM_VERSION=`echo $gpgsm_version | sed 's/^gpgsm (GnuPG) //'`
349
350   if test "$major" -gt "$req_major"; then
351     ok=yes
352   else
353     if test "$major" -eq "$req_major"; then
354       if test "$minor" -gt "$req_minor"; then
355         ok=yes
356       else
357         if test "$minor" -eq "$req_minor"; then
358           if test "$micro" -ge "$req_micro"; then
359             ok=yes
360           fi
361         fi
362       fi
363     fi
364   fi
365   if test "$ok" = "yes"; then
366     AC_MSG_RESULT(yes)
367   else
368     AC_MSG_RESULT(no)
369     AC_MSG_WARN([GPGSM must be at least version $NEED_GPGSM_VERSION])
370   fi
371 fi
372 gpgsm_ok="$ok"
373
374 # GPG_CONNECT_AGENT
375 NO_OVERRIDE=no
376 AC_ARG_WITH(gpg-connect-agent,
377             AC_HELP_STRING([--with-gpg-connect-agent=PATH],
378                            [use gpg-connect-agent binary at PATH]),
379             GPG_CONNECT_AGENT=$withval, NO_OVERRIDE=yes)
380 if test "$NO_OVERRIDE" = "yes" || test "$GPG_CONNECT_AGENT" = "yes"; then
381   GPG_CONNECT_AGENT=
382   NO_OVERRIDE=yes
383   if test "$cross_compiling" != "yes"; then
384     AC_PATH_PROG(GPG_CONNECT_AGENT, gpg-connect-agent)
385   fi
386   if test -z "$GPG_CONNECT_AGENT"; then
387     GPG_CONNECT_AGENT="$GPG_CONNECT_AGENT_DEFAULT"
388   fi
389 fi
390 if test "$GPG_CONNECT_AGENT" = no; then
391   if test "$NO_OVERRIDE" = "yes"; then
392     if test "$cross_compiling" != "yes"; then
393       AC_MSG_WARN([
394 ***
395 *** Could not find gpg-connect-agent, use --with-gpg-connect-agent=PATH to enable it
396 ***])
397     else
398       AC_MSG_WARN([
399 ***
400 *** Can not determine path to gpg-connect-agent when cross-compiling, use --with-gpg-connect-agent=PATH
401 ***])
402     fi
403   fi
404 else
405   AC_DEFINE_UNQUOTED(GPG_CONNECT_AGENT_PATH, "$GPG_CONNECT_AGENT",
406                      [Path to the GPG_CONNECT_AGENT binary.])
407 fi
408
409
410 # Checks for header files.
411 AC_HEADER_STDC
412 AC_CHECK_HEADERS([stdlib.h string.h])
413
414 # Checks for typedefs, structures, and compiler characteristics.
415 AC_HEADER_STDBOOL
416 AC_C_INLINE
417
418 # Checks for library functions.
419
420 # Check for programs needed for the manual.
421 AC_CHECK_PROG(CONVERT, convert, convert)
422 AC_CHECK_PROG(EPSTOPDF, epstopdf, epstopdf)
423
424 # Test if tests can be run
425 ok=yes
426 AM_CONDITIONAL(RUN_TESTS, test "$ok" = "yes")
427
428
429 AH_BOTTOM([
430 /* Prefix all estream functions.  */
431 #define _ESTREAM_EXT_SYM_PREFIX _scute_
432 ])
433
434
435 # Print errors here so that they are visible all
436 # together and the user can acquire them all together.
437
438 die=no
439 if test "$have_gpg_error" = "no"; then
440    die=yes
441    AC_MSG_NOTICE([[
442 ***  
443 *** You need libgpg-error to build this program.
444 **  This library is for example available at
445 ***   ftp://ftp.gnupg.org/pub/gcrypt/libgpg-error
446 *** (at least version $NEED_GPG_ERROR_VERSION is required.)
447 ***]])
448 fi
449 if test "$have_libassuan" = "no"; then
450    die=yes
451    AC_MSG_NOTICE([[
452 ***
453 *** You need libassuan to build this program.
454 *** This library is for example available at
455 ***   ftp://ftp.gnupg.org/pub/gcrypt/alpha/libassuan/
456 *** (at least version $NEED_LIBASSUAN_VERSION is required).
457 ***]])
458 fi
459
460 if test "$die" = "yes"; then
461     AC_MSG_ERROR([[
462 ***
463 *** Required libraries not found. Please consult the above messages
464 *** and install them before running configure again.
465 ***]])
466 fi
467
468 AC_CONFIG_FILES([Makefile
469                  m4/Makefile
470                  src/Makefile
471                  tests/Makefile
472                  doc/manual/Makefile
473                  doc/Makefile
474                  src/versioninfo.rc])
475 AC_OUTPUT
476
477 echo "
478         Scute v${VERSION} has been configured as follows:
479
480         Revision: mym4_revision  (mym4_revision_dec)
481         Platform: $host
482 "