[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#768305: unblock: mono/3.2.8+dfsg-8 & fsharp/3.1.1.26+dfsg2-3



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

Package: release.debian.org
User: release.debian.org@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.shields@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.shields@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.shields@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 <laney@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.shields@xamarin.com>
 
 ---
 The information above should follow the Patch Tagging Guidelines, please

Reply to: