simplesamlphp: switch to buildComposerProject2 and tag (#378348)
[NixPkgs.git] / pkgs / build-support / dotnet / dotnetenv / build-solution.nix
blobdc811ebfd545dfbc6e595d91a37da05ca018baea
2   lib,
3   stdenv,
4   dotnetfx,
5 }:
7   name,
8   src,
9   baseDir ? ".",
10   slnFile,
11   targets ? "ReBuild",
12   verbosity ? "detailed",
13   options ? "/p:Configuration=Debug;Platform=Win32",
14   assemblyInputs ? [ ],
15   preBuild ? "",
16   modifyPublicMain ? false,
17   mainClassFile ? null,
20 assert modifyPublicMain -> mainClassFile != null;
22 stdenv.mkDerivation {
23   inherit name src;
25   buildInputs = [ dotnetfx ];
27   preConfigure = ''
28     cd ${baseDir}
29   '';
31   preBuild = ''
32     ${lib.optionalString modifyPublicMain ''
33       sed -i -e "s|static void Main|public static void Main|" ${mainClassFile}
34     ''}
35     ${preBuild}
36   '';
38   installPhase = ''
39     runHook preInstall
41     addDeps() {
42       if [ -f $1/nix-support/dotnet-assemblies ]; then
43         for i in $(cat $1/nix-support/dotnet-assemblies); do
44           windowsPath=$(cygpath --windows $i)
45           assemblySearchPaths="$assemblySearchPaths;$windowsPath"
47           addDeps $i
48         done
49       fi
50     }
52     for i in ${toString assemblyInputs}; do
53       windowsPath=$(cygpath --windows $i)
54       echo "Using assembly path: $windowsPath"
56       if [ "$assemblySearchPaths" = "" ]; then
57         assemblySearchPaths="$windowsPath"
58       else
59         assemblySearchPaths="$assemblySearchPaths;$windowsPath"
60       fi
62       addDeps $i
63     done
65     echo "Assembly search paths are: $assemblySearchPaths"
67     if [ "$assemblySearchPaths" != "" ]; then
68       echo "Using assembly search paths args: $assemblySearchPathsArg"
69       export AssemblySearchPaths=$assemblySearchPaths
70     fi
72     mkdir -p $out
73     MSBuild.exe ${toString slnFile} /nologo /t:${targets} /p:IntermediateOutputPath=$(cygpath --windows $out)\\ /p:OutputPath=$(cygpath --windows $out)\\ /verbosity:${verbosity} ${options}
75     # Because .NET assemblies store strings as UTF-16 internally, we cannot detect
76     # hashes. Therefore a text files containing the proper paths is created
77     # We can also use this file the propagate transitive dependencies.
79     mkdir -p $out/nix-support
81     for i in ${toString assemblyInputs}; do
82       echo $i >> $out/nix-support/dotnet-assemblies
83     done
85     runHook postInstall
86   '';