Locate engine names only at runtime and prefer GnuPG-2.
authorWerner Koch <wk@gnupg.org>
Fri, 27 Dec 2013 15:08:20 +0000 (16:08 +0100)
committerWerner Koch <wk@gnupg.org>
Fri, 27 Dec 2013 15:08:20 +0000 (16:08 +0100)
* configure.ac (NEED_GPG_VERSION, NEED_GPGSM_VERSION)
(NEED_G13_VERSION, NEED_GPGCONF_VERSION): Remove vars and all related
checks.  Do not check for any engine version.
(HAVE_ASSUAN): Remove AM conditional.
* src/Makefile.am: Remove separate component vars and always build all
engines but uiserver.
* src/dirinfo.c (WANT_GPGCONF_NAME): New.
(struct dirinfo): Add field gpgconf_name.
(_gpgme_get_default_gpgconf_name): Use WANT_GPGCONF_NAME.
(get_gpgconf_item): Set gpgconf name and adjust for _gpgme_get_*_path
now returning a malloced string.
* src/engine.c (engine_ops): Always init all engines except for
uiserver.
* src/posix-util.c (_gpgme_get_gpgsm_path, _gpgme_get_g13_path):
Remove unused functions.
(walk_path): New.
(_gpgme_get_gpg_path, _gpgme_get_gpgconf_path ): Re-implement using
walk_path.
* src/w32-util.c (_gpgme_get_gpgsm_path, _gpgme_get_g13_path): Remove
unused functions.
(_gpgme_get_gpg_path, _gpgme_get_gpgconf_path): Return a malloced
string.
* src/engine-g13.c (g13_get_req_version): Use a hardwired string with
the required version.  This info belongs into this file.
* src/engine-gpg.c (gpg_get_req_version): Ditto.
* src/engine-gpgconf.c (gpgconf_get_req_version): Ditto.
* src/engine-gpgsm.c (gpgsm_get_req_version): Ditto.
* tests/t-engine-info.c: Replace now useless test by an info output.
* tests/gpg/Makefile.am (GPG, GPG_AGENT): Hardwire gpg and gpg-agent.
* tests/gpgsm/Makefile.am (GPGSM): Hardwire gpgsm.

Signed-off-by: Werner Koch <wk@gnupg.org>
18 files changed:
NEWS
README
configure.ac
src/Makefile.am
src/dirinfo.c
src/engine-backend.h
src/engine-g13.c
src/engine-gpg.c
src/engine-gpgconf.c
src/engine-gpgsm.c
src/engine.c
src/posix-util.c
src/sys-util.h
src/util.h
src/w32-util.c
tests/gpg/Makefile.am
tests/gpgsm/Makefile.am
tests/t-engine-info.c

diff --git a/NEWS b/NEWS
index f68035d..8f9127e 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,16 @@
+Noteworthy changes in version 1.5.0 (unreleased)
+------------------------------------------------
+
+ * On Unices the engine file names are not not anymore hardwired but
+   located via the envvar PATH.  All configuration options to set the
+   name of the engines for configure run are removed.
+
+ * If GPGME find the gpgconf binary it defaults to using gpg2 or
+   whatever gpgconf tells as name for the OpenPGP engine.  If gpgconf
+   is not found, GPGME looks for an engine named "gpg".
+
+
+
 Noteworthy changes in version 1.4.3 (2013-08-12)
 ------------------------------------------------
 
diff --git a/README b/README
index e886647..3b39215 100644 (file)
--- a/README
+++ b/README
@@ -41,7 +41,7 @@ See the file INSTALL for generic installation instructions.
 Check that you have unmodified sources.  See below on how to do this.
 Don't skip it - this is an important step!
 
-To build GPGME, you need to install libgpg-error (>= 1.8) and
+To build GPGME, you need to install libgpg-error (>= 1.11) and
 Libassuan (>= 2.0.2).
 
 For support of the OpenPGP protocol (default), you should use the
@@ -50,13 +50,6 @@ ftp://ftp.gnupg.org/gcrypt/gnupg/
 For support of the CMS (Cryptographic Message Syntax) protocol, you
 need a GnuPG version >= 2.0.
 
-If configure can't find the `gpg' binary in your path, you can specify
-the location with the --with-gpg=/path/to/gpg argument to configure.
-
-If configure can't find the `gpgsm' binary in your path, you can
-specify the location with the --with-gpgsm=/path/to/gpgsm argument to
-configure.
-
 On some platforms GPGME based applications might hang at certain
 operations when using GPGME_PROTOCOL_CMS.  A workaround for this
 problem is to build with the configure option --disable-fd-passing.
index 92375e6..9575db2 100644 (file)
@@ -65,7 +65,7 @@ LIBGPGME_LT_REVISION=0
 GPGME_CONFIG_API_VERSION=1
 ##############################################
 
-NEED_GPG_ERROR_VERSION=1.8
+NEED_GPG_ERROR_VERSION=1.11
 NEED_LIBASSUAN_API=2
 NEED_LIBASSUAN_VERSION=2.0.2
 
@@ -254,7 +254,32 @@ AC_SUBST(BUILD_TIMESTAMP)
 AC_DEFINE_UNQUOTED(BUILD_TIMESTAMP, "$BUILD_TIMESTAMP",
                    [The time this package was configured for a build])
 
+#
+# Options to disable some regression tests
+#
+run_gpgconf_test="yes"
+AC_ARG_ENABLE(gpgconf-test,
+  AC_HELP_STRING([--disable-gpgconf-test], [disable GPGCONF regression test]),
+         run_gpgconf_test=$enableval)
+AM_CONDITIONAL(RUN_GPGCONF_TESTS, test "$run_gpgconf_test" = "yes")
+
+run_gpg_test="yes"
+AC_ARG_ENABLE(gpg-test,
+  AC_HELP_STRING([--disable-gpg-test], [disable GPG regression test]),
+         run_gpg_test=$enableval)
+AM_CONDITIONAL(RUN_GPG_TESTS, test "$run_gpg_test" = "yes")
+
+run_gpgsm_test="yes"
+AC_ARG_ENABLE(gpgsm-test,
+  AC_HELP_STRING([--disable-gpgsm-test], [disable GPGSM regression test]),
+         run_gpgsm_test=$enableval)
+AM_CONDITIONAL(RUN_GPGSM_TESTS, test "$run_gpgsm_test" = "yes")
 
