~ruther/guix-local

893bd4a8ef39f33ba5c2cf74a750370ee43c9735 — unmush 1 year, 7 months ago 7d96fa6
gnu: Add mono-1.9.1.

* gnu/packages/dotnet.scm (mono-1.9.1): New variable.
* gnu/packages/patches/mono-1.9.1-add-MONO_CREATE_IMAGE_VERSION.patch:
  New patch.
* gnu/packages/patches/mono-1.9.1-fixes.patch: New patch.
* gnu/local.mk (dist_patch_DATA): Register new patches.

Signed-off-by: Efraim Flashner <efraim@flashner.co.il>
Change-Id: I013646625b9e5dbc1cd68ecaf8cf4b591dc016a0
M gnu/local.mk => gnu/local.mk +2 -0
@@ 1828,6 1828,8 @@ dist_patch_DATA =						\
  %D%/packages/patches/module-init-tools-moduledir.patch	\
  %D%/packages/patches/monero-use-system-miniupnpc.patch			\
  %D%/packages/patches/mono-1.2.6-bootstrap.patch		\
  %D%/packages/patches/mono-1.9.1-add-MONO_CREATE_IMAGE_VERSION.patch		\
  %D%/packages/patches/mono-1.9.1-fixes.patch			\
  %D%/packages/patches/mosaicatcher-unbundle-htslib.patch	\
  %D%/packages/patches/mrrescue-support-love-11.patch		\
  %D%/packages/patches/mtools-mformat-uninitialized.patch	\

M gnu/packages/dotnet.scm => gnu/packages/dotnet.scm +58 -0
@@ 397,3 397,61 @@ a C-style programming language from Microsoft that is very similar to Java.")
              license:lgpl2.0+ ;; note: ./mcs/LICENSE.LGPL specifies no version
              ;; mcs/jay
              license:bsd-4))))

