Subject: [PATCH] [WIP] gnu: mono: Update to 6.8.0.105.

From: Pierre Neidhardt <[email-masked]>
Date: Thu, 20 Feb 2020 17:23:36 +0100

* gnu/packages/mono.scm (mono): Update to 6.8.0.105.
---
 gnu/packages/mono.scm                         | 81 ++++++++++++++-----
 .../patches/mono-mdoc-timestamping.patch      |  4 +-
 .../patches/mono-pkgconfig-before-gac.patch   | 65 +++++++++++++++
 3 files changed, 130 insertions(+), 20 deletions(-)
 create mode 100644 gnu/packages/patches/mono-pkgconfig-before-gac.patch

diff --git a/gnu/packages/mono.scm b/gnu/packages/mono.scm
index 5447dd2300..e663140d5c 100644
--- a/gnu/packages/mono.scm
+++ b/gnu/packages/mono.scm
@@ -19,6 +19,9 @@
 
 (define-module (gnu packages mono)
   #:use-module ((guix licenses) #:prefix license:)
+  #:use-module (gnu packages autotools)
+  #:use-module (gnu packages base)
+  #:use-module (gnu packages cmake)
   #:use-module (gnu packages fontutils)
   #:use-module (gnu packages gettext)
   #:use-module (gnu packages glib)
@@ -29,6 +32,7 @@
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages python)
   #:use-module (gnu packages xml)
+  #:use-module (gnu packages xorg)
   #:use-module (gnu packages)
   #:use-module (guix packages)
   #:use-module (guix download)
