Automate W32 installer building.

* 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.
This commit is contained in:
Werner Koch 2012-01-16 16:12:24 +01:00
parent cfb193a1de
commit 81839d2861
6 changed files with 190 additions and 248 deletions

View 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/):

View File

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

View File

@ -1,2 +0,0 @@
Files useful for building W32 versions.

View File

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

View File

@ -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
@ -11,30 +12,9 @@
# 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 i586-mingw32msvc-strip --version >/dev/null 2>&1 ; then
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 [ -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
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
# 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
# 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

View 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)"