2007-08-14 Marcus Brinkmann <marcus@g10code.de>
authorMarcus Brinkmann <mb@g10code.com>
Tue, 14 Aug 2007 17:15:27 +0000 (17:15 +0000)
committerMarcus Brinkmann <mb@g10code.com>
Tue, 14 Aug 2007 17:15:27 +0000 (17:15 +0000)
* README.de.txt, README.en.txt: Document new features.
src/
2007-08-14  Marcus Brinkmann  <marcus@g10code.de>

* src/g4wihelp.c (config_lookup, config_fetch_bool): New functions.
* src/inst-sections.nsi (CalcDefaults): New function.
(.onInit): Call CalcDefaults.
* src/inst-sections.nsi (CalcDepends): New function.  Run it once.
Support auto-config for link selection.
* src/installer-finish.nsi: Support auto-config for start menu folder.

ChangeLog
doc/README.de.txt
doc/README.en.txt
src/g4wihelp.c
src/inst-sections.nsi
src/installer-finish.nsi
src/installer.nsi

index 743dc4c..27259e4 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,12 @@
 2007-08-14  Marcus Brinkmann  <marcus@g10code.de>
 
+       * src/g4wihelp.c (config_lookup, config_fetch_bool): New functions.
+       * src/inst-sections.nsi (CalcDefaults): New function.
+       (.onInit): Call CalcDefaults.
+       * src/inst-sections.nsi (CalcDepends): New function.  Run it once.
+       Support auto-config for link selection.
+       * src/installer-finish.nsi: Support auto-config for start menu folder.
+
        * src/g4wihelp.c (service_create): Auto start service, install as
        local service.
        (service_start): Set argv to NULL if argc is zero.
index 640377f..5b9306c 100644 (file)
@@ -64,11 +64,35 @@ werden, welche als letzte auf der Kommandozeile erscheinen mu
 Installer unterstützt die Option /S für automatischen Ablauf der
 Installation, und die Option /C=INIFILE, durch welche eine .ini Datei
 angegeben werden kann, die genau einen Abschnitt "[gpg4win]" enthalten
-sollte, in der absolute Pfade zu Konfigurationsdateien enthalten sein
-sollten, die mit installiert werden.  Hier ist eine Beispieldatei, die
-zugleich alle erlaubten Schlüssel zeigt:
+sollte.  In dieser Datei können diverse Einstellungen vorgenommen
+werden, inklusive absolute Pfade zu Konfigurationsdateien, die mit
+installiert werden.  Die meisten Einstellungen verändern nur die
+Standardeinstellungen.  Ausnahmen sind unten dokumentiert.  Hier ist
+eine Beispieldatei, die zugleich alle erlaubten Schlüssel zeigt:
 
 [gpg4win]
+  ; Installer Einstellungen.  Weg- oder leer-lassen fuer Standard.
+  inst_gnupg2 = false
+  inst_gpgol = true
+  inst_gpa = true
+  inst_winpt = true
+  inst_gpgee = true
+  inst_claws_mail = false
+  inst_man_novice_de = true
+  inst_man_novice_en = true
+  inst_man_advanced_de = true
+  inst_man_advanced_en = true
+
+  ; Die Stellen, an denen Verknüpfungen erzeugt werden sollen.
+  inst_start_menu = true
+  inst_desktop = false
+  inst_quick_launch_bar = false
+
+  ; Im Gegensatz zu den anderen Optionen überschreibt diese Option die
+  ; Einstellung des Benutzers im Installer.
+  inst_start_menu_folder = GnuPG for Windows
+
+  ; Standard-Konfigurationsdateien.
   gpg.conf = D:\config\gpg-site.conf
   gpg-agent.conf = D:\config\gpg-agent-site.conf
   trustlist.txt = D:\config\trustlist-site.txt
index de6db66..5b3f111 100644 (file)
@@ -57,11 +57,35 @@ The default installation path can be speficied with the /D=PATH
 option, which must be last on the command line.  The installer
 supports the options /S for unattended installation, and the option
 /C=INIFILE to specify an .ini file which should contain exactly one
-section "[gpg4win]" which may specify absolute file paths to
-configuration files that should be preinstalled.  Here is an example
-file which shows all possible keys:
+section "[gpg4win]".  This section contains various installer settings
+and absolute file paths to configuration files that should be
+preinstalled.  Most options just set a different default value.
+Excetions are documented below.  Here is an example file which shows
+all possible keys:
 
 [gpg4win]
