Automate W32 installer building.
authorWerner Koch <wk@gnupg.org>
Mon, 16 Jan 2012 15:12:24 +0000 (16:12 +0100)
committerWerner Koch <wk@gnupg.org>
Mon, 16 Jan 2012 15:12:24 +0000 (16:12 +0100)
* doc/README.W32: Document new installer build procedure.
* scripts/autogen.sh: Pass all args to the installer (regression fix).
* scripts/conf-w32/README: Remove from repo.
* scripts/conf-w32/bzip2-1.diff: Remove from repo.
* scripts/mk-w32-dist: Rewrite.
* scripts/w32installer.nsi [WITH_PATCHES]: Use constant patch file
name.

doc/README.W32
scripts/autogen.sh
scripts/conf-w32/README [deleted file]
scripts/conf-w32/bzip2-1.diff [deleted file]
scripts/mk-w32-dist
scripts/w32installer.nsi

index 7c9fe9c..8235552 100644 (file)
@@ -101,21 +101,29 @@ directory with the changes relative to the generic version.
 
 The source is distributed as a BZIP2 or GZIP compressed tar archive.
 See the instructions in file README on how to check the integrity of
-that file.  Wir a properly setup build environment, you unpack the
+that file.  With a properly setup build environment, you unpack the
 tarball change to the created directory and run
 
  $ ./autogen.sh --build-w32
  $ make
  $ cp g10/gpg*.exe  /some_windows_drive/
 
-Building a version with the installer is a bit more complex and
-basically works by creating a top directory, unpacking in that top
-directory, switching to the gnupg-1.x.y directory, running
-"./autogen.sh --build-w32" and "make", switching back to the top
-directory, running a "mkdir dist-w32; mkdir iconv", copying the
-required iconv files (iconv.dll, README.iconv, COPYING.LIB) into the
-iconv directory, running gnupg-1.x.y/scripts/mk-w32-dist and voila,
-the installer package will be available in the dist-w32 directory.
+Building a version with the installer requires an install NSIS tool
+and a directory with the iconv files.  The script mk-w32-dist does the
+entire build from the tarball and checks most prerequisites; example:
+
+ $ scripts/mk-w32-dist $(pwd)/gnupg-1.4.3.tar.gz
+
+If you installed the iconv files in a non-standard place you may use
+
+ $ scripts/mk-w32-dist --iconv-dir /foo/bar/ $(pwd)/gnupg-1.4.3.tar.gz
+
+If you need to patch the standard tarball, you can supply a patch file:
+
+ $ scripts/mk-w32-dist $(pwd)/gnupg-1.4.3.tar.gz  mypatches
+
+That patch file will then be part of the installer.
+
 
 
 Copying:
@@ -123,8 +131,9 @@ Copying:
 
 GnuPG is
 
-  Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2004, 
-            2005, 2006, 2007 Free Software Foundation, Inc.
+  Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+            2005, 2006, 2007, 2008, 2009,
+            2010, 2012  Free Software Foundation, Inc.
 
   GnuPG is free software; you can redistribute it and/or modify it
   under the terms of the GNU General Public License as published by
@@ -145,7 +154,7 @@ information and bug reporting addresses pertaining to GnuPG.
 
 For copying conditions of the GNU LIBICONV library see the file
 README.iconv.
