Use GIT commit ids instead of SVN revision numbers.
authorWerner Koch <wk@gnupg.org>
Tue, 27 Dec 2011 13:54:55 +0000 (14:54 +0100)
committerWerner Koch <wk@gnupg.org>
Tue, 27 Dec 2011 13:54:55 +0000 (14:54 +0100)
* configure.ac: Remove SVN revision number tracking.  Replace by GIT
commit ids.
(GPGOL_FORMS_REVISION): New.
(GIT_COMMIT_DECIMAL): New.
(BUILD_TIMESTAMP): Base version number on the decimalised 4 hex digit
commit id.
* src/common.h (opt): s/svn_revision/git_commit/.
* src/main.c (read_options): Read gitCommit instead of svnRevision.
(write_options): Use git_commit.
* src/olflange.cpp (GpgolExt): Use GPGOL_FORMS_REVISION to trigger
forms installation.

configure.ac
doc/gpgol.texi
src/common.h
src/main.c
src/olflange-dlgs.cpp
src/olflange.cpp

index 7be38de..8798c6c 100644 (file)
@@ -16,14 +16,18 @@ min_automake_version="1.9.4"
 # Remember to change the version number immediately *after* a release.
 # Set my_issvn to "yes" for non-released code.  Remember to run an
 # "svn up" and "autogen.sh" right before creating a distribution.
