Final changes to install a 64 bit version of GpgEX.
authorWerner Koch <wk@gnupg.org>
Mon, 1 Jul 2013 08:47:43 +0000 (10:47 +0200)
committerWerner Koch <wk@gnupg.org>
Mon, 1 Jul 2013 08:47:43 +0000 (10:47 +0200)
* configure.ac: Drop unneeded dependencies for the 64 bit pekes.
Re-add those tools as regular SPKG modules.

* src/Makefile.am (gpg4win_pkg_libgpg_error_ex_configure)
(gpg4win_pkg_libassuan_ex_configure): Add to build static libraries.
* src/gpg4win.mk.in (ex_ipdir): New.
(stamps/stamp-directories, stamps/stamp-$(1)-ex-05-stow)
(clean-ex-$(1)): Use ex_ipdir.

* src/inst-gettext.nsi, src/uninst-gettext.nsi: Change name of the
installed DLL.

* src/inst-glib.nsi: Move installation of charset.alias to ..
* src/inst-libiconv.nsi: here.

* src/inst-libiconv.nsi, src/uninst-libiconv.nsi: Adjust name of
libiconv.dll but also install under the old name.

* src/installer.nsi: Include x64.nsh.
* src/inst-gpgex.nsi, src/uninst-gpgex.nsi: On 64 bit boxes, install
also the 64 bit version.

* src/gpg4win.nsi: Add RequestExecutionLevel directive.

* src/gpg4win.nsi: Use /SOLID for the compressor settings.
--

Some of the above changes are merely to avoid surprises regarding the
64 bit versions of the modules which used to be installed under
install-ex/ but stowed from the regular install/pkgs directory.

Using /SOLID shrinks the installer considerably (16 to 13 MB for the
light installer).

The use of RequestExecutionLevel is not really needed because Windows
seems to know about NSIS installer but it is nevertheless good style
to correctly mark the installer.

13 files changed:
configure.ac
src/Makefile.am
src/gpg4win-src.nsi
src/gpg4win.mk.in
src/gpg4win.nsi
src/inst-gettext.nsi
src/inst-glib.nsi
src/inst-gpgex.nsi
src/inst-libiconv.nsi
src/installer.nsi
src/uninst-gettext.nsi
src/uninst-gpgex.nsi
src/uninst-libiconv.nsi

index 62ed0ec..0fcd94a 100644 (file)
@@ -363,8 +363,10 @@ GPG4WIN_SPKG([enchant], [pkgconfig glib])
 
 GPG4WIN_SPKG([bzip2])
 GPG4WIN_SPKG([adns])
+GPG4WIN_SPKG([libgpg-error], [libiconv gettext])
 GPG4WIN_SPKG([libgcrypt], [libgpg-error])
 GPG4WIN_SPKG([libksba], [libgpg-error])
+GPG4WIN_SPKG([libassuan], [libgpg-error w32pth])
 GPG4WIN_SPKG([dirmngr], [libgpg-error libgcrypt libassuan libksba w32pth])
 GPG4WIN_SPKG([pinentry], [libiconv gtk+])
 GPG4WIN_SPKG([gpgme], [libgpg-error gnupg2 glib])
@@ -373,6 +375,7 @@ GPG4WIN_SPKG([gnupg2], [libiconv libgcrypt libksba libassuan libgpg-error dnl
                         w32pth zlib bzip2 adns pinentry])
 GPG4WIN_SPKG([pthreads-w32])
 GPG4WIN_SPKG([gpgol], [gpgme libassuan])
+GPG4WIN_SPKG([gpgex], [libassuan])
 GPG4WIN_SPKG([scute], [libgpg-error libassuan])
 GPG4WIN_SPKG([paperkey])
 GPG4WIN_SPKG([gpa], [libiconv gettext zlib gtk+ libpng glib gpgme])
@@ -387,13 +390,14 @@ GPG4WIN_SPKG([claws-mail], [libiconv gettext zlib gtk+ libpng enchant glib dnl
                             gpgme pthreads-w32 crypt regex libetpan gnutls dnl
                             libxml2])
 GPG4WIN_SPKG([gtkhtml2_viewer], [curl claws-mail libxml2])
