From 81839d286137b9804aa2f5b943b51663f3c172b6 Mon Sep 17 00:00:00 2001 From: Werner Koch Date: Mon, 16 Jan 2012 16:12:24 +0100 Subject: [PATCH] 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. --- doc/README.W32 | 33 ++-- scripts/autogen.sh | 2 +- scripts/conf-w32/README | 2 - scripts/conf-w32/bzip2-1.diff | 39 ----- scripts/mk-w32-dist | 288 ++++++++++++++++------------------ scripts/w32installer.nsi | 74 +++++---- 6 files changed, 190 insertions(+), 248 deletions(-) delete mode 100644 scripts/conf-w32/README delete mode 100644 scripts/conf-w32/bzip2-1.diff diff --git a/doc/README.W32 b/doc/README.W32 index 7c9fe9ce1..8235552e7 100644 --- a/doc/README.W32 +++ b/doc/README.W32 @@ -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/): diff --git a/scripts/autogen.sh b/scripts/autogen.sh index a60f3cf6a..d820696bb 100755 --- a/scripts/autogen.sh +++ b/scripts/autogen.sh @@ -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 index 12b89c06d..000000000 --- a/scripts/conf-w32/README +++ /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 index 0f1576508..000000000 --- a/scripts/conf-w32/bzip2-1.diff +++ /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 - --#ifdef _WIN32 -+#if defined( _WIN32 ) && 0 - # include - # ifdef small - /* windows.h define small to char */ - - - diff --git a/scripts/mk-w32-dist b/scripts/mk-w32-dist index cd4a4cb99..aad2728bf 100755 --- a/scripts/mk-w32-dist +++ b/scripts/mk-w32-dist @@ -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 </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 diff --git a/scripts/w32installer.nsi b/scripts/w32installer.nsi index c292a0ae3..f40544d06 100644 --- a/scripts/w32installer.nsi +++ b/scripts/w32installer.nsi @@ -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)"