diff --git a/scripts/ChangeLog b/scripts/ChangeLog index b4e53afe2..183e71e9e 100644 --- a/scripts/ChangeLog +++ b/scripts/ChangeLog @@ -1,3 +1,9 @@ +2005-01-26 Werner Koch + + * 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 * w32installer.nsi: New. diff --git a/scripts/distfiles b/scripts/distfiles index 281051b52..39c3a9146 100644 --- a/scripts/distfiles +++ b/scripts/distfiles @@ -4,3 +4,4 @@ gnupg.spec.in autogen.sh mk-gpg-texi mk-w32-dist +w32installer.nsi diff --git a/scripts/mk-w32-dist b/scripts/mk-w32-dist index 7eb4219a1..d4556629f 100755 --- a/scripts/mk-w32-dist +++ b/scripts/mk-w32-dist @@ -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 @@ -10,14 +10,19 @@ # 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" * diff --git a/scripts/w32installer.nsi b/scripts/w32installer.nsi index e0f082a78..2606697db 100644 --- a/scripts/w32installer.nsi +++ b/scripts/w32installer.nsi @@ -15,12 +15,6 @@ ; 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" @@ -29,7 +23,11 @@ ; ------------- 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