-m4_define([my_version], [1.1.2])
-m4_define([my_issvn], [no])
+m4_define([my_version], [1.1.3])
+m4_define([my_isgit], [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([gpgol], 
-        [my_version[]m4_if(my_issvn,[yes],[-svn[]svn_revision])],
-        [bug-gpgol@g10code.com])
+m4_define([git_commit], m4_esyscmd([git branch -v 2>/dev/null \
+          | awk '/^\* / {printf "%s",$3}']))
+m4_define([my_full_version],
+          [my_version[]m4_if(my_isgit,[yes],[-git[]git_commit])])
+
+AC_INIT([gpgol],[my_full_version],[bug-gpgol@g10code.com])
+
+# Bump up this value if you changed any form.
+GPGOL_FORMS_REVISION=335
 
 NEED_GPG_ERROR_VERSION=1.9
 NEED_GPGME_API=1
@@ -32,7 +36,8 @@ NEED_LIBASSUAN_API=2
 NEED_LIBASSUAN_VERSION=2.0.0
 
 
-SVN_REVISION=svn_revision
+GIT_COMMIT=0x[]git_commit
+GIT_COMMIT_DECIMAL="$((0x$(echo git_commit | head -c 4)))"
 PACKAGE=$PACKAGE_NAME
 PACKAGE_GT=${PACKAGE_NAME}
 VERSION=$PACKAGE_VERSION
@@ -58,7 +63,9 @@ AC_DEFINE_UNQUOTED(PACKAGE_BUGREPORT, "$PACKAGE_BUGREPORT",
                                         [Bug report address])
 AC_DEFINE_UNQUOTED(NEED_GPGME_VERSION, "$NEED_GPGME_VERSION",
                                        [Required version of GPGME])
-AC_DEFINE_UNQUOTED(SVN_REVISION, ${SVN_REVISION}, [Current SVN revision])
+AC_DEFINE_UNQUOTED(GIT_COMMIT, ${GIT_COMMIT}, [Current GIT commit])
+AC_DEFINE_UNQUOTED(GPGOL_FORMS_REVISION, ${GPGOL_FORMS_REVISION},
+                                          [Current Forms revision])
 
 
 BUILD_TIMESTAMP=`date --iso-8601=minutes`
@@ -66,14 +73,14 @@ AC_SUBST(BUILD_TIMESTAMP)
 changequote(,)dnl
 BUILD_FILEVERSION=`echo "$VERSION" | sed 's/\([0-9.]*\).*/\1./;s/\./,/g'`
 changequote([,])dnl
-BUILD_FILEVERSION="${BUILD_FILEVERSION}${SVN_REVISION}"
+BUILD_FILEVERSION="${BUILD_FILEVERSION}${GIT_COMMIT_DECIMAL}"
 AC_SUBST(BUILD_FILEVERSION)
 
 
 AH_BOTTOM([
 /* Some global constants. */
 
-/* Force using of NLS for W32 even if no libintl has been found.  This is 
+/* Force using of NLS for W32 even if no libintl has been found.  This is
    okay because we have our own gettext implementation for W32.  */
 #if defined(HAVE_W32_SYSTEM) && !defined(ENABLE_NLS)
 #define ENABLE_NLS 1
@@ -230,7 +237,7 @@ die=no
 if test "$have_gpg_error" = "no"; then
    die=yes
    AC_MSG_NOTICE([[
-***  
+***
 *** You need libgpg-error to build this program.
 **  This library is for example available at
 ***   ftp://ftp.gnupg.org/pub/gcrypt/libgpg-error
@@ -240,7 +247,7 @@ fi
 if test "$have_gpgme" = "no"; then
    die=yes
    AC_MSG_NOTICE([[
-***  
+***
 *** You need gpgme to build this program.
 **  This library is for example available at
 ***   ftp://ftp.gnupg.org/gcrypt/gpgme/
@@ -268,7 +275,7 @@ fi
 
 AC_CONFIG_FILES([ Makefile
 src/Makefile
-src/versioninfo.rc        
+src/versioninfo.rc
 forms/Makefile
 doc/Makefile
 po/Makefile.in
index 5e60514..f737977 100644 (file)
@@ -47,7 +47,7 @@ section entitled ``Copying''.
 @c Titlepage
 @c
 @setchapternewpage odd
-@titlepage 
+@titlepage
 @title The GpgOL Technical Manual
 @subtitle Version @value{VERSION}
 @subtitle @value{UPDATED-MONTH}
@@ -74,7 +74,7 @@ section entitled ``Copying''.
 
 @ifnottex
 @node Top
-@top 
+@top
 
 @insertcopying
 
@@ -210,8 +210,8 @@ flag indicating the status.  These values are defined:
   known not to need any processing by GpgOL.
 
   @item @@
-  The message has been created and signed or encrypted by GpgOL. 
+  The message has been created and signed or encrypted by GpgOL.
+
   @item ?
   The signature status has not been checked.  This is for example used
   if the public key to be used for the verification could not be found.
@@ -229,7 +229,7 @@ flag indicating the status.  These values are defined:
   The signature is bad.  Either this means the message has been tampered
   with or an intermediate message relay has accidently changed
   the message (e.g. due to recoding).
-  
+
   @end table
 
 @item GpgOL Protect IV
@@ -269,7 +269,7 @@ draft message.  For details see the function
 @node Registry Settings
 @chapter How GpgOL uses the Registry
 
-This is a list of registry entries GpgOL knows about. 
+This is a list of registry entries GpgOL knows about.
 
 @table @code
 
@@ -296,7 +296,7 @@ according to the following table (which may change with any release):
 @item 2 (0x0002) (ioworker)
 Tell what the Assuan I/O scheduler is doing.
 @item 4 (0x0004) (ioworker-extra)
-Even more verbose Assuan I/O scheduler reporting. 
+Even more verbose Assuan I/O scheduler reporting.
 @item 8  (0x0008) (filter)
 Tell what the filter I/O system is doing.
 @item 16 (0x0010) (filter-extra)
@@ -328,20 +328,23 @@ This is a string consisting of @code{0} and @code{1} to enable certain
 compatibility flags.  Not generally useful; use the source for a
 description.
 
-@item HKCU\Software\GNU\GpgOL:enableSmime   
+@item HKCU\Software\GNU\GpgOL:enableSmime
 @itemx HKCU\Software\GNU\GpgOL:defaultProtocol
 @itemx HKCU\Software\GNU\GpgOL:encryptDefault
-@itemx HKCU\Software\GNU\GpgOL:signDefault   
+@itemx HKCU\Software\GNU\GpgOL:signDefault
 @itemx HKCU\Software\GNU\GpgOL:previewDecrypt
 @itemx HKCU\Software\GNU\GpgOL:storePasswdTime
-@itemx HKCU\Software\GNU\GpgOL:encodingFormat 
-@itemx HKCU\Software\GNU\GpgOL:defaultKey   
+@itemx HKCU\Software\GNU\GpgOL:encodingFormat
+@itemx HKCU\Software\GNU\GpgOL:defaultKey
 @itemx HKCU\Software\GNU\GpgOL:enableDefaultKey
-@itemx HKCU\Software\GNU\GpgOL:preferHtml 
+@itemx HKCU\Software\GNU\GpgOL:preferHtml
 These registry keys store the values from the configuration dialog.
 
 @item HKCU\Software\GNU\GpgOL:svnRevision
-When leaving GpgOL's options dialog, the SVN revision number of the current
+Obsolete since 1.1.3.
+
+@item HKCU\Software\GNU\GpgOL:gitCommit
+When leaving GpgOL's options dialog, the GIT commit id of the current
 version will be stored in this entry.  This is used to display a note
 after software upgrades.
 
@@ -382,7 +385,7 @@ works).
 The renaming is very straightforward:
 
 @itemize @bullet
-@item 
+@item
 If the message class is just @code{IPM.Note} extra tests are done to
 figure out a suitable message class.  This yields one of these new
 message classes:
@@ -429,13 +432,13 @@ attachment (or used to convert the message back to RFC-822).  It might
 however not exist and in this case there should be only one attachment
 at all as created by Outlook, so no further changes are required.
 
-@item 
+@item
 Inline PGP encrypted mails (@code{IPM.Note.GpgOL.PGPMessage}) might have
 a wrong PR_BODY. This condition can be detected by the existance of an
 attachment named @file{gpgolPGP.dat}, flagged as hidden and with the
 attach type ATTACHTYPE_PGPBODY (See above under MAPI Properties).  If
 such an attachment exists, it should be copied to PR_BODY and may then
-be deleted. 
+be deleted.
 @end itemize
 
 @noindent
@@ -495,7 +498,7 @@ exists, delete the properties @code{PR_BODY} and @code{PR_BODY_HTML}.
 
 Instead of deleting it should be sufficient to make sure
 that such PR_BODYs are not updated and don't make it to the disk or a
-strage server. 
+strage server.
 
 Implementing such a feature would really help with end-to-end encryption
 where the security policy requires that the plaintext of an encrypted
@@ -518,7 +521,7 @@ FIXME.
 @c xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
 @c
 @c   A P P E N D I X
-@c 
+@c
 @c xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
 
 @include gpl.texi
@@ -538,7 +541,7 @@ FIXME.
 @c xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
 @c
 @c E D I T O R ' S   A T T I C
-@c 
+@c
 @c xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
 
 What about the message class mangling?
index a3fbc4c..6097568 100644 (file)
@@ -8,7 +8,7 @@
  * 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.
- *  
+ *
  * GpgOL 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
@@ -24,7 +24,7 @@
 #include <gpgme.h>
 
 #include "util.h"
+
 
 #ifdef __cplusplus
 extern "C" {
@@ -63,11 +63,11 @@ typedef enum
     GPG_FMT_NONE = 0,       /* do not encrypt attachments */
     GPG_FMT_CLASSIC = 1,    /* encrypt attachments without any encoding */
     GPG_FMT_PGP_PEF = 2     /* use the PGP partioned encoding format (PEF) */
-  } 
+  }
 gpgol_format_t;
 
 /* Type of a message. */
-typedef enum 
+typedef enum
   {
     OPENPGP_NONE = 0,
     OPENPGP_MSG,
@@ -90,7 +90,7 @@ struct passphrase_cb_s
   gpgme_ctx_t ctx;
   char keyid[16+1];
   char *user_id;
-  char *pass;    
+  char *pass;
   int opts;
   int ttl;  /* TTL of the passphrase. */
   unsigned int decrypt_cmd:1; /* 1 = show decrypt dialog, otherwise secret key
@@ -103,7 +103,7 @@ struct passphrase_cb_s
 #ifdef __cplusplus
 extern
 #endif
-struct 
+struct
 {
   int enable_debug;         /* Enable extra debug options.  Values
                                 larger than 1 increases the debug log
@@ -121,7 +121,7 @@ struct
   int body_as_attachment;    /* Present encrypted message as attachment.  */
 
   /* The compatibility flags. */
-  struct 
+  struct
   {
     unsigned int no_msgcache:1;
     unsigned int no_pgpmime:1;
@@ -131,12 +131,12 @@ struct
     unsigned int auto_decrypt: 1;   /* Try to decrypt when clicked. */
     unsigned int no_attestation: 1; /* Don't create an attestation. */
     unsigned int use_mwfmo: 1;      /* Use MsgWaitForMultipleObjects.  */
-  } compat; 
+  } compat;
 
-  /* The SVN revision as stored in the registry.  */
-  int svn_revision; 
+  /* The current git commit id.  */
+  unsigned int git_commit;
 
-  /* The SVN revision of the binary used to install the forms.  */
+  /* The forms revision number of the binary.  */
   int forms_revision;
 
   /* The stored number of the binary which showed the last announcement.  */
@@ -162,9 +162,9 @@ typedef struct b64_state_s b64_state_t;
 /* Bit values used for extra log file verbosity.  Value 1 is reserved
    to enable debug menu options.  */
 #define DBG_IOWORKER       (1<<1)
-#define DBG_IOWORKER_EXTRA (1<<2) 
+#define DBG_IOWORKER_EXTRA (1<<2)
 #define DBG_FILTER         (1<<3)
-#define DBG_FILTER_EXTRA   (1<<4) 
+#define DBG_FILTER_EXTRA   (1<<4)
 #define DBG_MEMORY         (1<<5)
 #define DBG_COMMANDS       (1<<6)
 #define DBG_MIME_PARSER    (1<<7)
@@ -179,8 +179,8 @@ typedef struct b64_state_s b64_state_t;
 /* Type and constants used with parse_tlv.  */
 struct tlvinfo_s
 {
-  int cls;            /* The class of the tag.  */             
-  int tag;            /* The tag.  */           
+  int cls;            /* The class of the tag.  */
+  int tag;            /* The tag.  */
   int is_cons;        /* True if it is a constructed object.  */
   int is_ndef;        /* True if the object has an indefinite length.  */
   size_t length;      /* The length of the value.  */
@@ -227,7 +227,7 @@ unsigned int recipient_dialog_box2 (gpgme_key_t *fnd, char **unknown,
 
 /*-- passphrase-dialog.c --*/
 int signer_dialog_box (gpgme_key_t *r_key, char **r_passwd, int encrypting);
-gpgme_error_t passphrase_callback_box (void *opaque, const char *uid_hint, 
+gpgme_error_t passphrase_callback_box (void *opaque, const char *uid_hint,
                             const char *pass_info,
                             int prev_was_bad, int fd);
 void free_decrypt_key (struct passphrase_cb_s *ctx);
@@ -239,8 +239,8 @@ int store_extension_value (const char *key, const char *val);
 int load_extension_value (const char *key, char **val);
 
 /*-- verify-dialog.c --*/
-int verify_dialog_box (gpgme_protocol_t protocol, 
-                       gpgme_verify_result_t res, 
+int verify_dialog_box (gpgme_protocol_t protocol,
+                       gpgme_verify_result_t res,
                        const char *filename);
 
 
index 095868e..0a0e9a5 100644 (file)
@@ -5,9 +5,9 @@
  *
  * GpgOL 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 
+ * as published by the Free Software Foundation; either version 2.1
  * of the License, or (at your option) any later version.
- *  
+ *
  * GpgOL 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
@@ -74,7 +74,7 @@ static int
 initialize_main (void)
 {
   SECURITY_ATTRIBUTES sa;
-  
+
   memset (&sa, 0, sizeof sa);
   sa.bInheritHandle = FALSE;
   sa.lpSecurityDescriptor = NULL;
@@ -86,15 +86,15 @@ initialize_main (void)
 /* Return nbytes of cryptographic strong random.  Caller needs to free
    the returned buffer.  */
 static char *
-get_crypt_random (size_t nbytes) 
+get_crypt_random (size_t nbytes)
 {
   HCRYPTPROV prov;
   char *buffer;
 
-  if (!CryptAcquireContext (&prov, NULL, NULL, PROV_RSA_FULL, 
+  if (!CryptAcquireContext (&prov, NULL, NULL, PROV_RSA_FULL,
                             (CRYPT_VERIFYCONTEXT|CRYPT_SILENT)) )
     return NULL;
-  
+
   buffer = xmalloc (nbytes);
   if (!CryptGenRandom (prov, nbytes, buffer))
     {
@@ -186,7 +186,7 @@ DllMain (HINSTANCE hinst, DWORD reason, LPVOID reserved)
     {
       gpg_err_deinit (0);
     }
-  
+
   return TRUE;
 }
 
@@ -218,7 +218,7 @@ create_initialization_vector (size_t nbytes)
 
 
 /* Acquire the mutex for logging.  Returns 0 on success. */
-static int 
+static int
 lock_log (void)
 {
   int code = WaitForSingleObject (log_mutex, INFINITE);
@@ -245,7 +245,7 @@ do_log (const char *fmt, va_list a, int w32err, int err,
 
   if (lock_log ())
     return;
-  
+
   if (!logfp)
     logfp = fopen (logfile, "a+");
   if (!logfp)
@@ -253,19 +253,19 @@ do_log (const char *fmt, va_list a, int w32err, int err,
       unlock_log ();
       return;
     }
-  
-  fprintf (logfp, "%05lu/%lu/", 
+
+  fprintf (logfp, "%05lu/%lu/",
            ((unsigned long)GetTickCount () % 100000),
            (unsigned long)GetCurrentThreadId ());
   if (err == 1)
     fputs ("ERROR/", logfp);
   vfprintf (logfp, fmt, a);
-  if (w32err) 
+  if (w32err)
     {
       char tmpbuf[256];
-      
-      FormatMessage (FORMAT_MESSAGE_FROM_SYSTEM, NULL, w32err, 
-                     MAKELANGID (LANG_NEUTRAL, SUBLANG_DEFAULT), 
+
+      FormatMessage (FORMAT_MESSAGE_FROM_SYSTEM, NULL, w32err,
+                     MAKELANGID (LANG_NEUTRAL, SUBLANG_DEFAULT),
                      tmpbuf, sizeof (tmpbuf)-1, NULL);
       fputs (": ", logfp);
       if (*tmpbuf && tmpbuf[strlen (tmpbuf)-1] == '\n')
@@ -290,61 +290,61 @@ do_log (const char *fmt, va_list a, int w32err, int err,
 }
 
 
-void 
+void
 log_debug (const char *fmt, ...)
 {
   va_list a;
-  
+
   va_start (a, fmt);
   do_log (fmt, a, 0, 0, NULL, 0);
   va_end (a);
 }
 
-void 
+void
 log_error (const char *fmt, ...)
 {
   va_list a;
-  
+
   va_start (a, fmt);
   do_log (fmt, a, 0, 1, NULL, 0);
   va_end (a);
 }
 
-void 
+void
 log_vdebug (const char *fmt, va_list a)
 {
   do_log (fmt, a, 0, 0, NULL, 0);
 }
 
 
-void 
+void
 log_debug_w32 (int w32err, const char *fmt, ...)
 {
   va_list a;
 
   if (w32err == -1)
     w32err = GetLastError ();
-  
+
   va_start (a, fmt);
   do_log (fmt, a, w32err, 0, NULL, 0);
   va_end (a);
 }
 
-void 
+void
 log_error_w32 (int w32err, const char *fmt, ...)
 {
   va_list a;
 
   if (w32err == -1)
     w32err = GetLastError ();
-  
+
   va_start (a, fmt);
   do_log (fmt, a, w32err, 1, NULL, 0);
   va_end (a);
 }
 
 
-void 
+void
 log_hexdump (const void *buf, size_t buflen, const char *fmt, ...)
 {
   va_list a;
@@ -370,7 +370,7 @@ do_log_window_info (HWND window, int level)
   GetWindowThreadProcessId (window, &pid);
   if (pid != GetCurrentProcessId ())
     return;
+
   memset (buf, 0, sizeof (buf));
   GetWindowText (window, buf, sizeof (buf)-1);
   nname = GetClassName (window, name, sizeof (name)-1);
@@ -399,7 +399,7 @@ do_log_window_hierarchy (HWND parent, int level)
     {
       do_log_window_info (child, level);
       do_log_window_hierarchy (child, level+1);
-      child = GetNextWindow (child, GW_HWNDNEXT);      
+      child = GetNextWindow (child, GW_HWNDNEXT);
     }
 
   return NULL;
@@ -448,7 +448,7 @@ set_log_file (const char *name)
           logfp = NULL;
         }
       xfree (logfile);
-      if (!name || *name == '\"' || !*name) 
+      if (!name || *name == '\"' || !*name)
         logfile = NULL;
       else
         logfile = xstrdup (name);
@@ -489,7 +489,7 @@ get_locale_dir (void)
                                      "Install Directory");
   if (!instdir)
     return NULL;
-  
+
   /* Build the key: "<instdir>/share/locale".  */
 #define SLDIR "\\share\\locale"
   dname = malloc (strlen (instdir) + strlen (SLDIR) + 1);
@@ -502,9 +502,9 @@ get_locale_dir (void)
   strcpy (p, instdir);
   p += strlen (instdir);
   strcpy (p, SLDIR);
-  
+
   free (instdir);
-  
+
   return dname;
 }
 
@@ -528,7 +528,7 @@ read_options (void)
   load_extension_value ("logFile", &val);
   set_log_file (val);
   xfree (val); val = NULL;
-  
+
   /* Parse the debug flags.  */
   load_extension_value ("enableDebug", &val);
   opt.enable_debug = 0;
@@ -597,7 +597,7 @@ read_options (void)
   load_extension_value ("enableSmime", &val);
   opt.enable_smime = (!val || atoi (val));
   xfree (val); val = NULL;
-  
+
 /*   load_extension_value ("defaultProtocol", &val); */
 /*   switch ((!val || *val == '0')? 0 : atol (val)) */
 /*     { */
@@ -643,8 +643,8 @@ read_options (void)
   opt.prefer_html = val == NULL || *val != '1'? 0 : 1;
   xfree (val); val = NULL;
 
-  load_extension_value ("svnRevision", &val);
-  opt.svn_revision = val? atol (val) : 0;
+  load_extension_value ("gitCommit", &val);
+  opt.git_commit = val? strtoul (val, NULL, 16) : 0;
   xfree (val); val = NULL;
 
   load_extension_value ("formsRevision", &val);
@@ -690,7 +690,7 @@ read_options (void)
   if (!warnings_shown)
     {
       char tmpbuf[512];
-          
+
       warnings_shown = 1;
       if (val && *val)
         {
@@ -714,7 +714,7 @@ read_options (void)
 int
 write_options (void)
 {
-  struct 
+  struct
   {
     const char *name;
     int  mode;
@@ -732,7 +732,7 @@ write_options (void)
     {"defaultKey",               2, 0, opt.default_key},
     {"enableDefaultKey",         0, opt.enable_default_key},
     {"preferHtml",               0, opt.prefer_html},
-    {"svnRevision",              1, opt.svn_revision},
+    {"gitCommit",                1, opt.git_commit},
     {"formsRevision",            1, opt.forms_revision},
     {"announceNumber",           1, opt.announce_number},
     {"bodyAsAttachment",         0, opt.body_as_attachment},
@@ -742,7 +742,7 @@ write_options (void)
   int rc, i;
   const char *string;
 
-  for (i=0; table[i].name; i++) 
+  for (i=0; table[i].name; i++)
     {
       switch (table[i].mode)
         {
@@ -785,6 +785,6 @@ write_options (void)
       if (rc)
         log_error ("error storing option `%s': rc = %d\n", table[i].name, rc);
     }
-  
+
   return 0;
 }
index bbe7d72..a957bff 100644 (file)
@@ -1,18 +1,18 @@
 /* olflange-dlgs.cpp - New dialogs for Outlook.
  *     Copyright (C) 2004, 2005, 2006, 2007, 2008 g10 Code GmbH
- * 
+ *
  * This file is part of GpgOL.
- * 
+ *
  * GpgOL 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.
- * 
+ *
  * GpgOL 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, see <http://www.gnu.org/licenses/>.
  */
@@ -62,30 +62,30 @@ set_labels (HWND dlg)
   for (i=0; labels[i].itemid; i++)
     SetDlgItemText (dlg, labels[i].itemid, _(labels[i].label));
 
-}  
-    
+}
+
 
 /* GPGOptionsDlgProc -
    Handles the notifications sent for managing the options property page. */
-bool 
+bool
 GPGOptionsDlgProc (HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
 {
-  BOOL bMsgResult = FALSE;    
+  BOOL bMsgResult = FALSE;
   static LPNMHDR pnmhdr;
 //   static BOOL openpgp_state = FALSE;
 //   static BOOL smime_state = FALSE;
-  
-  switch (uMsg) 
+
+  switch (uMsg)
     {
     case WM_INITDIALOG:
       {
 //         openpgp_state = (opt.default_protocol == PROTOCOL_OPENPGP);
 //         smime_state = (opt.default_protocol == PROTOCOL_SMIME);
-        
-        EnableWindow (GetDlgItem (hDlg, IDC_SMIME_DEFAULT), 
+
+        EnableWindow (GetDlgItem (hDlg, IDC_SMIME_DEFAULT),
                       !!opt.enable_smime);
         set_labels (hDlg);
-        ShowWindow (GetDlgItem (hDlg, IDC_GPG_OPTIONS), 
+        ShowWindow (GetDlgItem (hDlg, IDC_GPG_OPTIONS),
                     opt.enable_debug? SW_SHOW : SW_HIDE);
       }
       return TRUE;
@@ -97,7 +97,7 @@ GPGOptionsDlgProc (HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
         RECT rect_banner = {0,0,0,0};
         RECT rect_dlg = {0,0,0,0};
         HWND bitmap;
-        
+
         GetWindowRect (hDlg, &rect_dlg);
         bitmap = GetDlgItem (hDlg, IDC_G10CODE_STRING);
         if (bitmap)
@@ -107,13 +107,13 @@ GPGOptionsDlgProc (HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
         rect_banner.right  -= rect_dlg.left;
         rect_banner.top    -= rect_dlg.top;
         rect_banner.bottom -= rect_dlg.top;
-        
+
         if (x >= rect_banner.left && x <= rect_banner.right
             && y >= rect_banner.top && y <= rect_banner.bottom)
           {
             ShellExecute (NULL, "open",
                           "http://www.g10code.com/p-gpgol.html",
-                          NULL, NULL, SW_SHOWNORMAL);  
+                          NULL, NULL, SW_SHOWNORMAL);
           }
       }
       break;
@@ -135,14 +135,14 @@ GPGOptionsDlgProc (HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
            }
        }
       if (HIWORD (wParam) == BN_CLICKED &&
-         LOWORD (wParam) == IDC_ENABLE_SMIME) 
+         LOWORD (wParam) == IDC_ENABLE_SMIME)
        {
          opt.enable_smime = !opt.enable_smime;
-         EnableWindow (GetDlgItem (hDlg, IDC_SMIME_DEFAULT), 
+         EnableWindow (GetDlgItem (hDlg, IDC_SMIME_DEFAULT),
                         opt.enable_smime);
        }
 //       if (HIWORD (wParam) == BN_CLICKED &&
-//       LOWORD (wParam) == IDC_OPENPGP_DEFAULT) 
+//       LOWORD (wParam) == IDC_OPENPGP_DEFAULT)
 //     {
 //       openpgp_state = !openpgp_state;
 //           if (openpgp_state)
@@ -152,7 +152,7 @@ GPGOptionsDlgProc (HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
 //             }
 //     }
 //       if (HIWORD (wParam) == BN_CLICKED &&
-//       LOWORD (wParam) == IDC_SMIME_DEFAULT) 
+//       LOWORD (wParam) == IDC_SMIME_DEFAULT)
 //     {
 //       smime_state = !smime_state;
 //           if (smime_state)
@@ -166,28 +166,28 @@ GPGOptionsDlgProc (HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
       else if (LOWORD (wParam) == IDC_GPG_CONF)
         engine_start_confdialog (hDlg);
       break;
-       
+
     case WM_NOTIFY:
       pnmhdr = ((LPNMHDR) lParam);
-      switch (pnmhdr->code) 
+      switch (pnmhdr->code)
         {
        case PSN_KILLACTIVE:
           bMsgResult = FALSE;  /*(Allow this page to receive PSN_APPLY. */
           break;
 
-       case PSN_SETACTIVE: 
+       case PSN_SETACTIVE:
           SendDlgItemMessage (hDlg, IDC_ENABLE_SMIME, BM_SETCHECK,
                               !!opt.enable_smime, 0L);
-          
-          SendDlgItemMessage (hDlg, IDC_ENCRYPT_DEFAULT, BM_SETCHECK, 
+
+          SendDlgItemMessage (hDlg, IDC_ENCRYPT_DEFAULT, BM_SETCHECK,
                               !!opt.encrypt_default, 0L);
-          SendDlgItemMessage (hDlg, IDC_SIGN_DEFAULT, BM_SETCHECK, 
+          SendDlgItemMessage (hDlg, IDC_SIGN_DEFAULT, BM_SETCHECK,
                               !!opt.sign_default, 0L);
-//           SendDlgItemMessage (hDlg, IDC_OPENPGP_DEFAULT, BM_SETCHECK, 
+//           SendDlgItemMessage (hDlg, IDC_OPENPGP_DEFAULT, BM_SETCHECK,
 //                                 openpgp_state, 0L);
-//           SendDlgItemMessage (hDlg, IDC_SMIME_DEFAULT, BM_SETCHECK, 
+//           SendDlgItemMessage (hDlg, IDC_SMIME_DEFAULT, BM_SETCHECK,
 //                               smime_state, 0L);
-          
+
 //           SendDlgItemMessage (hDlg, IDC_PREVIEW_DECRYPT, BM_SETCHECK,
 //                               !!opt.preview_decrypt, 0L);
           SendDlgItemMessage (hDlg, IDC_PREFER_HTML, BM_SETCHECK,
@@ -195,44 +195,44 @@ GPGOptionsDlgProc (HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
           SendDlgItemMessage (hDlg, IDC_BODY_AS_ATTACHMENT, BM_SETCHECK,
                                !!opt.body_as_attachment, 0L);
           bMsgResult = FALSE;  /* Accepts activation. */
-          break; 
-               
-       case PSN_APPLY: 
+          break;
+
+       case PSN_APPLY:
           opt.enable_smime = !!SendDlgItemMessage
             (hDlg, IDC_ENABLE_SMIME, BM_GETCHECK, 0, 0L);
-          
+
           opt.encrypt_default = !!SendDlgItemMessage
             (hDlg, IDC_ENCRYPT_DEFAULT, BM_GETCHECK, 0, 0L);
-          opt.sign_default = !!SendDlgItemMessage 
+          opt.sign_default = !!SendDlgItemMessage
             (hDlg, IDC_SIGN_DEFAULT, BM_GETCHECK, 0, 0L);
-          
+
 //           if (openpgp_state)
 //             opt.default_protocol = PROTOCOL_OPENPGP;
 //           else if (smime_state && opt.enable_smime)
 //             opt.default_protocol = PROTOCOL_SMIME;
 //           else
             opt.default_protocol = PROTOCOL_UNKNOWN;
-            
+
 //           opt.preview_decrypt = !!SendDlgItemMessage
 //             (hDlg, IDC_PREVIEW_DECRYPT, BM_GETCHECK, 0, 0L);
           opt.prefer_html = !!SendDlgItemMessage
             (hDlg, IDC_PREFER_HTML, BM_GETCHECK, 0, 0L);
           opt.body_as_attachment = !!SendDlgItemMessage
             (hDlg, IDC_BODY_AS_ATTACHMENT, BM_GETCHECK, 0, 0L);
-          
+
           /* Make sure that no new-version-installed warning will pop
              up on the next start.  Not really needed as the warning
              dialog set this too, but it doesn't harm to do it again. */
-          opt.svn_revision = SVN_REVISION;
-          
+          opt.git_commit = GIT_COMMIT;
+
           write_options ();
           bMsgResult = PSNRET_NOERROR;
-          break; 
-          
-       case PSN_HELP: 
+          break;
+
+       case PSN_HELP:
           {
             const char cpynotice[] = "Copyright (C) 2009 g10 Code GmbH";
-            const char en_notice[] = 
+            const char en_notice[] =
       "GpgOL is a plugin for Outlook to allow encryption and\n"
       "signing of messages using the OpenPGP and S/MIME standard.\n"
       "It uses the GnuPG software (http://www.gnupg.org). Latest\n"
@@ -258,7 +258,7 @@ GPGOptionsDlgProc (HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
             char header[300];
             char *buffer;
             size_t nbuffer;
-            
+
             snprintf (header, sizeof header, _("This is GpgOL version %s"),
                       PACKAGE_VERSION);
             notice = _(notice_key);
@@ -272,11 +272,11 @@ GPGOptionsDlgProc (HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
             xfree (buffer);
           }
           bMsgResult = TRUE;
-          break; 
-          
+          break;
+
        default:
           bMsgResult = FALSE;
-          break;           
+          break;
        }
 
       SetWindowLong (hDlg, DWL_MSGRESULT, bMsgResult);
@@ -284,7 +284,7 @@ GPGOptionsDlgProc (HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
 
     default:
       bMsgResult = FALSE;
-      break;           
+      break;
     }
 
   return bMsgResult;
index ff1bba8..a7fd5fe 100644 (file)
@@ -1,19 +1,19 @@
 /* olflange.cpp - Connect GpgOL to Outlook
  *     Copyright (C) 2001 G Data Software AG, http://www.gdata.de
  *     Copyright (C) 2004, 2005, 2007, 2008 g10 Code GmbH
- * 
+ *
  * This file is part of GpgOL.
- * 
+ *
  * GpgOL 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.
- * 
+ *
  * GpgOL 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, see <http://www.gnu.org/licenses/>.
  */
 
 /* The GUID for this plugin.  */
 #define CLSIDSTR_GPGOL   "{42d30988-1a3a-11da-c687-000d6080e735}"
-DEFINE_GUID(CLSID_GPGOL, 0x42d30988, 0x1a3a, 0x11da, 
+DEFINE_GUID(CLSID_GPGOL, 0x42d30988, 0x1a3a, 0x11da,
             0xc6, 0x87, 0x00, 0x0d, 0x60, 0x80, 0xe7, 0x35);
 
-/* For documentation: The GUID used for our custom properties: 
+/* For documentation: The GUID used for our custom properties:
    {31805ab8-3e92-11dc-879c-00061b031004}
  */
 
@@ -111,16 +111,16 @@ get_ol_main_version (void)
 
 
 /* Wrapper around UlRelease with error checking. */
-// static void 
+// static void
 // ul_release (LPVOID punk, const char *func)
 // {
 //   ULONG res;
-  
+
 //   if (!punk)
 //     return;
 //   res = UlRelease (punk);
 //   if (opt.enable_debug & DBG_MEMORY)
-//     log_debug ("%s:%s: UlRelease(%p) had %lu references\n", 
+//     log_debug ("%s:%s: UlRelease(%p) had %lu references\n",
 //                SRCNAME, func, punk, res);
 // }
 
@@ -128,9 +128,9 @@ get_ol_main_version (void)
 \f
 /* Registers this module as an Exchange extension. This basically updates
    some Registry entries. */
-STDAPI 
+STDAPI
 DllRegisterServer (void)
-{    
+{
   HKEY hkey, hkey2;
   CHAR szKeyBuf[MAX_PATH+1024];
   CHAR szEntry[MAX_PATH+512];
@@ -162,31 +162,31 @@ DllRegisterServer (void)
      c  EECONTEXT_PROPERTYSHEETS
      d  EECONTEXT_ADVANCEDCRITERIA
      e  EECONTEXT_TASK
-                   ___123456789abcde___ */                 
-  lstrcat (szEntry, ";11000111111100"); 
+                   ___123456789abcde___ */
+  lstrcat (szEntry, ";11000111111100");
   /* Interfaces to we want to hook into:
      pos  interface
-     1    IExchExtCommands            
-     2    IExchExtUserEvents          
-     3    IExchExtSessionEvents       
-     4    IExchExtMessageEvents       
-     5    IExchExtAttachedFileEvents  
-     6    IExchExtPropertySheets      
-     7    IExchExtAdvancedCriteria    
-     -    IExchExt              
+     1    IExchExtCommands
+     2    IExchExtUserEvents
+     3    IExchExtSessionEvents
+     4    IExchExtMessageEvents
+     5    IExchExtAttachedFileEvents
+     6    IExchExtPropertySheets
+     7    IExchExtAdvancedCriteria
+     -    IExchExt
      -    IExchExtModeless
      -    IExchExtModelessCallback
                    ___1234567___ */
-  lstrcat (szEntry, ";11111101"); 
-  ec = RegCreateKeyEx (HKEY_LOCAL_MACHINE, szKeyBuf, 0, NULL, 
+  lstrcat (szEntry, ";11111101");
+  ec = RegCreateKeyEx (HKEY_LOCAL_MACHINE, szKeyBuf, 0, NULL,
                        REG_OPTION_NON_VOLATILE,
                        KEY_ALL_ACCESS, NULL, &hkey, NULL);
-  if (ec != ERROR_SUCCESS) 
+  if (ec != ERROR_SUCCESS)
     {
       log_debug ("DllRegisterServer failed\n");
       return E_ACCESSDENIED;
     }
-    
+
   dwTemp = lstrlen (szEntry) + 1;
   RegSetValueEx (hkey, "GpgOL", 0, REG_SZ, (BYTE*) szEntry, dwTemp);
 
@@ -213,7 +213,7 @@ DllRegisterServer (void)
   RegSetValueEx (hkey, "Outlook Setup Extension",
                  0, REG_SZ, (BYTE*) szEntry, dwTemp);
   RegCloseKey (hkey);
-    
+
   hkey = NULL;
   lstrcpy (szKeyBuf, "Software\\GNU\\GpgOL");
   RegCreateKeyEx (HKEY_CURRENT_USER, szKeyBuf, 0, NULL,
@@ -225,7 +225,7 @@ DllRegisterServer (void)
   strcpy (szKeyBuf, "CLSID\\" CLSIDSTR_GPGOL );
   ec = RegCreateKeyEx (HKEY_CLASSES_ROOT, szKeyBuf, 0, NULL,
                   REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hkey, NULL);
-  if (ec != ERROR_SUCCESS) 
+  if (ec != ERROR_SUCCESS)
     {
       fprintf (stderr, "creating key `%s' failed: ec=%#lx\n", szKeyBuf, ec);
       return E_ACCESSDENIED;
@@ -238,7 +238,7 @@ DllRegisterServer (void)
   strcpy (szKeyBuf, "InprocServer32");
   ec = RegCreateKeyEx (hkey, szKeyBuf, 0, NULL, REG_OPTION_NON_VOLATILE,
                        KEY_ALL_ACCESS, NULL, &hkey2, NULL);
-  if (ec != ERROR_SUCCESS) 
+  if (ec != ERROR_SUCCESS)
     {
       fprintf (stderr, "creating key `%s' failed: ec=%#lx\n", szKeyBuf, ec);
       RegCloseKey (hkey);
@@ -262,7 +262,7 @@ DllRegisterServer (void)
 
 
 /* Unregisters this module as an Exchange extension. */
-STDAPI 
+STDAPI
 DllUnregisterServer (void)
 {
   HKEY hkey;
@@ -272,20 +272,20 @@ DllUnregisterServer (void)
 
   strcpy (buf, "Software\\Microsoft\\Exchange\\Client\\Extensions");
   /* Create and open key and subkey. */
-  res = RegCreateKeyEx (HKEY_LOCAL_MACHINE, buf, 0, NULL, 
-                       REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, 
+  res = RegCreateKeyEx (HKEY_LOCAL_MACHINE, buf, 0, NULL,
+                       REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS,
                        NULL, &hkey, NULL);
-  if (res != ERROR_SUCCESS) 
+  if (res != ERROR_SUCCESS)
     {
       log_debug ("DllUnregisterServer: access denied.\n");
       return E_ACCESSDENIED;
     }
   RegDeleteValue (hkey, "GpgOL");
-  
-  /* Set outlook update flag.  */  
+
+  /* Set outlook update flag.  */
   strcpy (buf, "4.0;Outxxx.dll;7;000000000000000;0000000000;OutXXX");
   ntemp = strlen (buf) + 1;
-  RegSetValueEx (hkey, "Outlook Setup Extension", 0, 
+  RegSetValueEx (hkey, "Outlook Setup Extension", 0,
                 REG_SZ, (BYTE*) buf, ntemp);
   RegCloseKey (hkey);
 
@@ -294,7 +294,7 @@ DllUnregisterServer (void)
   RegDeleteKey (HKEY_CLASSES_ROOT, buf);
   strcpy (buf, "CLSID\\" CLSIDSTR_GPGOL);
   RegDeleteKey (HKEY_CLASSES_ROOT, buf);
-  
+
   return S_OK;
 }
 
@@ -354,7 +354,7 @@ compare_versions (const char *my_version, const char *req_version)
 
   if (my_major > rq_major
        || (my_major == rq_major && my_minor > rq_minor)
-      || (my_major == rq_major && my_minor == rq_minor 
+      || (my_major == rq_major && my_minor == rq_minor
          && my_micro > rq_micro)
       || (my_major == rq_major && my_minor == rq_minor
          && my_micro == rq_micro
@@ -396,7 +396,7 @@ ExchEntryPoint (void)
    context.  Does the DLL initialization if it has not been done
    before. */
 GpgolExt::GpgolExt (void)
-{ 
+{
   m_lRef = 1;
   m_lContext = 0;
   m_hWndExchange = 0;
@@ -424,9 +424,9 @@ GpgolExt::GpgolExt (void)
   if (!g_initdll)
     {
       read_options ();
-      log_debug ("%s:%s: this is GpgOL %s\n", 
+      log_debug ("%s:%s: this is GpgOL %s\n",
                  SRCNAME, __func__, PACKAGE_VERSION);
-      log_debug ("%s:%s:   using GPGME %s\n", 
+      log_debug ("%s:%s:   using GPGME %s\n",
                  SRCNAME, __func__, gpgme_check_version (NULL));
       engine_init ();
       g_initdll = TRUE;
@@ -439,7 +439,7 @@ GpgolExt::GpgolExt (void)
           /* Note: If you want to change the announcment, you need to
              increment the ANNOUNCE_NUMBER above.  The number assures
              that a user will see this message only once.  */
-          MessageBox 
+          MessageBox
             (NULL,
              _("Welcome to GpgOL 1.0\n"
                "\n"
@@ -459,14 +459,14 @@ GpgolExt::GpgolExt (void)
                "that sending encrypted or signed mails using an Exchange "
                "based account does not work.  Using GpgOL along with "
                "other Outlook plugins may in some cases not work."
-               "\n"),     
+               "\n"),
              "GpgOL", MB_ICONINFORMATION|MB_OK);
           /* Show this warning only once.  */
           opt.announce_number = ANNOUNCE_NUMBER;
           write_options ();
         }
 
-      if ( SVN_REVISION > opt.svn_revision )
+      if ( GIT_COMMIT != opt.git_commit )
         {
           MessageBox (NULL,
                     _("You have installed a new version of GpgOL.\n"
@@ -477,24 +477,24 @@ GpgolExt::GpgolExt (void)
                       " Extras->Options->GpgOL.\n"),
                       "GpgOL", MB_ICONINFORMATION|MB_OK);
           /* Show this warning only once.  */
-          opt.svn_revision = SVN_REVISION;
+          opt.git_commit = GIT_COMMIT;
           write_options ();
         }
-      if ( SVN_REVISION > opt.forms_revision )
+      if ( GPGOL_FORMS_REVISION > opt.forms_revision )
         install_forms ();
     }
 }
 
 
 /*  Uninitializes the DLL in the session context. */
-GpgolExt::~GpgolExt (void) 
+GpgolExt::~GpgolExt (void)
 {
   log_debug ("%s:%s: cleaning up GpgolExt object; context=%s\n",
              SRCNAME, __func__, ext_context_name (m_lContext));
-    
+
 //   if (m_pOutlookExtItemEvents)
 //     m_pOutlookExtItemEvents->Release ();
-  
+
   if (m_lContext == EECONTEXT_SESSION)
     {
       if (g_initdll)
@@ -503,9 +503,9 @@ GpgolExt::~GpgolExt (void)
           write_options ();
           g_initdll = FALSE;
           log_debug ("%s:%s: DLL closed down\n", SRCNAME, __func__);
-       }       
+       }
     }
-  
+
 
 }
 
@@ -515,33 +515,33 @@ GpgolExt::~GpgolExt (void)
    interface and PPVOBJ will get the address of the object pointer if
    this class defines the requested interface.  Return value: S_OK if
    the interface is supported, otherwise E_NOINTERFACE. */
-STDMETHODIMP 
+STDMETHODIMP
 GpgolExt::QueryInterface(REFIID riid, LPVOID *ppvObj)
 {
   HRESULT hr = S_OK;
-  
+
   *ppvObj = NULL;
-  
-  if ((riid == IID_IUnknown) || (riid == IID_IExchExt)) 
+
+  if ((riid == IID_IUnknown) || (riid == IID_IExchExt))
     {
       *ppvObj = (LPUNKNOWN) this;
     }
-  else if (riid == IID_IExchExtCommands) 
+  else if (riid == IID_IExchExtCommands)
     {
       *ppvObj = (LPUNKNOWN)m_pExchExtCommands;
       m_pExchExtCommands->SetContext (m_lContext);
     }
-  else if (riid == IID_IExchExtUserEvents) 
+  else if (riid == IID_IExchExtUserEvents)
     {
       *ppvObj = (LPUNKNOWN) m_pExchExtUserEvents;
       m_pExchExtUserEvents->SetContext (m_lContext);
     }
-  else if (riid == IID_IExchExtSessionEvents) 
+  else if (riid == IID_IExchExtSessionEvents)
     {
       *ppvObj = (LPUNKNOWN) m_pExchExtSessionEvents;
       m_pExchExtSessionEvents->SetContext (m_lContext);
     }
-  else if (riid == IID_IExchExtMessageEvents) 
+  else if (riid == IID_IExchExtMessageEvents)
     {
       *ppvObj = (LPUNKNOWN) m_pExchExtMessageEvents;
       m_pExchExtMessageEvents->SetContext (m_lContext);
@@ -549,8 +549,8 @@ GpgolExt::QueryInterface(REFIID riid, LPVOID *ppvObj)
   else if (riid == IID_IExchExtAttachedFileEvents)
     {
       *ppvObj = (LPUNKNOWN)m_pExchExtAttachedFileEvents;
-    }  
-  else if (riid == IID_IExchExtPropertySheets) 
+    }
+  else if (riid == IID_IExchExtPropertySheets)
     {
       if (m_lContext != EECONTEXT_PROPERTYSHEETS)
        return E_NOINTERFACE;
@@ -559,15 +559,15 @@ GpgolExt::QueryInterface(REFIID riid, LPVOID *ppvObj)
 //   else if (riid == IID_IOutlookExtItemEvents)
 //     {
 //       *ppvObj = (LPUNKNOWN)m_pOutlookExtItemEvents;
-//     }  
+//     }
   else
     hr = E_NOINTERFACE;
-  
+
   /* On success we need to bump up the reference counter for the
      requested object. */
   if (*ppvObj)
     ((LPUNKNOWN)*ppvObj)->AddRef();
-  
+
   return hr;
 }
 
@@ -579,7 +579,7 @@ GpgolExt::QueryInterface(REFIID riid, LPVOID *ppvObj)
    context code at time of being called. LFLAGS carries flags to
    indicate whether the extension should be installed modal.
 */
-STDMETHODIMP 
+STDMETHODIMP
 GpgolExt::Install(LPEXCHEXTCALLBACK pEECB, ULONG lContext, ULONG lFlags)
 {
   static int version_shown;
@@ -593,7 +593,7 @@ GpgolExt::Install(LPEXCHEXTCALLBACK pEECB, ULONG lContext, ULONG lFlags)
 
   log_debug ("%s:%s: context=%s flags=0x%lx\n", SRCNAME, __func__,
              ext_context_name (lContext), lFlags);
-  
+
   /* Check version.  This install method is called by Outlook even
      before the OOM interface is available, thus we need to keep on
      checking for the olversion until we get one.  Only then we can
@@ -623,13 +623,13 @@ GpgolExt::Install(LPEXCHEXTCALLBACK pEECB, ULONG lContext, ULONG lFlags)
                  (lBuildVersion & EECBGV_BUILDVERSION_MAJOR_MASK) >> 16,
                  (lBuildVersion & EECBGV_BUILDVERSION_MINOR_MASK));
       log_debug ("%s:%s:                 actual version 0x%lx (%u.%u.%u.%u)\n",
-                 SRCNAME, __func__, lActualVersion, 
+                 SRCNAME, __func__, lActualVersion,
                  (unsigned int)((lActualVersion >> 24) & 0xff),
                  (unsigned int)((lActualVersion >> 16) & 0xff),
              (unsigned int)((lActualVersion >> 8) & 0xff),
                  (unsigned int)(lActualVersion & 0xff));
       log_debug ("%s:%s:                virtual version 0x%lx (%u.%u.%u.%u)\n",
-                 SRCNAME, __func__, lVirtualVersion, 
+                 SRCNAME, __func__, lVirtualVersion,
                  (unsigned int)((lVirtualVersion >> 24) & 0xff),
                  (unsigned int)((lVirtualVersion >> 16) & 0xff),
              (unsigned int)((lVirtualVersion >> 8) & 0xff),
@@ -641,7 +641,7 @@ GpgolExt::Install(LPEXCHEXTCALLBACK pEECB, ULONG lContext, ULONG lFlags)
           version_shown = 1;
         }
     }
-  
+
   if (EECBGV_BUILDVERSION_MAJOR
       != (lBuildVersion & EECBGV_BUILDVERSION_MAJOR_MASK))
     {
@@ -649,7 +649,7 @@ GpgolExt::Install(LPEXCHEXTCALLBACK pEECB, ULONG lContext, ULONG lFlags)
                  SRCNAME, __func__, lBuildVersion);
       return S_FALSE;
     }
-  
+
   /* The version numbers as returned by GetVersion are the same for
      OL2003 as well as for recent OL2002.  My guess is that this
      version comes from the Exchange Client Extension API and that has
@@ -661,11 +661,11 @@ GpgolExt::Install(LPEXCHEXTCALLBACK pEECB, ULONG lContext, ULONG lFlags)
     {
       static int shown;
       HWND hwnd;
-      
+
       if (!shown)
         {
           shown = 1;
-          
+
           if (FAILED(pEECB->GetWindow (&hwnd)))
             hwnd = NULL;
           MessageBox (hwnd,
@@ -685,7 +685,7 @@ GpgolExt::Install(LPEXCHEXTCALLBACK pEECB, ULONG lContext, ULONG lFlags)
     {
       install_sinks (pEECB);
     }
-  
+
 
   /* Check context. */
   if (   lContext == EECONTEXT_PROPERTYSHEETS
@@ -700,7 +700,7 @@ GpgolExt::Install(LPEXCHEXTCALLBACK pEECB, ULONG lContext, ULONG lFlags)
     {
       return S_OK;
     }
-  
+
   log_debug ("%s:%s: can't handle this context\n", SRCNAME, __func__);
   return S_FALSE;
 }
@@ -711,7 +711,7 @@ install_forms (void)
 {
   HRESULT hr;
   LPMAPIFORMCONTAINER formcontainer = NULL;
-  static char const *forms[] = 
+  static char const *forms[] =
     {
       "gpgol",
       "gpgol-ms",
@@ -730,11 +730,11 @@ install_forms (void)
     {
     case LANG_ENGLISH: langsuffix = "en"; break;
     case LANG_GERMAN:  langsuffix = "de"; break;
-    default: 
+    default:
       log_debug ("%s:%s: No forms available for primary language %d\n",
                  SRCNAME, __func__, (int)langid);
       /* Don't try again.  */
-      opt.forms_revision = SVN_REVISION;
+      opt.forms_revision = GPGOL_FORMS_REVISION;
       write_options ();
       return;
     }
@@ -776,7 +776,7 @@ install_forms (void)
 
   if (!any_error)
     {
-      opt.forms_revision = SVN_REVISION;
+      opt.forms_revision = GPGOL_FORMS_REVISION;
       write_options ();
     }
 }
@@ -815,7 +815,7 @@ install_sinks (LPEXCHEXTCALLBACK eecb)
           /* Fixme: Register the event sink object somewhere.  */
           disp->Release ();
         }
-      
+
       /* It seems that when installing this sink the first explorer
          has already been created and thus we don't see a NewInspector
          event.  Thus we create the controls direct.  */
@@ -838,10 +838,10 @@ install_sinks (LPEXCHEXTCALLBACK eecb)
           /* Fixme: Register the event sink object somewhere.  */
           disp->Release ();
         }
-      
+
       rootobj->Release ();
     }
-  
+
   log_debug ("%s:%s: Leave", SRCNAME, __func__);
 }
 
@@ -856,7 +856,7 @@ get_eecb_object (LPEXCHEXTCALLBACK eecb)
   LPUNKNOWN pObj = NULL;
   LPDISPATCH pDisp = NULL;
   LPDISPATCH result = NULL;
-  
+
   hr = eecb->QueryInterface (IID_IOutlookExtCallback, (LPVOID*)&pCb);
   if (hr == S_OK && pCb)
     {