-  
+
 The installer software used to create the official binary packages for
 W32 is NSIS (http://nsis.sourceforge.net/):
 
index a60f3cf..d820696 100755 (executable)
@@ -94,7 +94,7 @@ if test "$1" = "--build-w32"; then
     fi
     [ $DIE = yes ] && exit 1
 
-    $tsdir/configure ${conf_CC} --build=${build} --host=${host}
+    $tsdir/configure ${conf_CC} --build=${build} --host=${host} \
                      ${disable_foo_tests}  $*
     exit $?
 fi
diff --git a/scripts/conf-w32/README b/scripts/conf-w32/README
deleted file mode 100644 (file)
index 12b89c0..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-Files useful for building W32 versions.
-
diff --git a/scripts/conf-w32/bzip2-1.diff b/scripts/conf-w32/bzip2-1.diff
deleted file mode 100644 (file)
index 0f15765..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-To include support for BZIP2 compression in GunPG for W32, the patch
-below should be applied to a stock bzip2-1.0.6 source.  The Build as
-usual using the mingw32 cross compiler package from Debian and install
-the library and header file on top of the cross compiler installation
-(/usr/i586-mingw32msvc/lib/).  Note that for ease of maintenance we
-don't use a DLL.                                      [wk 2005-03-14]
-
-
-diff -u orig/bzip2-1.0.2/Makefile bzip2-1.0.2/Makefile
---- orig/bzip2-1.0.2/Makefile  2002-01-26 00:34:53.000000000 +0100
-+++ bzip2-1.0.2/Makefile       2004-11-03 14:10:45.000000000 +0100
-@@ -2,9 +2,9 @@
- SHELL=/bin/sh
- # To assist in cross-compiling
--CC=gcc
--AR=ar
--RANLIB=ranlib
-+CC=i586-mingw32msvc-gcc
-+AR=i586-mingw32msvc-ar
-+RANLIB=i586-mingw32msvc-ranlib
- LDFLAGS=
- # Suitably paranoid flags to avoid bugs in gcc-2.7
-diff -u orig/bzip2-1.0.2/bzlib.h bzip2-1.0.2/bzlib.h
---- orig/bzip2-1.0.2/bzlib.h   2001-12-30 03:19:45.000000000 +0100
-+++ bzip2-1.0.2/bzlib.h        2004-11-03 14:32:41.000000000 +0100
-@@ -113,7 +114,7 @@
- /* Need a definitition for FILE */
- #include <stdio.h>
--#ifdef _WIN32
-+#if defined( _WIN32 ) && 0
- #   include <windows.h>
- #   ifdef small
-       /* windows.h define small to char */
-
-
-
index cd4a4cb..aad2728 100755 (executable)
@@ -1,6 +1,7 @@
 #!/bin/sh
 #
-# Copyright (C) 2000, 2001, 2002, 2004, 2005 Free Software Foundation, Inc.
+# Copyright (C) 2000, 2001, 2002, 2004, 2005,
+#               2012 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
 # 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 "../gnupg-$tmp/README" ]; then
-    srcdir="../gnupg-$tmp"
-    bindir="../gnupg-$tmp"
-    topdir=".."
-elif [ -f ../README ]; then
-    srcdir=..
-elif [ -f ../../README ]; then
-    srcdir=../..
-    bindir=..
-elif [ -f ../../gnupg-stable/README ]; then
-    srcdir=../../gnupg-stable
-elif [ -f ../../../gnupg-stable/README ]; then
-    srcdir=../../../gnupg-stable
-else
-    echo "cannot figure out the source dir" >&2
-    exit 1
-fi
+
+PGM="mk-w32-dist"
+[ -z "$w32root" ] && w32root="$HOME/w32root"
 
 # Windows uses an internal build number.  We use the last day of the
 # year concatenated with the hour. for it.  If it happens that a new
@@ -43,24 +23,112 @@ fi
 # of days.
 if [ "$1" = "--build-number" -a -n "$2" ]; then
    build_number="$2"
-   shift 
+   shift
    shift
 else
    build_number=$(date -u '+%j%H' | sed 's/^0*\(.*\)/\1/')
 fi
 
+if [ "$1" = "--iconv-dir" -a -n "$2" ]; then
+   iconvdir="$2"
+   shift
+   shift
+else
+   iconvdir="${w32root}/share/gnupg-1-extra/iconv"
+fi
+
+if [ $# -lt 1 -o $# -gt 2 -o "$1" = "--help" ]; then
+   echo "usage: $PGM [options] TARBALL [PATCHFILE]" >&2
+   echo "       Options:" >&2
+   echo "         --build-number N    Windows build number" >&2
+   echo "         --iconv-dir DIR     Directory with inconv files" >&2
+   exit 1
+fi
+
+
+if [ ! -d "$iconvdir" ]; then
+   echo "$PGM: iconv directory does not exists (use option --iconv-dir)" >&2
+   exit 1
+fi
+( set +e
+  cd "${iconvdir}"
+  cat <<EOF | sha1sum -c >/dev/null
+44f7289042b71631acac29b2f143330d2da2479e  COPYING.LIB
+3f4262714a3b508cf20428f046d511f7bfb9fd89  README.iconv
+a21c860b81ed158e91b2b921b752f48fda6d6f1e  iconv.dll
+EOF
+  if [ $? != 0 ]; then
+    echo "$PGM: iconv files are not available or not correct" >&2
+    exit 1
+  fi
+  set -e
+)
+
+here="$(pwd)"
+builddir=w32-build-root
+tarball="$1"
+patchfile="$2"
+
+if [ ! -f "$tarball" -o "$(echo "$tarball" | head -c 1)" != "/" ]; then
+    echo "$PGM: tarball does not exist or has no absolute name" >&2
+    exit 1
+fi
 
-if i586-mingw32msvc-strip --version >/dev/null 2>&1 ; then
+if [ -n "$patchfile" -a ! -f "$patchfile" ]; then
+    echo "$PGM: patchfile does not exist" >&2
+    exit 1
+fi
+
+if ! makensis -version >/dev/null 2>&1 ; then
+    echo "$PGM: error: makensis is not installed" >&2
+    exit 1
+fi
+
+
+if i686-w64-mingw32-strip --version >/dev/null 2>&1 ; then
+   STRIP=i686-w64-mingw32-strip
+elif i586-mingw32msvc-strip --version >/dev/null 2>&1 ; then
    STRIP=i586-mingw32msvc-strip
 else
-   STRIP="mingw32 strip"
+   echo "$PGM: error: strip tool not found" >&2
+   exit 1
 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=
+echo "tarball: $tarball" >&2
+version="$(echo "$tarball" | sed 's,.*/gnupg-\(.*\)\.tar\.gz$,\1,')"
+prod_version=$(echo "$version"|awk -F'[^0-9]' '{print $1 "." $2 "." $3 }')
+prod_version="${prod_version}.${build_number}"
+echo "version: $version ($prod_version)" >&2
+
+[ -n "$patchfile" ] && echo "patchfile: $patchfile" >&2
+echo "workdir: $builddir" >&2
+
+echo "preparing work directory ..." >&2
+[ -d "$builddir" ] && rm -rf "$builddir"
+mkdir "$builddir"
+cd "$builddir"
+mkdir dist-w32
+
+echo "unpacking tarball ..." >&2
+tar xzf "$tarball"
+cd gnupg-"$version"
+
+if [ -n "$patchfile" ]; then
+  echo "applying patchfile ..." >&2
+  patch -p1 -t < "$patchfile"
 fi
 
+echo "running configure ..." >&2
+./autogen.sh --build-w32 --silent
+
+echo "running make ..." >&2
+make -s
+
+
+cd ../dist-w32
+srcdir="../gnupg-$version"
+bindir="../gnupg-$version"
+
 
 # A function to return a plain ASCII (or Latin-1) encoded description
 # text for a language identifier.  We need this to display the list of
@@ -103,30 +171,18 @@ get_langname () {
     echo "$r"
 }
 
-
-# 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 }')
-prod_version="${prod_version}.${build_number}"
-echo "building version $version ($prod_version)"
-
-rm * >/dev/null 2>/dev/null || true
-
+echo "copying files ..." >&2
 cp ${bindir}/g10/gpg.exe gpg.exe
 $STRIP gpg.exe
 cp ${bindir}/g10/gpgv.exe gpgv.exe
 $STRIP gpgv.exe
-for name in hkp curl ldap finger; do 
+for name in hkp curl ldap finger; do
   cp ${bindir}/keyserver/gpgkeys_$name.exe gpgkeys_$name.exe
   $STRIP gpgkeys_$name.exe
 done
 cp ${bindir}/tools/gpgsplit.exe gpgsplit.exe
 $STRIP gpgsplit.exe
 
-for i in FAQ; do
-  cp ${bindir}/doc/$i $i.txt
-  todos $i.txt
-done
 man -Tlatin1 -l ${srcdir}/doc/gpg.1 | sed `printf "s/_\b//g;s/\b.//g"`  >gpg.man
 todos gpg.man
 man -Tlatin1 -l ${srcdir}/doc/gpgv.1 | sed `printf "s/_\b//g;s/\b.//g"`  >gpgv.man
@@ -141,15 +197,16 @@ done
 cp ${srcdir}/doc/README.W32 README-W32.txt
 todos README-W32.txt
 
-patches_defs=
-for i in `find "$topdir/patches" -type f \( -name '*.diff' -o -name '*.tar.gz' \)`; do
-  cp $i .
+if [ -n "$patchfile" ]; then
+  echo "copying patch file ..." >&2
+  cp $patchfile patches.diff
   patches_defs="-DWITH_PATCHES"
-done
+fi
 
 
+echo "converting MO files ..." >&2
 # We must distribute the MO files in UTF-8, the conversion is done by
-# gpg at runtime.  To include English at the right position in the list we 
+# gpg at runtime.  To include English at the right position in the list we
 # need a special case.
 langlist=""
 langdesclist=""
@@ -158,15 +215,15 @@ for i in `(ls ${srcdir}/po/*.po; echo ${srcdir}/po/en.po) | sort`; do
    if [ $lang != "en" ]; then
        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 
-         utf8|utf-8|UTF8|UTF-8) 
-           echo "$lang: keeping $fromset" >&2 
+       case "$fromset" in
+         utf8|utf-8|UTF8|UTF-8)
+           echo "$lang: keeping $fromset" >&2
            msgfmt --output-file=$lang.mo $i
            ;;
          *)
