diff options
Diffstat (limited to 'nixpkgs/pkgs/development/compilers/mono')
7 files changed, 267 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/development/compilers/mono/4.nix b/nixpkgs/pkgs/development/compilers/mono/4.nix new file mode 100644 index 000000000000..0b283d4f1778 --- /dev/null +++ b/nixpkgs/pkgs/development/compilers/mono/4.nix @@ -0,0 +1,9 @@ +{ callPackage, Foundation, libobjc, stdenv, lib }: + +callPackage ./generic.nix ({ + inherit Foundation libobjc; + version = "4.8.1.0"; + sha256 = "1vyvp2g28ihcgxgxr8nhzyzdmzicsh5djzk8dk1hj5p5f2k3ijqq"; + enableParallelBuilding = false; # #32386, https://hydra.nixos.org/build/65600645 + extraPatches = lib.optionals stdenv.isLinux [ ./mono4-glibc.patch ]; +}) diff --git a/nixpkgs/pkgs/development/compilers/mono/5.nix b/nixpkgs/pkgs/development/compilers/mono/5.nix new file mode 100644 index 000000000000..c49379c670e0 --- /dev/null +++ b/nixpkgs/pkgs/development/compilers/mono/5.nix @@ -0,0 +1,8 @@ +{ callPackage, Foundation, libobjc }: + +callPackage ./generic.nix ({ + inherit Foundation libobjc; + version = "5.20.1.34"; + sha256 = "12vw5dkhmp1vk9l658pil8jiqirkpdsc5z8dm5mpj595yr6d94fd"; + enableParallelBuilding = true; +}) diff --git a/nixpkgs/pkgs/development/compilers/mono/6.nix b/nixpkgs/pkgs/development/compilers/mono/6.nix new file mode 100644 index 000000000000..8de3d92ab056 --- /dev/null +++ b/nixpkgs/pkgs/development/compilers/mono/6.nix @@ -0,0 +1,9 @@ +{ callPackage, Foundation, libobjc }: + +callPackage ./generic.nix ({ + inherit Foundation libobjc; + version = "6.12.0.182"; + srcArchiveSuffix = "tar.xz"; + sha256 = "sha256-VzZqarTztezxEdSFSAMWFbOhANuHxnn8AG6Mik79lCQ="; + enableParallelBuilding = true; +}) diff --git a/nixpkgs/pkgs/development/compilers/mono/generic.nix b/nixpkgs/pkgs/development/compilers/mono/generic.nix new file mode 100644 index 000000000000..a3705de4ccb5 --- /dev/null +++ b/nixpkgs/pkgs/development/compilers/mono/generic.nix @@ -0,0 +1,113 @@ +{ lib, stdenv, fetchurl, bison, pkg-config, glib, gettext, perl, libgdiplus, libX11, callPackage, ncurses, zlib, bash +, withLLVM ? false, cacert, Foundation, libobjc, python3, version, sha256, autoconf, libtool, automake, cmake, which +, gnumake42 +, enableParallelBuilding ? true +, srcArchiveSuffix ? "tar.bz2" +, extraPatches ? [] +}: + +let + llvm = callPackage ./llvm.nix { }; +in +stdenv.mkDerivation rec { + pname = "mono"; + inherit version; + + src = fetchurl { + inherit sha256; + url = "https://download.mono-project.com/sources/mono/${pname}-${version}.${srcArchiveSuffix}"; + }; + + strictDeps = true; + nativeBuildInputs = [ + autoconf + automake + bison + cmake + libtool + perl + pkg-config + python3 + which + gnumake42 + ]; + buildInputs = [ + glib + gettext + libgdiplus + libX11 + ncurses + zlib + bash + ] ++ lib.optionals stdenv.isDarwin [ Foundation libobjc ]; + + configureFlags = [ + "--x-includes=${libX11.dev}/include" + "--x-libraries=${libX11.out}/lib" + "--with-libgdiplus=${libgdiplus}/lib/libgdiplus.so" + ] ++ lib.optionals withLLVM [ + "--enable-llvm" + "--with-llvm=${llvm}" + ]; + + configurePhase = '' + patchShebangs autogen.sh mcs/build/start-compiler-server.sh + ./autogen.sh --prefix $out $configureFlags + ''; + + # We want pkg-config to take priority over the dlls in the Mono framework and the GAC + # because we control pkg-config + patches = [ ./pkgconfig-before-gac.patch ] ++ extraPatches; + + # Patch all the necessary scripts. Also, if we're using LLVM, we fix the default + # LLVM path to point into the Mono LLVM build, since it's private anyway. + preBuild = '' + makeFlagsArray=(INSTALL=`type -tp install`) + substituteInPlace mcs/class/corlib/System/Environment.cs --replace /usr/share "$out/share" + '' + lib.optionalString withLLVM '' + substituteInPlace mono/mini/aot-compiler.c --replace "llvm_path = g_strdup (\"\")" "llvm_path = g_strdup (\"${llvm}/bin/\")" + ''; + + # Fix mono DLLMap so it can find libX11 to run winforms apps + # libgdiplus is correctly handled by the --with-libgdiplus configure flag + # Other items in the DLLMap may need to be pointed to their store locations, I don't think this is exhaustive + # https://www.mono-project.com/Config_DllMap + postBuild = '' + find . -name 'config' -type f | xargs \ + sed -i -e "s@libX11.so.6@${libX11.out}/lib/libX11.so.6@g" + ''; + + # Without this, any Mono application attempting to open an SSL connection will throw with + # The authentication or decryption has failed. + # ---> Mono.Security.Protocol.Tls.TlsException: Invalid certificate received from server. + postInstall = '' + echo "Updating Mono key store" + $out/bin/cert-sync ${cacert}/etc/ssl/certs/ca-bundle.crt + '' + # According to [1], gmcs is just mcs + # [1] https://github.com/mono/mono/blob/master/scripts/gmcs.in + + '' + ln -s $out/bin/mcs $out/bin/gmcs + ''; + + inherit enableParallelBuilding; + + meta = with lib; { + # Per nixpkgs#151720 the build failures for aarch64-darwin are fixed since 6.12.0.129 + broken = stdenv.isDarwin && stdenv.isAarch64 && lib.versionOlder version "6.12.0.129"; + homepage = "https://mono-project.com/"; + description = "Cross platform, open source .NET development framework"; + platforms = with platforms; darwin ++ linux; + maintainers = with maintainers; [ thoughtpolice obadz vrthra ]; + license = with licenses; [ + /* runtime, compilers, tools and most class libraries licensed */ mit + /* runtime includes some code licensed */ bsd3 + /* mcs/class/I18N/mklist.sh marked GPLv2 and others just GPL */ gpl2Only + /* RabbitMQ.Client class libraries dual licensed */ mpl20 asl20 + /* mcs/class/System.Core/System/TimeZoneInfo.Android.cs */ asl20 + /* some documentation */ mspl + # https://www.mono-project.com/docs/faq/licensing/ + # https://github.com/mono/mono/blob/main/LICENSE + ]; + }; +} diff --git a/nixpkgs/pkgs/development/compilers/mono/llvm.nix b/nixpkgs/pkgs/development/compilers/mono/llvm.nix new file mode 100644 index 000000000000..c69a4021677e --- /dev/null +++ b/nixpkgs/pkgs/development/compilers/mono/llvm.nix @@ -0,0 +1,51 @@ +{ stdenv +, lib +, fetchFromGitHub +, groff +, cmake +, python2 +, perl +, libffi +, libbfd +, libxml2 +, valgrind +, ncurses +, zlib +}: + +stdenv.mkDerivation { + pname = "llvm"; + version = "3.6-mono-2017-02-15"; + + src = fetchFromGitHub { + owner = "mono"; + repo = "llvm"; + rev = "dbb6fdffdeb780d11851a6be77c209bd7ada4bd3"; + sha256 = "07wd1cs3fdvzb1lv41b655z5zk34f47j8fgd9ljjimi5j9pj71f7"; + }; + + nativeBuildInputs = [ cmake ]; + buildInputs = [ perl groff libxml2 python2 libffi ] ++ lib.optional stdenv.isLinux valgrind; + + propagatedBuildInputs = [ ncurses zlib ]; + + # hacky fix: created binaries need to be run before installation + preBuild = '' + mkdir -p $out/ + ln -sv $PWD/lib $out + ''; + postBuild = "rm -fR $out"; + + cmakeFlags = with stdenv; [ + "-DLLVM_ENABLE_FFI=ON" + "-DLLVM_BINUTILS_INCDIR=${libbfd.dev}/include" + ] ++ lib.optional (!isDarwin) "-DBUILD_SHARED_LIBS=ON"; + + meta = { + description = "Collection of modular and reusable compiler and toolchain technologies - Mono build"; + homepage = "http://llvm.org/"; + license = lib.licenses.bsd3; + maintainers = with lib.maintainers; [ thoughtpolice ]; + platforms = lib.platforms.all; + }; +} diff --git a/nixpkgs/pkgs/development/compilers/mono/mono4-glibc.patch b/nixpkgs/pkgs/development/compilers/mono/mono4-glibc.patch new file mode 100644 index 000000000000..07d5f03f90b8 --- /dev/null +++ b/nixpkgs/pkgs/development/compilers/mono/mono4-glibc.patch @@ -0,0 +1,12 @@ +diff --git a/mono/io-layer/processes.c b/mono/io-layer/processes.c +index 53c271a4..84bd3252 100644 +--- a/mono/io-layer/processes.c ++++ b/mono/io-layer/processes.c +@@ -19,6 +19,7 @@ + #include <errno.h> + #include <sys/types.h> + #include <sys/stat.h> ++#include <sys/sysmacros.h> + #include <unistd.h> + #ifdef HAVE_SIGNAL_H + #include <signal.h> diff --git a/nixpkgs/pkgs/development/compilers/mono/pkgconfig-before-gac.patch b/nixpkgs/pkgs/development/compilers/mono/pkgconfig-before-gac.patch new file mode 100644 index 000000000000..7632d850391e --- /dev/null +++ b/nixpkgs/pkgs/development/compilers/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) |