2007-07-10 Marcus Brinkmann <marcus@g10code.de>
[gpgme.git] / configure.ac
index 68de390..93ff16c 100644 (file)
@@ -1,6 +1,6 @@
 # configure.ac for GPGME
 # Copyright (C) 2000 Werner Koch (dd9jn)
-# Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006 g10 Code GmbH
+# Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007 g10 Code GmbH
 # 
 # This file is part of GPGME.
 # 
@@ -36,8 +36,8 @@ min_automake_version="1.9.3"
 # 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.1])
-#m4_define(my_iscvs, yes)
+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])
@@ -52,13 +52,10 @@ LIBGPGME_LT_CURRENT=17
 # Subtract 2 from this value if you want to make the LFS transition an
 # ABI break.  [Note to self: Remove this comment with the next regular break.]
 LIBGPGME_LT_AGE=6
-LIBGPGME_LT_REVISION=0
+LIBGPGME_LT_REVISION=4
 
 # If the API is changed in an incompatible way: increment the next counter.
 GPGME_CONFIG_API_VERSION=1
-
-NEED_GPG_VERSION=1.2.2
-NEED_GPGSM_VERSION=1.9.6
 ##############################################
 
 
@@ -90,10 +87,6 @@ AC_PROG_CC
 AC_SUBST(LIBGPGME_LT_CURRENT)
 AC_SUBST(LIBGPGME_LT_AGE)
 AC_SUBST(LIBGPGME_LT_REVISION)
-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_SUBST(PACKAGE)
 AC_SUBST(VERSION)
@@ -130,8 +123,7 @@ case "${host}" in
        have_dosish_system=yes
         have_w32_system=yes
         GPG_DEFAULT='c:\\gnupg\\gpg.exe'
-       # XXX Assuan is not supported in this configuration.
-       #GPGSM_DEFAULT='c:\\gnupg\\gpgsm.exe'
+       GPGSM_DEFAULT='c:\\gnupg\\gpgsm.exe'
         #component_system='COM+'
         ;;
     *)
@@ -192,12 +184,16 @@ if test "$GCC" = yes; then
     fi
 fi
 
+# Network library fun.
+AC_CHECK_FUNC(gethostbyname, , AC_CHECK_LIB(nsl, gethostbyname,
+       [NETLIBS="-lnsl $NETLIBS"]))
+AC_CHECK_FUNC(setsockopt, , AC_CHECK_LIB(socket, setsockopt,
+       [NETLIBS="-lsocket $NETLIBS"]))
+AC_SUBST(NETLIBS)
 
 # Checks for library functions.
 AC_FUNC_FSEEKO
 
-AC_CHECK_FUNCS(stpcpy)
-
 AC_REPLACE_FUNCS(vasprintf)
 if test "$ac_cv_func_vasprintf" != yes; then
   GNUPG_CHECK_VA_COPY
@@ -242,13 +238,42 @@ if test "$ac_cv_func_timegm" != yes; then
 fi
 
 # Checking for libgpg-error.
-AM_PATH_GPG_ERROR(0.5,, AC_MSG_ERROR([libgpg-error was not found]))
+AM_PATH_GPG_ERROR(1.4,, AC_MSG_ERROR([libgpg-error was not found]))
 AC_DEFINE(GPG_ERR_SOURCE_DEFAULT, GPG_ERR_SOURCE_GPGME,
           [The default error source for GPGME.])
 
 
 
 # Checks for system services
