2001-11-18 Marcus Brinkmann <marcus@g10code.de>
authorMarcus Brinkmann <mb@g10code.com>
Sun, 18 Nov 2001 03:31:31 +0000 (03:31 +0000)
committerMarcus Brinkmann <mb@g10code.com>
Sun, 18 Nov 2001 03:31:31 +0000 (03:31 +0000)
* configure.in: Renamed to ...
* configure.ac: ... this.  Update to autoconf 2.52.  Lots of small
changes in the transition.  Support --with-gpg=PATH and
--with-gpgsm=PATH options.  Check if test suites can be run.
* acconfig.h: Add GPGSM_PATH.
* Makefile.am: New variable `tests', set to `tests' if
RUN_GPG_TESTS.
(SUBDIRS): Replace string `tests' with variable `tests'.

gpgme/
2001-11-18  Marcus Brinkmann  <marcus@g10code.de>

* configure.in: Renamed to ...
* configure.ac: ... this.  Update to autoconf 2.52.  Lots of small
changes in the transition.  Support --with-gpg=PATH and
--with-gpgsm=PATH options.  Check if test suites can be run.
* acconfig.h: Add GPGSM_PATH.
* Makefile.am: New variable `tests', set to `tests' if
RUN_GPG_TESTS.
(SUBDIRS): Replace string `tests' with variable `tests'.

ChangeLog
Makefile.am
NEWS
acconfig.h
configure.ac [moved from configure.in with 53% similarity]
gpgme/ChangeLog
gpgme/posix-util.c
gpgme/rungpg.c
gpgme/util.h
gpgme/version.c
gpgme/w32-util.c