@@ -38,32 +42,60 @@
 (define-public mono
   (package
     (name "mono")
-    (version "4.4.1.0")
+    (version "6.8.0.105")
     (source (origin
               (method url-fetch)
               (uri (string-append
-                    "http://download.mono-project.com/sources/mono/"
-                    name "-" version
-                    ".tar.bz2"))
+                    "https://download.mono-project.com/sources/mono/"
+                    name "-" version ".tar.xz"))
               (sha256
                (base32
-                "0jibyvyv2jy8dq5ij0j00iq3v74r0y90dcjc3dkspcfbnn37cphn"))
-              (patches (search-patches "mono-mdoc-timestamping.patch"))))
+                "0y11c7w6r96laqckfxnk1ya42hx2c1nfqvdgbpmsk1iw9k29k1sp"))
+              (patches (search-patches "mono-pkgconfig-before-gac.patch"
+                                       ;; TODO: Update this patch.
+                                       ;; "mono-mdoc-timestamping.patch"
+                                       ))))
     (build-system gnu-build-system)
     (native-inputs
      `(("gettext" ,gettext-minimal)
        ("glib" ,glib)
        ("libxslt" ,libxslt)
        ("perl" ,perl)
-       ("python" ,python-2)))
+       ("python" ,python-2)
+       ("cmake" ,cmake)
+       ("which" ,which)
+       ("libgdiplus" ,libgdiplus)
+       ("libx11" ,libx11)
+       ;; TODO: Test if these 2 are necessary.
+       ("automake" ,automake)
+       ("libtool" ,libtool)))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'make-reproducible
            (lambda _
              (substitute* "mono/mini/Makefile.in"
-              (("build_date = [^;]*;")
-               "build_date = (void*) 0;"))
+               (("build_date = [^;]*;")
+                "build_date = (void*) 0;"))
+             #t))
+         (add-after 'unpack 'fix-tests
+           (lambda _
+             (substitute* "mono/eglib/test/path.c"
+               (("const gchar \\*newdir = \"/bin\";")
+                (string-append "const gchar *newdir = \"/tmp\";")))
+             #t))
+         ;; TODO: Update Mono certs.  We need a certificate bundle, which nss-certs does not have.
+         ;; (add-after 'install 'update-mono-key-store
+         ;;   (lambda* (#:key outputs inputs #:allow-other-keys)
+         ;;     (let* ((out (assoc-ref outputs "out"))
+         ;;            (ca (assoc-ref inputs "nss-certs"))
+         ;;            (cert-sync (string-append out "/bin/cert-sync"))))
+         ;;     (invoke cert-sync (string-append ca "/etc/ssl/certs/ca-bundle.crt")
+         (add-after 'install 'install-gmcs
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out")))
+               (symlink (string-append out "/bin/mcs")
+                        (string-append out "/bin/gmcs")))
              #t))
          (add-after 'unpack 'set-env
            (lambda _ ;;* (#:key inputs #:allow-other-keys)
@@ -72,13 +104,15 @@
              ;; ZIP files have "DOS time" which starts in Jan 1980.
              (setenv "SOURCE_DATE_EPOCH" "315532800")
              #t))
-         (add-after 'unpack 'fix-includes
-           (lambda _
-             ;; makedev is in <sys/sysmacros.h> now.  Include it.
-             (substitute* "mono/io-layer/processes.c"
-              (("#ifdef HAVE_SYS_MKDEV_H") "#if 1")
-              (("sys/mkdev.h") "sys/sysmacros.h"))
-             #t))
+         ;; TODO: This fix seems obsolete in Mono 6.
+         ;; (add-after 'unpack 'fix-includes
+         ;;   (lambda _
+         ;;     ;; makedev is in <sys/sysmacros.h> now.  Include it.
+         ;;     (substitute* "mono/io-layer/processes.c"
+         ;;      (("#ifdef HAVE_SYS_MKDEV_H") "#if 1")
+         ;;      (("sys/mkdev.h") "sys/sysmacros.h"))
+         ;;     #t))
+         ;; TODO: Those patches don't seem to be useful anymore.
          (add-after 'unpack 'patch-tests
            (lambda _  ;;* (#:key inputs #:allow-other-keys)
              (substitute* "mono/tests/Makefile.in"
@@ -116,19 +150,30 @@
                  "NO_TEST:=true\n"
                  all
                  "\nrun-test-lib:\n\t@echo skipping test\n"))))))
-       ;; these 4 tests fail
+       ;; TODO: Do these 4 tests still fail?
        #:make-flags `(,(string-append "PLATFORM_DISABLED_TESTS="
                                       " appdomain-unload.exe"
                                       " delegate2.exe"
                                       " finally_guard.exe"
                                       " remoting4.exe"))
-       ;; running tests in parallel fails
+       #:configure-flags (list
+                          (string-append "--x-includes="
+                                         (assoc-ref %build-inputs "libx11")
+                                         "/include")
+                          (string-append "--x-libraries="
+                                         (assoc-ref %build-inputs "libx11")
+                                         "/lib")
+                          (string-append "--with-libgdiplus="
+                                         (assoc-ref %build-inputs "libgdiplus")
+                                         "/lib/libgdiplus.so"))
+       ;; TODO: Does running tests in parallel fail?
        #:parallel-tests? #f))
     (synopsis "Compiler and libraries for the C# programming language")
     (description "Mono is a compiler, vm, debugger and set of libraries for
 C#, a C-style programming language from Microsoft that is very similar to
 Java.")
     (home-page "https://www.mono-project.com/")
+    ;; TODO: Still x11?
     (license license:x11)))
 
 (define-public libgdiplus
diff --git a/gnu/packages/patches/mono-mdoc-timestamping.patch b/gnu/packages/patches/mono-mdoc-timestamping.patch
index d5191a93eb..f7ae99a34f 100644
--- a/gnu/packages/patches/mono-mdoc-timestamping.patch
+++ b/gnu/packages/patches/mono-mdoc-timestamping.patch
@@ -1,5 +1,5 @@
---- mono-4.4.1/mcs/class/monodoc/Monodoc/storage/ZipStorage.cs.orig	2018-11-26 22:16:25.008879747 +0100
-+++ mono-4.4.1/mcs/class/monodoc/Monodoc/storage/ZipStorage.cs	2018-11-26 22:21:53.969770985 +0100
+--- mono-4.4.1/external/api-doc-tools/monodoc/Monodoc/storage/ZipStorage.cs.orig	2018-11-26 22:16:25.008879747 +0100
++++ mono-4.4.1/external/api-doc-tools/monodoc/Monodoc/storage/ZipStorage.cs	2018-11-26 22:21:53.969770985 +0100
 @@ -74,6 +74,12 @@
  				id = GetNewCode ();
  
diff --git a/gnu/packages/patches/mono-pkgconfig-before-gac.patch b/gnu/packages/patches/mono-pkgconfig-before-gac.patch
new file mode 100644
index 0000000000..7632d85039
--- /dev/null
+++ b/gnu/packages/patches/mono-pkgconfig-before-gac.patch
@@ -0,0 +1,65 @@
+diff -Naur mono-4.0.1.old/mcs/tools/xbuild/data/12.0/Microsoft.Common.targets mono-4.0.1/mcs/tools/xbuild/data/12.0/Microsoft.Common.targets
+--- mono-4.0.1.old/mcs/tools/xbuild/data/12.0/Microsoft.Common.targets	2015-04-24 02:26:18.000000000 +0100
++++ mono-4.0.1/mcs/tools/xbuild/data/12.0/Microsoft.Common.targets	2015-05-26 00:52:33.997847464 +0100
+@@ -229,8 +229,8 @@
+ 			$(ReferencePath);
+ 			@(AdditionalReferencePath);
+ 			{HintPathFromItem};
+-			{TargetFrameworkDirectory};
+ 			{PkgConfig};
++			{TargetFrameworkDirectory};
+ 			{GAC};
+ 			{RawFileName};
+ 			$(OutDir)
+diff -Naur mono-4.0.1.old/mcs/tools/xbuild/data/14.0/Microsoft.Common.targets mono-4.0.1/mcs/tools/xbuild/data/14.0/Microsoft.Common.targets
+--- mono-4.0.1.old/mcs/tools/xbuild/data/14.0/Microsoft.Common.targets	2015-04-24 02:26:18.000000000 +0100
++++ mono-4.0.1/mcs/tools/xbuild/data/14.0/Microsoft.Common.targets	2015-05-26 00:52:41.832612748 +0100
+@@ -214,8 +214,8 @@
+ 			$(ReferencePath);
+ 			@(AdditionalReferencePath);
+ 			{HintPathFromItem};
+-			{TargetFrameworkDirectory};
+ 			{PkgConfig};
++			{TargetFrameworkDirectory};
+ 			{GAC};
+ 			{RawFileName};
+ 			$(OutDir)
+diff -Naur mono-4.0.1.old/mcs/tools/xbuild/data/2.0/Microsoft.Common.targets mono-4.0.1/mcs/tools/xbuild/data/2.0/Microsoft.Common.targets
+--- mono-4.0.1.old/mcs/tools/xbuild/data/2.0/Microsoft.Common.targets	2015-04-24 02:26:18.000000000 +0100
++++ mono-4.0.1/mcs/tools/xbuild/data/2.0/Microsoft.Common.targets	2015-05-26 00:52:46.298478961 +0100
+@@ -139,8 +139,8 @@
+ 			$(ReferencePath);
+ 			@(AdditionalReferencePath);
+ 			{HintPathFromItem};
+-			{TargetFrameworkDirectory};
+ 			{PkgConfig};
++			{TargetFrameworkDirectory};
+ 			{GAC};
+ 			{RawFileName};
+ 			$(OutDir)
+diff -Naur mono-4.0.1.old/mcs/tools/xbuild/data/3.5/Microsoft.Common.targets mono-4.0.1/mcs/tools/xbuild/data/3.5/Microsoft.Common.targets
+--- mono-4.0.1.old/mcs/tools/xbuild/data/3.5/Microsoft.Common.targets	2015-04-24 02:26:18.000000000 +0100
++++ mono-4.0.1/mcs/tools/xbuild/data/3.5/Microsoft.Common.targets	2015-05-26 00:52:52.119304583 +0100
+@@ -167,8 +167,8 @@
+ 			$(ReferencePath);
+ 			@(AdditionalReferencePath);
+ 			{HintPathFromItem};
+-			{TargetFrameworkDirectory};
+ 			{PkgConfig};
++			{TargetFrameworkDirectory};
+ 			{GAC};
+ 			{RawFileName};
+ 			$(OutDir)
+diff -Naur mono-4.0.1.old/mcs/tools/xbuild/data/4.0/Microsoft.Common.targets mono-4.0.1/mcs/tools/xbuild/data/4.0/Microsoft.Common.targets
+--- mono-4.0.1.old/mcs/tools/xbuild/data/4.0/Microsoft.Common.targets	2015-04-24 02:26:18.000000000 +0100
++++ mono-4.0.1/mcs/tools/xbuild/data/4.0/Microsoft.Common.targets	2015-05-26 00:52:56.519172776 +0100
+@@ -229,8 +229,8 @@
+ 			$(ReferencePath);
+ 			@(AdditionalReferencePath);
+ 			{HintPathFromItem};
+-			{TargetFrameworkDirectory};
+ 			{PkgConfig};
++			{TargetFrameworkDirectory};
+ 			{GAC};
+ 			{RawFileName};
+ 			$(OutDir)
-- 
2.25.0