at 23.05-pre 120 lines 3.6 kB view raw
1{ lib, stdenv, fetchFromGitHub, jdk11, gradle_6, makeDesktopItem, copyDesktopItems, perl, writeText, runtimeShell, makeWrapper, glib, wrapGAppsHook }: 2let 3 gradle = gradle_6; 4 5 pname = "scenebuilder"; 6 version = "15.0.1"; 7 8 src = fetchFromGitHub { 9 owner = "gluonhq"; 10 repo = pname; 11 rev = version; 12 sha256 = "0dqlpfgr9qpmk62zsnhzw4q6n0swjqy00294q0kb4djp3jn47iz4"; 13 }; 14 15 deps = stdenv.mkDerivation { 16 name = "${pname}-deps"; 17 inherit src; 18 19 nativeBuildInputs = [ jdk11 perl gradle ]; 20 21 buildPhase = '' 22 export GRADLE_USER_HOME=$(mktemp -d); 23 gradle --no-daemon build -x test 24 ''; 25 26 # Mavenize dependency paths 27 # 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 28 installPhase = '' 29 find $GRADLE_USER_HOME/caches/modules-2 -type f -regex '.*\.\(jar\|pom\)' \ 30 | perl -pe 's#(.*/([^/]+)/([^/]+)/([^/]+)/[0-9a-f]{30,40}/([^/\s]+))$# ($x = $2) =~ tr|\.|/|; "install -Dm444 $1 \$out/$x/$3/$4/$5" #e' \ 31 | sh 32 ''; 33 34 outputHashAlgo = "sha256"; 35 outputHashMode = "recursive"; 36 outputHash = "01dkayad68g3zpzdnjwrc0h6s7s6n619y5b576snc35l8g2r5sgd"; 37 }; 38 39 # Point to our local deps repo 40 gradleInit = writeText "init.gradle" '' 41 settingsEvaluated { settings -> 42 settings.pluginManagement { 43 repositories { 44 clear() 45 maven { url '${deps}' } 46 } 47 } 48 } 49 logger.lifecycle 'Replacing Maven repositories with ${deps}...' 50 gradle.projectsLoaded { 51 rootProject.allprojects { 52 buildscript { 53 repositories { 54 clear() 55 maven { url '${deps}' } 56 } 57 } 58 repositories { 59 clear() 60 maven { url '${deps}' } 61 } 62 } 63 } 64 ''; 65 66 desktopItem = makeDesktopItem { 67 name = "scenebuilder"; 68 exec = "scenebuilder"; 69 icon = "scenebuilder"; 70 comment = "A visual, drag'n'drop, layout tool for designing JavaFX application user interfaces."; 71 desktopName = "Scene Builder"; 72 mimeTypes = [ "application/java" "application/java-vm" "application/java-archive" ]; 73 categories = [ "Development" ]; 74 }; 75 76in stdenv.mkDerivation rec { 77 inherit pname src version; 78 79 nativeBuildInputs = [ jdk11 gradle makeWrapper glib wrapGAppsHook ]; 80 81 dontWrapGApps = true; # prevent double wrapping 82 83 buildPhase = '' 84 runHook preBuild 85 86 export GRADLE_USER_HOME=$(mktemp -d) 87 gradle -PVERSION=${version} --offline --no-daemon --info --init-script ${gradleInit} build -x test 88 89 runHook postBuild 90 ''; 91 92 installPhase = '' 93 runHook preInstall 94 95 mkdir -p $out/bin $out/share/{${pname},icons/hicolor/128x128/apps} 96 cp app/build/libs/SceneBuilder-${version}-all.jar $out/share/${pname}/${pname}.jar 97 cp app/build/resources/main/com/oracle/javafx/scenebuilder/app/SB_Logo.png $out/share/icons/hicolor/128x128/apps/scenebuilder.png 98 99 runHook postInstall 100 ''; 101 102 postFixup = '' 103 makeWrapper ${jdk11}/bin/java $out/bin/${pname} --add-flags "-jar $out/share/${pname}/${pname}.jar" "''${gappsWrapperArgs[@]}" 104 ''; 105 106 desktopItems = [ desktopItem ]; 107 108 meta = with lib; { 109 broken = stdenv.isDarwin; 110 description = "A visual, drag'n'drop, layout tool for designing JavaFX application user interfaces."; 111 homepage = "https://gluonhq.com/products/scene-builder/"; 112 sourceProvenance = with sourceTypes; [ 113 fromSource 114 binaryBytecode # deps 115 ]; 116 license = licenses.bsd3; 117 maintainers = with maintainers; [ wirew0rm ]; 118 platforms = platforms.all; 119 }; 120}