+GPG4WIN_SPKG([w32pth])
+GPG4WIN_SPKG([libiconv])
+GPG4WIN_SPKG([gettext], [libiconv])
+
 
 # Packages needed for gpgex
-GPG4WIN_SPKGEX([w32pth])
-GPG4WIN_SPKGEX([libiconv])
-GPG4WIN_SPKGEX([gettext], [libiconv])
-GPG4WIN_SPKGEX([libgpg-error], [libiconv gettext])
-GPG4WIN_SPKGEX([libassuan], [libgpg-error w32pth])
+GPG4WIN_SPKGEX([libgpg-error])
+GPG4WIN_SPKGEX([libassuan], [libgpg-error])
 GPG4WIN_SPKGEX([gpgex], [libassuan])
 
 GPG4WIN_IPKG([compendium])
index b9d76bf..77ff1f4 100644 (file)
@@ -186,6 +186,10 @@ gpg4win_pkg_libgpg_error_configure = --silent \
   CPPFLAGS=-I$(idir)/include LDFLAGS=-L$(idir)/lib \
   --enable-static
 
+gpg4win_pkg_libgpg_error_ex_configure = --silent \
+  CPPFLAGS=-I$(idir)/include LDFLAGS=-L$(idir)/lib \
+  --enable-static
+
 # We convert the PO files to UTF-8.  FIXME: This should be done in
 # libgpg-error proper.
 define gpg4win_pkg_libgpg_error_post_install
@@ -197,8 +201,9 @@ define gpg4win_pkg_libgpg_error_post_install
  done)
 endef
 
-gpg4win_pkg_libassuan_configure =  --silent \
-  --enable-static
+gpg4win_pkg_libassuan_configure =  --silent --enable-static
+
+gpg4win_pkg_libassuan_ex_configure =  --silent --enable-static
 
 gpg4win_pkg_libksba_configure = --silent \
   --with-gpg-error-prefix=$(idir)
index 15db0c5..801f556 100644 (file)
@@ -58,6 +58,7 @@
 
 # The installation directory.
 !define ipdir "playground/install/pkgs"
+!define exipdir "playground/install-ex/pkgs"
 !define bpdir "playground/build"
 
 # For source packages we use the standard zip method because it takes
index 6a8c349..a27d8b3 100644 (file)
@@ -29,6 +29,7 @@ ipdir := $(root)/install/pkgs
 tsdir := $(shell pwd)/${top_srcdir}
 pdir := $(shell pwd)/${top_srcdir}/patches
 ex_idir := $(root)/install-ex
+ex_ipdir := $(root)/install-ex/pkgs
 
 # We collect the names of all pkg files used.
 pkg_files =
@@ -42,6 +43,7 @@ stamps/stamp-directories:
        $(MKDIR) $(idir)
        $(MKDIR) $(ipdir)
        $(if $GPGEX_ADD_HOST, $(MKDIR) $(ex_idir))
+       $(if $GPGEX_ADD_HOST, $(MKDIR) $(ex_ipdir))
        touch $(bdir)/versioninfo.txt
        touch stamps/stamp-directories
 
@@ -90,8 +92,8 @@ define SETVARS_EX
        pkgbdir="$(bdir)/$$$${pkg_version}-ex-build";                       \
        pkgpdir="$(pdir)/$$$${pkg_version}-ex";                             \
        pkgpbdir="$(pdir)/$(1)-ex";                                         \
-       pkgidir="$(ipdir)/$$$${pkg_version}-ex";                            \
-       pkgidir_dev="$(ipdir)/$$$${pkg_version_dev}";                       \
+       pkgidir="$(ex_ipdir)/$$$${pkg_version}";                            \
+       pkgidir_dev="$(ex_ipdir)/$$$${pkg_version_dev}";                    \
        pkgcfg="$(call GETVAR,gpg4win_pkg_$(1)_ex_configure)";              \
        pkgextracflags="$(call GETVAR,gpg4win_pkg_$(1)_ex_extracflags)";    \
        pkgmkargs="$(call GETVAR,gpg4win_pkg_$(1)_ex_make_args)";           \
