[Gpg4win-commits] r586 - in trunk: . src
scm-commit@wald.intevation.org
scm-commit at wald.intevation.org
Wed Nov 14 18:12:45 CET 2007
Author: marcus
Date: 2007-11-14 18:12:44 +0100 (Wed, 14 Nov 2007)
New Revision: 586
Modified:
trunk/ChangeLog
trunk/src/inst-kleopatra.nsi
trunk/src/make-msi.guids
trunk/src/make-msi.pl
Log:
2007-11-14 Marcus Brinkmann <marcus at g10code.de>
* src/inst-kleopatra.nsi: Prefix kleopatra.bat by $BUILD_DIR.
* src/make-msi.pl: Add INSTDIR\pub to PATH environment for gnupg.
Handle /oname in File statements. Handle upgrades. Register
DLLs. Register services.
* src/make-msi.guids: Update.
Modified: trunk/ChangeLog
===================================================================
--- trunk/ChangeLog 2007-11-13 16:01:58 UTC (rev 585)
+++ trunk/ChangeLog 2007-11-14 17:12:44 UTC (rev 586)
@@ -1,3 +1,11 @@
+2007-11-14 Marcus Brinkmann <marcus at g10code.de>
+
+ * src/inst-kleopatra.nsi: Prefix kleopatra.bat by $BUILD_DIR.
+ * src/make-msi.pl: Add INSTDIR\pub to PATH environment for gnupg.
+ Handle /oname in File statements. Handle upgrades. Register
+ DLLs. Register services.
+ * src/make-msi.guids: Update.
+
2007-11-13 Marcus Brinkmann <marcus at g10code.de>
* src/make-msi.pl: New file.
Modified: trunk/src/inst-kleopatra.nsi
===================================================================
--- trunk/src/inst-kleopatra.nsi 2007-11-13 16:01:58 UTC (rev 585)
+++ trunk/src/inst-kleopatra.nsi 2007-11-14 17:12:44 UTC (rev 586)
@@ -33,7 +33,7 @@
SetOutPath "$INSTDIR\bin"
File ${prefix}/bin/kleopatra.exe
SetOutPath "$INSTDIR"
- File kleopatra.bat
+ File ${BUILD_DIR}/kleopatra.bat
File ${prefix}/bin/libgpgme++-glib.dll
File ${prefix}/bin/libgpgme++-qt.dll
Modified: trunk/src/make-msi.guids
===================================================================
--- trunk/src/make-msi.guids 2007-11-13 16:01:58 UTC (rev 585)
+++ trunk/src/make-msi.guids 2007-11-14 17:12:44 UTC (rev 586)
@@ -2,6 +2,7 @@
c98dadcc-b796-41cf-aff2-bfa1706a5a6f /PRODUCT/1.9.0.581
fb54db39-2456-4fcc-9550-2790db663015 /REGISTRY/HKLM/Software\GNU\GnuPG/Install Directory
ad23691b-1734-4dec-b91a-d4ff286190ea /REGISTRY/HKLM/Software\GNU\GnuPG/gpgProgram
+e0807a2f-4e70-48f8-b047-c5d3e219c3e7 /UPGRADE/1
e3b715b2-757f-4908-a3bf-2bbf7d298b4d PTD.dll
c3ac0e08-d6df-402c-a688-6ed9c1882c09 Qt3Support4.dll
5dfc6d83-0ac3-4e41-bad9-dd3e1b478357 QtAssistantClient4.dll
@@ -73,6 +74,7 @@
996ad039-3d20-4d59-9738-61b37c935d73 jpegexiforient.exe
cc503b23-d91a-4a62-b718-d3d8421ab7b4 jpegtran.exe
02193762-114d-4a94-933f-63fe75eb7cad kcmdwrapper.exe
+92c55686-77ac-4be1-9c11-b4b29ae221ee kleopatra.bat
cd859306-3fdf-4b82-a658-7311ed8c9ef3 lib\gtk-2.0\2.10.0\engines\libpixmap.dll
fa4cf290-a03d-4c1b-959f-ff817038ba70 lib\gtk-2.0\2.10.0\engines\libwimp.dll
9d1e8259-486a-4d68-b4f0-3f872484de74 lib\gtk-2.0\2.10.0\immodules\im-am-et.dll
@@ -146,6 +148,7 @@
d2d12f16-ea10-4602-8a11-11c0cd0c532b pcreposix.dll
61a687c1-323b-4259-9253-cabc98fe5436 pinentry-gtk-2.exe
def76dfd-df61-475b-b804-28ab536dae1a pinentry-w32.exe
+9b2b5969-951e-4c1e-8314-fbf75ce3cbf8 pinentry.exe
2f5d42e7-1de0-434b-884b-6f7752438aea plugins\accessible\qtaccessiblecompatwidgets4.dll
9c507371-c6a9-436e-a392-735bf5cabfbc plugins\accessible\qtaccessiblewidgets4.dll
6be23045-c2f9-4794-a023-2ec27b0c1883 plugins\codecs\qcncodecs4.dll
@@ -169,6 +172,13 @@
4ebf7e3a-b493-4aba-9e85-6e35d7acf82d pngtest.exe
a6fe5108-2c72-4f79-85d6-26d44fa26bfa pnm2png.exe
a6244378-a28a-488b-a5a4-ed87f89a1b84 pthreadGC2.dll
+45126bd1-8ede-4997-99b5-1c6cdba3affd pub\gpa.exe
+36b88ab6-3b92-4870-acb8-f3fc8e7aa20b pub\gpg-connect-agent.exe
+c5d41ce6-542e-4509-80cb-6fc805aa4a44 pub\gpg.exe
+5cc63041-4789-4f74-999b-07cc31b32c80 pub\gpg2.exe
+f24f9221-f347-4435-b818-4c3473d8f4ed pub\gpgsm.exe
+0762e4a3-a292-4d69-a0c9-34fc9747adef pub\gpgsplit.exe
+826eb8d2-14f1-44ff-8fd0-29f891fafa0c pub\gpgv.exe
b5303e90-698c-4823-b982-32bfd2b761b4 rdjpgcom.exe
22c41f80-e04d-4ad9-a18f-65a74df05b89 rpng-win.exe
66c7ad35-6e11-40ed-a74d-2a6c4fb502b1 rpng2-win.exe
Modified: trunk/src/make-msi.pl
===================================================================
--- trunk/src/make-msi.pl 2007-11-13 16:01:58 UTC (rev 585)
+++ trunk/src/make-msi.pl 2007-11-14 17:12:44 UTC (rev 586)
@@ -39,11 +39,8 @@
# TODO:
#
-# UpgradeCode + table
-# Overwrite try files (gpgol, etc)
-# Register DLLs
-# Register services
-# Menu, shortcut, desktop entries
+# DirMngr config files/cache directory? service start fails!!!
+# desktop and quick launch entries, but optional (also startmenu optional)
# The list of all enabled packages.
@::pkgs = ();
@@ -57,6 +54,9 @@
# A hash which maps frobbed package names to a hash of frobbed package
# names on which they depend.
%::deps = ();
+# A hash which contains one key for each file that wants a shortcut in the
+# canonical places (start menu, desktop, quick launch).
+%::shortcuts = ();
$::INSTDIR = 'GnuPG';
$::name = 'GnuPG for Windows';
@@ -197,6 +197,37 @@
}
+sub get_shortcuts
+{
+ my %shortcuts = ();
+
+ # Pending line.
+ my $line;
+
+ # FIXME: Check if file exists.
+ open (FILE, "<inst-sections.nsi") or return;
+ while (<FILE>)
+ {
+ # Combine multiple lines connected with backslashes.
+ $line = $line . $_;
+ if ($line =~ m/^(.*)\\\s*\r?\n$/)
+ {
+ $line = $1 . ' ';
+ next;
+ }
+ $_ = $line;
+ $line = '';
+
+ if (m,^\s*CreateShortCut\s+\"\$SMPROGRAMS\\\$STARTMENU_FOLDER\\[^.]+\.lnk\"\s+\"\$INSTDIR\\([^"]+)\",)
+ {
+ $shortcuts{$1} = 1;
+ }
+ }
+ close (FILE);
+ %::shortcuts = %shortcuts;
+}
+
+
sub collect_all
{
# Input file is $(top_srcdir)/include/config.nsi
@@ -293,12 +324,39 @@
{
$dir = $1;
}
- elsif (m,^\s*File\s+"?\$\{prefix\}(\S+)/([^/"\s]+)"?\s*\r?\n$,)
+ elsif (m,^\s*File\s+"?\$\{(prefix|BUILD_DIR)\}(?:/(\S*))?/([^/"\s]+)"?\s*\r?\n$,)
{
- my $source = "${prefix}$1/$2";
+ my $source = $3;
+
+ $source = "$2/$source" if defined $2;
+ $source = "${prefix}/$source" if $1 eq 'prefix';
+
+ push @files, { source => $source, dir => $dir, target => $3 };
+ push @::sources, $source;
+ }
+ elsif (m,^\s*File\s+"?\$\{BUILD_DIR\}(\S+)/([^/"\s]+)"?\s*\r?\n$,)
+ {
+ my $source = $2;
+ $source = "$1/$source" if ($1 ne '');
push @files, { source => $source, dir => $dir, target => $2 };
push @::sources, $source;
}
+ elsif (m,^\s*File\s+/oname=(\S+)\s+"?\$\{(prefix|BUILD_DIR)\}/([^"\s]+)"?\s*\r?\n$,)
+ {
+ my $target = $1;
+ my $source = $3;
+
+ $source = "${prefix}/$source" if $2 eq 'prefix';
+
+ # Temp files are due to overwrite attempts, which are
+ # handled automatically by the Windows Installer.
+ # Ignore them here.
+ next if $target =~ m/\.tmp$/;
+
+ push @files, { source => $source,
+ dir => $dir, target => $target };
+ push @::sources, $source;
+ }
elsif (m,^\s*WriteRegStr\s+(\S+)\s+"([^"]+)"\s+"([^"]+)"\s+"?([^"]+)"?\s*\r?\n$,)
{
my ($root, $key, $name, $value) = ($1, $2, $3, $4);
@@ -392,8 +450,113 @@
print ' ' x $::level
. " <File Id='f_$pkg->{frobbed_name}_$fileidx' Name='"
. $file->{target} . "' Source='" . $file->{source} . "'"
- . " DefaultLanguage='1033'/>\n";
+ . " DefaultLanguage='1033'>\n";
+
+ # EXCEPTIONS:
+ if ($targetfull eq 'gpgol.dll')
+ {
+ print ' ' x $::level
+ . " <Class Id='{42D30988-1A3A-11DA-C687-000D6080E735}' "
+ . "Context='InprocServer32' Description='GpgOL - The "
+ . "GnuPG Outlook Plugin' ThreadingModel='neutral'/>\n";
+ }
+ if ($targetfull eq 'gpgex.dll')
+ {
+ print ' ' x $::level
+ . " <Class Id='{CCD955E4-5C16-4A33-AFDA-A8947A94946B}' "
+ . "Context='InprocServer32' Description='GpgEX' "
+ . "ThreadingModel='apartment'/>\n";
+ }
+ elsif ($targetfull eq 'gpgee.dll')
+ {
+ print STDERR "ERR: run heat.exe on gpgee.dll and add info\n";
+ exit 1;
+ }
+
+ # Create shortcuts.
+ if (defined $::shortcuts{$targetfull})
+ {
+ print ' ' x $::level
+ . " <Shortcut Id='sm_$pkg->{frobbed_name}_$fileidx' "
+ . "Directory='ProgramMenuDir' Name='$file->{target}'/>\n";
+
+# print ' ' x $::level
+# . " <Shortcut Id='sm_$pkg->{frobbed_name}_$fileidx' "
+# . "Directory='DesktopFolder' Name='$file->{target}'/>\n";
+ }
+
print ' ' x $::level
+ . " </File>\n";
+
+ if (defined $::shortcuts{$targetfull})
+ {
+ # http://www.mail-archive.com/wix-users@lists.sourceforge.net/msg02746.html
+ # -sice:ICE64
+ print ' ' x $::level
+ . " <RemoveFolder Id='rsm_$pkg->{frobbed_name}_$fileidx' "
+ . "Directory='ProgramMenuDir' On='uninstall'/>\n";
+ }
+
+ # EXCEPTIONS:
+ # We use $targetfull because there is also a gpg.exe in pub\.
+ if ($targetfull eq 'gpg.exe')
+ {
+ print ' ' x $::level
+ . " <Environment Id='env_path' Name='PATH' Action='set' "
+ . "System='yes' Part='last' Value='[INSTDIR]pub'/>\n";
+ }
+ elsif ($targetfull eq 'gpgol.dll')
+ {
+ print ' ' x $::level
+ . " <RegistryValue Root='HKLM' Key='Software\\"
+ . "Microsoft\\Exchange\\Client\\Extensions' "
+ . "Name='GpgOL' "
+ . "Value='4.0;[!gpgol.dll];1;11000111111100;11111101' "
+ . "Type='string' Action='write'/>\n";
+ print ' ' x $::level
+ . " <RegistryValue Root='HKLM' Key='Software\\"
+ . "Microsoft\\Exchange\\Client\\Extensions' "
+ . "Name='Outlook Setup Extension' "
+ . "Value='4.0;Outxxx.dll;7;000000000000000;0000000000;OutXXX' "
+ . "Type='string' Action='write'/>\n";
+ }
+ elsif ($targetfull eq 'gpgex.dll')
+ {
+ print ' ' x $::level
+ . " <ProgId Id='*'/>\n";
+ print ' ' x $::level
+ . " <ProgId Id='Directory'/>\n";
+ print ' ' x $::level
+ . " <RegistryValue Root='HKCR' "
+ . "Key='*\\ShellEx\\ContextMenuHandlers\\GpgEX' "
+ . "Value='{CCD955E4-5C16-4A33-AFDA-A8947A94946B}' "
+ . "Type='string' Action='write'/>\n";
+ print ' ' x $::level
+ . " <RegistryValue Root='HKCR' "
+ . "Key='Directory\\ShellEx\\ContextMenuHandlers\\GpgEX' "
+ . "Value='{CCD955E4-5C16-4A33-AFDA-A8947A94946B}' "
+ . "Type='string' Action='write'/>\n";
+ }
+ elsif ($targetfull eq 'gpgee.dll')
+ {
+ print STDERR "ERR: run heat.exe on gpgee.dll and add info\n";
+ exit 1;
+ }
+ elsif ($targetfull eq 'dirmngr.exe')
+ {
+ print ' ' x $::level
+ . " <ServiceInstall Id='s_dirmngr' "
+ . "DisplayName='Directory Manager' "
+ . "Name='DirMngr' ErrorControl='normal' Start='auto' "
+ . "Type='ownProcess' Vital='yes'/>\n";
+
+ print ' ' x $::level
+ . " <ServiceControl Id='s_dirmngr_ctrl' "
+ . "Name='DirMngr' Start='install' Stop='uninstall' "
+ . "Remove='uninstall'/>\n";
+ }
+
+ print ' ' x $::level
. "</Component>\n";
$fileidx++;
}
@@ -410,7 +573,7 @@
. "<Component Id='c_$pkg->{frobbed_name}_r_$regidx' Guid='"
. get_guid ($target) . "'>\n";
print ' ' x $::level
- . " <Registry Id='r_$pkg->{frobbed_name}_$regidx' Root='"
+ . " <RegistryValue Id='r_$pkg->{frobbed_name}_$regidx' Root='"
. $reg->{root} . "' Key='" . $reg->{key} . "' Name='"
. $reg->{name} . "' Action='write' Type='" . $reg->{type}
. "' Value='" . $reg->{value} . "'/>\n";
@@ -505,15 +668,18 @@
# FIXME: Use Vital for all file attributes?
fetch_guids ();
collect_all ();
-get_deps();
+get_deps ();
+get_shortcuts ();
$::product_id = get_guid ("/PRODUCT/$::config{_BUILD_FILEVERSION}");
+$::upgrade_code = get_guid ("/UPGRADE/1");
print <<EOF;
<?xml version='1.0'?>
<Wix xmlns='http://schemas.microsoft.com/wix/2006/wi'>
<Product Name='Gpg4win'
Id='$::product_id'
+ UpgradeCode='$::upgrade_code'
Language='1033'
Version='$::config{_BUILD_FILEVERSION}'
Manufacturer='g10 Code GmbH'>
@@ -524,6 +690,16 @@
InstallPrivileges='elevated'
Manufacturer='g10 Code GmbH'/>
+ <Upgrade Id='$::upgrade_code'>
+ <UpgradeVersion Property='UPGRADEPROP'
+ IncludeMaximum='no'
+ Maximum='$::config{_BUILD_FILEVERSION}'/>
+ </Upgrade>
+
+ <InstallExecuteSequence>
+ <RemoveExistingProducts After='InstallFinalize' />
+ </InstallExecuteSequence>
+
<Condition
Message="You need to be an administrator to install this product.">
Privileged
@@ -552,14 +728,20 @@
</Directory>
EOF
+if (scalar keys %::shortcuts)
+{
+ print <<EOF;
+ <Directory Id='ProgramMenuFolder' Name='PMenu'>
+ <Directory Id='ProgramMenuDir' Name='$::name'/>
+ </Directory>
+EOF
+}
+
#print <<EOF;
-# <Directory Id='ProgramMenuFolder' Name='PMenu'>
-# <Directory Id='ProgramMenuDir' Name='$::name'/>
-# </Directory>
-#
# <Directory Id="DesktopFolder" Name="Desktop"/>
#EOF
+
print <<EOF;
</Directory>
More information about the Gpg4win-commits
mailing list