-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Package: release.debian.org
User: release.debian....@packages.debian.org
Usertags: unblock
Severity: normal

Please unblock packages mono & fsharp

This is a 2-part fix to resolve bugs 767507 and 767265 (changes were
required in both Mono and FSharp to resolve the FSharp bugs), which
both render FSharp-compiled applications unable to execute (the
interpreter still works, and the compiler still runs)

Debdiffs attached. Diffstat info:

Mono:
 changelog              |    7 +++
 mono.runtime-script    |   98
++++++++++++++++++++++++++++++++++++++++---------
 patches/debian-changes |    7 ++-
 3 files changed, 91 insertions(+), 21 deletions(-)

FSharp:
 changelog                           |   14 ++++++++++++++
 control                             |    2 +-
 fsharp.installcliframework          |    6 +++---
 libfsharp-core4.3-cil.install       |    3 ++-
 libfsharp-core4.3-cil.installcligac |    5 +++++
 5 files changed, 25 insertions(+), 5 deletions(-)

unblock mono/3.2.8+dfsg-8
unblock fsharp/3.1.1.26+dfsg2-3

- -- System Information:
Debian Release: jessie/sid
  APT prefers trusty-updates
  APT policy: (500, 'trusty-updates'), (500, 'trusty-security'), (500,
'trusty'), (100, 'trusty-backports')
Architecture: amd64 (x86_64)
Foreign Architectures: i386

Kernel: Linux 3.13.0-39-generic (SMP w/4 CPU cores)
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1