index fac139c..766731f 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,14 @@
+2001-11-18  Marcus Brinkmann  <marcus@g10code.de>
+
+       * configure.in: Renamed to ...
+       * configure.ac: ... this.  Update to autoconf 2.52.  Lots of small
+       changes in the transition.  Support --with-gpg=PATH and
+       --with-gpgsm=PATH options.  Check if test suites can be run.
+       * acconfig.h: Add GPGSM_PATH.
+       * Makefile.am: New variable `tests', set to `tests' if
+       RUN_GPG_TESTS.
+       (SUBDIRS): Replace string `tests' with variable `tests'.
+
 2001-10-22  Marcus Brinkmann  <marcus@g10code.de>
 
        * autogen.sh: Invoke automake with `-a' (add missing files).
index df84686..efe8c9c 100644 (file)
@@ -26,13 +26,17 @@ bonobo = bonobo
 else
 bonobo = 
 endif
+
 if BUILD_COMPLUS
 complus = complus
 else
 complus = 
 endif
 
+if RUN_GPG_TESTS
+tests = tests
+else
+tests = 
+endif
 
-SUBDIRS = jnlib gpgme tests doc ${bonobo} ${complus}
-
-
+SUBDIRS = jnlib gpgme ${tests} doc ${bonobo} ${complus}
diff --git a/NEWS b/NEWS
index 90b6e03..237fbb9 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -1,4 +1,7 @@
 
+ * GPGME can be compiled without GnuPG being installed (--with-gpg=PATH),
+   and even cross-compiled.
+
  * New operation gpgme_op_decrypt_verify to decrypt and verify
    signatures simultaneously.
 
index 1a7f63c..2eb2460 100644 (file)
 /* Some systems have a mkdir that takes a single argument. */
 #undef MKDIR_TAKES_ONE_ARG
 
-/* path to the gpg binary */
+/* Path to the GnuPG binary.  */
 #undef GPG_PATH
-/* min. needed GPG version */
+/* Min. needed GnuPG version. */
 #undef NEED_GPG_VERSION
 
-/* stuff needed by lnlib/ */
+/* Path to the GpgSM binary.  */
+#undef GPGSM_PATH
+
+/* Stuff needed by jnlib.  */
 #undef HAVE_BYTE_TYPEDEF
 #undef HAVE_USHORT_TYPEDEF
 #undef HAVE_ULONG_TYPEDEF
similarity index 53%
rename from configure.in
rename to configure.ac
index 8e83033..9ef4d44 100644 (file)
 # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
  
 # (Process this file with autoconf to produce a configure script.)
-AC_REVISION($Revision$)dnl
 
-AC_INIT(gpgme/gpgme.h)
+AC_INIT(gpgme, 0.2.3a, [gnupg-devel@gnupg.org])
+AC_PREREQ(2.52)
+AC_REVISION($Revision$)
+
+AC_CONFIG_SRCDIR(gpgme/gpgme.h)
 AM_CONFIG_HEADER(config.h)
+AM_INIT_AUTOMAKE(gpgme, 0.2.3a)
 AM_MAINTAINER_MODE
-# Version numbers (Remember to change them just before a release)
+
+AC_PROG_CC
+
+# Version numbers (Remember to change them just before a release.)
 #   (Interfaces removed:    CURRENT++, AGE=0, REVISION=0)
 #   (Interfaces added:      CURRENT++, AGE++, REVISION=0)
 #   (No interfaces changed:                   REVISION++)
-AM_INIT_AUTOMAKE(gpgme,0.2.3a)
 # XXXX new functions
 LIBGPGME_LT_CURRENT=4
 LIBGPGME_LT_AGE=4
@@ -41,21 +47,12 @@ AC_SUBST(LIBGPGME_LT_AGE)
 AC_SUBST(LIBGPGME_LT_REVISION)
 AC_DEFINE_UNQUOTED(NEED_GPG_VERSION, "$NEED_GPG_VERSION")
 
+dnl Don't default to build static libs.
+dnl AC_DISABLE_STATIC
+AC_PROG_LIBTOOL
 
-dnl
-dnl Checks for programs
-dnl
-AC_ARG_PROGRAM
-
-dnl Don't default to build static libs
-dnl AM_DISABLE_STATIC
-AM_PROG_LIBTOOL
-
-if test "$GCC" = yes; then
-    CFLAGS="$CFLAGS -Wall -Wcast-align -Wshadow -Wstrict-prototypes"
-fi
-
-GPG=
+GPG_DEFAULT=no
+GPGSM_DEFAULT=no
 component_system=None
 case "${target}" in
     *-*-mingw32* | i?86-emx-os2 | i?86-*-os2*emx | i?86-*-msdosdjgpp* )
@@ -64,85 +61,119 @@ case "${target}" in
         # DOS with the DJGPP environment
         AC_DEFINE(HAVE_DRIVE_LETTERS)
         AC_DEFINE(HAVE_DOSISH_SYSTEM)
-        GPG='c:\\gnupg\\gpg.exe'
+        GPG_DEFAULT='c:\\gnupg\\gpg.exe'
+        GPGSM_DEFAULT='c:\\gnupg\\gpgsm.exe'
         #component_system='COM+'
         ;;
     *)
-       ;;
+dnl    # XXX: Probably use exec-prefix here?
+dnl    GPG_DEFAULT='/usr/bin/gpg'
+dnl    GPGSM_DEFAULT='/usr/bin/gpgsm'
+       ;;
 esac
 
-
-
-
 dnl
-dnl Checks for libraries
+dnl Checks for libraries.
 dnl
 
+dnl FIXME: check whether Bonobo is installed
+
 dnl
-dnl Checks for header files
+dnl Checks for header files.
 dnl
 
-
-
 dnl
-dnl Checks for typedefs and structures
+dnl Checks for typedefs and structures.
 dnl
 GNUPG_CHECK_TYPEDEF(byte, HAVE_BYTE_TYPEDEF)
 GNUPG_CHECK_TYPEDEF(ushort, HAVE_USHORT_TYPEDEF)
 GNUPG_CHECK_TYPEDEF(ulong, HAVE_ULONG_TYPEDEF)
 GNUPG_CHECK_TYPEDEF(u16, HAVE_U16_TYPEDEF)
 GNUPG_CHECK_TYPEDEF(u32, HAVE_U32_TYPEDEF)
+
 # We should not use them in this software;
 # However jnlib/types.h needs them - so we take the easy way.
-AC_CHECK_SIZEOF(unsigned short, 2)
-AC_CHECK_SIZEOF(unsigned int, 4)
-AC_CHECK_SIZEOF(unsigned long, 4)
-if test "$ac_cv_sizeof_unsigned_short" = "0" \
-   || test "$ac_cv_sizeof_unsigned_int" = "0" \
-   || test "$ac_cv_sizeof_unsigned_long" = "0"; then
-    AC_MSG_WARN([Hmmm, something is wrong with the sizes - using defaults]);
-fi
-
-
+AC_CHECK_SIZEOF(unsigned short)
+AC_CHECK_SIZEOF(unsigned int)
+AC_CHECK_SIZEOF(unsigned long)
 
 dnl
-dnl Checks for compiler features
+dnl Checks for compiler features.
 dnl
 
+if test "$GCC" = yes; then
+    CFLAGS="$CFLAGS -Wall -Wcast-align -Wshadow -Wstrict-prototypes"
+fi
+
 dnl
-dnl Checks for library functions
+dnl Checks for library functions.
 dnl
 dnl These are needed by libjnlib
 AC_CHECK_FUNCS(memicmp stpcpy strlwr strtoul memmove stricmp)
 
-
 dnl
 dnl Checks for system services
 dnl
 
-if test -z "$GPG"; then
-  AC_PATH_PROG(GPG, 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
+    AC_PATH_PROG(GPG, gpg)
+  fi
   if test -z "$GPG"; then
-       AC_MSG_ERROR([[
-***
-*** GnuPG not found. Please install GnuPG first. 
-*** See   http://www.gnupg.org/download.html
-***
-  ]])
+    GPG="$GPG_DEFAULT"
   fi
 fi
-AC_DEFINE_UNQUOTED(GPG_PATH, "$GPG")
-
-
-dnl
-dnl FIXME: check whether Bonobo is installed
-dnl 
-
+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")
+fi
+AM_CONDITIONAL(RUN_GPG_TESTS,
+  [test "$cross_compiling" != "yes" && test -n "$GPG" && test -r "$GPG"])
+
+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
+    AC_PATH_PROG(GPGSM, gpgsm)
+  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")
+fi
+AM_CONDITIONAL(RUN_GPGSM_TESTS,
+  [test "$cross_compiling" != "yes" && test -n "$GPGSM" && test -r "$GPGSM"])
 
 dnl
 dnl Create config files 
 dnl
-dnl
 
 AM_CONDITIONAL(BUILD_COMPLUS, test "$component_system" = "COM+")
 AM_CONDITIONAL(BUILD_BONOBO,  test "$component_system" = "Bonobo")
@@ -157,24 +188,16 @@ GPGME_CFLAGS=""
 AC_SUBST(GPGME_LIBS)
 AC_SUBST(GPGME_CFLAGS)
 
-AC_OUTPUT_COMMANDS([
-chmod +x gpgme/gpgme-config
-])
-
-AC_OUTPUT([
-Makefile
-jnlib/Makefile
-gpgme/Makefile
-gpgme/gpgme-config
-tests/Makefile
-doc/Makefile
-bonobo/Makefile
-complus/Makefile
-])
+AC_CONFIG_FILES(Makefile jnlib/Makefile gpgme/Makefile tests/Makefile
+               doc/Makefile bonobo/Makefile complus/Makefile)
+AC_CONFIG_FILES(gpgme/gpgme-config, chmod +x gpgme/gpgme-config)
+AC_OUTPUT
 
 echo "
        GPGME v${VERSION} has been configured as follows:
 
-        GPG version: min. $NEED_GPG_VERSION
-       GPG path:    $GPG
+        GnuPG version: min. $NEED_GPG_VERSION
+       GnuPG path:    $GPG
+
+       GpgSM path:    $GPGSM
 "
index d7cf910..8367695 100644 (file)
@@ -1,3 +1,18 @@
+2001-11-18  Marcus Brinkmann  <marcus@g10code.de>
+
+       * version.c (get_engine_info): If GnuPG is not available, return
+       an error message.
+       * posix-util.c (_gpgme_get_gpg_path): Allow GPG_PATH to be
+       undefined.
+       (_gpgme_get_gpgsm_path): New function.
+       * w32-util.c (find_program_in_registry): New static function.
+       (_gpgme_get_gpg_path): Allow GPG_PATH to be undefined.  Rework
+       to use find_program_in_registry.
+       (_gpgme_get_gpgsm_path): New function.
+       (util.h): Prototype _gpgme_get_gpgsm_path).
+       * rungpg.c (_gpgme_gpg_spawn): Verify that _gpgme_get_gpg_path()
+       returns non-null.
+
 2001-11-16  Marcus Brinkmann  <marcus@g10code.de>
 
        * decrypt-verify.c: New file.
index a0c755e..ef59076 100644 (file)
 
 #include "util.h"
 
-
 const char *
 _gpgme_get_gpg_path (void)
 {
-    /* #warning Forced to take GPG development version
-     *  return "/home/wk/work/gnupg-stable/g10/gpg";
-     */
-
-    return GPG_PATH;
+#ifdef GPG_PATH
+  return GPG_PATH;
+#else
+  return NULL;
+#endif
 }
 
+const char *
+_gpgme_get_gpgsm_path (void)
+{
+#ifdef GPGSM_PATH
+  return GPGSM_PATH;
+#else
+  return NULL;
+#endif
+}
 
 #endif /*!HAVE_DOSISH_SYSTEM*/
-
-
-
-
-
index 60cfa22..7a91444 100644 (file)
@@ -786,8 +786,11 @@ _gpgme_gpg_spawn( GpgObject gpg, void *opaque )
     int pid;
     struct spawn_fd_item_s *fd_child_list, *fd_parent_list;
 
-    if ( !gpg )
-        return mk_error (Invalid_Value);
+    if (!gpg)
+      return mk_error (Invalid_Value);
+
+    if (! _gpgme_get_gpg_path ())
+      return mk_error (Invalid_Engine);
 
     /* Kludge, so that we don't need to check the return code of
      * all the gpgme_gpg_add_arg().  we bail out here instead */
index 437276e..029a846 100644 (file)
@@ -123,8 +123,7 @@ char *stpcpy (char *a, const char *b);
 
 /*-- {posix,w32}-util.c --*/
 const char *_gpgme_get_gpg_path (void);
-
-
+const char *_gpgme_get_gpgsm_path (void);
 
 #endif /* UTIL_H */
 
index 5c486f2..565c412 100644 (file)
@@ -228,6 +228,13 @@ get_engine_info (void)
         return engine_info;
 
     path = _gpgme_get_gpg_path ();
+    if (!path)
+      {
+       engine_info = "<GnupgInfo>\n"
+         "  <error>Not supported</error>\n"
+         "</GnupgInfo>\n";
+       goto leave;
+      }
     err = gpgme_new (&c);
     if (err) 
         goto leave;
@@ -299,9 +306,3 @@ get_engine_info (void)
     gpgme_release ( c );
     return engine_info;
 }
-
-
-
-
-
-
index 693a9c7..2cbf6c2 100644 (file)
@@ -41,7 +41,7 @@
 /****************
  * Return a string from the Win32 Registry or NULL in case of
  * error.  Caller must release the return value.   A NULL for root
- * is an alias fro HKEY_CURRENT_USER
+ * is an alias for HKEY_CURRENT_USER.
  */
 static char *
 read_w32_registry_string ( const char *root,
@@ -88,38 +88,53 @@ read_w32_registry_string ( const char *root,
     return result;
 }
 
+static const char *
+find_program_in_registry (const char *name)
+{
+  char *program = NULL;
+    
+  program = read_w32_registry_string (NULL, "Software\\GNU\\GnuPG", name);
+  if (program)
+    {
+      int i;
+
+      DEBUG1 ("found %s in registry: `%s'", name, program );
+      for (i = 0; program[i]; i++)
+       {
+         if (program[i] == '/')
+           program[i] = '\\';
+       }
+    }
+  return program;
+}
 
 const char *
 _gpgme_get_gpg_path (void)
 {
-    static char *gpg_program = NULL;
+  static char *gpg_program = NULL;
     
-    if (!gpg_program) {
-        gpg_program = read_w32_registry_string ( NULL,
-                                  "Software\\GNU\\GnuPG", "gpgProgram" );
-        if (gpg_program) {
-            int i;
-            
-            DEBUG1 ("found gpgProgram in registry: `%s'", gpg_program );
-            for (i=0; gpg_program[i]; i++) {
-                if (gpg_program[i] == '/')
-                    gpg_program[i] = '\\';
-            }
-        }
-        else {
-            gpg_program = GPG_PATH;
-        }
-    }
-    
-    return gpg_program;
+  if (!gpg_program)
+    gpg_program = find_program_in_registry ("gpgProgram");
+#ifdef GPG_PATH
+  if (!gpg_program)
+    gpg_program = GPG_PATH;
+#endif
+  return gpg_program;
 }
 
-
+const char *
+_gpgme_get_gpgsm_path (void)
+{
+  static char *gpgsm_program = NULL;
+    
+  if (!gpgsm_program)
+    gpgsm_program = find_program_in_registry ("gpgsmProgram");
+#ifdef GPGSM_PATH
+  if (!gpgsm_program)
+    gpgsm_program = GPGSM_PATH;
+#endif
+  return gpgsm_program;
+}
 
 
 #endif /*HAVE_DOSISH_SYSTEM*/
-
-
-
-
-