--- Begin Message ---
-----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
--- End Message ---