Fixed a bug reading from gpgconf.
[gpgme.git] / configure.ac
index 93ff16c..e824b47 100644 (file)
  
 # (Process this file with autoconf to produce a configure script.)
 AC_PREREQ(2.59)
-min_automake_version="1.9.3"
+min_automake_version="1.10"
 
 # Version number: Remember to change it immediately *after* a release.
-#                 Make sure to run  "svn up" before a "make dist".
-#                 See below for the LT versions.
+#                 Make sure to run  "svn up" and "./autogen.sh --force"
+#                  before a "make dist".  See below for the LT versions.
 #
-# The CVS version is usually the next intended release version with
-# the string "-cvs" appended.  The reason for this is that tests for a
+# The SVN version is usually the next intended release version with
+# the string "-svnNNN" appended.  The reason for this is that tests for a
 # specific feature can already be done under the assumption that the
-# CVS version is the most recent one in a branch.  To disable the CVS
-# version for the real release, just comment out the my_iscvs macro.
-# Note, that we are now using Subversion instead of CVS and append the
-# SVN revision number to the "cvs" suffix.  To make this most useful
-# for snapshot releases please do an "svn up" right before recreating
-# the configure script, so that a proper revision number for all files
-# is available when running a "make distcheck".
-m4_define(my_version, [1.1.5])
-m4_define(my_iscvs, yes)
-AC_INIT([gpgme], my_version[]m4_ifdef([my_iscvs], [-cvs[]m4_translit(
-               [$Revision$],[Ra-z $:])]),
-               [bug-gpgme@gnupg.org])
+# SVN version is the most recent one in a branch.  To disable the SVN
+# version for the real release, set the my_issvn macro to no.
+m4_define(my_version, [1.1.7])
+m4_define(my_issvn, [yes])
+
+m4_define([svn_revision], m4_esyscmd([echo -n $( (svn info 2>/dev/null \
+            || echo 'Revision: 0')|sed -n '/^Revision:/ {s/[^0-9]//gp;q;}')]))
+AC_INIT([gpgme], 
+        [my_version[]m4_if(my_issvn,[yes],[-svn[]svn_revision])],
+        [bug-gpgme@gnupg.org])
+
 
 # LT Version numbers, remember to change them just *before* a release.
 #   (Code changed:                     REVISION++)
@@ -59,6 +58,7 @@ GPGME_CONFIG_API_VERSION=1
 ##############################################
 
 
+BUILD_REVISION=svn_revision
 PACKAGE=$PACKAGE_NAME
 VERSION=$PACKAGE_VERSION
 
@@ -83,6 +83,7 @@ AH_VERBATIM([_REENTRANT],
 #endif])
 
 AC_PROG_CC
+AC_PROG_CXX
 
 AC_SUBST(LIBGPGME_LT_CURRENT)
 AC_SUBST(LIBGPGME_LT_AGE)
@@ -114,9 +115,12 @@ AM_CONDITIONAL(HAVE_LD_VERSION_SCRIPT, test "$have_ld_version_script" = "yes")
 
 GPG_DEFAULT=no
 GPGSM_DEFAULT=no
+GPGCONF_DEFAULT=no
 component_system=None
 have_dosish_system=no
 have_w32_system=no
+build_w32_glib=no
+build_w32_qt=no
 case "${host}" in
     *-mingw32*)
         # special stuff for Windoze NT
@@ -124,7 +128,25 @@ case "${host}" in
         have_w32_system=yes
         GPG_DEFAULT='c:\\gnupg\\gpg.exe'
        GPGSM_DEFAULT='c:\\gnupg\\gpgsm.exe'
+        GPGCONF_DEFAULT='c:\\gnupg\\gpgconf.exe'
         #component_system='COM+'
+
+       AM_PATH_GLIB_2_0
+       AC_ARG_ENABLE(w32-glib,
+           AC_HELP_STRING([--enable-w32-glib], [build GPGME Glib for W32]),
+                          build_w32_glib=$enableval)
+
+       # Check disabled, because the qt-dev packages in gpg4win do
+       # not provide any support for cross compilation.
+       # PKG_CHECK_MODULES(QT4_CORE, QtCore)
+
+       # Use it like this:
+       # ./configure --enable-w32-qt QT4_CORE_CFLAGS="..." QT4_CORE_LIBS="..."
+       AC_SUBST(QT4_CORE_CFLAGS)
+       AC_SUBST(QT4_CORE_LIBS)
+       AC_ARG_ENABLE(w32-qt,
+           AC_HELP_STRING([--enable-w32-qt], [build GPGME Qt for W32]),
+                          build_w32_qt=$enableval)
         ;;
     *)
        AC_CHECK_PTH(1.2.0,,,no,have_pth=yes)