-           echo "$lang: converting from $fromset to utf-8" >&2 
+           echo "$lang: converting from $fromset to utf-8" >&2
            iconv --silent --from-code=$fromset --to-code=utf-8 < $i | \
              sed "/^\"Content-Type:/ s/charset=[a-zA-Z0-9_-]*/charset=utf-8/"|\
              msgfmt --output-file=$lang.mo -
@@ -195,107 +252,26 @@ ListItems="$langdesclist"
 EOF
 
 
-# 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'`"
+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 available" >&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 and figure out the
-  # version numbers of the source files.
-  if [ -d "$topdir/tarballs" ]; then
-    have_gnupg_src=no
-    have_libiconv_src=no
-    have_winpt_src=no
-    for i in `find "$topdir/tarballs" -type f -name '*.tar.gz'`; do
-       fname=$(basename "$i" .gz)
-       zcat "$i" > "$fname"
-       case "$fname" in
-           gnupg-*)
-               tmp=$(echo "$fname" | \
-                     sed -n 's/^[^-]*-\([0-9.a-z-]*\)\.tar$/\1/p')
-               echo "gnupg source version is $tmp" >&2
-               if [ "$version" != "$tmp" ]; then
-                   echo "gnupg source version does not match" >&2
-                   exit 1
-               fi
-               have_gnupg_src=yes
-               ;;
-           libiconv-*)
-               tmp=$(echo "$fname" | \
-                     sed -n 's/^[^-]*-\([0-9.a-z-]*\)\.tar$/\1/p')
-               echo "libiconv source version is $tmp" >&2
-               src_defs="$src_defs -DLIBICONV_VERSION=$tmp"
-               have_libiconv_src=yes
-               ;;
-           winpt-*)
-               tmp=$(echo "$fname" | \
-                     sed -n 's/^[^-]*-\([0-9.a-z-]*\)\.tar$/\1/p')
-               echo "winpt source version is $tmp" >&2
-               src_defs="$src_defs -DWINPT_VERSION=$tmp"
-               have_winpt_src=yes
-               ;;
-               
-           *) 
-               echo "WARNING: unknown source file $fname ignored" >&2
-               ;;
-       esac
-    done
-    if [ -n "$src_defs" ]; then
-        if [ $have_gnupg_src = "no" ]; then
-            echo "gnupg source missing" >&2
-            exit 1
-        fi
-        if [ $have_libiconv_src = "no" ]; then
-            echo "libiconv source missing" >&2
-            exit 1
-        fi
-        if [ -n "$winpt_defs" ]; then
-            if [ $have_winpt_src = "no" ]; then
-                echo "winpt source missing" >&2
-                exit 1
-            fi
-        fi
-
-        src_defs="$src_defs -DWITH_SOURCE"
-    fi
-
-  fi
+echo "copying iconv ..." >&2
+cp "${iconvdir}/iconv.dll" iconv.dll
+for i in COPYING.LIB README.iconv; do
+   cp ${iconvdir}/$i $i.txt
+   todos $i.txt
+done
 