+  ; Installer settings.  Do not define or leave empty for defaults.
+  inst_gnupg2 = false
+  inst_gpgol = true
+  inst_gpa = true
+  inst_winpt = true
+  inst_gpgee = true
+  inst_claws_mail = false
+  inst_novice_manual_en = true
+  inst_novice_manual_de = true
+  inst_advanced_manual_de = true
+
+  ; Where to install short-cuts.
+  inst_start_menu = true
+  inst_desktop = false
+  inst_quick_launch_bar = false
+
+  ; Contrary to other settings in this file, the start menu folder
+  ; setting here will override the user selection at installation
+  ; time.
+  inst_start_menu_folder = GnuPG for Windows
+
+  ; Additional configuration files to install.
   gpg.conf = D:\config\gpg-site.conf
   gpg-agent.conf = D:\config\gpg-agent-site.conf
   trustlist.txt = D:\config\trustlist-site.txt
@@ -70,6 +94,7 @@ file which shows all possible keys:
   scdaemon.conf = D:\config\scdaemon-site.txt
   gpa.conf = D:\config\gpa-site.conf
 
+  
 
 
 
index 6eccc54..ad0dbdd 100644 (file)
@@ -631,9 +631,7 @@ service_delete (HWND hwndParent, int string_size, char *variables,
    the beginning or end.  KEY can, for example, be "gpg.conf" (without
    the quotes).  */
 void
-config_init (HWND hwndParent, int string_size, char *variables, 
-            stack_t **stacktop, extra_parameters_t *extra,
-            char **keys, char **values, int max)
+config_init (char **keys, char **values, int max)
 {
   /* First, parse the command line.  */
   char *cmdline;
@@ -793,19 +791,52 @@ config_init (HWND hwndParent, int string_size, char *variables,
 }
 
 
+char *
+config_lookup (char *key)
+{
+#define MAX_KEYS 128
+  static int initialised = 0;
+  static char *keys[MAX_KEYS];
+  static char *values[MAX_KEYS];
+  int i;
+
+  if (initialised == 0)
+    {
+      initialised = 1;
+      config_init (keys, values, MAX_KEYS);
+
+#if 0
+      MessageBox(g_hwndParent, "Configuration File:", 0, MB_OK);
+      i = 0;
+      while (keys[i])
+       {
+         char buf[256];
+         sprintf (buf, "%s=%s\r\n", keys[i], values[i]);
+         MessageBox (g_hwndParent, buf, 0, MB_OK);
+         i++;
+       }
+#endif
+    }
+
+  i = 0;
+  while (keys[i])
+    {
+      if (!strcmp (keys[i], key))
+       return values[i];
+      i++;
+    }
+  
+  return NULL;
+}
+
+
 void __declspec(dllexport) 
 config_fetch (HWND hwndParent, int string_size, char *variables, 
              stack_t **stacktop, extra_parameters_t *extra)
 {
-  SC_HANDLE service;
-  const char *result = NULL;
   char key[256];
-#define MAX_KEYS 64
   int err = 0;
-  static int initialised = 0;
-  static char *keys[MAX_KEYS];
-  static char *values[MAX_KEYS];
-  int i;
+  char *value;
 
   g_hwndParent = hwndParent;
   EXDLL_INIT();
@@ -819,36 +850,47 @@ config_fetch (HWND hwndParent, int string_size, char *variables,
       return;
     }
 
-  if (initialised == 0)
-    {
-      initialised = 1;
-      config_init (hwndParent, string_size, variables, 
-                  stacktop, extra, keys, values, MAX_KEYS);
-    }
+  value = config_lookup (key);
 
-#if 0
-  MessageBox(g_hwndParent, "Configuration File:", 0, MB_OK);
-  i = 0;
-  while (keys[i])
+  setuservariable (INST_R0, value == NULL ? "" : value);
+  return;
+}
+
+
+void __declspec(dllexport) 
+config_fetch_bool (HWND hwndParent, int string_size, char *variables, 
+                  stack_t **stacktop, extra_parameters_t *extra)
+{
+  char key[256];
+  int err = 0;
+  char *value;
+  int result;
+
+  g_hwndParent = hwndParent;
+  EXDLL_INIT();
+
+  /* The expected stack layout: key.  */
+  if (popstring (key, sizeof (key)))
+    err = 1;
+  if (err)
     {
-      char buf[256];
-      sprintf (buf, "%s=%s\r\n", keys[i], values[i]);
-      MessageBox(g_hwndParent, buf, 0, MB_OK);
-      i++;
+      setuservariable (INST_R0, "");
+      return;
     }
-#endif
 
-  i = 0;
-  while (keys[i])
+  value = config_lookup (key);
+  if (value == NULL || *value == '\0')
     {
-      if (!strcmp (keys[i], key))
-       {
-         setuservariable (INST_R0, values[i]);
-         return;
-       }
-      i++;
+      setuservariable (INST_R0, "");
+      return;
     }
   
-  setuservariable (INST_R0, "");
+  result = 0;
+  if (!strcasecmp (value, "true")
+      || !strcasecmp (value, "yes")
+      || atoi (value) != 0)
+    result = 1;
+
+  setuservariable (INST_R0, result == 0 ? "0" : "1");
   return;
 }
index da937dc..dd62910 100644 (file)
 
 !include "Sections.nsh"
 
+
+Function CalcDefaults
+
+# The defaults for the installer-options.ini file.
+g4wihelp::config_fetch_bool "inst_start_menu"
+StrCmp $R0 "" +2
+!insertmacro MUI_INSTALLOPTIONS_WRITE "installer-options.ini" \
+       "Field 2" "State" $R0
+
+g4wihelp::config_fetch_bool "inst_desktop"
+StrCmp $R0 "" +2
+!insertmacro MUI_INSTALLOPTIONS_WRITE "installer-options.ini" \
+       "Field 3" "State" $R0
+
+g4wihelp::config_fetch_bool "inst_quick_launch_bar"
+StrCmp $R0 "" +2
+!insertmacro MUI_INSTALLOPTIONS_WRITE "installer-options.ini" \
+       "Field 4" "State" $R0
+
+
+
+!ifdef HAVE_PKG_GNUPG2
+  g4wihelp::config_fetch_bool "inst_gnupg2"
+  StrCmp $R0 "1" 0 calc_defaults_gnupg2_not_one
+   !insertmacro SelectSection ${SEC_gnupg2}
+   Goto calc_defaults_gnupg2_done
+  calc_defaults_gnupg2_not_one:
+  StrCmp $R0 "0" 0 calc_defaults_gnupg2_done
+   !insertmacro UnselectSection ${SEC_gnupg2}
+calc_defaults_gnupg2_done:
+!endif
+
+!ifdef HAVE_PKG_GPGOL
+  g4wihelp::config_fetch_bool "inst_gpgol"
+  StrCmp $R0 "1" 0 calc_defaults_gpgol_not_one
+   !insertmacro SelectSection ${SEC_gpgol}
+   Goto calc_defaults_gpgol_done
+  calc_defaults_gpgol_not_one:
+  StrCmp $R0 "0" 0 calc_defaults_gpgol_done
+   !insertmacro UnselectSection ${SEC_gpgol}
+calc_defaults_gpgol_done:
+!endif
+
+!ifdef HAVE_PKG_GPA
+  g4wihelp::config_fetch_bool "inst_gpa"
+  StrCmp $R0 "1" 0 calc_defaults_gpa_not_one
+   !insertmacro SelectSection ${SEC_gpa}
+   Goto calc_defaults_gpa_done
+  calc_defaults_gpa_not_one:
+  StrCmp $R0 "0" 0 calc_defaults_gpa_done
+   !insertmacro UnselectSection ${SEC_gpa}
+calc_defaults_gpa_done:
+!endif
+
+!ifdef HAVE_PKG_WINPT
+  g4wihelp::config_fetch_bool "inst_winpt"
+  StrCmp $R0 "1" 0 calc_defaults_winpt_not_one
+   !insertmacro SelectSection ${SEC_winpt}
+   Goto calc_defaults_winpt_done
+  calc_defaults_winpt_not_one:
+  StrCmp $R0 "0" 0 calc_defaults_winpt_done
+   !insertmacro UnselectSection ${SEC_winpt}
+calc_defaults_winpt_done:
+!endif
+
+!ifdef HAVE_PKG_GPGEE
+  g4wihelp::config_fetch_bool "inst_gpgee"
+  StrCmp $R0 "1" 0 calc_defaults_gpgee_not_one
+   !insertmacro SelectSection ${SEC_gpgee}
+   Goto calc_defaults_gpgee_done
+  calc_defaults_gpgee_not_one:
+  StrCmp $R0 "0" 0 calc_defaults_gpgee_done
+   !insertmacro UnselectSection ${SEC_gpgee}
+calc_defaults_gpgee_done:
+!endif
+
+!ifdef HAVE_PKG_CLAWS_MAIL
+  g4wihelp::config_fetch_bool "inst_claws_mail"
+  StrCmp $R0 "1" 0 calc_defaults_claws_mail_not_one
+   !insertmacro SelectSection ${SEC_claws_mail}
+   Goto calc_defaults_claws_mail_done
+  calc_defaults_claws_mail_not_one:
+  StrCmp $R0 "0" 0 calc_defaults_claws_mail_done
+   !insertmacro UnselectSection ${SEC_claws_mail}
+calc_defaults_claws_mail_done:
+!endif
+
+!ifdef HAVE_PKG_MAN_NOVICE_DE
+  g4wihelp::config_fetch_bool "inst_man_novice_de"
+  StrCmp $R0 "1" 0 calc_defaults_man_novice_de_not_one
+   !insertmacro SelectSection ${SEC_man_novice_de}
+   Goto calc_defaults_man_novice_de_done
+  calc_defaults_man_novice_de_not_one:
+  StrCmp $R0 "0" 0 calc_defaults_man_novice_de_done
+   !insertmacro UnselectSection ${SEC_man_novice_de}
+calc_defaults_man_novice_de_done:
+!endif
+
+!ifdef HAVE_PKG_MAN_NOVICE_EN
+  g4wihelp::config_fetch_bool "inst_man_novice_en"
+  StrCmp $R0 "1" 0 calc_defaults_man_novice_en_not_one
+   !insertmacro SelectSection ${SEC_man_novice_en}
+   Goto calc_defaults_man_novice_en_done
+  calc_defaults_man_novice_en_not_one:
+  StrCmp $R0 "0" 0 calc_defaults_man_novice_en_done
+   !insertmacro UnselectSection ${SEC_man_novice_en}
+calc_defaults_man_novice_en_done:
+!endif
+
+!ifdef HAVE_PKG_MAN_ADVANCED_DE
+  g4wihelp::config_fetch_bool "inst_man_advanced_de"
+  StrCmp $R0 "1" 0 calc_defaults_man_advanced_de_not_one
+   !insertmacro SelectSection ${SEC_man_advanced_de}
+   Goto calc_defaults_man_advanced_de_done
+  calc_defaults_man_advanced_de_not_one:
+  StrCmp $R0 "0" 0 calc_defaults_man_advanced_de_done
+   !insertmacro UnselectSection ${SEC_man_advanced_de}
+calc_defaults_man_advanced_de_done:
+!endif
+
+!ifdef HAVE_PKG_MAN_ADVANCED_EN
+  g4wihelp::config_fetch_bool "inst_man_advanced_en"
+  StrCmp $R0 "1" 0 calc_defaults_man_advanced_en_not_one
+   !insertmacro SelectSection ${SEC_man_advanced_en}
+   Goto calc_defaults_man_advanced_en_done
+  calc_defaults_man_advanced_en_not_one:
+  StrCmp $R0 "0" 0 calc_defaults_man_advanced_en_done
+   !insertmacro UnselectSection ${SEC_man_advanced_en}
+calc_defaults_man_advanced_en_done:
+!endif
+
+FunctionEnd
+
+
 Function CalcDepends
   # This section could very well be autogenerated from the
   # information in configure.ac.  Note that it doesn't hurt to have
@@ -513,7 +647,7 @@ Call G4wRunOnce
   SetOutPath $TEMP
 !ifdef SOURCES
   File /oname=gpgspltmp.bmp "${TOP_SRCDIR}/doc/logo/gpg4win-logo-400px.bmp"
-  # We play the tune only for the soruce installer
+  # We play the tune only for the source installer
   File /oname=gpgspltmp.wav "${TOP_SRCDIR}/src/gpg4win-splash.wav"
   g4wihelp::playsound $TEMP\gpgspltmp.wav
   g4wihelp::showsplash 2500 $TEMP\gpgspltmp.bmp
@@ -527,6 +661,7 @@ Call G4wRunOnce
   # generate the file from a template.
   !insertmacro MUI_INSTALLOPTIONS_EXTRACT "installer-options.ini"
 
+  Call CalcDefaults
   Call CalcDepends
   Call CheckOtherGnuPGApps
 FunctionEnd
index 9d5906f..08926fb 100644 (file)
@@ -50,6 +50,9 @@ Section Uninstall
   # Delete the menu entries and any empty parent menus
   #---------------------------------------------------
   !insertmacro MUI_STARTMENU_GETFOLDER Application $MYTMP
+  g4wihelp::config_fetch "inst_start_menu_folder"
+  StrCmp $R0 "" +2
+  StrCpy $MYTMP $R0
   Delete "$SMPROGRAMS\$MYTMP\*.lnk"
   StrCpy $MYTMP "$SMPROGRAMS\$MYTMP"
   startMenuDeleteLoop:
index d720c91..dcae56a 100644 (file)
@@ -243,7 +243,7 @@ LangString T_NoKeyManager ${LANG_ENGLISH} \
 Function CustomPageOptions
   !insertmacro MUI_HEADER_TEXT "$(T_InstallOptions)" "$(T_InstallOptLinks)"
 
-  # Note, that the default selection is done in the ini file
+  # Note that the default selection is done in the ini file.
   !insertmacro MUI_INSTALLOPTIONS_WRITE "installer-options.ini" \
        "Field 1" "Text"  "$(T_InstOptLabelA)"
   !insertmacro MUI_INSTALLOPTIONS_WRITE "installer-options.ini" \