@@ -211,7 +213,7 @@ stamps/stamp-$(1)-ex-04-install: stamps/stamp-$(1)-ex-03-make
 
 stamps/stamp-$(1)-ex-05-stow: stamps/stamp-$(1)-ex-04-install
        ($(call SETVARS_EX,$(1));                               \
-        cd $(ipdir);                                   \
+        cd $(ex_ipdir);                                        \
         $(STOW) -t $(ex_idir) "$$$${pkg_version}")
        touch stamps/stamp-$(1)-ex-05-stow
 
@@ -221,7 +223,7 @@ stamps/stamp-final-ex-$(1): stamps/stamp-$(1)-ex-05-stow
 .PHONY : clean-ex-$(1)
 clean-ex-$(1):
        ($(call SETVARS_EX,$(1));                               \
-        (cd $(ipdir) &&                                \
+        (cd $(ex_ipdir) &&                             \
          ($(STOW) -D "$$$${pkg_version}";              \
           rm -fR "$$$${pkg_version}"));                \
         rm -fR "$$$${pkgsdir}" "$$$${pkgbdir}")
index d4be5be..bb07951 100644 (file)
 !define DEBUG
 !endif
 
+# Most of the included software has implicit requirements for at least
+# NT4 if not even higher.  To be sure require at least Windows XP.
+# Fixme: Enable if we have makensis 2.50
+#TargetMinimalOS 5.1
+
+# Admin privileges are required for installation
+RequestExecutionLevel admin
 
 # The installation directory.
 !define ipdir "playground/install/pkgs"
+!define exipdir "playground/install-ex/pkgs"
 !define bpdir "playground/build"
 
 # Select the best compression algorithm available.  The dictionary
 # size is the default (8 MB).
 !ifndef DISABLE_LZMA
 !ifndef SOURCES
-SetCompressor lzma
+SetCompressor /SOLID lzma
 # SetCompressorDictSize 8
 !endif
 !endif
index 4954f46..59b6227 100644 (file)
@@ -1,18 +1,18 @@
 # inst-gettext.nsi - Installer snippet for gettext.   -*- coding: latin-1; -*-
 # Copyright (C) 2005 g10 Code GmbH
-# 
+#
 # This file is part of GPG4Win.
-# 
+#
 # GPG4Win is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
 # the Free Software Foundation; either version 2 of the License, or
 # (at your option) any later version.
-# 
+#
 # GPG4Win is distributed in the hope that it will be useful,
 # but WITHOUT ANY WARRANTY; without even the implied warranty of
 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 # GNU General Public License for more details.
-# 
+#
 # You should have received a copy of the GNU General Public License
 # along with this program; if not, write to the Free Software
 # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
@@ -32,7 +32,8 @@ Section "-gettext" SEC_gettext
 !ifdef SOURCES
   File ${gpg4win_pkg_gettext_src}
 !else
-  File ${prefix}/bin/intl.dll
+  File ${prefix}/bin/libintl-8.dll
+
 !ifdef DEBUG
   # We install a couple of binaries that may be useful for testing.
   File ${prefix}/bin/gettext.exe
index 737fd24..417ed51 100644 (file)
@@ -50,9 +50,6 @@ Section "-glib" SEC_glib
   File ${prefix}/bin/gspawn-win32-helper-console.exe
   File ${prefix}/bin/gspawn-win32-helper.exe
 
-  SetOutPath "$INSTDIR\lib"
-  File ${prefix}/lib/charset.alias
-
   SetOutPath "$INSTDIR\share\glib-2.0\schemas"
   File ${prefix}/share/glib-2.0/schemas/gschema.dtd
 
index 2523d17..9ba3996 100644 (file)
@@ -1,18 +1,18 @@
 # inst-gpgex.nsi - Installer snippet for gpgex.      -*- coding: latin-1; -*-
 # Copyright (C) 2005, 2007, 2008 g10 Code GmbH
-# 
+#
 # This file is part of GPG4Win.
-# 
+#
 # GPG4Win is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
 # the Free Software Foundation; either version 2 of the License, or
 # (at your option) any later version.
-# 
+#
 # GPG4Win is distributed in the hope that it will be useful,
 # but WITHOUT ANY WARRANTY; without even the implied warranty of
 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 # GNU General Public License for more details.
-# 
+#
 # You should have received a copy of the GNU General Public License
 # along with this program; if not, write to the Free Software
 # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
@@ -21,6 +21,7 @@
 !undef prefix
 !endif
 !define prefix ${ipdir}/gpgex-${gpg4win_pkg_gpgex_version}
+!define exprefix ${exipdir}/gpgex-${gpg4win_pkg_gpgex_version}
 
 
 Section "-removegpgee"
@@ -56,6 +57,7 @@ ${MementoSection} "GpgEX" SEC_gpgex
 
  do_reg:
   # Register the DLL.
+  ClearErrors
   RegDLL "$INSTDIR\gpgex.dll"
   ifErrors 0 +2
      MessageBox MB_OK "$(T_GpgEX_RegFailed)"
@@ -75,6 +77,32 @@ ${MementoSection} "GpgEX" SEC_gpgex
   File ${prefix}/share/doc/gpgex/gpgex-en.html
   File ${prefix}/share/doc/gpgex/gpgex-de.html
 
+
+${If} ${RunningX64}
+
+  # Install the 64 bit version of the dll.
+  SetOutPath "$INSTDIR\bin"
+  ClearErrors
+  SetOverwrite try
+  File ${exprefix}/bin/gpgex.dll
+  SetOverwrite lastused
+  ifErrors 0 do_reg64
+      File /oname=gpgex.dll.tmp ${exprefix}/bin/gpgex.dll
+      Rename /REBOOTOK gpgex.dll.tmp gpgex.dll
+
+ do_reg64:
+  # Register the DLL. We need to register both versions.  However
+  # RegDLL can't be used for 64 bit and InstallLib seems to be a
+  # registry hack.
+  ClearErrors
+  ExecWait '"$SYSDIR\regsvr32" /s "$INSTDIR\bin\gpgex.dll"'
+  ifErrors 0 +2
+     MessageBox MB_OK "$(T_GpgEX_RegFailed) (64 bit)"
+
+  # Note: There is no need to install the help an mo files because
+  # they are identical to those installed by the 32 bit version.
+${EndIf}
+
 !endif
 ${MementoSectionEnd}
 
index b6e7bfc..96ec799 100644 (file)
@@ -1,18 +1,18 @@
 # inst-libiconv.nsi - Installer snippet for libiconv.  -*- coding: latin-1; -*-
 # Copyright (C) 2005 g10 Code GmbH
-# 
+#
 # This file is part of GPG4Win.
-# 
+#
 # GPG4Win is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
 # the Free Software Foundation; either version 2 of the License, or
 # (at your option) any later version.
-# 
+#
 # GPG4Win is distributed in the hope that it will be useful,
 # but WITHOUT ANY WARRANTY; without even the implied warranty of
 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 # GNU General Public License for more details.
-# 
+#
 # You should have received a copy of the GNU General Public License
 # along with this program; if not, write to the Free Software
 # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
@@ -36,23 +36,34 @@ Section "-libiconv" SEC_libiconv
 
   ClearErrors
   SetOverwrite try
-  File "${prefix}/bin/iconv.dll"
+  File "${prefix}/bin/libiconv-2.dll"
   SetOverwrite lastused
   ifErrors 0 +3
-      File /oname=iconv.dll.tmp "${prefix}/bin/iconv.dll"
+      File /oname=libiconv-2.dll.tmp "${prefix}/bin/libiconv-2.dll"
+      Rename /REBOOTOK libiconv-2.dll.tmp libiconv-2.dll
+
+  # Also install it under the name GnuPG and maybe other software
+  # inspects since ages.
+  ClearErrors
+  SetOverwrite try
+  File /oname=iconv.dll "${prefix}/bin/libiconv-2.dll"
+  SetOverwrite lastused
+  ifErrors 0 +3
+      File /oname=iconv.dll.tmp "${prefix}/bin/libiconv-2.dll"
       Rename /REBOOTOK iconv.dll.tmp iconv.dll
 
   # Install a copy in pub; this is a bad hack and should be removed ASAP.
   SetOutPath "$INSTDIR\pub"
   ClearErrors
   SetOverwrite try
-  File "${prefix}/bin/iconv.dll"
+  File /oname=iconv.dll "${prefix}/bin/libiconv-2.dll"
   SetOverwrite lastused
   ifErrors 0 +3
-      File /oname=iconv.dll.tmp "${prefix}/bin/iconv.dll"
+      File /oname=iconv.dll.tmp "${prefix}/bin/libiconv-2.dll"
       Rename /REBOOTOK iconv.dll.tmp iconv.dll
 
-  SetOutPath "$INSTDIR"
+  SetOutPath "$INSTDIR\lib"
+  File ${prefix}/lib/charset.alias
 
 !ifdef DEBUG
   # We install a couple of binaries that may be useful for testing.
index 5a68c3b..1ec916a 100644 (file)
@@ -49,6 +49,9 @@
 # We use the modern UI.
 !include "MUI.nsh"
 
+# We need to know wether we are installing to 64 bit.
+!include "x64.nsh"
+
 # Set the package name.  Note that this name should not be sufficed
 #  with the version because this would get displayed in the start menu.
 Name "${PRETTY_PACKAGE}"
index bf120fa..070078f 100644 (file)
@@ -1,18 +1,18 @@
 # uninst-gettext.nsi - Installer snippet for gettext. -*- coding: latin-1; -*-
 # Copyright (C) 2005 g10 Code GmbH
-# 
+#
 # This file is part of GPG4Win.
-# 
+#
 # GPG4Win is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
 # the Free Software Foundation; either version 2 of the License, or
 # (at your option) any later version.
-# 
+#
 # GPG4Win is distributed in the hope that it will be useful,
 # but WITHOUT ANY WARRANTY; without even the implied warranty of
 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 # GNU General Public License for more details.
-# 
+#
 # You should have received a copy of the GNU General Public License
 # along with this program; if not, write to the Free Software
 # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
@@ -30,6 +30,7 @@ Section "-un.gettext"
   Push "${gpg4win_pkg_gettext_src}"
   Call un.SourceDelete
 !else
+  Delete "$INSTDIR\libintl-8.dll"
   Delete "$INSTDIR\intl.dll"
 !ifdef DEBUG
   Delete "$INSTDIR\gettext.exe"
index df90aa1..b0d0acb 100644 (file)
@@ -1,18 +1,18 @@
 # uninst-gpgex.nsi - Installer snippet for gpgex.    -*- coding: latin-1; -*-
 # Copyright (C) 2005, 2007 g10 Code GmbH
-# 
+#
 # This file is part of GPG4Win.
-# 
+#
 # GPG4Win is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
 # the Free Software Foundation; either version 2 of the License, or
 # (at your option) any later version.
-# 
+#
 # GPG4Win is distributed in the hope that it will be useful,
 # but WITHOUT ANY WARRANTY; without even the implied warranty of
 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 # GNU General Public License for more details.
-# 
+#
 # You should have received a copy of the GNU General Public License
 # along with this program; if not, write to the Free Software
 # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
@@ -56,6 +56,11 @@ Section "-un.gpgex"
   UnRegDLL "$INSTDIR\gpgex.dll"
 
   Delete /REBOOTOK "$INSTDIR\gpgex.dll"
-  RMDir "$INSTDIR"
+
+${If} ${RunningX64}
+  ExecWait '"$SYSDIR\regsvr32" /u /s "$INSTDIR\bin\gpgex.dll"'
+  Delete /REBOOTOK "$INSTDIR\bin\gpgex.dll"
+${EndIf}
+
 !endif
 SectionEnd
index f7df575..19ecc6e 100644 (file)
@@ -1,18 +1,18 @@
 # uninst-libiconv.nsi - Installer snippet for libiconv.-*- coding: latin-1; -*-
 # Copyright (C) 2005 g10 Code GmbH
-# 
+#
 # This file is part of GPG4Win.
-# 
+#
 # GPG4Win is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
 # the Free Software Foundation; either version 2 of the License, or
 # (at your option) any later version.
-# 
+#
 # GPG4Win is distributed in the hope that it will be useful,
 # but WITHOUT ANY WARRANTY; without even the implied warranty of
 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 # GNU General Public License for more details.
-# 
+#
 # You should have received a copy of the GNU General Public License
 # along with this program; if not, write to the Free Software
 # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
@@ -30,6 +30,7 @@ Section "-un.libiconv"
   Push "${gpg4win_pkg_libiconv_src}"
   Call un.SourceDelete
 !else
+  Delete "$INSTDIR\libiconv-2.dll"
   Delete "$INSTDIR\iconv.dll"
   Delete "$INSTDIR\pub\iconv.dll"
 !ifdef DEBUG