-  # Now run the installer
-  echo "invoking installer as:"
-  echo makensis -v0  -nocd -DVERSION="${version}" \
-           -DPROD_VERSION="${prod_version}" \
-           -DGNUPG_SRCDIR="${srcdir}" ${winpt_defs} ${src_defs} \
-           ${patches_defs} ${srcdir}/scripts/w32installer.nsi
-  BUILDINFO=$buildinfo makensis -v0 -nocd -DVERSION="${version}" \
-           -DPROD_VERSION="${prod_version}" \
-           -DGNUPG_SRCDIR="${srcdir}" ${winpt_defs} ${src_defs} \
-           ${patches_defs} ${srcdir}/scripts/w32installer.nsi
-  echo "Installer created" >&2
-else
-  zip -9 "gnupg-w32cli-${version}.zip" *
-  echo "ZIP archive created" >&2
-fi
+# Now run the installer
+echo "invoking installer as:"
+echo makensis -v0  -nocd -DVERSION="${version}" \
+         -DPROD_VERSION="${prod_version}" \
+         -DGNUPG_SRCDIR="${srcdir}" ${winpt_defs} ${src_defs} \
+         ${patches_defs} ${srcdir}/scripts/w32installer.nsi
+BUILDINFO=$buildinfo makensis -v0 -nocd -DVERSION="${version}" \
+         -DPROD_VERSION="${prod_version}" \
+         -DGNUPG_SRCDIR="${srcdir}" ${winpt_defs} ${src_defs} \
+         ${patches_defs} ${srcdir}/scripts/w32installer.nsi
+mv gnupg-w32cli-${version}.exe "${here}"/
+cd "${here}"
+echo "gnupg-w32cli-${version}.exe ready." >&2
index c292a0a..f40544d 100644 (file)
@@ -68,12 +68,12 @@ Var STARTMENU_FOLDER
 !define MUI_UNFINISHPAGE_NOAUTOCLOSE
 
 ; Remember the installer language