(define-public mono-1.9.1
  (package
    (inherit mono-1.2.6)
    (version "1.9.1")
    (name "mono")
    (source (origin
              (method git-fetch)
              (uri (git-reference
                    (url "https://gitlab.winehq.org/mono/mono.git")
                    (commit "mono-1.9.1.1")))
              (file-name (git-file-name name version))
              (sha256
               (base32
                "0s1n3zdhc2alk9smxfdl1kjz7lz2p19gs0ks4hgr864jlmf13bws"))
              (modules '((guix build utils)
                         (ice-9 string-fun)))
              (snippet prepare-mono-source)
              (patches (search-patches
                         "mono-1.9.1-fixes.patch"
                         "mono-1.9.1-add-MONO_CREATE_IMAGE_VERSION.patch"))))
    (native-inputs
     (modify-inputs (package-native-inputs mono-1.2.6)
       (delete "pnet-git")
       (delete "pnetlib-git")
       (prepend mono-1.2.6)
       (append which)
       ;; needed for tests
       (append perl)))
    (arguments
     (substitute-keyword-arguments (package-arguments mono-1.2.6)
       ((#:make-flags _ #f)
        #~(list #$(string-append "CC=" (cc-for-target)) "V=1"))
       ((#:phases phases #~%standard-phases)
        #~(modify-phases #$phases
            (add-before 'configure 'set-cflags
              (lambda _
                ;; apparently can't be set via make flags in this version
                (let ((original (getenv "CFLAGS")))
                  (setenv "CFLAGS" (string-append (or original "")
                                                  (if original " " "")
                                                  "-DARG_MAX=500")))))
            (add-before 'configure 'set-create-image-version
              (lambda _
                ;; pnet produces v2.x assemblies.  Mono does this weird thing
                ;; where it always produces assemblies of the same version as
                ;; the runtime that is running it, which is based on the
                ;; version of the assembly that it loaded, which is based on
                ;; what it decided for the previous compiler... on and on all
                ;; the way back to pnet.  This breaks that chain, because
                ;; otherwise it ends up compiling the initial mcs against .NET
                ;; 2.0 libraries and then running with .NET 1.0 libraries.
                (setenv "MONO_CREATE_IMAGE_VERSION" "v1.1.4322")))
            (add-after 'unpack 'patch-test-driver-shebang
              (lambda _
                (patch-shebang "mono/tests/test-driver")))))
       ((#:tests? _ #f) #f)
       ((#:parallel-tests? _ #f) #f)))))

A gnu/packages/patches/mono-1.9.1-add-MONO_CREATE_IMAGE_VERSION.patch => gnu/packages/patches/mono-1.9.1-add-MONO_CREATE_IMAGE_VERSION.patch +14 -0
@@ 0,0 1,14 @@
diff --git a/mono/metadata/reflection.c b/mono/metadata/reflection.c
index ce053b0ef49..7c51f20c4cf 100644
--- a/mono/metadata/reflection.c
+++ b/mono/metadata/reflection.c
@@ -4336,6 +4336,9 @@ create_dynamic_mono_image (MonoDynamicAssembly *assembly, char *assembly_name, c
 
 	const char *version = mono_get_runtime_info ()->runtime_version;
 
+        char *env_ver = getenv("MONO_CREATE_IMAGE_VERSION");
+        if (env_ver) version = env_ver;
+
 #if HAVE_BOEHM_GC
 	image = GC_MALLOC (sizeof (MonoDynamicImage));
 #else

A gnu/packages/patches/mono-1.9.1-fixes.patch => gnu/packages/patches/mono-1.9.1-fixes.patch +59 -0
@@ 0,0 1,59 @@
diff --git a/data/mono.pc.in b/data/mono.pc.in
index 6da0960db2d..d43bb187218 100644
--- a/data/mono.pc.in
+++ b/data/mono.pc.in
@@ -7,6 +7,6 @@ sysconfdir=@sysconfdir@
 Name: Mono
 Description: Mono Runtime
 Version: @VERSION@
-Requires: glib-2.0 gthread-2.0
+Requires: glib-2.0 gthread-2.0 bdw-gc
 Libs: -L${libdir} @export_ldflags@ -lmono @libmono_ldflags@
 Cflags: -I${includedir} @libmono_cflags@
diff --git a/mono-uninstalled.pc.in b/mono-uninstalled.pc.in
index 7fa3f12dc91..2a0734362fd 100644
--- a/mono-uninstalled.pc.in
+++ b/mono-uninstalled.pc.in
@@ -1,6 +1,6 @@
 Name: Mono
 Description: Mono Runtime
 Version: @VERSION@
-Requires: glib-2.0 gthread-2.0
+Requires: glib-2.0 gthread-2.0 bdw-gc
 Libs: -L@mono_build_root@/mono/mini/.libs @export_ldflags@ -lmono @libmono_ldflags@
 Cflags: -I@abs_top_srcdir@ -I@abs_top_srcdir@/mono @libmono_cflags@
diff --git a/mono/metadata/Makefile.am b/mono/metadata/Makefile.am
index 2e480190c8c..90d0f619959 100644
--- a/mono/metadata/Makefile.am
+++ b/mono/metadata/Makefile.am
@@ -157,7 +157,6 @@ libmonoruntimeinclude_HEADERS = \
 	object.h	\
 	exception.h	\
 	profiler.h	\
-	appdomain.h	\
 	mono-config.h	\
 	debug-helpers.h	\
 	mempool.h
diff --git a/mono/mini/driver.c b/mono/mini/driver.c
index ffa4b5e5e69..85a954960eb 100644
--- a/mono/mini/driver.c
+++ b/mono/mini/driver.c
@@ -1033,6 +1033,7 @@ mono_main (int argc, char* argv[])
 #endif
 	if (!g_thread_supported ())
 		g_thread_init (NULL);
+        GC_allow_register_threads();
 
 	if (mono_running_on_valgrind () && getenv ("MONO_VALGRIND_LEAK_CHECK")) {
 		GMemVTable mem_vtable;
diff --git a/runtime/Makefile.am b/runtime/Makefile.am
index e3a8a21e9e2..587b9f4aa79 100644
--- a/runtime/Makefile.am
+++ b/runtime/Makefile.am
@@ -1,6 +1,3 @@
-# hack to prevent 'check' from depending on 'all'
-AUTOMAKE_OPTIONS = cygnus
-
 tmpinst = _tmpinst
 
 noinst_SCRIPTS = mono-wrapper monodis-wrapper semdel-wrapper