Skip to content

Commit 111e3d5

Browse files
tomasstupkaelkorchi
authored andcommitted
extracted home and venv logic from maven and gradle plugin into embedding.tools
(cherry picked from commit 31cfe5e)
1 parent d3bc833 commit 111e3d5

File tree

9 files changed

+565
-701
lines changed

9 files changed

+565
-701
lines changed

graalpython/graalpy-gradle-plugin/pom.xml

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,6 @@ SOFTWARE.
5757
<maven.compiler.target>17</maven.compiler.target>
5858
<maven.compiler.source>17</maven.compiler.source>
5959
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
60-
<!-- XXX -->
6160
<graalpy.version>24.2.0</graalpy.version>
6261
<gradle.version>6.1.1</gradle.version>
6362
</properties>
@@ -159,10 +158,6 @@ SOFTWARE.
159158
</dependencies>
160159

161160
<repositories>
162-
<!-- <repository>-->
163-
<!-- <id>maven</id>-->
164-
<!-- <url>https://repo1.maven.org/maven2/</url>-->
165-
<!-- </repository>-->
166161
<repository>
167162
<id>gradle</id>
168163
<url>https://repo.gradle.org/gradle/libs-releases/</url>
@@ -173,16 +168,6 @@ SOFTWARE.
173168
<enabled>false</enabled>
174169
</snapshots>
175170
</repository>
176-
<repository>
177-
<id>gradle-local</id>
178-
<url>https://repo.gradle.org/gradle/libs-releases-local/</url>
179-
<releases>
180-
<enabled>true</enabled>
181-
</releases>
182-
<snapshots>
183-
<enabled>false</enabled>
184-
</snapshots>
185-
</repository>
186171
</repositories>
187172

188173

graalpython/graalpy-gradle-plugin/src/main/java/org/graalvm/python/GraalPyGradlePlugin.java

Lines changed: 26 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -41,14 +41,16 @@
4141
package org.graalvm.python;
4242

4343
import org.graalvm.python.dsl.GraalPyExtension;
44-
import org.graalvm.python.tasks.GenerateManifestTask;
45-
import org.graalvm.python.tasks.InstallPackagesTask;
44+
import org.graalvm.python.tasks.VFSFilesListTask;
45+
import org.graalvm.python.tasks.NativeImageConfigTask;
46+
import org.graalvm.python.tasks.ResourcesTask;
4647
import org.gradle.api.GradleException;
4748
import org.gradle.api.Plugin;
4849
import org.gradle.api.Project;
4950
import org.gradle.api.artifacts.Dependency;
5051
import org.gradle.api.artifacts.DependencySet;
5152
import org.gradle.api.plugins.JavaPlugin;
53+
import org.gradle.api.tasks.TaskProvider;
5254
import org.gradle.jvm.tasks.Jar;
5355
import org.gradle.language.jvm.tasks.ProcessResources;
5456