+NEED_GPG_VERSION_DEFAULT=1.3.0
+NEED_GPGSM_VERSION_DEFAULT=1.9.6
+NEED_GPG_VERSION="$NEED_GPG_VERSION_DEFAULT"
+NEED_GPGSM_VERSION="$NEED_GPGSM_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_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.])
+
+
 NO_OVERRIDE=no
 AC_ARG_WITH(gpg,
            AC_HELP_STRING([--with-gpg=PATH], [use GnuPG binary at PATH]),
@@ -298,21 +323,20 @@ else
   fi
 fi
 if test "$ok" = "maybe"; then
-  AC_MSG_CHECKING(for GnuPG >= $NEED_GPG_VERSION)
+  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 | grep ^gpg`
-  major=`echo $gpg_version | \
-        sed 's/^gpg (GnuPG) \([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\).*/\1/'`
-  minor=`echo $gpg_version | \
-        sed 's/^gpg (GnuPG) \([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\).*/\2/'`
-  micro=`echo $gpg_version | \
-        sed 's/^gpg (GnuPG) \([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\).*/\3/'`
-  GPG_VERSION=`echo $gpg_version | sed 's/^gpg (GnuPG) //'`
+  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
@@ -333,10 +357,14 @@ if test "$ok" = "maybe"; then
     AC_MSG_RESULT(yes)
   else
     AC_MSG_RESULT(no)
-    AC_MSG_WARN([GnuPG must be at least version $NEED_GPG_VERSION])
+    AC_MSG_WARN([GPG must be at least version $NEED_GPG_VERSION])
   fi
 fi
-AM_CONDITIONAL(RUN_GPG_TESTS, test "$ok" = "yes")
+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)
 
 NO_OVERRIDE=no
@@ -398,14 +426,13 @@ if test "$ok" = "maybe"; then
             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 | grep ^gpgsm`
-  major=`echo $gpgsm_version | \
-        sed 's/^gpgsm (GnuPG) \([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\).*/\1/'`
-  minor=`echo $gpgsm_version | \
-        sed 's/^gpgsm (GnuPG) \([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\).*/\2/'`
-  micro=`echo $gpgsm_version | \
-        sed 's/^gpgsm (GnuPG) \([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\).*/\3/'`
-  GPGSM_VERSION=`echo $gpgsm_version | sed 's/^gpgsm (GnuPG) //'`
+  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
@@ -429,21 +456,27 @@ if test "$ok" = "maybe"; then
     AC_MSG_WARN([GPGSM must be at least version $NEED_GPGSM_VERSION])
   fi
 fi
-AM_CONDITIONAL(RUN_GPGSM_TESTS, test "$ok" = "yes")
+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")
+
 
 # FIXME: Only build if supported.
 AM_CONDITIONAL(BUILD_ASSUAN, test "$GPGSM" != "no")
+if test "$GPGSM" != "no"; then
+  AC_DEFINE(HAVE_ASSUAN_H, 1,
+            [Defined if we are building with assuan support.])
+fi
 
-
-# The assuan code uses funopen but it will also build without it.  So
-# test for it.  Frankly, this is not required in gpgme, but thats the
-# way we handle it in libassuan.
+# Check for funopen
 AC_CHECK_FUNCS(funopen)
 if test $ac_cv_func_funopen != yes; then
     # No funopen but we can implement that in terms of fopencookie.
     AC_CHECK_FUNCS(fopencookie)
     if test $ac_cv_func_fopencookie = yes; then
-        AC_LIBOBJ([funopen])
+        AC_REPLACE_FUNCS(funopen)
     else
         AC_MSG_WARN([
 ***
@@ -456,10 +489,70 @@ fi
 AC_REPLACE_FUNCS(isascii)
 AC_REPLACE_FUNCS(putc_unlocked)
 AC_REPLACE_FUNCS(memrchr)
+AC_REPLACE_FUNCS(stpcpy)
+# Check for unistd.h for setenv replacement function.
+AC_CHECK_HEADERS(unistd.h)
+AC_REPLACE_FUNCS(setenv)
 
 # More assuan checks.
 AC_CHECK_HEADERS([sys/uio.h])
 
+# Assuan check for descriptor passing.
+AC_CHECK_MEMBER(struct cmsghdr.cmsg_len,
+                [supports_descriptor_passing=yes],
+                [supports_descriptor_passing=no
+                 AC_MSG_WARN([
+***
+*** Data structure for sending ancillary data missing.
+*** Descriptor passing won't work.
+***])],[
+#include <stdlib.h>
+#include <stddef.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <sys/un.h>
+#if HAVE_SYS_UIO_H
+#include <sys/uio.h>
+#endif
+#include <unistd.h>
+       ])
+
+AC_ARG_ENABLE(fd-passing,
+  AC_HELP_STRING([--enable-fd-passing], [use FD passing if supported]),
+  use_descriptor_passing=$enableval)
+
+if test "$supports_descriptor_passing" != "yes"; then
+  use_descriptor_passing=no
+fi
+
+if test "$use_descriptor_passing" = "yes"; then
+AC_DEFINE(USE_DESCRIPTOR_PASSING,1,
+          [Defined if descriptor passing is enabled and supported])
+fi
+
+AM_CONDITIONAL(USE_DESCRIPTOR_PASSING, test "$use_descriptor_passing" = "yes")
+
+# Assuan check for the getsockopt SO_PEERCRED
+AC_MSG_CHECKING(for SO_PEERCRED)
+AC_CACHE_VAL(assuan_cv_sys_so_peercred,
+      [AC_TRY_COMPILE([#include <sys/socket.h>], 
+         [struct ucred cr; 
+          int cl = sizeof cr;
+          getsockopt (1, SOL_SOCKET, SO_PEERCRED, &cr, &cl);],
+          assuan_cv_sys_so_peercred=yes,
+          assuan_cv_sys_so_peercred=no)
+       ])
+AC_MSG_RESULT($assuan_cv_sys_so_peercred) 
+if test $assuan_cv_sys_so_peercred = yes; then
+  AC_DEFINE(HAVE_SO_PEERCRED, 1,
+            [Defined if SO_PEERCRED is supported (Linux specific)])
+fi
+
+if test "$have_w32_system" = yes; then
+   NETLIBS="-lws2_32 $NETLIBS"
+fi
+
 # End of assuan checks.
 
 AM_CONDITIONAL(BUILD_COMPLUS, test "$component_system" = "COM+")
@@ -487,23 +580,11 @@ AC_SUBST(BUILD_FILEVERSION)
 # Add a few constants to help porting to W32
 AH_VERBATIM([SEPCONSTANTS],
 [
-/* Separators as used in file names and $PATH. Please note that the
-   string version must not contain more than one character because
-   the using code assumes strlen()==1 */
+/* Separators as used in $PATH.  */
 #ifdef HAVE_DOSISH_SYSTEM
-#define DIRSEP_C '\\\\'
-#define EXTSEP_C '.'
-#define DIRSEP_S "\\\\"
-#define EXTSEP_S "."
 #define PATHSEP_C ';'
-#define PATHSEP_S ";"
 #else
-#define DIRSEP_C '/'
-#define EXTSEP_C '.'
-#define DIRSEP_S "/"
-#define EXTSEP_S "."
 #define PATHSEP_C ':'
-#define PATHSEP_S ":"
 #endif
 ])
 
@@ -537,6 +618,7 @@ AC_CONFIG_FILES(Makefile assuan/Makefile gpgme/Makefile
                doc/Makefile complus/Makefile
                 gpgme/versioninfo.rc)
 AC_CONFIG_FILES(gpgme/gpgme-config, chmod +x gpgme/gpgme-config)
+AC_CONFIG_FILES([lang/Makefile lang/cl/Makefile lang/cl/gpgme.asd])
 AC_OUTPUT
 
 echo "