diff options
author | Mx Kookie <kookie@spacekookie.de> | 2020-10-31 19:35:09 +0100 |
---|---|---|
committer | Mx Kookie <kookie@spacekookie.de> | 2020-10-31 19:35:09 +0100 |
commit | c4625b175f8200f643fd6e11010932ea44c78433 (patch) | |
tree | bce3f89888c8ac3991fa5569a878a9eab6801ccc /infra/libkookie/nixpkgs/pkgs/development/tools/build-managers/msbuild/default.nix | |
parent | 49f735974dd103039ddc4cb576bb76555164a9e7 (diff) | |
parent | d661aa56a8843e991261510c1bb28fdc2f6975ae (diff) |
Add 'infra/libkookie/' from commit 'd661aa56a8843e991261510c1bb28fdc2f6975ae'
git-subtree-dir: infra/libkookie
git-subtree-mainline: 49f735974dd103039ddc4cb576bb76555164a9e7
git-subtree-split: d661aa56a8843e991261510c1bb28fdc2f6975ae
Diffstat (limited to 'infra/libkookie/nixpkgs/pkgs/development/tools/build-managers/msbuild/default.nix')
-rw-r--r-- | infra/libkookie/nixpkgs/pkgs/development/tools/build-managers/msbuild/default.nix | 133 |
1 files changed, 133 insertions, 0 deletions
diff --git a/infra/libkookie/nixpkgs/pkgs/development/tools/build-managers/msbuild/default.nix b/infra/libkookie/nixpkgs/pkgs/development/tools/build-managers/msbuild/default.nix new file mode 100644 index 000000000000..aea215cc927d --- /dev/null +++ b/infra/libkookie/nixpkgs/pkgs/development/tools/build-managers/msbuild/default.nix @@ -0,0 +1,133 @@ +{ stdenv, fetchurl, makeWrapper, glibcLocales, mono, dotnetPackages, unzip, dotnet-sdk }: + +let + + xplat = fetchurl { + url = "https://github.com/mono/msbuild/releases/download/0.07/mono_msbuild_xplat-master-8f608e49.zip"; + sha256 = "1jxq3fk9a6q2a8i9zacxaz3fkvc22i9qvzlpa7wbb95h42g0ffhq"; + }; + + deps = import ./nuget.nix { inherit fetchurl; }; + +in + +stdenv.mkDerivation rec { + pname = "msbuild"; + version = "16.3+xamarinxplat.2019.07.26.14.57"; + + src = fetchurl { + url = "https://download.mono-project.com/sources/msbuild/msbuild-${version}.tar.xz"; + sha256 = "1zcdfx4xsh62wj3g1jc2an0lppsfs691lz4dv05xbgi01aq1hk6a"; + }; + + nativeBuildInputs = [ + dotnet-sdk + mono + ]; + + buildInputs = [ + dotnetPackages.Nuget + glibcLocales + makeWrapper + unzip + ]; + + # https://aur.archlinux.org/cgit/aur.git/tree/PKGBUILD?h=msbuild + phases = ["unpackPhase" "buildPhase" "installPhase" "installCheckPhase"]; + + # https://github.com/NixOS/nixpkgs/issues/38991 + # bash: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8) + LOCALE_ARCHIVE = stdenv.lib.optionalString stdenv.isLinux + "${glibcLocales}/lib/locale/locale-archive"; + + buildPhase = '' + # nuget would otherwise try to base itself in /homeless-shelter + export HOME=$(pwd)/fake-home + + for package in ${toString deps}; do + nuget add $package -Source nixos + done + + nuget sources Disable -Name "nuget.org" + nuget sources Add -Name nixos -Source $(pwd)/nixos + + # license check is case sensitive + mv LICENSE license + + mkdir -p artifacts + unzip ${xplat} -d artifacts + mv artifacts/msbuild artifacts/mono-msbuild + chmod +x artifacts/mono-msbuild/MSBuild.dll + + ln -s $(find ${dotnet-sdk} -name libhostfxr.so) artifacts/mono-msbuild/SdkResolvers/Microsoft.DotNet.MSBuildSdkResolver/ + + # overwrite the file + echo "#!${stdenv.shell}" > eng/common/dotnet-install.sh + + # msbuild response files to use only the nixos source + echo "/p:RestoreSources=nixos" > artifacts/mono-msbuild/MSBuild.rsp + echo "/p:RestoreSources=nixos" > src/MSBuild/MSBuild.rsp + + # not patchShebangs, there is /bin/bash in the body of the script as well + substituteInPlace ./eng/cibuild_bootstrapped_msbuild.sh --replace /bin/bash ${stdenv.shell} + + # DisableNerdbankVersioning https://gitter.im/Microsoft/msbuild/archives/2018/06/27?at=5b33dbc4ce3b0f268d489bfa + # TODO there are some (many?) failing tests + ./eng/cibuild_bootstrapped_msbuild.sh --host_type mono --configuration Release --skip_tests /p:DisableNerdbankVersioning=true + ''; + + installPhase = '' + mono artifacts/mono-msbuild/MSBuild.dll mono/build/install.proj /p:MonoInstallPrefix="$out" /p:Configuration=Release-MONO + + ln -s ${mono}/lib/mono/msbuild/Current/bin/Roslyn $out/lib/mono/msbuild/Current/bin/Roslyn + + makeWrapper ${mono}/bin/mono $out/bin/msbuild \ + --set MSBuildExtensionsPath $out/lib/mono/xbuild \ + --set-default MONO_GC_PARAMS "nursery-size=64m" \ + --add-flags "$out/lib/mono/msbuild/15.0/bin/MSBuild.dll" + ''; + + doInstallCheck = true; + + # https://docs.microsoft.com/cs-cz/visualstudio/msbuild/walkthrough-creating-an-msbuild-project-file-from-scratch?view=vs-2019 + installCheckPhase = '' + cat > Helloworld.cs <<EOF +using System; + +class HelloWorld +{ + static void Main() + { +#if DebugConfig + Console.WriteLine("WE ARE IN THE DEBUG CONFIGURATION"); +#endif + + Console.WriteLine("Hello, world!"); + } +} +EOF + + cat > Helloworld.csproj <<EOF +<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <ItemGroup> + <Compile Include="Helloworld.cs" /> + </ItemGroup> + <Target Name="Build"> + <Csc Sources="@(Compile)"/> + </Target> +</Project> +EOF + + $out/bin/msbuild Helloworld.csproj -t:Build + ${mono}/bin/mono Helloworld.exe | grep "Hello, world!" + ''; + + meta = with stdenv.lib; { + description = "Mono version of Microsoft Build Engine, the build platform for .NET, and Visual Studio"; + homepage = "https://github.com/mono/msbuild"; + license = licenses.mit; + maintainers = with maintainers; [ jdanek ]; + platforms = platforms.unix; + }; +} + |