* w32installer.nsi: Create a start menu entry and enhanced the
authorWerner Koch <wk@gnupg.org>
Wed, 26 Jan 2005 17:44:48 +0000 (17:44 +0000)
committerWerner Koch <wk@gnupg.org>
Wed, 26 Jan 2005 17:44:48 +0000 (17:44 +0000)
build environment.
* mk-w32-dist: Add more support for above.

scripts/ChangeLog
scripts/distfiles
scripts/mk-w32-dist
scripts/w32installer.nsi

index b4e53af..183e71e 100644 (file)
@@ -1,3 +1,9 @@
+2005-01-26  Werner Koch  <wk@g10code.com>
+
+       * w32installer.nsi: Create a start menu entry and enhanced the
+       build environment.
+       * mk-w32-dist: Add more support for above.
+
 2005-01-11  Werner Koch  <wk@g10code.com>
 
        * w32installer.nsi: New.
index 281051b..39c3a91 100644 (file)
@@ -4,3 +4,4 @@ gnupg.spec.in
 autogen.sh
 mk-gpg-texi
 mk-w32-dist
+w32installer.nsi
index 7eb4219..d455662 100755 (executable)
@@ -1,6 +1,6 @@
 #!/bin/sh
 #
-# Copyright (C) 2000, 2001, 2002, 2004 Free Software Foundation, Inc.
+# Copyright (C) 2000, 2001, 2002, 2004, 2005 Free Software Foundation, Inc.
 #
 # This file is free software; as a special exception the author gives
 # unlimited permission to copy and/or distribute it, with or without
 # WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
 # implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 
-
 set -e
-
 cd dist-w32
 
+tmp="`echo $0 | sed 's,.*gnupg-\([^/]*\)/.*,\1,'`"
+
+topdir=
 bindir=..
 
-if [ -f ../README ]; then
+if [ -f "../gnupg-$tmp/README" ]; then
+    srcdir="../gnupg-$tmp"
+    bindir="../gnupg-$tmp"
+    topdir=".."
+elif [ -f ../README ]; then
     srcdir=..
 elif [ -f ../../README ]; then
     srcdir=../..
@@ -37,7 +42,12 @@ else
    STRIP="mingw32 strip"
 fi
 
+# If we don't have an installer we don't need to prepare for it.
+if ! makensis -version >/dev/null 2>&1 ; then
+    topdir=
+fi
 
+# Figure out the version
 version=$(sed -n 's/^#[ ]*define[ ][ ]*VERSION[ ][ ]*\"\([0-9.a-z-]*\)\"/\1/p' $bindir/config.h)
 prod_version=$(echo "$version"|awk -F'[^0-9]' '{print $1 "." $2 "." $3 ".1"}')
 echo "building version $version ($prod_version)"
@@ -79,6 +89,7 @@ done
 for i in ${srcdir}/po/*.po; do
    lang=$(basename $i .po)
    grep -s $lang ${srcdir}/po/LINGUAS >/dev/null || continue
+   [ -f$lang.mo -a $lang.mo -nt $i ] && continue
 
    fromset=`sed -n '/^"Content-Type:/ s/.*charset=\([a-zA-Z0-9_-]*\).*/\1/p' $i`
    case "$fromset" in 