+run_g13_test="yes"
+AC_ARG_ENABLE(g13-test,
+  AC_HELP_STRING([--disable-g13-test], [disable G13 regression test]),
+         run_g13_test=$enableval)
+AM_CONDITIONAL(RUN_G13_TESTS, test "$run_g13_test" = "yes")
 
 
 # Checks for header files.
@@ -394,478 +419,6 @@ if test "$have_libassuan" = "yes"; then
   AC_DEFINE_UNQUOTED(GPGME_LIBASSUAN_VERSION, "$libassuan_version",
                      [version of the libassuan library])
 fi
-AM_CONDITIONAL(HAVE_ASSUAN, test "$have_libassuan" = "yes")
-if test "$have_libassuan" = "yes"; then
-  AC_DEFINE(ENABLE_ASSUAN,1,[Whether Assuan support is enabled])
-fi
-
-# Checks for system services
-NEED_GPG_VERSION_DEFAULT=1.4.0
-NEED_GPGSM_VERSION_DEFAULT=1.9.6
-NEED_GPGCONF_VERSION_DEFAULT=2.0.4
-NEED_G13_VERSION_DEFAULT=2.1.0
-NEED_GPG_VERSION="$NEED_GPG_VERSION_DEFAULT"
-NEED_GPGSM_VERSION="$NEED_GPGSM_VERSION_DEFAULT"
-NEED_GPGCONF_VERSION="$NEED_GPGCONF_VERSION_DEFAULT"
-NEED_G13_VERSION="$NEED_G13_VERSION_DEFAULT"
-AC_ARG_WITH(gpg-version,
-           AC_HELP_STRING([--with-gpg-version=VER], [require GnuPG version VER]),
-           NEED_GPG_VERSION=$withval)
-if test "$NEED_GPG_VERSION" = "yes"; then
-  NEED_GPG_VERSION="$NEED_GPG_VERSION_DEFAULT"
-fi
-if test "$NEED_GPG_VERSION" = "no"; then
-  NEED_GPG_VERSION=0.0.0
-fi
-AC_ARG_WITH(gpgsm-version,
-           AC_HELP_STRING([--with-gpgsm-version=VER], [require GPGSM version VER]),
-           NEED_GPGSM_VERSION=$withval)
-if test "$NEED_GPGSM_VERSION" = "yes"; then
-  NEED_GPGSM_VERSION="$NEED_GPGSM_VERSION_DEFAULT"
-fi
-if test "$NEED_GPGSM_VERSION" = "no"; then
-  NEED_GPGSM_VERSION=0.0.0
-fi
-AC_ARG_WITH(gpgconf-version,
-           AC_HELP_STRING([--with-gpgconf-version=VER], [require GPGCONF version VER]),
-           NEED_GPGCONF_VERSION=$withval)
-if test "$NEED_GPGCONF_VERSION" = "yes"; then
-  NEED_GPGCONF_VERSION="$NEED_GPGCONF_VERSION_DEFAULT"
-fi
-if test "$NEED_GPGCONF_VERSION" = "no"; then
-  NEED_GPGCONF_VERSION=0.0.0
-fi
-AC_ARG_WITH(g13-version,
-           AC_HELP_STRING([--with-g13-version=VER], [require G13 version VER]),
-           NEED_G13_VERSION=$withval)
-if test "$NEED_G13_VERSION" = "yes"; then
-  NEED_G13_VERSION="$NEED_G13_VERSION_DEFAULT"
-fi
-if test "$NEED_G13_VERSION" = "no"; then
-  NEED_G13_VERSION=0.0.0
-fi
-
-AC_DEFINE_UNQUOTED(NEED_GPGCONF_VERSION, "$NEED_GPGCONF_VERSION",
-                                        [Min. needed GPGCONF version.])
-AC_DEFINE_UNQUOTED(NEED_GPG_VERSION, "$NEED_GPG_VERSION",
-                                    [Min. needed GnuPG version.])
-AC_DEFINE_UNQUOTED(NEED_GPGSM_VERSION, "$NEED_GPGSM_VERSION",
-                                      [Min. needed GPGSM version.])
-AC_DEFINE_UNQUOTED(NEED_G13_VERSION, "$NEED_G13_VERSION",
-                                    [Min. needed G13 version.])
-
-#
-# Check for GPGCONF
-#
-gpgconf_usable_for_test=no
-NO_OVERRIDE=no
-AC_ARG_WITH(gpgconf,
-           AC_HELP_STRING([--with-gpgconf=PATH],
-                           [use gpgconf binary at PATH]),
-           GPGCONF=$withval, NO_OVERRIDE=yes)
-if test "$NO_OVERRIDE" = "yes" || test "$GPGCONF" = "yes"; then
-  GPGCONF=
-  NO_OVERRIDE=yes
-  if test "$cross_compiling" != "yes"; then
-    AC_PATH_PROG(GPGCONF, gpgconf)
-  fi
-  if test -z "$GPGCONF"; then
-    GPGCONF="$GPGCONF_DEFAULT"
-  fi
-fi
-if test "$GPGCONF" = no; then
-  if test "$NO_OVERRIDE" = "yes"; then
-    if test "$cross_compiling" != "yes"; then
-      AC_MSG_WARN([
-***
-*** Could not find gpgconf, install gpgconf or use --with-gpgconf=PATH to enable it
-***])
-    else
-      AC_MSG_ERROR([
-***
-*** Can not determine path to gpgconf when cross-compiling, use --with-gpgconf=PATH
-***])
-    fi
-  fi
-else
-  AC_DEFINE_UNQUOTED(GPGCONF_PATH, "$GPGCONF", [Path to the GPGCONF binary.])
-  AC_DEFINE(ENABLE_GPGCONF,1,[Whether GPGCONF support is enabled])
-fi
-AM_CONDITIONAL(HAVE_GPGCONF, test "$GPGCONF" != "no")
-
-dnl Check for GPGCONF version requirement.
-GPGCONF_VERSION=unknown
-ok=maybe
-if test -z "$GPGCONF" -o "x$GPGCONF" = "xno"; then
-  ok=no
-else
-  if test "$cross_compiling" = "yes"; then
-    AC_MSG_WARN([GPGCONF version can not be checked when cross compiling])
-    ok=no
-  else
-    if test ! -x "$GPGCONF"; then
-      AC_MSG_WARN([GPGCONF not executable, version check disabled])
-      ok=no
-    fi
-  fi
-fi
-if test "$ok" = "maybe"; then
-  AC_MSG_CHECKING(for GPGCONF >= $NEED_GPGCONF_VERSION)
-  req_major=`echo $NEED_GPGCONF_VERSION | \
-             sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\1/'`
-  req_minor=`echo $NEED_GPGCONF_VERSION | \
-            sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\2/'`
-  req_micro=`echo $NEED_GPGCONF_VERSION | \
-            sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\3/'`
-  GPGCONF_VERSION=`$GPGCONF --version | sed -n '1 s/[[^0-9]]*\(.*\)/\1/p'`
-  major=`echo $GPGCONF_VERSION | \
-        sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\).*/\1/'`
-  minor=`echo $GPGCONF_VERSION | \
-        sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\).*/\2/'`
-  micro=`echo $GPGCONF_VERSION | \
-        sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\).*/\3/'`
-
-  if test "$major" -gt "$req_major"; then
-    ok=yes
-  else
-    if test "$major" -eq "$req_major"; then
-      if test "$minor" -gt "$req_minor"; then
-        ok=yes
-      else
-        if test "$minor" -eq "$req_minor"; then
-          if test "$micro" -ge "$req_micro"; then
-            ok=yes
-         fi
-        fi
-      fi
-    fi
-  fi
-  if test "$ok" = "yes"; then
-    AC_MSG_RESULT(yes)
-    if test "$cross_compiling" != "yes"; then
-       gpgconf_usable_for_test=yes
-    fi
-  else
-    AC_MSG_RESULT(no)
-    AC_MSG_WARN([GPGCONF must be at least version $NEED_GPGCONF_VERSION])
-  fi
-fi
-run_gpgconf_test="$ok"
-AC_ARG_ENABLE(gpgconf-test,
-  AC_HELP_STRING([--disable-gpgconf-test], [disable GPGCONF run test]),
-         run_gpgconf_test=$enableval)
-AM_CONDITIONAL(RUN_GPGCONF_TESTS, test "$run_gpgconf_test" = "yes")
-
-
-#
-# Check for GPG
-#
-NO_OVERRIDE=no
-AC_ARG_WITH(gpg,
-           AC_HELP_STRING([--with-gpg=PATH], [use GnuPG binary at PATH]),
-           GPG=$withval, NO_OVERRIDE=yes)
-if test "$NO_OVERRIDE" = "yes" || test "$GPG" = "yes"; then
-  GPG=
-  NO_OVERRIDE=yes
-  if test "$cross_compiling" != "yes"; then
-    if test "$gpgconf_usable_for_test" = "yes"; then
-      GPG="`$GPGCONF --list-components | grep ^gpg: | cut -d: -f 3`"
-    else
-      AC_PATH_PROG(GPG, gpg)
-    fi
-  fi
-  if test -z "$GPG"; then
-    GPG="$GPG_DEFAULT"
-  fi
-fi
-if test "$GPG" = no; then
-  if test "$NO_OVERRIDE" = "yes"; then
-    if test "$cross_compiling" != "yes"; then
-      AC_MSG_WARN([
-***
-*** Could not find GnuPG, install GnuPG or use --with-gpg=PATH to enable it
-***])
-    else
-      AC_MSG_ERROR([
-***
-*** Can not determine path to GnuPG when cross-compiling, use --with-gpg=PATH
-***])
-    fi
-  fi
-else
-  AC_DEFINE_UNQUOTED(GPG_PATH, "$GPG", [Path to the GnuPG binary.])
-  AC_SUBST(GPG)
-fi
-dnl Check for GnuPG version requirement.
-GPG_VERSION=unknown
-ok=maybe
-if test -z "$GPG" -o "x$GPG" = "xno"; then
-  ok=no
-else
-  if test "$cross_compiling" = "yes"; then
-    AC_MSG_WARN([GnuPG version can not be checked when cross compiling])
-    ok=no
-  else
-    if test ! -x "$GPG"; then
-      AC_MSG_WARN([GnuPG not executable, version check disabled])
-      ok=no
-    fi
-  fi
-fi
-if test "$ok" = "maybe"; then
-  AC_MSG_CHECKING(for GPG >= $NEED_GPG_VERSION)
-  req_major=`echo $NEED_GPG_VERSION | \
-             sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\1/'`
-  req_minor=`echo $NEED_GPG_VERSION | \
-            sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\2/'`
-  req_micro=`echo $NEED_GPG_VERSION | \
-            sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\3/'`
-  GPG_VERSION=`$GPG --version | sed -n '1 s/[[^0-9]]*\(.*\)/\1/p'`
-  major=`echo $GPG_VERSION | \
-        sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\).*/\1/'`
-  minor=`echo $GPG_VERSION | \
-        sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\).*/\2/'`
-  micro=`echo $GPG_VERSION | \
-        sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\).*/\3/'`
-
-  if test "$major" -gt "$req_major"; then
-    ok=yes
-  else
-    if test "$major" -eq "$req_major"; then
-      if test "$minor" -gt "$req_minor"; then
-        ok=yes
-      else
-        if test "$minor" -eq "$req_minor"; then
-          if test "$micro" -ge "$req_micro"; then
-            ok=yes
-         fi
-        fi
-      fi
-    fi
-  fi
-  if test "$ok" = "yes"; then
-    AC_MSG_RESULT(yes)
-  else
-    AC_MSG_RESULT(no)
-    AC_MSG_WARN([GPG must be at least version $NEED_GPG_VERSION])
-  fi
-fi
-run_gpg_test="$ok"
-AC_ARG_ENABLE(gpg-test,
-  AC_HELP_STRING([--disable-gpg-test], [disable GPG run test]),
-         run_gpg_test=$enableval)
-AM_CONDITIONAL(RUN_GPG_TESTS, test "$run_gpg_test" = "yes")
-AC_SUBST(GPG_PATH)
-
-
-#
-# Check for GPGSM
-#
-NO_OVERRIDE=no
-AC_ARG_WITH(gpgsm,
-           AC_HELP_STRING([--with-gpgsm=PATH], [use GpgSM binary at PATH]),
-           GPGSM=$withval, NO_OVERRIDE=yes)
-if test "$NO_OVERRIDE" = "yes" || test "$GPGSM" = "yes"; then
-  GPGSM=
-  NO_OVERRIDE=yes
-  if test "$cross_compiling" != "yes"; then
-    if test "$gpgconf_usable_for_test" = "yes"; then
-      GPGSM="`$GPGCONF --list-components | grep ^gpgsm: | cut -d: -f 3`"
-    else
-      AC_PATH_PROG(GPGSM, gpgsm)
-    fi
-  fi
-  if test -z "$GPGSM"; then
-    GPGSM="$GPGSM_DEFAULT"
-  fi
-fi
-if test "$GPGSM" = no; then
-  if test "$NO_OVERRIDE" = "yes"; then
-    if test "$cross_compiling" != "yes"; then
-      AC_MSG_WARN([
-***
-*** Could not find GpgSM, install GpgSM or use --with-gpgsm=PATH to enable it
-***])
-    else
-      AC_MSG_ERROR([
-***
-*** Can not determine path to GpgSM when cross-compiling, use --with-gpgsm=PATH
-***])
-    fi
-  fi
-else
-  AC_DEFINE_UNQUOTED(GPGSM_PATH, "$GPGSM", [Path to the GPGSM binary.])
-  AC_DEFINE(ENABLE_GPGSM,1,[Whether GPGSM support is enabled])
-fi
-AM_CONDITIONAL(HAVE_GPGSM, test "$GPGSM" != "no")
-
-
-dnl Check for GPGSM version requirement.
-GPGSM_VERSION=unknown
-ok=maybe
-if test -z "$GPGSM" -o "x$GPGSM" = "xno"; then
-  ok=no
-else
-  if test "$cross_compiling" = "yes"; then
-    AC_MSG_WARN([GPGSM version can not be checked when cross compiling])
-    ok=no
-  else
-    if test ! -x "$GPGSM"; then
-      AC_MSG_WARN([GPGSM not executable, version check disabled])
-      ok=no
-    fi
-  fi
-fi
-if test "$ok" = "maybe"; then
-  AC_MSG_CHECKING(for GPGSM >= $NEED_GPGSM_VERSION)
-  req_major=`echo $NEED_GPGSM_VERSION | \
-             sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\1/'`
-  req_minor=`echo $NEED_GPGSM_VERSION | \
-            sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\2/'`
-  req_micro=`echo $NEED_GPGSM_VERSION | \
-            sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\3/'`
-  GPGSM_VERSION=`$GPGSM --version | sed -n '1 s/[[^0-9]]*\(.*\)/\1/p'`
-  major=`echo $GPGSM_VERSION | \
-        sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\).*/\1/'`
-  minor=`echo $GPGSM_VERSION | \
-        sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\).*/\2/'`
-  micro=`echo $GPGSM_VERSION | \
-        sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\).*/\3/'`
-
-  if test "$major" -gt "$req_major"; then
-    ok=yes
-  else
-    if test "$major" -eq "$req_major"; then
-      if test "$minor" -gt "$req_minor"; then
-        ok=yes
-      else
-        if test "$minor" -eq "$req_minor"; then
-          if test "$micro" -ge "$req_micro"; then
-            ok=yes
-         fi
-        fi
-      fi
-    fi
-  fi
-  if test "$ok" = "yes"; then
-    AC_MSG_RESULT(yes)
-  else
-    AC_MSG_RESULT(no)
-    AC_MSG_WARN([GPGSM must be at least version $NEED_GPGSM_VERSION])
-  fi
-fi
-run_gpgsm_test="$ok"
-AC_ARG_ENABLE(gpgsm-test,
-  AC_HELP_STRING([--disable-gpgsm-test], [disable GPGSM run test]),
-         run_gpgsm_test=$enableval)
-AM_CONDITIONAL(RUN_GPGSM_TESTS, test "$run_gpgsm_test" = "yes")
-
-
-#
-# Check for G13
-#
-NO_OVERRIDE=no
-AC_ARG_WITH(g13,
-           AC_HELP_STRING([--with-g13=PATH],
-                           [use g13 binary at PATH]),
-           G13=$withval, NO_OVERRIDE=yes)
-if test "$NO_OVERRIDE" = "yes" || test "$G13" = "yes"; then
-  G13=
-  NO_OVERRIDE=yes
-  if test "$cross_compiling" != "yes"; then
-    if test "$gpgconf_usable_for_test" = "yes"; then
-      G13="`$GPGCONF --list-components | grep ^g13: | cut -d: -f 3`"
-      if test -z "$G13"; then
-        # Use a hack if gpgconf has no support for g13.
-        G13="`$GPGCONF --list-dirs | grep ^bindir: | cut -d: -f 2`/g13"
-      fi
-    else
-      AC_PATH_PROG(G13, g13)
-    fi
-  fi
-  if test -z "$G13"; then
-    G13="$G13_DEFAULT"
-  fi
-fi
-if test "$G13" = no; then
-  if test "$NO_OVERRIDE" = "yes"; then
-    if test "$cross_compiling" != "yes"; then
-      AC_MSG_WARN([
-***
-*** Could not find g13, install g13 or use --with-g13=PATH to enable it
-***])
-    else
-      AC_MSG_ERROR([
-***
-*** Can not determine path to g13 when cross-compiling, use --with-g13=PATH
-***])
-    fi
-  fi
-else
-  AC_DEFINE_UNQUOTED(G13_PATH, "$G13", [Path to the G13 binary.])
-  AC_DEFINE(ENABLE_G13,1,[Whether G13 support is enabled])
-fi
-AM_CONDITIONAL(HAVE_G13, test "$G13" != "no")
-
-dnl Check for G13 version requirement.
-G13_VERSION=unknown
-ok=maybe
-if test -z "$G13" -o "x$G13" = "xno"; then
-  ok=no
-else
-  if test "$cross_compiling" = "yes"; then
-    AC_MSG_WARN([G13 version can not be checked when cross compiling])
-    ok=no
-  else
-    if test ! -x "$G13"; then
-      AC_MSG_WARN([G13 not executable, version check disabled])
-      ok=no
-    fi
-  fi
-fi
-if test "$ok" = "maybe"; then
-  AC_MSG_CHECKING(for G13 >= $NEED_G13_VERSION)
-  req_major=`echo $NEED_G13_VERSION | \
-             sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\1/'`
-  req_minor=`echo $NEED_G13_VERSION | \
-            sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\2/'`
-  req_micro=`echo $NEED_G13_VERSION | \
-            sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\3/'`
-  G13_VERSION=`$G13 --version | sed -n '1 s/.*\ \([[0-9]].*\)/\1/p'`
-  major=`echo $G13_VERSION | \
-        sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\).*/\1/'`
-  minor=`echo $G13_VERSION | \
-        sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\).*/\2/'`
-  micro=`echo $G13_VERSION | \
-        sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\).*/\3/'`
-
-  if test "$major" -gt "$req_major"; then
-    ok=yes
-  else
-    if test "$major" -eq "$req_major"; then
-      if test "$minor" -gt "$req_minor"; then
-        ok=yes
-      else
-        if test "$minor" -eq "$req_minor"; then
-          if test "$micro" -ge "$req_micro"; then
-            ok=yes
-         fi
-        fi
-      fi
-    fi
-  fi
-  if test "$ok" = "yes"; then
-    AC_MSG_RESULT(yes)
-  else
-    AC_MSG_RESULT(no)
-    AC_MSG_WARN([G13 must be at least version $NEED_G13_VERSION])
-  fi
-fi
-run_g13_test="$ok"
-AC_ARG_ENABLE(g13-test,
-  AC_HELP_STRING([--disable-g13-test], [disable G13 run test]),
-         run_g13_test=$enableval)
-AM_CONDITIONAL(RUN_G13_TESTS, test "$run_g13_test" = "yes")
 
 
 #