-!define MUI_LANGDLL_REGISTRY_ROOT "HKCU" 
-!define MUI_LANGDLL_REGISTRY_KEY "Software\GNU\GnuPG" 
+!define MUI_LANGDLL_REGISTRY_ROOT "HKCU"
+!define MUI_LANGDLL_REGISTRY_KEY "Software\GNU\GnuPG"
 !define MUI_LANGDLL_REGISTRY_VALUENAME "Installer Language"
 
 ; -----
-; Pages      
+; Pages
 ; -----
 
 !define MUI_WELCOMEPAGE_TEXT "$(T_About)"
@@ -96,10 +96,10 @@ Page custom CustomPageOptions
 
 !insertmacro MUI_PAGE_DIRECTORY
 
-!define MUI_STARTMENUPAGE_REGISTRY_ROOT "HKCU" 
-!define MUI_STARTMENUPAGE_REGISTRY_KEY "Software\GNU\GnuPG" 
+!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
@@ -110,7 +110,7 @@ Page custom CustomPageOptions
 !define MUI_FINISHPAGE_LINK_LOCATION "http://www.gnupg.org/"
 !insertmacro MUI_PAGE_FINISH
 
-  
+
 !insertmacro MUI_UNPAGE_CONFIRM
 !insertmacro MUI_UNPAGE_INSTFILES
 
@@ -128,7 +128,7 @@ Page custom CustomPageOptions
 
 !insertmacro MUI_RESERVEFILE_LANGDLL
 !insertmacro MUI_RESERVEFILE_INSTALLOPTIONS
-ReserveFile "opt.ini" 
+ReserveFile "opt.ini"
 ReserveFile "COPYING.txt"
 ReserveFile "README-W32.txt"
 #ReserveFile "${NSISDIR}/Plugins/System.dll"
@@ -220,7 +220,6 @@ Section "Documentation" SecDoc
   File "gpg.man"
   File "gpgv.man"
   File "NEWS.txt"
-  File "FAQ.txt"
 
 !ifdef WITH_WINPT
   File "NEWS.winpt.txt"
@@ -228,8 +227,7 @@ Section "Documentation" SecDoc
 
 !ifdef WITH_PATCHES
   SetOutPath "$INSTDIR\Src"
-  File '*.diff'
-  File '*.tar.gz'
+  File 'patches.diff'
 !endif
 
 SectionEnd ; Section Documentation
@@ -285,7 +283,7 @@ Section "-Finish"
   ;; Create Menu entries
   ;;---------------------
   !insertmacro MUI_STARTMENU_WRITE_BEGIN Application
-    
+
   CreateDirectory "$SMPROGRAMS\$STARTMENU_FOLDER"
 
   CreateShortCut "$SMPROGRAMS\$STARTMENU_FOLDER\GnuPG README.lnk" \
@@ -295,25 +293,25 @@ Section "-Finish"
   CreateShortCut "$SMPROGRAMS\$STARTMENU_FOLDER\GnuPG NEWS.lnk" \
                  "$INSTDIR\Doc\NEWS.txt"
 
-  SectionGetFlags ${SecDoc} $R0 
-  IntOp $R0 $R0 & ${SF_SELECTED} 
-  IntCmp $R0 ${SF_SELECTED} 0 +2 
+  SectionGetFlags ${SecDoc} $R0
+  IntOp $R0 $R0 & ${SF_SELECTED}
+  IntCmp $R0 ${SF_SELECTED} 0 +2
   CreateShortCut "$SMPROGRAMS\$STARTMENU_FOLDER\GnuPG Manual Page.lnk" \
                  "$INSTDIR\Doc\gpg.man"
 
 
 !ifdef WITH_WINPT
