biglybt: 3.5.0.0 -> 3.6.0.0
[NixPkgs.git] / pkgs / development / tools / scenic-view / default.nix
blobff09f0cb4707e050022b1a766a87a34bf85fcf49
1 { lib, stdenv, fetchFromGitHub, openjdk, openjfx, gradle_7, makeDesktopItem, perl, writeText, makeWrapper }:
2 let
3   jdk = openjdk.override (lib.optionalAttrs stdenv.isLinux {
4     enableJavaFX = true;
5     openjfx = openjfx.override { withWebKit = true; };
6   });
8   pname = "scenic-view";
9   version = "11.0.2";
11   src = fetchFromGitHub {
12     owner = "JonathanGiles";
13     repo = pname;
14     rev = version;
15     sha256 = "1idfh9hxqs4fchr6gvhblhvjqk4mpl4rnpi84vn1l3yb700z7dwy";
16   };
18   gradle = gradle_7;
20   deps = stdenv.mkDerivation {
21     name = "${pname}-deps";
22     inherit src;
24     nativeBuildInputs = [ jdk perl gradle ];
26     buildPhase = ''
27       export GRADLE_USER_HOME=$(mktemp -d);
28       gradle --no-daemon build
29     '';
31     # Mavenize dependency paths
32     # e.g. org.codehaus.groovy/groovy/2.4.0/{hash}/groovy-2.4.0.jar -> org/codehaus/groovy/groovy/2.4.0/groovy-2.4.0.jar
33     installPhase = ''
34       find $GRADLE_USER_HOME/caches/modules-2 -type f -regex '.*\.\(jar\|pom\)' \
35         | perl -pe 's#(.*/([^/]+)/([^/]+)/([^/]+)/[0-9a-f]{30,40}/([^/\s]+))$# ($x = $2) =~ tr|\.|/|; "install -Dm444 $1 \$out/$x/$3/$4/$5" #e' \
36         | sh
37     '';
39     outputHashAlgo =  "sha256";
40     outputHashMode = "recursive";
41     outputHash = "0d6qs0wg2nfxyq85q46a8dcdqknz9pypb2qmvc8k2w8vcdac1y7n";
42   };
44   # Point to our local deps repo
45   gradleInit = writeText "init.gradle" ''
46     settingsEvaluated { settings ->
47       settings.pluginManagement {
48         repositories {
49           clear()
50           maven { url '${deps}' }
51         }
52       }
53     }
54     logger.lifecycle 'Replacing Maven repositories with ${deps}...'
55     gradle.projectsLoaded {
56       rootProject.allprojects {
57         buildscript {
58           repositories {
59             clear()
60             maven { url '${deps}' }
61           }
62         }
63         repositories {
64           clear()
65           maven { url '${deps}' }
66         }
67       }
68     }
69   '';
71   desktopItem = makeDesktopItem {
72     name = pname;
73     desktopName = pname;
74     exec = pname;
75     comment = "JavaFx application to visualize and modify the scenegraph of running JavaFx applications.";
76     mimeTypes = [ "application/java" "application/java-vm" "application/java-archive" ];
77     categories = [ "Development" ];
78   };
80 in stdenv.mkDerivation rec {
81   inherit pname version src;
82   nativeBuildInputs = [ jdk gradle makeWrapper ];
84   buildPhase = ''
85     runHook preBuild
87     export GRADLE_USER_HOME=$(mktemp -d)
88     gradle --offline --no-daemon --info --init-script ${gradleInit} build
90     runHook postBuild
91     '';
93   installPhase = ''
94     runHook preInstall
96     mkdir -p $out/bin $out/share/${pname}
97     cp build/libs/scenicview.jar $out/share/${pname}/${pname}.jar
98     makeWrapper ${jdk}/bin/java $out/bin/${pname} --add-flags "-jar $out/share/${pname}/${pname}.jar"
100     runHook postInstall
101   '';
103   desktopItems = [ desktopItem ];
105   meta = with lib; {
106     broken = stdenv.isDarwin;
107     description = "JavaFx application to visualize and modify the scenegraph of running JavaFx applications.";
108     mainProgram = "scenic-view";
109     longDescription = ''
110       A JavaFX application designed to make it simple to understand the current state of your application scenegraph
111       and to also easily manipulate properties of the scenegraph without having to keep editing your code.
112       This lets you find bugs and get things pixel perfect without having to do the compile-check-compile dance.
113     '';
114     homepage = "https://github.com/JonathanGiles/scenic-view/";
115     sourceProvenance = with sourceTypes; [
116       fromSource
117       binaryBytecode  # deps
118     ];
119     license = licenses.gpl3Plus;
120     maintainers = with maintainers; [ wirew0rm ];
121     platforms = platforms.all;
122   };