@@ -1030,7 +583,7 @@ if test "$have_libassuan" = "no"; then
    die=yes
    AC_MSG_NOTICE([[
 ***
-*** You need libassuan to build this program with GPGSM support.
+*** You need libassuan to build this program.
 *** This library is for example available at
 ***   ftp://ftp.gnupg.org/gcrypt/libassuan/
 *** (at least version $NEED_LIBASSUAN_VERSION (API $NEED_LIBASSUAN_API) is required).
@@ -1067,17 +620,6 @@ echo "
         Revision:        mym4_revision  (mym4_revision_dec)
         Platform:        $host
 
-        Gpgconf at:      $GPGCONF
-        Gpgconf version: $GPGCONF_VERSION, min. $NEED_GPGCONF_VERSION
-        GPG at:          $GPG
-        GPG version:     $GPG_VERSION, min. $NEED_GPG_VERSION
-        Gpgsm at:        $GPGSM
-        Gpgsm version:   $GPGSM_VERSION, min. $NEED_GPGSM_VERSION
-        G13 at:          $G13
-        G13 version:     $G13_VERSION, min. $NEED_G13_VERSION
-
-        Assuan version:  $libassuan_config_version, min. $NEED_LIBASSUAN_VERSION
-
         UI Server:       $uiserver
         FD Passing:      $use_descriptor_passing
         GPGME Pthread:   $have_pthread
index 1f95103..abc014c 100644 (file)
@@ -66,30 +66,6 @@ if HAVE_W32CE_SYSTEM
 system_components += w32-ce.h w32-ce.c
 endif
 
-if HAVE_GPGSM
-gpgsm_components = engine-gpgsm.c
-else
-gpgsm_components =
-endif
-
-if HAVE_ASSUAN
-assuan_components = assuan-support.c engine-assuan.c
-else
-assuan_components =
-endif
-
-if HAVE_GPGCONF
-gpgconf_components = engine-gpgconf.c
-else
-gpgconf_components =
-endif
-
-if HAVE_G13
-g13_components = engine-g13.c
-else
-g13_components =
-endif
-
 if HAVE_UISERVER
 uiserver_components = engine-uiserver.c
 else
@@ -113,11 +89,11 @@ main_sources =                                                             \
        sign.c passphrase.c progress.c                                  \
        key.c keylist.c trust-item.c trustlist.c                        \
        import.c export.c genkey.c delete.c edit.c getauditlog.c        \
-       opassuan.c passwd.c                                             \
+       opassuan.c passwd.c assuan-support.c                            \
        engine.h engine-backend.h engine.c engine-gpg.c status-table.c  \
-       $(gpgsm_components) $(assuan_components) $(gpgconf_components)  \
+       engine-gpgsm.c engine-assuan.c engine-gpgconf.c                 \
        $(uiserver_components)                                          \
-       $(g13_components) vfs-mount.c vfs-create.c                      \
+       engine-g13.c vfs-mount.c vfs-create.c                           \
        gpgconf.c                                                       \
        sema.h priv-io.h $(system_components) sys-util.h dirinfo.c      \
        debug.c debug.h gpgme.c version.c error.c
index 27c0dd7..2e387fa 100644 (file)
@@ -38,6 +38,7 @@ enum
   {
     WANT_HOMEDIR,
     WANT_AGENT_SOCKET,
+    WANT_GPGCONF_NAME,
     WANT_GPG_NAME,
     WANT_GPGSM_NAME,
     WANT_G13_NAME,
@@ -49,6 +50,7 @@ static struct {
   int  valid;         /* Cached information is valid.  */
   char *homedir;
   char *agent_socket;
+  char *gpgconf_name;
   char *gpg_name;
   char *gpgsm_name;
   char *g13_name;
@@ -194,13 +196,14 @@ get_gpgconf_item (int what)
   LOCK (dirinfo_lock);
   if (!dirinfo.valid)
     {
-      const char *pgmname;
+      char *pgmname;
 
       pgmname = _gpgme_get_gpgconf_path ();
       if (pgmname && access (pgmname, F_OK))
         {
           _gpgme_debug (DEBUG_INIT,
                         "gpgme_dinfo: gpgconf='%s' [not installed]\n", pgmname);
+          free (pgmname);
           pgmname = NULL; /* Not available.  */
         }
       else
@@ -212,12 +215,13 @@ get_gpgconf_item (int what)
              GnuPG-1.  */
           pgmname = _gpgme_get_gpg_path ();
           if (pgmname)
-            dirinfo.gpg_name = strdup (pgmname);
+            dirinfo.gpg_name = pgmname;
         }
       else
         {
           read_gpgconf_dirs (pgmname, 0);
           read_gpgconf_dirs (pgmname, 1);
+          dirinfo.gpgconf_name = pgmname;
         }
       /* Even if the reading of the directories failed (e.g. due to an
          too old version gpgconf or no gpgconf at all), we need to
@@ -249,6 +253,7 @@ get_gpgconf_item (int what)
     {
     case WANT_HOMEDIR: result = dirinfo.homedir; break;
     case WANT_AGENT_SOCKET: result = dirinfo.agent_socket; break;
+    case WANT_GPGCONF_NAME: result = dirinfo.gpgconf_name; break;
     case WANT_GPG_NAME:   result = dirinfo.gpg_name; break;
     case WANT_GPGSM_NAME: result = dirinfo.gpgsm_name; break;
     case WANT_G13_NAME:   result = dirinfo.g13_name; break;
@@ -294,14 +299,11 @@ _gpgme_get_default_g13_name (void)
   return get_gpgconf_item (WANT_G13_NAME);
 }
 
-/* Return the default gpgconf file name.  Returns NULL if not known.
-   Because gpgconf is the binary used to retrieved all these default
-   names, this function is merely a simple wrapper around the function
-   used to locate this binary.  */
+/* Return the default gpgconf file name.  Returns NULL if not known.  */
 const char *
 _gpgme_get_default_gpgconf_name (void)
 {
-  return _gpgme_get_gpgconf_path ();
+  return get_gpgconf_item (WANT_GPGCONF_NAME);
 }
 
 /* Return the default UI-server socket name.  Returns NULL if not
index a4c0eb2..a768652 100644 (file)
@@ -128,18 +128,10 @@ struct engine_ops
 
 
 extern struct engine_ops _gpgme_engine_ops_gpg;                /* OpenPGP.  */
-#ifdef ENABLE_GPGSM
 extern struct engine_ops _gpgme_engine_ops_gpgsm;      /* CMS.  */
-#endif
-#ifdef ENABLE_GPGCONF
 extern struct engine_ops _gpgme_engine_ops_gpgconf;    /* gpg-conf.  */
-#endif
-#ifdef ENABLE_ASSUAN
 extern struct engine_ops _gpgme_engine_ops_assuan;     /* Low-level Assuan. */
-#endif
-#ifdef ENABLE_G13
 extern struct engine_ops _gpgme_engine_ops_g13;         /* Crypto VFS. */
-#endif
 #ifdef ENABLE_UISERVER
 extern struct engine_ops _gpgme_engine_ops_uiserver;
 #endif
index b97e0b4..f091015 100644 (file)
@@ -107,7 +107,7 @@ g13_get_version (const char *file_name)
 static const char *
 g13_get_req_version (void)
 {
-  return NEED_G13_VERSION;
+  return "2.1.0";
 }
 
 \f
index 3bc9f66..2f59bb9 100644 (file)
@@ -1,7 +1,7 @@
 /* engine-gpg.c - Gpg Engine.
    Copyright (C) 2000 Werner Koch (dd9jn)
    Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007,
-                 2009, 2010, 2012 g10 Code GmbH
+                 2009, 2010, 2012, 2013 g10 Code GmbH
 
    This file is part of GPGME.
 
@@ -303,7 +303,7 @@ gpg_get_version (const char *file_name)
 static const char *
 gpg_get_req_version (void)
 {
-  return NEED_GPG_VERSION;
+  return "1.4.0";
 }
 
 
index 1d457bb..47cde66 100644 (file)
@@ -68,7 +68,7 @@ gpgconf_get_version (const char *file_name)
 static const char *
 gpgconf_get_req_version (void)
 {
-  return NEED_GPGCONF_VERSION;
+  return "2.0.4";
 }
 
 \f
index cee20e3..24cd34d 100644 (file)
@@ -127,7 +127,7 @@ gpgsm_get_version (const char *file_name)
 static const char *
 gpgsm_get_req_version (void)
 {
-  return NEED_GPGSM_VERSION;
+  return "2.0.4";
 }
 
 \f
index 09f379c..80febea 100644 (file)
@@ -46,26 +46,10 @@ struct engine
 static struct engine_ops *engine_ops[] =
   {
     &_gpgme_engine_ops_gpg,            /* OpenPGP.  */
-#ifdef ENABLE_GPGSM
     &_gpgme_engine_ops_gpgsm,          /* CMS.  */
-#else
-    NULL,
-#endif
-#ifdef ENABLE_GPGCONF
     &_gpgme_engine_ops_gpgconf,                /* gpg-conf.  */
-#else
-    NULL,
-#endif
-#ifdef ENABLE_ASSUAN
     &_gpgme_engine_ops_assuan,         /* Low-Level Assuan.  */
-#else
-    NULL,
-#endif
-#ifdef ENABLE_G13
     &_gpgme_engine_ops_g13,            /* Crypto VFS.  */
-#else
-    NULL,
-#endif
 #ifdef ENABLE_UISERVER
     &_gpgme_engine_ops_uiserver                /* UI-Server.  */
 #else
index fd44507..d4e4e3f 100644 (file)
 #include "util.h"
 #include "sys-util.h"
 
-const char *
-_gpgme_get_gpg_path (void)
-{
-#ifdef GPG_PATH
-  return GPG_PATH;
-#else
-  return NULL;
-#endif
-}
 
-const char *
-_gpgme_get_gpgsm_path (void)
+/* Find an executable program PGM along the envvar PATH.  */
+static char *
+walk_path (const char *pgm)
 {
-#ifdef GPGSM_PATH
-  return GPGSM_PATH;
-#else
+  const char *path, *s;
+  char *fname, *p;
+
+  path = getenv ("PATH");
+  if (!path)
+    path = "/bin:/usr/bin:.";
+
+  fname = malloc (strlen (path) + 1 + strlen (pgm) + 1);
+  if (!fname)
+    return NULL;
+
+  for (;;)
+    {
+      for (s=path, p=fname; *s && *s != ':'; s++, p++)
+        *p = *s;
+      if (*p != '/')
+        *p++ = '/';
+      strcpy (p, pgm);
+      if (!access (fname, X_OK))
+        return fname;
+      if (!*s)
+        break;
+      path = s + 1;
+    }
+
+  free (fname);
   return NULL;
-#endif
 }
 
-const char *
-_gpgme_get_gpgconf_path (void)
+
+/* Return the full file name of the GPG binary.  This function is used
+   if gpgconf was not found and thus it can be assumed that gpg2 is
+   not installed.  This function is only called by get_gpgconf_item
+   and may not be called concurrently.  */
+char *
+_gpgme_get_gpg_path (void)
 {
-#ifdef GPGCONF_PATH
-  return GPGCONF_PATH;
-#else
-  return NULL;
-#endif
+  return walk_path ("gpg");
 }
 
-const char *
-_gpgme_get_g13_path (void)
+
+/* This function is only called by get_gpgconf_item and may not be
+   called concurrently.  */
+char *
+_gpgme_get_gpgconf_path (void)
 {
-#ifdef G13_PATH
-  return G13_PATH;
-#else
-  return NULL;
-#endif
+  return walk_path ("gpgconf");
 }
 
-
 /* See w32-util.c */
 int
 _gpgme_get_conf_int (const char *key, int *value)
index f6506d3..3686f89 100644 (file)
@@ -21,9 +21,7 @@
 #define SYS_UTIL_H
 
 /*-- {posix,w32}-util.c --*/
-const char *_gpgme_get_gpg_path (void);
-const char *_gpgme_get_gpgsm_path (void);
-const char *_gpgme_get_gpgconf_path (void);
-const char *_gpgme_get_g13_path (void);
+char *_gpgme_get_gpg_path (void);
+char *_gpgme_get_gpgconf_path (void);
 
 #endif /* SYS_UTIL_H */
index c432980..57c8b13 100644 (file)
@@ -151,25 +151,13 @@ const char *_gpgme_get_w32spawn_path (void);
 char *_gpgme_w32ce_get_debug_envvar (void);
 #endif /*HAVE_W32CE_SYSTEM*/
 
-/*--  Error codes not yet available in current gpg-error.h.   --*/
-#ifndef GPG_ERR_UNFINISHED
-#define GPG_ERR_UNFINISHED 199
-#endif
-#ifndef GPG_ERR_NOT_OPERATIONAL
-#define GPG_ERR_NOT_OPERATIONAL 176
-#endif
-#ifndef GPG_ERR_MISSING_ISSUER_CERT
-#define GPG_ERR_MISSING_ISSUER_CERT 185
-#endif
 
 \f
-#ifdef ENABLE_ASSUAN
 #include <assuan.h>
 /* System hooks for assuan integration.  */
 extern struct assuan_system_hooks _gpgme_assuan_system_hooks;
 extern struct assuan_malloc_hooks _gpgme_assuan_malloc_hooks;
 int _gpgme_assuan_log_cb (assuan_context_t ctx, void *hook,
                          unsigned int cat, const char *msg);
-#endif
 
 #endif /* UTIL_H */
index 4cee1cb..31a58bb 100644 (file)
@@ -374,7 +374,7 @@ find_program_in_inst_dir (const char *inst_dir, const char *name)
 
   /* If an installation directory has been passed, this overrides a
      location given bu the registry.  The idea here is that we prefer
-     a program installed alongside with gpgme.  We don't want the
+     a program installed alongside with gpgme.  We don't want the
      registry to override this to have a better isolation of an gpgme
      aware applications for other effects.  Note that the "Install
      Directory" registry item has been used for ages in Gpg4win and
@@ -424,72 +424,36 @@ find_program_at_standard_place (const char *name)
 }
 
 
-const char *
+/* Return the full file name of the GPG binary.  This function is used
+   if gpgconf was not found and thus it can be assumed that gpg2 is
+   not installed.  This function is only called by get_gpgconf_item
+   and may not be called concurrently. */
+char *
 _gpgme_get_gpg_path (void)
 {
-  static char *gpg_program;
+  char *gpg;
   const char *inst_dir;
 
   inst_dir = _gpgme_get_inst_dir ();
-  LOCK (get_path_lock);
-  if (!gpg_program)
-    gpg_program = find_program_in_inst_dir (inst_dir, "gpg.exe");
-  if (!gpg_program)
-    gpg_program = find_program_at_standard_place ("GNU\\GnuPG\\gpg.exe");
-  UNLOCK (get_path_lock);
-  return gpg_program;
+  gpg = find_program_in_inst_dir (inst_dir, "gpg.exe");
+  if (!gpg)
+    gpg = find_program_at_standard_place ("GNU\\GnuPG\\gpg.exe");
+  return gpg;
 }
 
-
-const char *
-_gpgme_get_gpgsm_path (void)
-{
-  static char *gpgsm_program;
-  const char *inst_dir;
-
-  inst_dir = _gpgme_get_inst_dir ();
-  LOCK (get_path_lock);
-  if (!gpgsm_program)
-    gpgsm_program = find_program_in_inst_dir (inst_dir, "gpgsm.exe");
-  if (!gpgsm_program)
-    gpgsm_program = find_program_at_standard_place ("GNU\\GnuPG\\gpgsm.exe");
-  UNLOCK (get_path_lock);
-  return gpgsm_program;
-}
-
-
-const char *
+/* This function is only called by get_gpgconf_item and may not be
+   called concurrently.  */
+char *
 _gpgme_get_gpgconf_path (void)
 {
-  static char *gpgconf_program;
-  const char *inst_dir;
-
-  inst_dir = _gpgme_get_inst_dir ();
-  LOCK (get_path_lock);
-  if (!gpgconf_program)
-    gpgconf_program = find_program_in_inst_dir (inst_dir, "gpgconf.exe");
-  if (!gpgconf_program)
-    gpgconf_program
-      = find_program_at_standard_place ("GNU\\GnuPG\\gpgconf.exe");
-  UNLOCK (get_path_lock);
-  return gpgconf_program;
-}
-
-
-const char *
-_gpgme_get_g13_path (void)
-{
-  static char *g13_program;
+  char *gpgconf;
   const char *inst_dir;
 
   inst_dir = _gpgme_get_inst_dir ();
-  LOCK (get_path_lock);
-  if (!g13_program)
-    g13_program = find_program_in_inst_dir (inst_dir, "g13.exe");
-  if (!g13_program)
-    g13_program = find_program_at_standard_place ("GNU\\GnuPG\\g13.exe");
-  UNLOCK (get_path_lock);
-  return g13_program;
+  gpgconf = find_program_in_inst_dir (inst_dir, "gpgconf.exe");
+  if (!gpgconf)
+    gpgconf = find_program_at_standard_place ("GNU\\GnuPG\\gpgconf.exe");
+  return gpgconf;
 }
 
 
index c9000c9..e72bd49 100644 (file)
@@ -19,8 +19,8 @@
 
 ## Process this file with automake to produce Makefile.in
 
-GPG = @GPG@
-GPG_AGENT = @GPG_AGENT@
+GPG = gpg
+GPG_AGENT = gpg-agent
 
 TESTS_ENVIRONMENT = GNUPGHOME=$(abs_builddir) LC_ALL=C GPG_AGENT_INFO=
 
index 9086134..45b3b50 100644 (file)
@@ -1,27 +1,27 @@
 # Copyright (C) 2000 Werner Koch (dd9jn)
 # Copyright (C) 2001 g10 Code GmbH
-# 
+#
 # This file is part of GPGME.
-# 
+#
 # GPGME is free software; you can redistribute it and/or modify it
 # under the terms of the GNU Lesser General Public License as
 # published by the Free Software Foundation; either version 2.1 of the
 # License, or (at your option) any later version.
-# 
+#
 # GPGME is distributed in the hope that it will be useful, but WITHOUT
 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
 # or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General
 # Public License for more details.
-# 
+#
 # You should have received a copy of the GNU Lesser General Public
 # License along with this program; if not, write to the Free Software
 # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
 
 ## Process this file with automake to produce Makefile.in
 
-GPGSM = @GPGSM@
+GPGSM = gpgsm
 
-TESTS_ENVIRONMENT = GNUPGHOME=$(abs_builddir) GPG_AGENT_INFO= 
+TESTS_ENVIRONMENT = GNUPGHOME=$(abs_builddir) GPG_AGENT_INFO=
 
 noinst_HEADERS = t-support.h
 TESTS = t-import t-keylist t-encrypt t-verify t-decrypt t-sign t-export
@@ -41,7 +41,7 @@ noinst_PROGRAMS = $(TESTS) t-genkey cms-keylist cms-decrypt
 key_id = 32100C27173EF6E9C4E9A25D3D69F86D37A4F939
 
 CLEANFILES = pubring.kbx pubring.kbx~ gpgsm.conf trustlist.txt \
-       random_seed S.gpg-agent  
+       random_seed S.gpg-agent
 
 clean-local:
        -gpg-connect-agent KILLAGENT /bye
@@ -51,7 +51,7 @@ all-local: ./pubring.kbx ./gpgsm.conf ./private-keys-v1.d/$(key_id).key ./trustl
 
 export GNUPGHOME := $(abs_builddir)
 
-export GPG_AGENT_INFO := 
+export GPG_AGENT_INFO :=
 
 ./pubring.kbx: $(srcdir)/cert_g10code_test1.der
        $(GPGSM) --import $(srcdir)/cert_g10code_test1.der
index ec2e1e8..43acd3d 100644 (file)
     }                                                          \
   while (0)
 
-\f
-void
-check_engine_info (gpgme_engine_info_t info, gpgme_protocol_t protocol,
-                  const char *file_name, const char *req_version)
-{
-  if (info->protocol != protocol)
-    {
-      fprintf (stderr, "Unexpected protocol %i (expected %i instead)\n",
-              info->protocol, protocol);
-      exit (1);
-    }
-  if (strcmp (info->file_name, file_name))
-    {
-      fprintf (stderr, "Unexpected file name to executable %s (expected %s instead)\n",
-              info->file_name, file_name);
-      exit (1);
-    }
-  if (strcmp (info->req_version, req_version))
-    {
-      fprintf (stderr, "Unexpected required version %s (expected %s instead)\n",
-              info->req_version, req_version);
-      exit (1);
-    }
-}
 
 
 int
@@ -77,18 +53,9 @@ main (int argc, char **argv )
   err = gpgme_get_engine_info (&info);
   fail_if_err (err);
 
-  check_engine_info (info, GPGME_PROTOCOL_OpenPGP, GPG_PATH, NEED_GPG_VERSION);
-
-  info = info->next;
-#ifdef GPGSM_PATH
-  check_engine_info (info, GPGME_PROTOCOL_CMS, GPGSM_PATH, NEED_GPGSM_VERSION);
-#else
-  if (info)
-    {
-      fprintf (stderr, "Unexpected engine info.\n");
-      exit (1);
-    }
-#endif
+  for (; info; info = info->next)
+    fprintf (stdout, "protocol=%d engine='%s' v='%s' (min='%s')\n",
+             info->protocol, info->file_name, info->version, info->req_version);
 
   return 0;
 }