-  SectionGetFlags ${SecWinPT} $R0 
-  IntOp $R0 $R0 & ${SF_SELECTED} 
-  IntCmp $R0 ${SF_SELECTED} 0 no_winpt_menu 
+  SectionGetFlags ${SecWinPT} $R0
+  IntOp $R0 $R0 & ${SF_SELECTED}
+  IntCmp $R0 ${SF_SELECTED} 0 no_winpt_menu
   CreateShortCut "$SMPROGRAMS\$STARTMENU_FOLDER\winpt.lnk" \
                  "$INSTDIR\winpt.exe"
   CreateShortCut "$SMPROGRAMS\$STARTMENU_FOLDER\WinPT README.lnk" \
                  "$INSTDIR\Doc\README.winpt.txt"
 
-  SectionGetFlags ${SecDoc} $R0 
-  IntOp $R0 $R0 & ${SF_SELECTED} 
-  IntCmp $R0 ${SF_SELECTED} 0 +2 
+  SectionGetFlags ${SecDoc} $R0
+  IntOp $R0 $R0 & ${SF_SELECTED}
+  IntCmp $R0 ${SF_SELECTED} 0 +2
   CreateShortCut "$SMPROGRAMS\$STARTMENU_FOLDER\WinPT NEWS.lnk" \
                  "$INSTDIR\Doc\NEWS.winpt.txt"
 
@@ -330,17 +328,17 @@ Section "-Finish"
   ;;-----------------
   ;; Set the language
   ;;-----------------
-  SectionGetFlags ${SecNLS} $R0 
-  IntOp $R0 $R0 & ${SF_SELECTED} 
+  SectionGetFlags ${SecNLS} $R0
+  IntOp $R0 $R0 & ${SF_SELECTED}
   IntCmp $R0 ${SF_SELECTED} 0 lang_none
-  
+
   !insertmacro MUI_INSTALLOPTIONS_READ $R0 "opt.ini" "Field 1" "ListItems"
   DetailPrint "Available languages: $R0"
   !insertmacro MUI_INSTALLOPTIONS_READ $R1 "opt.ini" "Field 1" "State"
   DetailPrint "Selected language: $R1"
 
   StrCmp $R1 "" lang_none +1
-  ${StrStr} $R2 $R0 $R1 
+  ${StrStr} $R2 $R0 $R1
   StrCmp $R2 "" lang_none +1
   ${StrTok} $R3 $R2 " " "0" "1"
   goto lang_set_finish
@@ -463,13 +461,13 @@ Function .onInit
 
   !insertmacro MUI_INSTALLOPTIONS_EXTRACT "opt.ini"
 
-FunctionEnd 
+FunctionEnd
 
 
-Function un.onInit 
+Function un.onInit
 
   !insertmacro MUI_UNGETLANGUAGE
-  
+
 FunctionEnd
 
 
@@ -490,19 +488,19 @@ Function PrintNonAdminWarning
 FunctionEnd
 
 
-Function CustomPageOptions  
-  SectionGetFlags ${SecNLS} $R0 
-  IntOp $R0 $R0 & ${SF_SELECTED} 
-  IntCmp $R0 ${SF_SELECTED} show 
-  Abort 
- show: 
+Function CustomPageOptions
+  SectionGetFlags ${SecNLS} $R0
+  IntOp $R0 $R0 & ${SF_SELECTED}
+  IntCmp $R0 ${SF_SELECTED} show
+
+  Abort
+
+ show:
   !insertmacro MUI_HEADER_TEXT "$(T_InstallOptions)" "$(T_SelectLanguage)"
   !insertmacro MUI_INSTALLOPTIONS_READ $R0 "opt.ini" "Field 1" "ListItems"
-  ReadRegStr $R1 HKCU "Software\GNU\GnuPG" "Lang" 
+  ReadRegStr $R1 HKCU "Software\GNU\GnuPG" "Lang"
   StrCmp $R1 "" use_default +1
-  ${StrStr} $R2 $R0 "$R1 - " 
+  ${StrStr} $R2 $R0 "$R1 - "
   StrCmp $R2 "" +1 set_lang
  use_default:
   StrCpy $R2 "$(T_langid) - $(T_langname)"