about summary refs log tree commit diff
path: root/pkgs/applications/graphics/pinta
diff options
context:
space:
mode:
authorDemin Dmitriy <demindf@gmail.com>2015-10-29 05:59:32 +0300
committerDemin Dmitriy <demindf@gmail.com>2015-10-29 21:51:41 +0300
commit0ec62e075949fb0e71b9ae3eb4f01e16bfe6a7b1 (patch)
treed4812ea44374e31f3ec5077d3989a7d7af5ef7a3 /pkgs/applications/graphics/pinta
parentdc70fcd94b2839f3ad2976613733eef3862d029a (diff)
pinta: 1.4 -> 1.6
Diffstat (limited to 'pkgs/applications/graphics/pinta')
-rw-r--r--pkgs/applications/graphics/pinta/default.nix83
1 files changed, 51 insertions, 32 deletions
diff --git a/pkgs/applications/graphics/pinta/default.nix b/pkgs/applications/graphics/pinta/default.nix
index 6958c94f7e18e..0084ddffb1d75 100644
--- a/pkgs/applications/graphics/pinta/default.nix
+++ b/pkgs/applications/graphics/pinta/default.nix
@@ -1,44 +1,63 @@
-{stdenv, fetchurl, mono, gtksharp, pkgconfig}:
+{ stdenv, fetchFromGitHub, buildDotnetPackage, dotnetPackages, gtksharp }:
 
-stdenv.mkDerivation {
-  name = "pinta-1.4";
+let
+  mono-addins = dotnetPackages.MonoAddins;
+in
+buildDotnetPackage rec {
+  name = "pinta-1.6";
 
-  src = fetchurl {
-    url = "https://github.com/PintaProject/Pinta/tarball/3f7ccfa93d";
-    name = "pinta-1.4.tar.gz";
-    sha256 = "1kgb4gy5l6bd0akniwhiqqkvqayr5jgdsvn2pgg1038q9raafnpn";
+  baseName = "Pinta";
+  version = "1.6";
+  outputFiles = [ "bin/*" ];
+  buildInputs = [ gtksharp mono-addins ];
+  xBuildFiles = [ "Pinta.sln" ];
+
+  src = fetchFromGitHub {
+    owner = "PintaProject";
+    repo = "Pinta";
+    rev = version;
+    sha256 = "0vgswy981c7ys4q7js5k85sky7bz8v32wsfq3br4j41vg92pw97d";
   };
 
-  buildInputs = [mono gtksharp pkgconfig];
-
-  buildPhase = ''
-    # xbuild understands pkgconfig, but gtksharp does not give .pc for gdk-sharp
-    # So we have to go the GAC-way
-    export MONO_GAC_PREFIX=${gtksharp}
-    xbuild Pinta.sln
-  '';
-
-  # Very ugly - I don't know enough Mono to improve this. Isn't there any rpath in binaries?
-  installPhase = ''
-    mkdir -p $out/lib/pinta $out/bin
-    cp bin/*.{dll,exe} $out/lib/pinta
-    cat > $out/bin/pinta << EOF
-    #!/bin/sh
-    export MONO_GAC_PREFIX=${gtksharp}:\$MONO_GAC_PREFIX
-    export LD_LIBRARY_PATH=\$LD_LIBRARY_PATH:${gtksharp}/lib:${gtksharp.gtk}/lib:${mono}/lib
-    exec ${mono}/bin/mono $out/lib/pinta/Pinta.exe
-    EOF
-    chmod +x $out/bin/pinta
-  '';
-
-  # Always needed on Mono, otherwise nothing runs
-  dontStrip = true; 
+  # Remove version information from nodes <Reference Include="... Version=... ">
+  postPatch = with stdenv.lib; let
+    csprojFiles = [
+      "Pinta/Pinta.csproj"
+      "Pinta.Core/Pinta.Core.csproj"
+      "Pinta.Effects/Pinta.Effects.csproj"
+      "Pinta.Gui.Widgets/Pinta.Gui.Widgets.csproj"
+      "Pinta.Resources/Pinta.Resources.csproj"
+      "Pinta.Tools/Pinta.Tools.csproj"
+    ];
+    versionedNames = [
+      "Mono\\.Addins"
+      "Mono\\.Posix"
+      "Mono\\.Addins\\.Gui"
+      "Mono\\.Addins\\.Setup"
+    ];
+
+    stripVersion = name: file: let
+        match = ''<Reference Include="${name}([ ,][^"]*)?"'';
+        replace = ''<Reference Include="${name}"'';
+      in "sed -i -re 's/${match}/${replace}/g' ${file}\n";
+
+    # Map all possible pairs of two lists
+    map2 = f: listA: listB: concatMap (a: map (f a) listB) listA;
+    concatMap2Strings = f: listA: listB: concatStrings (map2 f listA listB);
+  in
+    concatMap2Strings stripVersion versionedNames csprojFiles;
+
+  makeWrapperArgs = [
+    ''--prefix MONO_GAC_PREFIX ':' "${gtksharp}"''
+    ''--prefix LD_LIBRARY_PATH ':' "${gtksharp}/lib"''
+    ''--prefix LD_LIBRARY_PATH ':' "${gtksharp.gtk}/lib"''
+  ];
 
   meta = {
     homepage = http://www.pinta-project.com/;
     description = "Drawing/editing program modeled after Paint.NET";
     license = stdenv.lib.licenses.mit;
-    maintainers = with stdenv.lib.maintainers; [viric];
+    maintainers = with stdenv.lib.maintainers; [ viric ];
     platforms = with stdenv.lib.platforms; linux;
   };
 }