iQEcBAEBAgAGBQJUW1n7AAoJEMkPnLkOH60MznsH/AnpTdDI/HvRLvNS01CyYD2b
NaDMZ0mvyPhGWMoGSswwDTEo4G0T/9uLjiXMRgZrClfs+p/W7KJ045kUPMMg37b8
eauDjjQLuzsHWtA8kVcSL6vBX/cYbzWmbu/tH5wNKPnRI2ZweCpsWyC0uiTItBPq
eJ8YwKxP6Lwg85wWsYfO9BfNNlv+5LmwnvTrZyfDvgjd2RHASybLSMCpu2fHSat5
VAFR4A3kS0rqhAtyMj5lBzkUUw+uia1324xEky1Ly3K5prml6jRukiVdxtSJSAVG
YKXgsOHMWiMLx6Xpi0K2yWkotuKD3rz+BxB1IQZc2rEc9Ca3C3EKbqinFj3KPYk=
=OaVi
-----END PGP SIGNATURE-----
diff -Nru fsharp-3.1.1.26+dfsg2/debian/changelog 
fsharp-3.1.1.26+dfsg2/debian/changelog
--- fsharp-3.1.1.26+dfsg2/debian/changelog      2014-10-15 14:44:51.000000000 
+0100
+++ fsharp-3.1.1.26+dfsg2/debian/changelog      2014-11-06 10:33:13.000000000 
+0000
@@ -1,3 +1,17 @@
+fsharp (3.1.1.26+dfsg2-3) unstable; urgency=medium
+
+  * [a6804b5] Install sigdata/optdata into the GAC. (Closes: #767507)
+  * [52f8ffb] Depend on Mono 3.2.8+dfsg-8 for installation, since that 
+    is the minimum version to support sigdata/optdata in the GAC.
+
+ -- Jo Shields <jo.shie...@xamarin.com>  Thu, 06 Nov 2014 10:26:05 +0000
+
+fsharp (3.1.1.26+dfsg2-2) unstable; urgency=medium
+
+  * [f082a28] Ensure 4.3.0 assembly gets installed (Closes: #767265)
+
+ -- Jo Shields <jo.shie...@xamarin.com>  Fri, 31 Oct 2014 12:55:19 +0000
+
 fsharp (3.1.1.26+dfsg2-1) unstable; urgency=medium
 
   * [f28700d] Actually delete unneeded binaries from +dfsg.orig.tar.gz
diff -Nru fsharp-3.1.1.26+dfsg2/debian/control 
fsharp-3.1.1.26+dfsg2/debian/control
--- fsharp-3.1.1.26+dfsg2/debian/control        2014-10-15 09:45:49.000000000 
+0100
+++ fsharp-3.1.1.26+dfsg2/debian/control        2014-11-06 10:33:13.000000000 
+0000
@@ -34,7 +34,7 @@
   ${cli:Depends},
   ${shlibs:Depends},
   ${misc:Depends},
-  mono-runtime-common | mono-runtime,
+  mono-runtime-common (>= 3.2.8+dfsg-8~) | mono-runtime (>= 3.2.8+dfsg-8~),
 Description: functional-first programming language - core runtime library
  F# is a multi-paradigm programming language, supporting functional,
  imperative, and object-oriented structures.
diff -Nru fsharp-3.1.1.26+dfsg2/debian/fsharp.installcliframework 
fsharp-3.1.1.26+dfsg2/debian/fsharp.installcliframework
--- fsharp-3.1.1.26+dfsg2/debian/fsharp.installcliframework     2014-10-14 
19:26:02.000000000 +0100
+++ fsharp-3.1.1.26+dfsg2/debian/fsharp.installcliframework     2014-10-31 
12:54:12.000000000 +0000
@@ -1,7 +1,7 @@
 # Core library
-40 /usr/lib/cli/FSharp.Core-4.3/FSharp.Core.dll
-40 /usr/lib/cli/FSharp.Core-4.3/FSharp.Core.sigdata
-40 /usr/lib/cli/FSharp.Core-4.3/FSharp.Core.optdata
+40 /usr/lib/cli/FSharp.Core-4.3/4.0/FSharp.Core.dll
+40 /usr/lib/cli/FSharp.Core-4.3/4.0/FSharp.Core.sigdata
+40 /usr/lib/cli/FSharp.Core-4.3/4.0/FSharp.Core.optdata
 
 45 /usr/lib/cli/FSharp.Core-4.3/FSharp.Core.dll
 45 /usr/lib/cli/FSharp.Core-4.3/FSharp.Core.sigdata
diff -Nru fsharp-3.1.1.26+dfsg2/debian/libfsharp-core4.3-cil.install 
fsharp-3.1.1.26+dfsg2/debian/libfsharp-core4.3-cil.install
--- fsharp-3.1.1.26+dfsg2/debian/libfsharp-core4.3-cil.install  2014-10-14 
19:26:02.000000000 +0100
+++ fsharp-3.1.1.26+dfsg2/debian/libfsharp-core4.3-cil.install  2014-10-31 
12:53:45.000000000 +0000
@@ -1,2 +1,3 @@
-usr/lib/mono/gac/FSharp.Core/4.3*/*       /usr/lib/cli/FSharp.Core-4.3
+usr/lib/mono/gac/FSharp.Core/4.3.0.*/*       /usr/lib/cli/FSharp.Core-4.3/4.0/
+usr/lib/mono/gac/FSharp.Core/4.3.1.*/*       /usr/lib/cli/FSharp.Core-4.3/
 usr/lib/mono/gac/policy.*.FSharp.Core/*   /usr/lib/cli/FSharp.Core-4.3     
diff -Nru fsharp-3.1.1.26+dfsg2/debian/libfsharp-core4.3-cil.installcligac 
fsharp-3.1.1.26+dfsg2/debian/libfsharp-core4.3-cil.installcligac
--- fsharp-3.1.1.26+dfsg2/debian/libfsharp-core4.3-cil.installcligac    
2014-10-14 19:26:02.000000000 +0100
+++ fsharp-3.1.1.26+dfsg2/debian/libfsharp-core4.3-cil.installcligac    
2014-11-06 10:24:58.000000000 +0000
@@ -1,4 +1,9 @@
 /usr/lib/cli/FSharp.Core-4.3/FSharp.Core.dll
+/usr/lib/cli/FSharp.Core-4.3/FSharp.Core.sigdata
+/usr/lib/cli/FSharp.Core-4.3/FSharp.Core.optdata
+/usr/lib/cli/FSharp.Core-4.3/4.0/FSharp.Core.dll
+/usr/lib/cli/FSharp.Core-4.3/4.0/FSharp.Core.sigdata
+/usr/lib/cli/FSharp.Core-4.3/4.0/FSharp.Core.optdata
 
/usr/lib/cli/FSharp.Core-4.3/0.0.0.0__b03f5f7f11d50a3a/policy.2.0.FSharp.Core.dll
 
/usr/lib/cli/FSharp.Core-4.3/0.0.0.0__b03f5f7f11d50a3a/policy.2.3.FSharp.Core.dll
 
/usr/lib/cli/FSharp.Core-4.3/0.0.0.0__b03f5f7f11d50a3a/policy.4.0.FSharp.Core.dll
diff -Nru mono-3.2.8+dfsg/debian/changelog mono-3.2.8+dfsg/debian/changelog
--- mono-3.2.8+dfsg/debian/changelog    2014-07-10 11:19:47.000000000 +0100
+++ mono-3.2.8+dfsg/debian/changelog    2014-11-05 11:45:24.000000000 +0000
@@ -1,3 +1,10 @@
+mono (3.2.8+dfsg-8) unstable; urgency=medium
+
+  * [835c4ca] Add support for non-assembly files installed to the GAC. 
+    This is the first half of a fix to bug #767507.
+
+ -- Jo Shields <jo.shie...@xamarin.com>  Wed, 05 Nov 2014 11:44:40 +0000
+
 mono (3.2.8+dfsg-7) unstable; urgency=medium
 
   * [10016c2] Build libmono-2.0-1 and libmono-2.0-dev for mipsel
diff -Nru mono-3.2.8+dfsg/debian/mono.runtime-script 
mono-3.2.8+dfsg/debian/mono.runtime-script
--- mono-3.2.8+dfsg/debian/mono.runtime-script  2014-07-10 11:19:47.000000000 
+0100
+++ mono-3.2.8+dfsg/debian/mono.runtime-script  2014-11-05 11:25:09.000000000 
+0000
@@ -12,6 +12,8 @@
 # Figure out the mode
 my $mode = shift @ARGV;
 
+my $framework_prefix = "/usr/lib/mono";
+
 if (!defined $mode)
 {
     print STDERR "E: You must supply a mode\n";
@@ -36,7 +38,6 @@
 # the (framework versionĂ—10, full path) pairs
 if ($mode eq "install-framework")
 {
-    my $framework_prefix = "/usr/lib/mono";
     # TODO: We could detect this ourselves
     my %runtime_versions = (20 => "$framework_prefix/2.0",
                            35 => "$framework_prefix/3.5",
@@ -130,10 +131,44 @@
        {
                my $assembly = $_;
                chomp($assembly);
-               my $cmd = "/usr/bin/gacutil -u $assembly > /dev/null";
-               my $res = system($cmd);
-               if ($res > 0) {
+               # The uninstall file can contain two formats - full paths to 
non-assembly entries
+               # (i.e. FSharp sigdata/optdata files), or assembly signature 
stuff in the format
+               # "name, Version=x.x.x.x, Culture=neutral, 
PublicKeyToken=yyyyyyyyyyyyy"
+               #
+               # We can switch behaviour, based on whether it is a path or not 
(if it is a path,
+               # it has a leading /)
+               #
+               # If it's not a path, pass the entry to gacutil to uninstall
+               if ($assembly !~ /^\//)
+               {
+                   my $cmd = "/usr/bin/gacutil -u $assembly > /dev/null";
+                   my $res = system($cmd);
+                   if ($res > 0) {
                        print STDERR "W: removing assembly: $assembly 
failed!\n";
+                   }
+               }
+               # If it is a path, unlink.
+               #
+               # This is often not actually needed - if a parent assembly is 
uninstalled
+               # from the GAC, the sigdata/optdata files are cleaned 
automatically
+               #
+               # We manually unlink if these files are specifically named 
anyway, in case
+               # we ever want to keep companion files in different packages 
(where they would
+               # not be uninstalled by the same GAC cleaning run)
+               else
+               {
+                   # Definitely a link, unlink it please
+                   if (-l "$assembly")
+                   {
+                       unlink $assembly;
+                   }
+                   # The file exists, but is not a link, which means we didn't 
put it
+                   # there, so panic!
+                   elsif (-f "$assembly")
+                   {
+                       print STDERR "W: removing non-assembly file: $assembly 
failed!\n";
+                   }
+                   # If the file doesn't exist, we do nothing - we don't WANT 
it to exist
                }
        }
 
@@ -175,20 +210,47 @@
        exit 1;
     }  
     
-    # Figure out the mono's precise name
-    my $fullname = get_full_name($dll);
-    
-    # Write out the uninstall file
-    print UNINSTALL "$fullname\n";
-    
-    # Install the file. We use the "../../../.." to make it a
-    # relative path to this program (since gacutil doesn't like
-    # absolute paths). There isn't a problem of doing too many
-    # since we typically run from the root context.
-    my $cmd = "(cd `dirname $dll` && "
-       . "/usr/bin/gacutil -i `basename $dll`"
-          . " > /dev/null)";
-    system($cmd) == 0 or die "E: installing Assembly $dll failed\n";
+    # Split the provided assembly path into its components - folder, basename, 
and suffix.
+    # All three are useful
+    my($assemblyfilename, $assemblypath, $assemblysuffix) = (fileparse($dll, 
qr/\.[^.]*/));
+
+    # If the suffix is .dll, assume this is a simple CLI assembly, and use 
gacutil for
+    # processing
+    if (( $assemblysuffix eq ".dll" ) || ( $assemblysuffix eq ".exe" ))
+    {
+       # Figure out the mono's precise name
+       my $fullname = get_full_name($dll);
+
+       # Write out the uninstall file
+       print UNINSTALL "$fullname\n";
+
+       # Install the file. We use the "../../../.." to make it a
+       # relative path to this program (since gacutil doesn't like
+       # absolute paths). There isn't a problem of doing too many
+       # since we typically run from the root context.
+       my $cmd = "(cd `dirname $dll` && "
+           . "/usr/bin/gacutil -i `basename $dll`"
+           . " > /dev/null)";
+       system($cmd) == 0 or die "E: installing Assembly $dll failed\n";
+    }
+    else
+    {
+       # If the extension is not .dll, this is some other file format (e.g. 
FSharp
+       # sigdata/optdata) and we cannot use gacutil.
+       #
+       # First, we determine the path of the assembly which accompanies this 
data file
+       my $parentassembly = "$assemblypath$assemblyfilename.dll";
+       # Then extract the assembly information from this "parent" assembly, 
such as the
+       # version and signing token
+       my $fullname = get_full_name($parentassembly);
+       my($parentname, $parentver, $parentculture, $parenttoken) = split(/, 
[a-zA-z]*=/, $fullname);
+       # And finally, we construct a path to where we know Mono will 
GAC-install the
+       # parent assembly, and put a symlink in there
+       my $targetpath = 
"$framework_prefix/gac/$parentname/$parentver\__$parenttoken/$assemblyfilename$assemblysuffix";
+       symlink($dll, $targetpath);
+       # And write the path to the symlink into the uninstall file
+       print UNINSTALL "$targetpath\n";
+    }
 }
 
 close CLIGAC;
diff -Nru mono-3.2.8+dfsg/debian/patches/debian-changes 
mono-3.2.8+dfsg/debian/patches/debian-changes
--- mono-3.2.8+dfsg/debian/patches/debian-changes       2014-07-10 
11:20:24.000000000 +0100
+++ mono-3.2.8+dfsg/debian/patches/debian-changes       2014-11-05 
11:48:58.000000000 +0000
@@ -5,10 +5,11 @@
  information below has been extracted from the changelog. Adjust it or drop
  it.
  .
- mono (3.2.8+dfsg-7) unstable; urgency=medium
+ mono (3.2.8+dfsg-8) unstable; urgency=medium
  .
-   * [10016c2] Build libmono-2.0-1 and libmono-2.0-dev for mipsel
-Author: Iain Lane <la...@debian.org>
+   * [835c4ca] Add support for non-assembly files installed to the GAC.
+     This is the first half of a fix to bug #767507.
+Author: Jo Shields <jo.shie...@xamarin.com>
 
 ---
 The information above should follow the Patch Tagging Guidelines, please

Reply via email to