@@ -95,14 +106,50 @@ for i in ${srcdir}/po/*.po; do
    esac
 done
 
-if makensis -version >/dev/null 2>&1 ; then
-  echo "invokin installer as:"
-  echo makensis -v3 -nocd -DVERSION="${version}" \
+# If we have a topdir, assume the full build environment and 
+# prepare the installer
+if [ -n "$topdir" ]; then
+  winpt_defs=
+  src_defs=
+  buildinfo="`date -u '+%Y-%m-%d %H:%M UTC'`"
+
+  # iconv.dll is a hard requirement
+  if [ ! -f "$topdir/iconv/iconv.dll" ]; then
+    echo "iconv.dll not availavle" >&2
+    exit 1
+  fi
+  ln "$topdir/iconv/iconv.dll" iconv.dll
+  for i in COPYING.LIB README.iconv; do
+     cp ${topdir}/iconv/$i $i.txt
+     todos $i.txt
+  done
+  
+  # WinPT is optional
+  if [ -f "$topdir/winpt/WinPT.exe" ]; then
+     ln "$topdir/winpt/WinPT.exe"      WinPT.exe
+     ln "$topdir/winpt/PTD.dll"        PTD.dll
+     cp "$topdir/winpt/README-0.9.txt" README.winpt.txt
+     cp "$topdir/winpt/NEWS-0.9.txt"   NEWS.winpt.txt
+     cp "$topdir/winpt/keyserver.conf" keyserver.conf
+     winpt_defs="-DWITH_WINPT"
+  fi
+
+  # See whether we should include the source.
+  if [ ! -d "$topdir/tarballs" ]; then
+      # FIXME
+      :
+  fi
+
+  # Now run the installer
+  echo "invoking installer as:"
+  echo makensis -v2 -nocd -DVERSION="${version}" \
            -DPROD_VERSION="${prod_version}" \
-           -DGNUPG_SRCDIR="${srcdir}" ${srcdir}/scripts/w32installer.nsi
-  makensis -v3 -nocd -DVERSION="${version}" \
+           -DGNUPG_SRCDIR="${srcdir}" ${winpt_defs} ${src_defs} \
+           ${srcdir}/scripts/w32installer.nsi
+  BUILDINFO=$buildinfo makensis -v2 -nocd -DVERSION="${version}" \
            -DPROD_VERSION="${prod_version}" \
-           -DGNUPG_SRCDIR="${srcdir}" ${srcdir}/scripts/w32installer.nsi
+           -DGNUPG_SRCDIR="${srcdir}" ${winpt_defs} ${src_defs} \
+           ${srcdir}/scripts/w32installer.nsi
   echo "Installer created" >&2
 else
   zip -9 "gnupg-w32cli-${version}.zip" *
index e0f082a..2606697 100644 (file)
 ; using NSIS.  It is usually used by the mk-w32-dist script.
 ;----------------------------------------------------------------------
 
-; TODO:
-; - Display credit for the installer
-; - Provide the location of the corresponding source
-; - Translate all strings
-
-
 ; We use the modern UI.
 !include "MUI.nsh"
 
 ; -------------
 Name "GNU Privacy Guard"
 
+!ifdef WITH_WINPT
+OutFile "gnupg-w32-${VERSION}.exe"
+!else
 OutFile "gnupg-w32cli-${VERSION}.exe"
+!endif
 
 InstallDir "$PROGRAMFILES\GNU\GnuPG"
 
@@ -54,6 +52,15 @@ VIAddVersionKey "FileDescription" \
     "GnuPG: Encryption and digital signature tool"
 VIAddVersionKey "FileVersion" "${PROD_VERSION}"
 
+; ----------------------
+; Variable declarations
+; ----------------------
+
+Var MYTMP
+Var STARTMENU_FOLDER
+
+Var DOC_INSTALLED
+Var WINPT_INSTALLED
 
 ; ------------------
 ; Interface Settings
@@ -97,6 +104,13 @@ VIAddVersionKey "FileVersion" "${PROD_VERSION}"
 !insertmacro MUI_PAGE_COMPONENTS
 
 !insertmacro MUI_PAGE_DIRECTORY
+
+!define MUI_STARTMENUPAGE_REGISTRY_ROOT "HKCU" 
+!define MUI_STARTMENUPAGE_REGISTRY_KEY "Software\GNU\GnuPG" 
+!define MUI_STARTMENUPAGE_REGISTRY_VALUENAME "Start Menu Folder"
+  
+!insertmacro MUI_PAGE_STARTMENU Application $STARTMENU_FOLDER
+
 !insertmacro MUI_PAGE_INSTFILES
 
 !define MUI_FINISHPAGE_SHOWREADME "README.txt"
@@ -156,8 +170,6 @@ Section "Base" SecBase
 
   WriteRegStr HKLM "Software\GNU\GnuPG" "Install Directory" $INSTDIR
 
-  WriteUninstaller "$INSTDIR\Uninstall.exe"
-  
 SectionEnd ; Section Base
 
 ;----------------------
@@ -180,6 +192,29 @@ Section "Tools" SecTools
 
 SectionEnd ; Section Tools
 
+;------------------
+!ifdef WITH_WINPT
+Section "WinPT" SecWinPT
+;  SectionIn 1
+
+  SetOutPath "$INSTDIR"
+
+  File "WinPT.exe"
+  File "PTD.dll"
+  File "keyserver.conf"
+
+  SetOutPath "$INSTDIR\Doc"
+
+  File "README.winpt.txt"
+
+  WriteRegStr HKCU "Software\GNU\GnuPG" "gpgProgram" "$INSTDIR\gpg.exe"
+
+  StrCpy $WINPT_INSTALLED 1
+
+SectionEnd ; Section WinPT
+!endif
+
+
 ;----------------------
 Section "Documentation" SecDoc
 ;  SectionIn 1
@@ -192,6 +227,12 @@ Section "Documentation" SecDoc
   File "NEWS.txt"
   File "FAQ.txt"
 
+!ifdef WITH_WINPT
+  File "NEWS.winpt.txt"
+!endif ; WITH_WINPT
+
+  StrCpy $DOC_INSTALLED 1
+
 SectionEnd ; Section Documentation
 
 
@@ -204,15 +245,73 @@ Section "Source" SecSource
   ; Note that we include the uncompressed tarball because this allows
   ; far better compression results for the distribution.  We might
   ; want to compress it again after installation.
-  File "gnupg-1.4.0.tar"
+  File "gnupg-${VERSION}.tar"
 
 SectionEnd ; Section Source
 !endif
 
 
-;------------------
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;
+;; The last section is a hidden one; used to finish up things.
+;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+Section "-Finish"
+
+  ;;--------------------------
+  ;;  Create the uninstaller
+  ;;--------------------------
+  WriteUninstaller "$INSTDIR\uninst-gnupg.exe"
+
+  ;;---------------------
+  ;; Create Menu entries
+  ;;---------------------
+  !insertmacro MUI_STARTMENU_WRITE_BEGIN Application
+    
+  CreateDirectory "$SMPROGRAMS\$STARTMENU_FOLDER"
+
+  CreateShortCut "$SMPROGRAMS\$STARTMENU_FOLDER\GnuPG README.lnk" \
+                 "$INSTDIR\Doc\README.txt"
+  CreateShortCut "$SMPROGRAMS\$STARTMENU_FOLDER\GnuPG NEWS.lnk" \
+                 "$INSTDIR\Doc\NEWS.txt"
+
+  IntCmp $DOC_INSTALLED 1 0 +2 +2
+  CreateShortCut "$SMPROGRAMS\$STARTMENU_FOLDER\GnuPG Manual Page.lnk" \
+                 "$INSTDIR\Doc\gpg.man"
+
+
+  IntCmp $WINPT_INSTALLED 1 0 no_winpt_menu no_winpt_menu
+  CreateShortCut "$SMPROGRAMS\$STARTMENU_FOLDER\winpt.lnk" \
+                 "$INSTDIR\winpt.exe"
+  CreateShortCut "$SMPROGRAMS\$STARTMENU_FOLDER\WinPT README.lnk" \
+                 "$INSTDIR\Doc\README.winpt.txt"
+  IntCmp $DOC_INSTALLED 1 0 +2 +2
+  CreateShortCut "$SMPROGRAMS\$STARTMENU_FOLDER\WinPT NEWS.lnk" \
+                 "$INSTDIR\Doc\NEWS.winpt.txt"
+
+ no_winpt_menu:
+
+  CreateShortCut "$SMPROGRAMS\$STARTMENU_FOLDER\uninst-gnupg.lnk" \
+                 "$INSTDIR\uninst-gnupg.exe"
+
+
+  !insertmacro MUI_STARTMENU_WRITE_END
+
+
+SectionEnd ; "-Finish"
+
+
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;
+;; Create the section for the uninstaller
+;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 Section "Uninstall"
 
+  ;;------------------------
+  ;; Delete files
+  ;;------------------------
   Delete "$INSTDIR\gpg.exe"
   Delete "$INSTDIR\gpgkeys_finger.exe"
   Delete "$INSTDIR\gpgkeys_hkp.exe"
@@ -222,6 +321,8 @@ Section "Uninstall"
   Delete "$INSTDIR\Doc\README.txt"
   Delete "$INSTDIR\Doc\README.W32"
   Delete "$INSTDIR\Doc\COPYING.txt"
+  Delete "$INSTDIR\Doc\COPYING.LIB.txt"
+  Delete "$INSTDIR\Doc\README.iconv.txt"
 
   Delete "$INSTDIR\iconv.dll"
 
@@ -229,6 +330,11 @@ Section "Uninstall"
 
   Delete "$INSTDIR\gpgsplit.exe"
   Delete "$INSTDIR\gpgv.exe"
+  Delete "$INSTDIR\WinPT.exe"
+  Delete "$INSTDIR\PTD.dll"
+  Delete "$INSTDIR\Doc\README.winpt.txt"
+  Delete "$INSTDIR\Doc\NEWS.winpt.txt"
+  Delete "$INSTDIR\Doc\keyserver.conf"
 
   Delete "$INSTDIR\Doc\gnupg.man"
   Delete "$INSTDIR\Doc\gpg.man"
@@ -236,13 +342,36 @@ Section "Uninstall"
   Delete "$INSTDIR\Doc\NEWS.txt"
   Delete "$INSTDIR\Doc\FAQ.txt"
 
-  Delete "$INSTDIR\Uninstall.exe"
+  Delete "$INSTDIR\uninst-gnupg.exe"
 
+  ;;------------------------
+  ;; Delete directories
+  ;;------------------------
   RMDir "$INSTDIR\Doc"
   RMDir "$INSTDIR\Src"
   RMDir "$INSTDIR\gnupg.nls"
   RMDir "$INSTDIR"
 
+
+  ;;---------------------------------------------------
+  ;; Delete the menu entries and any empty parent menus
+  ;;---------------------------------------------------
+  !insertmacro MUI_STARTMENU_GETFOLDER Application $MYTMP
+  Delete "$SMPROGRAMS\$MYTMP\*.lnk"
+  StrCpy $MYTMP "$SMPROGRAMS\$MYTMP"
+  startMenuDeleteLoop:
+    ClearErrors
+    RMDir $MYTMP
+    GetFullPathName $MYTMP "$MYTMP\.."
+    IfErrors startMenuDeleteLoopDone
+    StrCmp $MYTMP $SMPROGRAMS startMenuDeleteLoopDone startMenuDeleteLoop
+  startMenuDeleteLoopDone:
+
+
+  ;;-----------------------
+  ;;  Cleanup the registry
+  ;;-----------------------
+  DeleteRegValue HKCU "Software\GNU\GnuPG" "Start Menu Folder"
   DeleteRegValue HKLM "Software\GNU\GnuPG" "Install Directory"
   DeleteRegKey /ifempty HKLM "Software\GNU\GnuPG"
 
@@ -314,6 +443,10 @@ Function InstallIconv
   SetOutPath "$INSTDIR"
   File "iconv.dll"
 
+  SetOutPath "$INSTDIR\doc"
+  File "COPYING.LIB.txt"
+  File "README.iconv.txt"
+
 FunctionEnd
 
 
@@ -327,11 +460,15 @@ LangString T_About ${LANG_ENGLISH} \
   It can be used to encrypt data and to create digital signatures. \
   It includes an advanced key management facility and is compliant \
   with the proposed OpenPGP Internet standard as described in RFC2440. \
-  \r\n\r\nThis is GnuPG version ${VERSION}"
+  \r\n\r\n$_CLICK \
+  \r\n\r\n\r\n\r\n\r\nThis is GnuPG version ${VERSION}\r\n\
+  built on $%BUILDINFO%"
 LangString T_About ${LANG_GERMAN} \
   "GnuPG is das Werzeug aus dem GNU Projekt zur sicheren Kommunikation \
    sowie zum sicheren Speichern von Daten. \
-   \r\n\r\nThis is GnuPG version ${VERSION}"
+   \r\n\r\n$_CLICK \
+   \r\n\r\n\r\n\r\n\r\nDies ist GnuPG version ${VERSION}\r\n\
+   erstellt am $%BUILDINFO%"
 LangString T_ShowReadme ${LANG_ENGLISH} "Show the README file"
 LangString T_ShowReadme ${LANG_GERMAN} "Die README Datei anzeigen"
 
@@ -351,6 +488,13 @@ LangString DESC_SecTools ${LANG_ENGLISH} \
 LangString DESC_SecTools ${LANG_GERMAN} \
       "Weitere Tools wie gpgv und gpgsplit"
 
+!ifdef WITH_WINPT
+LangString DESC_SecWinPT ${LANG_ENGLISH} \
+      "The Windows Privacy Tray (WinPT)"
+LangString DESC_SecWinPT ${LANG_GERMAN} \
+      "Der Windows Privacy Tray (WinPT)"
+!endif
+
 LangString DESC_SecDoc ${LANG_ENGLISH} \
       "Manual pages and a FAQ"
 LangString DESC_SecDoc ${LANG_GERMAN} \
@@ -360,6 +504,9 @@ LangString DESC_SecDoc ${LANG_GERMAN} \
   !insertmacro MUI_DESCRIPTION_TEXT ${SecBase} $(DESC_SecBase)
   !insertmacro MUI_DESCRIPTION_TEXT ${SecNLS} $(DESC_SecNLS)
   !insertmacro MUI_DESCRIPTION_TEXT ${SecTools} $(DESC_SecTools)
+!ifdef WITH_WINPT
+  !insertmacro MUI_DESCRIPTION_TEXT ${SecWinPT} $(DESC_SecWinPT)
+!endif
   !insertmacro MUI_DESCRIPTION_TEXT ${SecDoc} $(DESC_SecDoc)
 !insertmacro MUI_FUNCTION_DESCRIPTION_END