nixpkgs-suyu/pkgs/build-support/dotnetenv/build-solution.nix

86 lines
2 KiB
Nix
Raw Normal View History

2021-01-24 01:40:18 +01:00
{ lib, stdenv, dotnetfx }:
{ name
, src
, baseDir ? "."
, slnFile
, targets ? "ReBuild"
, verbosity ? "detailed"
, options ? "/p:Configuration=Debug;Platform=Win32"
, assemblyInputs ? []
, preBuild ? ""
, modifyPublicMain ? false
, mainClassFile ? null
}:
assert modifyPublicMain -> mainClassFile != null;
stdenv.mkDerivation {
inherit name src;
2020-09-21 00:30:58 +02:00
buildInputs = [ dotnetfx ];
preConfigure = ''
cd ${baseDir}
'';
2020-09-21 00:30:58 +02:00
preBuild = ''
2021-01-24 01:40:18 +01:00
${lib.optionalString modifyPublicMain ''
sed -i -e "s|static void Main|public static void Main|" ${mainClassFile}
''}
${preBuild}
'';
2020-09-21 00:30:58 +02:00
installPhase = ''
addDeps()
{
if [ -f $1/nix-support/dotnet-assemblies ]
then
for i in $(cat $1/nix-support/dotnet-assemblies)
do
windowsPath=$(cygpath --windows $i)
assemblySearchPaths="$assemblySearchPaths;$windowsPath"
2020-09-21 00:30:58 +02:00
addDeps $i
done
fi
}
2020-09-21 00:30:58 +02:00
for i in ${toString assemblyInputs}
do
2020-09-21 00:30:58 +02:00
windowsPath=$(cygpath --windows $i)
echo "Using assembly path: $windowsPath"
2020-09-21 00:30:58 +02:00
if [ "$assemblySearchPaths" = "" ]
then
assemblySearchPaths="$windowsPath"
else
assemblySearchPaths="$assemblySearchPaths;$windowsPath"
fi
2020-09-21 00:30:58 +02:00
addDeps $i
done
2020-09-21 00:30:58 +02:00
echo "Assembly search paths are: $assemblySearchPaths"
2020-09-21 00:30:58 +02:00
if [ "$assemblySearchPaths" != "" ]
then
echo "Using assembly search paths args: $assemblySearchPathsArg"
export AssemblySearchPaths=$assemblySearchPaths
fi
2020-09-21 00:30:58 +02:00
mkdir -p $out
MSBuild.exe ${toString slnFile} /nologo /t:${targets} /p:IntermediateOutputPath=$(cygpath --windows $out)\\ /p:OutputPath=$(cygpath --windows $out)\\ /verbosity:${verbosity} ${options}
2020-09-21 00:30:58 +02:00
# Because .NET assemblies store strings as UTF-16 internally, we cannot detect
# hashes. Therefore a text files containing the proper paths is created
# We can also use this file the propagate transitive dependencies.
2020-09-21 00:30:58 +02:00
mkdir -p $out/nix-support
2020-09-21 00:30:58 +02:00
for i in ${toString assemblyInputs}
do
echo $i >> $out/nix-support/dotnet-assemblies
done
'';
}