@@ -139,6 +161,7 @@ case "${host}" in
        # XXX: Probably use exec-prefix here?
 #      GPG_DEFAULT='/usr/bin/gpg'
 #      GPGSM_DEFAULT='/usr/bin/gpgsm'
+#      GPGCONF_DEFAULT='/usr/bin/gpgconf'
        ;;
 esac
 
@@ -154,13 +177,8 @@ if test "$have_w32_system" = yes; then
    AC_DEFINE(HAVE_W32_SYSTEM,1, [Defined if we run on a W32 API based system])
 fi
 AM_CONDITIONAL(HAVE_W32_SYSTEM, test "$have_w32_system" = yes)
-
-build_w32_glib=no
-AM_PATH_GLIB_2_0
-AC_ARG_ENABLE(w32-glib,
-           AC_HELP_STRING([--enable-w32-glib], [build GPGME Glib for W32]),
-           build_w32_glib=$withval)
 AM_CONDITIONAL(BUILD_W32_GLIB, test "$build_w32_glib" = yes)
+AM_CONDITIONAL(BUILD_W32_QT, test "$build_w32_qt" = yes)
 
 AM_CONDITIONAL(HAVE_PTH, test "$have_pth" = "yes")
 AM_CONDITIONAL(HAVE_PTHREAD, test "$have_pthread" = "yes")
@@ -247,8 +265,10 @@ AC_DEFINE(GPG_ERR_SOURCE_DEFAULT, GPG_ERR_SOURCE_GPGME,
 # Checks for system services
 NEED_GPG_VERSION_DEFAULT=1.3.0
 NEED_GPGSM_VERSION_DEFAULT=1.9.6
+NEED_GPGCONF_VERSION_DEFAULT=2.0.4
 NEED_GPG_VERSION="$NEED_GPG_VERSION_DEFAULT"
 NEED_GPGSM_VERSION="$NEED_GPGSM_VERSION_DEFAULT"
+NEED_GPGCONF_VERSION="$NEED_GPGCONF_VERSION_DEFAULT"
 AC_ARG_WITH(gpg-version,
            AC_HELP_STRING([--with-gpg-version=VER], [require GnuPG version VER]),
            NEED_GPG_VERSION=$withval)
@@ -267,11 +287,22 @@ 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_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_GPGCONF_VERSION, "$NEED_GPGCONF_VERSION",
+                                        [Min. needed GPGCONF version.])
 
 
 NO_OVERRIDE=no
@@ -463,6 +494,109 @@ AC_ARG_ENABLE(gpgsm-test,
 AM_CONDITIONAL(RUN_GPGSM_TESTS, test "$run_gpgsm_test" = "yes")
 
 
+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)
+  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")
+
+# Only build if supported.
+AM_CONDITIONAL(BUILD_GPGCONF, test "$GPGCONF" != "no")
+if test "$GPGCONF" != "no"; then
+  AC_DEFINE(HAVE_GPGCONF, 1,
+            [Defined if we are building with gpgconf support.])
+fi
+
+
 # FIXME: Only build if supported.
 AM_CONDITIONAL(BUILD_ASSUAN, test "$GPGSM" != "no")
 if test "$GPGSM" != "no"; then
@@ -562,10 +696,6 @@ AM_CONDITIONAL(BUILD_COMPLUS, test "$component_system" = "COM+")
 GNUPG_FIX_HDR_VERSION(gpgme/gpgme.h, GPGME_VERSION)
 
 # Generate values for the DLL version info
-changequote(,)dnl 
-BUILD_REVISION="`echo '$Revision$' | sed 's/[^0-9]//g'`"
-changequote([,])dnl
-test -z "$BUILD_REVISION" && BUILD_REVISION="0"
 if test "$have_w32_system" = yes; then
     BUILD_TIMESTAMP=`date --iso-8601=minutes`
     changequote(,)dnl 
@@ -624,12 +754,15 @@ AC_OUTPUT
 echo "
        GPGME v${VERSION} has been configured as follows:
 
-       GnuPG path:    $GPG
-        GnuPG version: $GPG_VERSION, min. $NEED_GPG_VERSION
+       GnuPG path:      $GPG
+        GnuPG version:   $GPG_VERSION, min. $NEED_GPG_VERSION
+
+       GpgSM path:      $GPGSM
+        GpgSM version:   $GPGSM_VERSION, min. $NEED_GPGSM_VERSION
 
-       GpgSM path:    $GPGSM
-        GpgSM version: $GPGSM_VERSION, min. $NEED_GPGSM_VERSION
+       GpgConf path:    $GPGCONF
+        GpgConf version: $GPGCONF_VERSION, min. $NEED_GPGCONF_VERSION
 
-       GPGME Pthread: $have_pthread
-       GPGME Pth:     $have_pth
+       GPGME Pthread:   $have_pthread
+       GPGME Pth:       $have_pth
 "