1{
2 lib,
3 stdenv,
4 fetchFromGitHub,
5 fetchurl,
6 ant,
7 unzip,
8 makeWrapper,
9 jdk,
10 jogl,
11 rsync,
12 ffmpeg,
13 batik,
14 stripJavaArchivesHook,
15 wrapGAppsHook3,
16 libGL,
17}:
18let
19 buildNumber = "1295";
20 vaqua = fetchurl {
21 name = "VAqua9.jar";
22 url = "https://violetlib.org/release/vaqua/9/VAqua9.jar";
23 sha256 = "cd0b82df8e7434c902ec873364bf3e9a3e6bef8b59cbf42433130d71bf1a779c";
24 };
25
26 jna = fetchurl {
27 name = "jna-5.10.0.zip";
28 url = "https://github.com/java-native-access/jna/archive/5.10.0.zip";
29 sha256 = "B5CakOQ8225xNsk2TMV8CbK3RcsLlb+pHzjaY5JNwg0=";
30 };
31
32 flatlaf = fetchurl {
33 name = "flatlaf-2.4.jar";
34 url = "mirror://maven/com/formdev/flatlaf/2.4/flatlaf-2.4.jar";
35 sha256 = "NVMYiCd+koNCJ6X3EiRx1Aj+T5uAMSJ9juMmB5Os+zc=";
36 };
37
38 lsp4j = fetchurl {
39 name = "org.eclipse.lsp4j-0.19.0.jar";
40 url = "mirror://maven/org/eclipse/lsp4j/org.eclipse.lsp4j/0.19.0/org.eclipse.lsp4j-0.19.0.jar";
41 sha256 = "sha256-1DI5D9KW+GL4gT1qjwVZveOl5KVOEjt6uXDwsFzi8Sg=";
42 };
43
44 lsp4j-jsonrpc = fetchurl {
45 name = "org.eclipse.lsp4j.jsonrpc-0.19.0.jar";
46 url = "mirror://maven/org/eclipse/lsp4j/org.eclipse.lsp4j.jsonrpc/0.19.0/org.eclipse.lsp4j.jsonrpc-0.19.0.jar";
47 sha256 = "sha256-ozYTkvv7k0psCeX/PbSM3/Bl17qT3upX3trt65lmM9I=";
48 };
49
50 gson = fetchurl {
51 name = "gson-2.9.1.jar";
52 url = "mirror://maven/com/google/code/gson/gson/2.9.1/gson-2.9.1.jar";
53 sha256 = "sha256-N4U04znm5tULFzb7Ort28cFdG+P0wTzsbVNkEuI9pgM=";
54 };
55
56 arch =
57 {
58 x86_64 = "amd64";
59 }
60 .${stdenv.hostPlatform.parsed.cpu.name} or stdenv.hostPlatform.parsed.cpu.name;
61in
62stdenv.mkDerivation rec {
63 pname = "processing";
64 version = "4.3.2";
65
66 src = fetchFromGitHub {
67 owner = "processing";
68 repo = "processing4";
69 rev = "processing-${buildNumber}-${version}";
70 sha256 = "sha256-jUkWnkP8up5vpaXfgFJ/jQjN1KfeX5EuYXSb+W6NEms=";
71 };
72
73 # Processing did not update the todo.txt file before tagging this release, so
74 # the "revision-check" Ant target fails.
75 patches = [ ./disable-revision-check.patch ];
76
77 nativeBuildInputs = [
78 ant
79 unzip
80 makeWrapper
81 stripJavaArchivesHook
82 wrapGAppsHook3
83 ];
84 buildInputs = [
85 jdk
86 jogl
87 ant
88 rsync
89 ffmpeg
90 batik
91 ];
92
93 dontWrapGApps = true;
94
95 buildPhase = ''
96 runHook preBuild
97
98 echo "tarring jdk"
99 tar --checkpoint=10000 -czf build/linux/jdk-17.0.8-${arch}.tgz ${jdk}
100 cp ${ant.home}/lib/{ant.jar,ant-launcher.jar} app/lib/
101 mkdir -p core/library
102 ln -s ${jogl}/share/java/* core/library/
103 ln -s ${vaqua} app/lib/VAqua9.jar
104 ln -s ${flatlaf} app/lib/flatlaf.jar
105 ln -s ${lsp4j} java/mode/org.eclipse.lsp4j.jar
106 ln -s ${lsp4j-jsonrpc} java/mode/org.eclipse.lsp4j.jsonrpc.jar
107 ln -s ${gson} java/mode/gson.jar
108 unzip -qo ${jna} -d app/lib/
109 mv app/lib/{jna-5.10.0/dist/jna.jar,}
110 mv app/lib/{jna-5.10.0/dist/jna-platform.jar,}
111 ln -sf ${batik}/* java/libraries/svg/library/
112 cp java/libraries/svg/library/share/java/batik-all-${batik.version}.jar java/libraries/svg/library/batik.jar
113 echo "tarring ffmpeg"
114 tar --checkpoint=10000 -czf build/shared/tools/MovieMaker/ffmpeg-5.0.1.gz ${ffmpeg}
115 cd build
116 ant build
117 cd ..
118
119 runHook postBuild
120 '';
121
122 installPhase = ''
123 runHook preInstall
124
125 mkdir -p $out/share/
126 mkdir -p $out/share/applications/
127 cp -dp build/linux/${pname}.desktop $out/share/applications/
128 cp -dpr build/linux/work $out/share/${pname}
129 rmdir $out/share/${pname}/java
130 ln -s ${jdk} $out/share/${pname}/java
131 makeWrapper $out/share/${pname}/processing $out/bin/processing \
132 ''${gappsWrapperArgs[@]} \
133 --prefix LD_LIBRARY_PATH : "${lib.makeLibraryPath [ libGL ]}" \
134 --prefix _JAVA_OPTIONS " " "-Dawt.useSystemAAFontSettings=gasp"
135 makeWrapper $out/share/${pname}/processing-java $out/bin/processing-java \
136 ''${gappsWrapperArgs[@]} \
137 --prefix LD_LIBRARY_PATH : "${lib.makeLibraryPath [ libGL ]}" \
138 --prefix _JAVA_OPTIONS " " "-Dawt.useSystemAAFontSettings=gasp"
139
140 runHook postInstall
141 '';
142
143 meta = with lib; {
144 description = "Language and IDE for electronic arts";
145 homepage = "https://processing.org";
146 license = with licenses; [
147 gpl2Only
148 lgpl21Only
149 ];
150 platforms = platforms.linux;
151 maintainers = with maintainers; [ evan-goode ];
152 };
153}