@@ -61,13 +63,15 @@
6163
public abstract class GraalPyGradlePlugin implements Plugin<Project> {
6264
private static final String PYTHON_LAUNCHER_ARTIFACT_ID = "python-launcher";
6365
private static final String PYTHON_EMBEDDING_ARTIFACT_ID = "python-embedding";
64-
6566
private static final String POLYGLOT_GROUP_ID = "org.graalvm.polyglot";
6667
private static final String PYTHON_COMMUNITY_ARTIFACT_ID = "python-community";
6768
private static final String PYTHON_ARTIFACT_ID = "python";
68-
private static final String GRAALPY_GRADLE_PLUGIN_TASK_GROUP = "graalpy";
69-
69+
private static final String GRAALPY_GRADLE_PLUGIN_TASK_GROUP = "graalPy";
7070
private static final String DEFAULT_WRAPPER_DIRECTORY = "python-generated";
71+
private static final String GRAALPY_RESOURCES_TASK = "graalPyResources";
72+
private static final String GRAALPY_NATIVE_IMAGE_CONFIG_TASK = "graalPyNativeImageConfig";
73+
private static final String GRAALPY_VFS_FILESLIST_TASK = "graalPyVFSFilesList";
74+
7175

7276
GraalPyExtension extension;
7377
Project project;
@@ -77,22 +81,12 @@ public void apply(Project project) {
7781
this.project = project;
7882
project.getPluginManager().apply(JavaPlugin.class);
7983

80-
8184
this.extension = project.getExtensions().create("graalPy", GraalPyExtension.class);
8285
extension.getPythonHome().getIncludes().convention(List.of(".*"));
8386
extension.getPythonHome().getExcludes().convention(Collections.emptyList());
8487
extension.getPackages().convention(Collections.emptyList());
8588

86-
var installPackagesTask = project.getTasks().register("installPackages", InstallPackagesTask.class);
87-
88-
89-
final var generateManifestTask = project.getTasks().register("generateManifest", GenerateManifestTask.class);
90-
project.getTasks().getByName(JavaPlugin.JAR_TASK_NAME, t -> ((Jar) t).getMetaInf().from(generateManifestTask));
91-
generateManifestTask.configure(t -> {
92-
t.getManifestOutputDir().convention(project.getLayout().getBuildDirectory().dir("GRAAL-META-INF"));
93-
t.setGroup(GRAALPY_GRADLE_PLUGIN_TASK_GROUP);
94-
});
95-
89+
TaskProvider<ResourcesTask> installPackagesTask = project.getTasks().register(GRAALPY_RESOURCES_TASK, ResourcesTask.class);
9690
installPackagesTask.configure(t -> {
9791
t.getIncludes().set(extension.getPythonHome().getIncludes());
9892
t.getExcludes().set(extension.getPythonHome().getExcludes());
@@ -104,19 +98,33 @@ public void apply(Project project) {
10498
t.setGroup(GRAALPY_GRADLE_PLUGIN_TASK_GROUP);
10599
});
106100

101+
TaskProvider<NativeImageConfigTask> generateManifestTask = project.getTasks().register(GRAALPY_NATIVE_IMAGE_CONFIG_TASK, NativeImageConfigTask.class);
102+
project.getTasks().getByName(JavaPlugin.JAR_TASK_NAME, t -> ((Jar) t).getMetaInf().from(generateManifestTask));
103+
generateManifestTask.configure(t -> {
104+
t.getManifestOutputDir().convention(project.getLayout().getBuildDirectory().dir("GRAAL-META-INF"));
105+
t.setGroup(GRAALPY_GRADLE_PLUGIN_TASK_GROUP);
106+
});
107+
108+
TaskProvider<VFSFilesListTask> generateVFSFilesListTask = project.getTasks().register(GRAALPY_VFS_FILESLIST_TASK, VFSFilesListTask.class);
109+
generateVFSFilesListTask.configure(t -> {
110+
t.getResourcesDir().convention((((ProcessResources) project.getTasks().getByName(JavaPlugin.PROCESS_RESOURCES_TASK_NAME)).getDestinationDir()));
111+
t.setGroup(GRAALPY_GRADLE_PLUGIN_TASK_GROUP);
112+
});
113+
project.getTasks().getByName(JavaPlugin.PROCESS_RESOURCES_TASK_NAME, t -> t.finalizedBy(GRAALPY_VFS_FILESLIST_TASK));
114+
107115
project.afterEvaluate(p -> {
108116
checkAndAddDependencies();
109117

110-
if (!extension.getPythonResourcesDirectory().isPresent())
118+
if (!extension.getPythonResourcesDirectory().isPresent()) {
111119
((ProcessResources) project.getTasks().getByName(JavaPlugin.PROCESS_RESOURCES_TASK_NAME)).with(project.copySpec().from(installPackagesTask));
120+
}
112121

113122
// Provide the default value after the isPresent check, otherwise isPresent always returns true
114123
extension.getPythonResourcesDirectory().convention(project.getLayout().getBuildDirectory().dir(DEFAULT_WRAPPER_DIRECTORY));
115124
});
116125

117126
}
118127

119-
120128
private void checkAndAddDependencies() {
121129
project.getDependencies().add(JavaPlugin.IMPLEMENTATION_CONFIGURATION_NAME, "%s:%s:%s".formatted(GRAALPY_GROUP_ID, PYTHON_LAUNCHER_ARTIFACT_ID, getGraalPyVersion(project)));
122130
project.getDependencies().add(JavaPlugin.IMPLEMENTATION_CONFIGURATION_NAME, "%s:%s:%s".formatted(GRAALPY_GROUP_ID, PYTHON_EMBEDDING_ARTIFACT_ID, getGraalPyVersion(project)));

0 commit comments

Comments
 (0)