Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Browse files
Browse the repository at this point in the history
roslyn: init at 3.10.0-1.21102.26
- Loading branch information
Showing
4 changed files
with
1,326 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,65 @@ | ||
#!/usr/bin/env nix-shell | ||
#!nix-shell -i bash -p dotnet-sdk_5 -p jq -p xmlstarlet -p curl | ||
set -euo pipefail | ||
|
||
cat << EOL | ||
{ fetchurl }: [ | ||
EOL | ||
|
||
tmpdir="$(mktemp -d -p "$(pwd)")" # must be under source root | ||
trap 'rm -rf "$tmpdir"' EXIT | ||
|
||
HOME="$tmpdir" dotnet msbuild -t:restore -p:Configuration=Release -p:RestorePackagesPath="$tmpdir"/.nuget/packages \ | ||
-p:RestoreNoCache=true -p:RestoreForce=true \ | ||
src/NuGet/Microsoft.Net.Compilers.Toolset/Microsoft.Net.Compilers.Toolset.Package.csproj >&2 | ||
|
||
mapfile -t repos < <( | ||
xmlstarlet sel -t -v 'configuration/packageSources/add/@value' -n NuGet.config "$tmpdir"/.nuget/NuGet/NuGet.Config | | ||
while IFS= read index | ||
do | ||
curl --compressed -fsL "$index" | \ | ||
jq -r '.resources[] | select(."@type" == "PackageBaseAddress/3.0.0")."@id"' | ||
done | ||
) | ||
|
||
cd "$tmpdir/.nuget/packages" | ||
for package in * | ||
do | ||
cd "$package" | ||
for version in * | ||
do | ||
found=false | ||
for repo in "${repos[@]}" | ||
do | ||
url="$repo$package/$version/$package.$version.nupkg" | ||
if curl -fsL "$url" -o /dev/null | ||
then | ||
found=true | ||
break | ||
fi | ||
done | ||
|
||
if ! $found | ||
then | ||
echo "couldn't find $package $version" >&2 | ||
exit 1 | ||
fi | ||
|
||
sha256=$(nix-prefetch-url "$url" 2>/dev/null) | ||
cat << EOL | ||
{ | ||
name = "$package"; | ||
version = "$version"; | ||
src = fetchurl { | ||
url = "$url"; | ||
sha256 = "$sha256"; | ||
}; | ||
} | ||
EOL | ||
done | ||
cd .. | ||
done | ||
|
||
cat << EOL | ||
] | ||
EOL |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,121 @@ | ||
{ lib, stdenv | ||
, fetchFromGitHub | ||
, fetchurl | ||
, mono | ||
, dotnet-sdk_5 | ||
, makeWrapper | ||
, dotnetPackages | ||
, unzip | ||
, writeText | ||
, symlinkJoin | ||
}: | ||
|
||
let | ||
|
||
deps = map (package: stdenv.mkDerivation (with package; { | ||
pname = name; | ||
inherit version src; | ||
|
||
buildInputs = [ unzip ]; | ||
unpackPhase = '' | ||
unzip -o $src | ||
chmod -R u+r . | ||
function traverseRename () { | ||
for e in * | ||
do | ||
t="$(echo "$e" | sed -e "s/%20/\ /g" -e "s/%2B/+/g")" | ||
[ "$t" != "$e" ] && mv -vn "$e" "$t" | ||
if [ -d "$t" ] | ||
then | ||
cd "$t" | ||
traverseRename | ||
cd .. | ||
fi | ||
done | ||
} | ||
traverseRename | ||
''; | ||
|
||
installPhase = '' | ||
runHook preInstall | ||
package=$out/lib/dotnet/${name}/${version} | ||
mkdir -p $package | ||
cp -r . $package | ||
echo "{}" > $package/.nupkg.metadata | ||
runHook postInstall | ||
''; | ||
|
||
dontFixup = true; | ||
})) | ||
(import ./deps.nix { inherit fetchurl; }); | ||
|
||
nuget-config = writeText "NuGet.Config" '' | ||
<?xml version="1.0" encoding="utf-8"?> | ||
<configuration> | ||
<packageSources> | ||
<clear /> | ||
</packageSources> | ||
</configuration> | ||
''; | ||
|
||
packages = symlinkJoin { name = "roslyn-deps"; paths = deps; }; | ||
|
||
packageVersion = "3.10.0"; | ||
|
||
in stdenv.mkDerivation rec { | ||
|
||
pname = "roslyn"; | ||
version = "${packageVersion}-1.21102.26"; | ||
|
||
src = fetchFromGitHub { | ||
owner = "dotnet"; | ||
repo = "roslyn"; | ||
rev = "v${version}"; | ||
sha256 = "0yf4f4vpqn9lixr37lkp29m2mk51xcm3ysv2ag332xn6zm5zpm2b"; | ||
}; | ||
|
||
nativeBuildInputs = [ makeWrapper dotnet-sdk_5 unzip ]; | ||
|
||
buildPhase = '' | ||
runHook preBuild | ||
rm NuGet.config | ||
install -m644 -D ${nuget-config} fake-home/.nuget/NuGet/NuGet.Config | ||
ln -s ${packages}/lib/dotnet fake-home/.nuget/packages | ||
HOME=$(pwd)/fake-home dotnet add \ | ||
src/NuGet/Microsoft.Net.Compilers.Toolset/Microsoft.Net.Compilers.Toolset.Package.csproj \ | ||
package -n -v 5.10.0-preview.2.7169 nuget.build.tasks.pack | ||
HOME=$(pwd)/fake-home dotnet msbuild -r -v:m -t:pack \ | ||
-p:Configuration=Release \ | ||
-p:RepositoryUrl="${meta.homepage}" \ | ||
-p:RepositoryCommit="v${version}" \ | ||
src/NuGet/Microsoft.Net.Compilers.Toolset/Microsoft.Net.Compilers.Toolset.Package.csproj | ||
runHook postBuild | ||
''; | ||
|
||
installPhase = '' | ||
pkg=$out/lib/dotnet/microsoft.net.compilers.toolset/${packageVersion} | ||
mkdir -p $out/bin $pkg | ||
unzip -q artifacts/packages/Release/Shipping/Microsoft.Net.Compilers.Toolset.${packageVersion}-dev.nupkg \ | ||
-d $pkg | ||
# nupkg has 0 permissions for a bunch of things | ||
chmod -R +rw $pkg | ||
makeWrapper ${mono}/bin/mono $out/bin/csc \ | ||
--add-flags "$pkg/tasks/net472/csc.exe" | ||
makeWrapper ${mono}/bin/mono $out/bin/vbs \ | ||
--add-flags "$pkg/tasks/net472/vbs.exe" | ||
''; | ||
|
||
meta = with lib; { | ||
description = ".NET C# and Visual Basic compiler"; | ||
homepage = "https://github.com/dotnet/roslyn"; | ||
platforms = platforms.linux; | ||
license = licenses.mit; | ||
maintainers = with maintainers; [ corngood ]; | ||
}; | ||
} |
Oops, something went wrong.