1+ package org.processing.java.gradle
2+
3+ import org.gradle.api.DefaultTask
4+ import org.gradle.api.file.RegularFileProperty
5+ import org.gradle.api.tasks.InputFile
6+ import org.gradle.api.tasks.TaskAction
7+ import java.io.File
8+ import java.io.ObjectInputStream
9+
10+ abstract class DependenciesTask : DefaultTask () {
11+ @InputFile
12+ val librariesMetaData: RegularFileProperty = project.objects.fileProperty()
13+
14+ @InputFile
15+ val sketchMetaData: RegularFileProperty = project.objects.fileProperty()
16+
17+ init {
18+ librariesMetaData.convention(project.layout.buildDirectory.file(" processing/libraries" ))
19+ sketchMetaData.convention(project.layout.buildDirectory.file(" processing/sketch" ))
20+ }
21+
22+ @TaskAction
23+ fun execute () {
24+ val sketchMetaFile = sketchMetaData.get().asFile
25+ val librariesMetaFile = librariesMetaData.get().asFile
26+
27+ val libraries = librariesMetaFile.inputStream().use { input ->
28+ ObjectInputStream (input).readObject() as ArrayList <LibrariesTask .Library >
29+ }
30+
31+ val sketch = sketchMetaFile.inputStream().use { input ->
32+ ObjectInputStream (input).readObject() as PDETask .SketchMeta
33+ }
34+
35+ val dependencies = mutableSetOf<File >()
36+
37+ // Loop over the import statements in the sketch and import the relevant jars from the libraries
38+ sketch.importStatements.forEach import@{ statement ->
39+ libraries.forEach { library ->
40+ library.jars.forEach { jar ->
41+ jar.classes.forEach { className ->
42+ if (className.startsWith(statement)) {
43+ dependencies.add(jar.path)
44+ return @import
45+ }
46+ }
47+ }
48+ }
49+ }
50+ project.dependencies.add(" implementation" , project.files(dependencies) )
51+
52+ // TODO: Add only if user is compiling for P2D or P3D
53+ // Add JOGL and Gluegen dependencies
54+ project.dependencies.add(" runtimeOnly" , " org.jogamp.jogl:jogl-all-main:2.5.0" )
55+ project.dependencies.add(" runtimeOnly" , " org.jogamp.gluegen:gluegen-rt-main:2.5.0" )
56+
57+ // TODO: Only add the native dependencies for the platform the user is building for
58+ // MacOS specific native dependencies
59+ project.dependencies.add(" runtimeOnly" , " org.jogamp.jogl:jogl-all:2.5.0:natives-macosx-universal" )
60+ project.dependencies.add(" runtimeOnly" , " org.jogamp.gluegen:gluegen-rt:2.5.0:natives-macosx-universal" )
61+
62+ // Windows specific native dependencies
63+ project.dependencies.add(" runtimeOnly" , " org.jogamp.jogl:jogl-all:2.5.0:natives-windows-amd64" )
64+ project.dependencies.add(" runtimeOnly" , " org.jogamp.gluegen:gluegen-rt:2.5.0:natives-windows-amd64" )
65+
66+ // Linux specific native dependencies
67+ project.dependencies.add(" runtimeOnly" , " org.jogamp.jogl:jogl-all:2.5.0:natives-linux-amd64" )
68+ project.dependencies.add(" runtimeOnly" , " org.jogamp.gluegen:gluegen-rt:2.5.0:natives-linux-amd64" )
69+
70+ // NativeWindow dependencies for all platforms
71+ project.dependencies.add(" implementation" , " org.jogamp.jogl:nativewindow:2.5.0" )
72+ project.dependencies.add(" runtimeOnly" , " org.jogamp.jogl:nativewindow:2.5.0:natives-macosx-universal" )
73+ project.dependencies.add(" runtimeOnly" , " org.jogamp.jogl:nativewindow:2.5.0:natives-windows-amd64" )
74+ project.dependencies.add(" runtimeOnly" , " org.jogamp.jogl:nativewindow:2.5.0:natives-linux-amd64" )
75+ }
76+ }
0 commit comments