1{
2 lib,
3 stdenv,
4 fetchurl,
5 fetchFromGitHub,
6 jdk_headless,
7 jre,
8 gradle_8,
9 bash,
10 coreutils,
11 replaceVars,
12 nixosTests,
13 writeText,
14}:
15
16let
17 gradle = gradle_8;
18 jdk = jdk_headless;
19
20 freenet_ext = fetchurl {
21 url = "https://github.com/freenet/fred/releases/download/build01495/freenet-ext.jar";
22 hash = "sha256-MvKz1r7t9UE36i+aPr72dmbXafCWawjNF/19tZuk158=";
23 };
24
25 seednodes = fetchFromGitHub {
26 name = "freenet-seednodes";
27 owner = "hyphanet";
28 repo = "seedrefs";
29 rev = "9df1bf93ab64aba634bdfc5f4d0e960571ce4ba5";
30 hash = "sha256-nvwJvKw5IPhItPe4k/jnOGaa8H4DtOi8XxKFOKFMAuY=";
31 postFetch = ''
32 cat $out/* > $out/seednodes.fref
33 '';
34 };
35
36in
37stdenv.mkDerivation rec {
38 pname = "freenet";
39 version = "01501";
40
41 src = fetchFromGitHub {
42 owner = "freenet";
43 repo = "fred";
44 tag = "build${version}";
45 hash = "sha256-XtcTQlgUNv6IQD89oelCyjb9r6wIbT3hCH+QHkjtgP8=";
46 };
47
48 nativeBuildInputs = [
49 gradle
50 jdk
51 ];
52
53 wrapper = replaceVars ./freenetWrapper {
54 inherit
55 bash
56 coreutils
57 jre
58 seednodes
59 ;
60 # replaced in installPhase
61 CLASSPATH = null;
62 };
63
64 mitmCache = gradle.fetchDeps {
65 inherit pname;
66 data = ./deps.json;
67 };
68
69 # using reproducible archives breaks the build
70 gradleInitScript = writeText "empty-init-script.gradle" "";
71
72 gradleFlags = [ "-Dorg.gradle.java.home=${jdk}" ];
73
74 gradleBuildTask = "jar";
75
76 installPhase = ''
77 runHook preInstall
78
79 install -Dm644 build/libs/freenet.jar $out/share/freenet/freenet.jar
80 ln -s ${freenet_ext} $out/share/freenet/freenet-ext.jar
81 mkdir -p $out/bin
82 install -Dm755 ${wrapper} $out/bin/freenet
83 export CLASSPATH="$(find ${mitmCache} -name "*.jar"| sort | grep -v bcprov-jdk15on-1.48.jar|tr $'\n' :):$out/share/freenet/freenet-ext.jar:$out/share/freenet/freenet.jar"
84 substituteInPlace $out/bin/freenet \
85 --subst-var-by CLASSPATH "$CLASSPATH"
86
87 runHook postInstall
88 '';
89
90 passthru.tests = {
91 inherit (nixosTests) freenet;
92 };
93
94 meta = {
95 description = "Decentralised and censorship-resistant network";
96 homepage = "https://freenetproject.org/";
97 sourceProvenance = with lib.sourceTypes; [ binaryBytecode ];
98 license = lib.licenses.gpl2Plus;
99 maintainers = with lib.maintainers; [ nagy ];
100 platforms = with lib.platforms; linux;
101 changelog = "https://github.com/freenet/fred/blob/build${version}/NEWS.md";
102 mainProgram = "freenet";
103 };
104}