* w32installer.nsi: Create a start menu entry and enhanced the

build environment.
* mk-w32-dist: Add more support for above.
This commit is contained in:
Werner Koch 2005-01-26 17:44:48 +00:00
parent aa62bf505d
commit eb0ee0ba44
4 changed files with 224 additions and 23 deletions

View 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.

View File

@ -4,3 +4,4 @@ gnupg.spec.in
autogen.sh
mk-gpg-texi
mk-w32-dist
w32installer.nsi

View File

@ -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" *

View File

@ -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