1{ lib, stdenv, fetchFromGitHub, fetchurl, ant, unzip, makeWrapper, jdk, javaPackages, rsync, ffmpeg, batik, gsettings-desktop-schemas, xorg, wrapGAppsHook }:
2let
3 buildNumber = "1292";
4 vaqua = fetchurl {
5 name = "VAqua9.jar";
6 url = "https://violetlib.org/release/vaqua/9/VAqua9.jar";
7 sha256 = "cd0b82df8e7434c902ec873364bf3e9a3e6bef8b59cbf42433130d71bf1a779c";
8 };
9
10 jna = fetchurl {
11 name = "jna-5.10.0.zip";
12 url = "https://github.com/java-native-access/jna/archive/5.10.0.zip";
13 sha256 = "B5CakOQ8225xNsk2TMV8CbK3RcsLlb+pHzjaY5JNwg0=";
14 };
15
16 flatlaf = fetchurl {
17 name = "flatlaf-2.4.jar";
18 url = "https://repo1.maven.org/maven2/com/formdev/flatlaf/2.4/flatlaf-2.4.jar";
19 sha256 = "NVMYiCd+koNCJ6X3EiRx1Aj+T5uAMSJ9juMmB5Os+zc=";
20 };
21
22 lsp4j = fetchurl {
23 name = "org.eclipse.lsp4j-0.19.0.jar";
24 url = "https://repo1.maven.org/maven2/org/eclipse/lsp4j/org.eclipse.lsp4j/0.19.0/org.eclipse.lsp4j-0.19.0.jar";
25 sha256 = "sha256-1DI5D9KW+GL4gT1qjwVZveOl5KVOEjt6uXDwsFzi8Sg=";
26 };
27
28 lsp4j-jsonrpc = fetchurl {
29 name = "org.eclipse.lsp4j.jsonrpc-0.19.0.jar";
30 url = "https://repo1.maven.org/maven2/org/eclipse/lsp4j/org.eclipse.lsp4j.jsonrpc/0.19.0/org.eclipse.lsp4j.jsonrpc-0.19.0.jar";
31 sha256 = "sha256-ozYTkvv7k0psCeX/PbSM3/Bl17qT3upX3trt65lmM9I=";
32 };
33
34 gson = fetchurl {
35 name = "gson-2.9.1.jar";
36 url = "https://repo1.maven.org/maven2/com/google/code/gson/gson/2.9.1/gson-2.9.1.jar";
37 sha256 = "sha256-N4U04znm5tULFzb7Ort28cFdG+P0wTzsbVNkEuI9pgM=";
38 };
39
40 arch = {
41 x86_64 = "amd64";
42 }.${stdenv.hostPlatform.parsed.cpu.name} or stdenv.hostPlatform.parsed.cpu.name;
43in
44stdenv.mkDerivation rec {
45 pname = "processing";
46 version = "4.2";
47
48 src = fetchFromGitHub {
49 owner = "processing";
50 repo = "processing4";
51 rev = "processing-${buildNumber}-${version}";
52 sha256 = "sha256-wdluhrtliLN4T2dcmwvUWZhOARC3Lst7+hWWwZjafmU=";
53 };
54
55 nativeBuildInputs = [ ant unzip makeWrapper wrapGAppsHook ];
56 buildInputs = [ jdk javaPackages.jogl_2_4_0 ant rsync ffmpeg batik ];
57
58 dontWrapGApps = true;
59
60 buildPhase = ''
61 echo "tarring jdk"
62 tar --checkpoint=10000 -czf build/linux/jdk-17.0.6-${arch}.tgz ${jdk}
63 cp ${ant}/lib/ant/lib/{ant.jar,ant-launcher.jar} app/lib/
64 mkdir -p core/library
65 ln -s ${javaPackages.jogl_2_4_0}/share/java/* core/library/
66 ln -s ${vaqua} app/lib/VAqua9.jar
67 ln -s ${flatlaf} app/lib/flatlaf.jar
68 ln -s ${lsp4j} java/mode/org.eclipse.lsp4j.jar
69 ln -s ${lsp4j-jsonrpc} java/mode/org.eclipse.lsp4j.jsonrpc.jar
70 ln -s ${gson} java/mode/gson.jar
71 unzip -qo ${jna} -d app/lib/
72 mv app/lib/{jna-5.10.0/dist/jna.jar,}
73 mv app/lib/{jna-5.10.0/dist/jna-platform.jar,}
74 ln -sf ${batik}/* java/libraries/svg/library/
75 cp java/libraries/svg/library/lib/batik-all-${batik.version}.jar java/libraries/svg/library/batik.jar
76 echo "tarring ffmpeg"
77 tar --checkpoint=10000 -czf build/shared/tools/MovieMaker/ffmpeg-5.0.1.gz ${ffmpeg}
78 cd build
79 ant build
80 cd ..
81 '';
82
83 installPhase = ''
84 mkdir -p $out/share/
85 cp -dpr build/linux/work $out/share/${pname}
86 rmdir $out/share/${pname}/java
87 ln -s ${jdk} $out/share/${pname}/java
88 makeWrapper $out/share/${pname}/processing $out/bin/processing \
89 ''${gappsWrapperArgs[@]} \
90 --prefix _JAVA_OPTIONS " " -Dawt.useSystemAAFontSettings=lcd
91 makeWrapper $out/share/${pname}/processing-java $out/bin/processing-java \
92 ''${gappsWrapperArgs[@]} \
93 --prefix _JAVA_OPTIONS " " -Dawt.useSystemAAFontSettings=lcd
94 '';
95
96 meta = with lib; {
97 description = "A language and IDE for electronic arts";
98 homepage = "https://processing.org";
99 license = with licenses; [ gpl2Only lgpl21Only ];
100 platforms = platforms.linux;
101 maintainers = with maintainers; [ evan-goode ];
102 };
103}