Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

mono: set meta.mainProgram #358022

Merged
merged 2 commits into from
Nov 23, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 7 additions & 1 deletion pkgs/development/compilers/mono/4.nix
Original file line number Diff line number Diff line change
@@ -1,4 +1,10 @@
{ callPackage, Foundation, libobjc, stdenv, lib }:
{
callPackage,
Foundation,
libobjc,
stdenv,
lib,
}:

callPackage ./generic.nix ({
inherit Foundation libobjc;
Expand Down
6 changes: 5 additions & 1 deletion pkgs/development/compilers/mono/5.nix
Original file line number Diff line number Diff line change
@@ -1,4 +1,8 @@
{ callPackage, Foundation, libobjc }:
{
callPackage,
Foundation,
libobjc,
}:

callPackage ./generic.nix ({
inherit Foundation libobjc;
Expand Down
6 changes: 5 additions & 1 deletion pkgs/development/compilers/mono/6.nix
Original file line number Diff line number Diff line change
@@ -1,4 +1,8 @@
{ callPackage, Foundation, libobjc }:
{
callPackage,
Foundation,
libobjc,
}:

callPackage ./generic.nix ({
inherit Foundation libobjc;
Expand Down
141 changes: 95 additions & 46 deletions pkgs/development/compilers/mono/generic.nix
Original file line number Diff line number Diff line change
@@ -1,9 +1,34 @@
{ 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 ? []
{
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
Expand Down Expand Up @@ -31,24 +56,31 @@ stdenv.mkDerivation rec {
which
gnumake42
];
buildInputs = [
glib
gettext
libgdiplus
libX11
ncurses
zlib
bash
] ++ lib.optionals stdenv.hostPlatform.isDarwin [ Foundation libobjc ];
buildInputs =
[
glib
gettext
libgdiplus
libX11
ncurses
zlib
bash
]
++ lib.optionals stdenv.hostPlatform.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}"
];
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
Expand All @@ -61,12 +93,14 @@ stdenv.mkDerivation rec {

# 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/\")"
'';
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
Expand All @@ -80,34 +114,49 @@ stdenv.mkDerivation rec {
# 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
'';
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.hostPlatform.isDarwin && stdenv.hostPlatform.isAarch64 && lib.versionOlder version "6.12.0.129";
broken =
stdenv.hostPlatform.isDarwin
&& stdenv.hostPlatform.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 ];
maintainers = with maintainers; [
thoughtpolice
obadz
];
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
# 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
];
mainProgram = "mono";
};
}
57 changes: 35 additions & 22 deletions pkgs/development/compilers/mono/llvm.nix
Original file line number Diff line number Diff line change
@@ -1,16 +1,17 @@
{ stdenv
, lib
, fetchFromGitHub
, groff
, cmake
, python2
, perl
, libffi
, libbfd
, libxml2
, valgrind
, ncurses
, zlib
{
stdenv,
lib,
fetchFromGitHub,
groff,
cmake,
python2,
perl,
libffi,
libbfd,
libxml2,
valgrind,
ncurses,
zlib,
}:

stdenv.mkDerivation {
Expand All @@ -25,9 +26,18 @@ stdenv.mkDerivation {
};

nativeBuildInputs = [ cmake ];
buildInputs = [ perl groff libxml2 python2 libffi ] ++ lib.optional stdenv.hostPlatform.isLinux valgrind;
buildInputs = [
perl
groff
libxml2
python2
libffi
] ++ lib.optional stdenv.hostPlatform.isLinux valgrind;

propagatedBuildInputs = [ ncurses zlib ];
propagatedBuildInputs = [
ncurses
zlib
];

# hacky fix: created binaries need to be run before installation
preBuild = ''
Expand All @@ -36,16 +46,19 @@ stdenv.mkDerivation {
'';
postBuild = "rm -fR $out";

cmakeFlags = with stdenv; [
"-DLLVM_ENABLE_FFI=ON"
"-DLLVM_BINUTILS_INCDIR=${libbfd.dev}/include"
] ++ lib.optional (!isDarwin) "-DBUILD_SHARED_LIBS=ON";
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;
homepage = "http://llvm.org/";
license = lib.licenses.bsd3;
maintainers = with lib.maintainers; [ thoughtpolice ];
platforms = lib.platforms.all;
platforms = lib.platforms.all;
};
}
Loading