forked from mirrors/nixpkgs
f96842292f
This was added in 2005 back in r51ce4ea2. This was not commented or explained anywhere, and it does not seem to be necessary anymore according to some quick testing I did. Reduces mono closure size by ~100M.
84 lines
3 KiB
Nix
84 lines
3 KiB
Nix
{ stdenv, fetchurl, bison, pkgconfig, glib, gettext, perl, libgdiplus, libX11, callPackage, ncurses, zlib, withLLVM ? false, cacert, Foundation, libobjc, python, version, sha256, autoconf, libtool, automake, cmake, which
|
|
, 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}";
|
|
};
|
|
|
|
buildInputs =
|
|
[ bison pkgconfig glib gettext perl libgdiplus libX11 ncurses zlib python autoconf libtool automake cmake which
|
|
]
|
|
++ (stdenv.lib.optionals stdenv.isDarwin [ Foundation libobjc ]);
|
|
|
|
configureFlags = [
|
|
"--x-includes=${libX11.dev}/include"
|
|
"--x-libraries=${libX11.out}/lib"
|
|
"--with-libgdiplus=${libgdiplus}/lib/libgdiplus.so"
|
|
]
|
|
++ stdenv.lib.optionals withLLVM [
|
|
"--enable-llvm"
|
|
"--with-llvm=${llvm}"
|
|
];
|
|
|
|
configurePhase = ''
|
|
patchShebangs ./
|
|
./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"
|
|
'' + stdenv.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 stdenv.lib; {
|
|
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 = licenses.free; # Combination of LGPL/X11/GPL ?
|
|
};
|
|
}
|