From 1a9da605ad2f801324342b68b49aa8aebefc2c27 Mon Sep 17 00:00:00 2001 From: Marcus Brinkmann Date: Sun, 18 Nov 2001 03:31:31 +0000 Subject: [PATCH] 2001-11-18 Marcus Brinkmann * 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 * 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 | 11 +++ Makefile.am | 10 +- NEWS | 3 + acconfig.h | 9 +- configure.in => configure.ac | 173 ++++++++++++++++++++--------------- gpgme/ChangeLog | 15 +++ gpgme/posix-util.c | 25 ++--- gpgme/rungpg.c | 7 +- gpgme/util.h | 3 +- gpgme/version.c | 13 +-- gpgme/w32-util.c | 67 ++++++++------ 11 files changed, 208 insertions(+), 128 deletions(-) rename configure.in => configure.ac (53%) diff --git a/ChangeLog b/ChangeLog index fac139cd..766731fb 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,14 @@ +2001-11-18 Marcus Brinkmann + + * 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 * autogen.sh: Invoke automake with `-a' (add missing files). diff --git a/Makefile.am b/Makefile.am index df846864..efe8c9ce 100644 --- a/Makefile.am +++ b/Makefile.am @@ -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 90b6e038..237fbb9a 100644 --- 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. diff --git a/acconfig.h b/acconfig.h index 1a7f63c2..2eb2460b 100644 --- a/acconfig.h +++ b/acconfig.h @@ -39,12 +39,15 @@ /* 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 diff --git a/configure.in b/configure.ac similarity index 53% rename from configure.in rename to configure.ac index 8e830334..9ef4d44a 100644 --- a/configure.in +++ b/configure.ac @@ -19,16 +19,22 @@ # 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 - +dnl FIXME: check whether Bonobo is installed dnl -dnl Checks for libraries +dnl Checks for header files. dnl dnl -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]); +AC_CHECK_SIZEOF(unsigned short) +AC_CHECK_SIZEOF(unsigned int) +AC_CHECK_SIZEOF(unsigned long) + +dnl +dnl Checks for compiler features. +dnl + +if test "$GCC" = yes; then + CFLAGS="$CFLAGS -Wall -Wcast-align -Wshadow -Wstrict-prototypes" fi - - dnl -dnl Checks for compiler features -dnl - -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 " diff --git a/gpgme/ChangeLog b/gpgme/ChangeLog index d7cf9101..83676950 100644 --- a/gpgme/ChangeLog +++ b/gpgme/ChangeLog @@ -1,3 +1,18 @@ +2001-11-18 Marcus Brinkmann + + * 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 * decrypt-verify.c: New file. diff --git a/gpgme/posix-util.c b/gpgme/posix-util.c index a0c755e0..ef590760 100644 --- a/gpgme/posix-util.c +++ b/gpgme/posix-util.c @@ -30,21 +30,24 @@ #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*/ - - - - - diff --git a/gpgme/rungpg.c b/gpgme/rungpg.c index 60cfa225..7a914445 100644 --- a/gpgme/rungpg.c +++ b/gpgme/rungpg.c @@ -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 */ diff --git a/gpgme/util.h b/gpgme/util.h index 437276ea..029a8463 100644 --- a/gpgme/util.h +++ b/gpgme/util.h @@ -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 */ diff --git a/gpgme/version.c b/gpgme/version.c index 5c486f20..565c4127 100644 --- a/gpgme/version.c +++ b/gpgme/version.c @@ -228,6 +228,13 @@ get_engine_info (void) return engine_info; path = _gpgme_get_gpg_path (); + if (!path) + { + engine_info = "\n" + " Not supported\n" + "\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; } - - - - - - diff --git a/gpgme/w32-util.c b/gpgme/w32-util.c index 693a9c77..2cbf6c2b 100644 --- a/gpgme/w32-util.c +++ b/gpgme/w32-util.c @@ -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; - } - } + 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; - return gpg_program; + 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*/ - - - - -