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