Clone of https://github.com/NixOS/nixpkgs.git (to stress-test knotserver)
1{ stdenv, lib, fetchpatch, fetchFromGitHub, makeWrapper, writeText, runtimeShell, jdk11, perl, gradle_6, which }: 2 3let 4 pname = "freeplane"; 5 version = "1.9.14"; 6 7 src_sha256 = "UiXtGJs+hibB63BaDDLXgjt3INBs+NfMsKcX2Q/kxKw="; 8 deps_outputHash = "tHhRaMIQK8ERuzm+qB9tRe2XSesL0bN3rComB9/qWgg="; 9 emoji_outputHash = "w96or4lpKCRK8A5HaB4Eakr7oVSiQALJ9tCJvKZaM34="; 10 11 jdk = jdk11; 12 gradle = gradle_6; 13 14 src = fetchFromGitHub { 15 owner = pname; 16 repo = pname; 17 rev = "release-${version}"; 18 sha256 = src_sha256; 19 }; 20 21 deps = stdenv.mkDerivation { 22 name = "${pname}-deps"; 23 inherit src; 24 25 nativeBuildInputs = [ jdk perl gradle ]; 26 27 buildPhase = '' 28 GRADLE_USER_HOME=$PWD gradle -Dorg.gradle.java.home=${jdk} --no-daemon jar 29 ''; 30 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 ./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 ''; 38 39 outputHashAlgo = "sha256"; 40 outputHashMode = "recursive"; 41 outputHash = deps_outputHash; 42 }; 43 44 # Point to our local deps repo 45 gradleInit = writeText "init.gradle" '' 46 logger.lifecycle 'Replacing Maven repositories with ${deps}...' 47 gradle.projectsLoaded { 48 rootProject.allprojects { 49 buildscript { 50 repositories { 51 clear() 52 maven { url '${deps}' } 53 } 54 } 55 repositories { 56 clear() 57 maven { url '${deps}' } 58 } 59 } 60 } 61 settingsEvaluated { settings -> 62 settings.pluginManagement { 63 repositories { 64 maven { url '${deps}' } 65 } 66 } 67 } 68 ''; 69 70 emoji = stdenv.mkDerivation rec { 71 name = "${pname}-emoji"; 72 inherit src; 73 74 nativeBuildInputs = [ jdk gradle ]; 75 76 buildPhase = '' 77 GRADLE_USER_HOME=$PWD gradle -Dorg.gradle.java.home=${jdk} --no-daemon --offline --init-script ${gradleInit} :freeplane:downloadEmoji 78 ''; 79 80 installPhase = '' 81 mkdir -p $out/emoji/txt $out/resources/images 82 cp freeplane/build/emoji/txt/emojilist.txt $out/emoji/txt 83 cp -r freeplane/build/emoji/resources/images/emoji/. $out/resources/images/emoji 84 ''; 85 86 outputHashAlgo = "sha256"; 87 outputHashMode = "recursive"; 88 outputHash = emoji_outputHash; 89 }; 90 91in stdenv.mkDerivation rec { 92 inherit pname version src; 93 94 nativeBuildInputs = [ makeWrapper jdk gradle ]; 95 96 buildPhase = '' 97 mkdir -p -- ./freeplane/build/emoji/{txt,resources/images} 98 cp ${emoji}/emoji/txt/emojilist.txt ./freeplane/build/emoji/txt/emojilist.txt 99 cp -r ${emoji}/resources/images/emoji ./freeplane/build/emoji/resources/images/emoji 100 GRADLE_USER_HOME=$PWD gradle -Dorg.gradle.java.home=${jdk} --no-daemon --offline --init-script ${gradleInit} -x test -x :freeplane:downloadEmoji build 101 ''; 102 103 installPhase = '' 104 runHook preInstall 105 mkdir -p $out/bin $out/share 106 107 cp -a ./BIN/. $out/share/${pname} 108 makeWrapper $out/share/${pname}/${pname}.sh $out/bin/${pname} \ 109 --set FREEPLANE_BASE_DIR $out/share/${pname} \ 110 --set JAVA_HOME ${jdk} \ 111 --prefix PATH : ${lib.makeBinPath [ jdk which ]} 112 runHook postInstall 113 ''; 114 115 meta = with lib; { 116 description = "Mind-mapping software"; 117 homepage = "https://freeplane.org/"; 118 license = licenses.gpl2Plus; 119 platforms = platforms.linux; 120 maintainers = with maintainers; [ chaduffy ]; 121 }; 122}