Commit d016404c authored by mdarocha's avatar mdarocha
Browse files

buildDotnetModule: parse version before passing it to dotnet

This avoids problems when the Nix version attribute does not fit the
format required by .NET
parent f1cc116e
Loading
Loading
Loading
Loading
+16 −0
Original line number Diff line number Diff line
@@ -158,6 +158,22 @@ stdenvNoCC.mkDerivation (args // {
    dotnet-sdk
  ];

  # Parse the version attr into a format acceptable for the Version msbuild property
  # The actual version attr is saved in InformationalVersion, which accepts an arbitrary string
  versionForDotnet = if !(lib.hasAttr "version" args) || args.version == null
  then null else let
    components = lib.pipe args.version [
      lib.splitVersion
      (lib.filter (x: (lib.strings.match "[0-9]+" x) != null))
      (lib.filter (x: (lib.toInt x) < 65535)) # one version component in dotnet has to fit in 16 bits
    ];
  in if (lib.length components) == 0
  then null
  else lib.concatStringsSep "." ((lib.take 4 components)
    ++ (if (lib.length components) < 4
       then lib.replicate (4 - (lib.length components)) "0"
       else [ ]));

  makeWrapperArgs = args.makeWrapperArgs or [ ] ++ [
    "--prefix LD_LIBRARY_PATH : ${dotnet-sdk.icu}/lib"
  ];
+7 −2
Original line number Diff line number Diff line
@@ -24,8 +24,13 @@ dotnetBuildHook() {
        dotnetBuildFlags+=("-p:UseAppHost=true")
    fi

    local versionFlags=()
    if [ "${version-}" ]; then
        local -r versionFlag="-p:Version=${version-}"
        versionFlags+=("-p:InformationalVersion=${version-}")
    fi

    if [ "${versionForDotnet-}" ]; then
        versionFlags+=("-p:Version=${versionForDotnet-}")
    fi

    dotnetBuild() {
@@ -43,7 +48,7 @@ dotnetBuildHook() {
            -p:Deterministic=true \
            --configuration "@buildType@" \
            --no-restore \
            ${versionFlag-} \
            ${versionFlags[@]} \
            ${runtimeIdFlags[@]} \
            ${dotnetBuildFlags[@]}  \
            ${dotnetFlags[@]}