< prev index next > buildSrc/images/src/main/java/org/openjdk/skara/gradle/images/ImagesPlugin.java
Print this page
import org.gradle.api.file.Directory;
import org.gradle.api.tasks.bundling.*;
import org.gradle.api.artifacts.UnknownConfigurationException;
import java.util.ArrayList;
+ import java.util.HashSet;
import java.io.File;
public class ImagesPlugin implements Plugin<Project> {
+ private static String getOS() {
+ var p = System.getProperty("os.name").toLowerCase();
+ if (p.startsWith("win")) {
+ return "windows";
+ }
+ if (p.startsWith("mac")) {
+ return "macos";
+ }
+ if (p.startsWith("linux")) {
+ return "linux";
+ }
+ if (p.startsWith("sunos")) {
+ return "solaris";
+ }
+
+ throw new RuntimeException("Unknown operating system: " + System.getProperty("os.name"));
+ }
+
+ private static String getCPU() {
+ var p = System.getProperty("os.arch").toLowerCase();
+ if (p.startsWith("amd64") || p.startsWith("x86_64") || p.startsWith("x64")) {
+ return "x64";
+ }
+ if (p.startsWith("x86") || p.startsWith("i386")) {
+ return "x86";
+ }
+ if (p.startsWith("sparc")) {
+ return "sparc";
+ }
+ if (p.startsWith("ppc")) {
+ return "ppc";
+ }
+ if (p.startsWith("arm")) {
+ return "arm";
+ }
+
+ throw new RuntimeException("Unknown CPU: " + System.getProperty("os.arch"));
+ }
+
@Override
public void apply(Project project) {
NamedDomainObjectContainer<ImageEnvironment> imageEnvironmentContainer =
project.container(ImageEnvironment.class, new NamedDomainObjectFactory<ImageEnvironment>() {
public ImageEnvironment create(String name) {
var rootDir = project.getRootDir().toPath().toAbsolutePath();
var buildDir = project.getBuildDir().toPath().toAbsolutePath();
imageEnvironmentContainer.all(new Action<ImageEnvironment>() {
public void execute(ImageEnvironment env) {
- var name = env.getName();
- var subName = name.substring(0, 1).toUpperCase() + name.substring(1);
+ var parts = env.getName().split("_");;
+ var isLocal = parts.length == 1 && parts[0].equals("local");
+ var os = isLocal ? getOS() : parts[0];
+ var cpu = isLocal ? getCPU() : parts[1];
+ var osAndCpuPascalCased =
+ os.substring(0, 1).toUpperCase() + os.substring(1) +
+ cpu.substring(0, 1).toUpperCase() + cpu.substring(1);
+ var subName = isLocal ? "Local" : osAndCpuPascalCased;
var downloadTaskName = "download" + subName + "JDK";
- project.getTasks().register(downloadTaskName, DownloadJDKTask.class, (task) -> {
- task.getUrl().set(env.getUrl());
- task.getSha256().set(env.getSha256());
- task.getToDir().set(rootDir.resolve(".jdk"));
- });
+ if (!isLocal) {
+ project.getTasks().register(downloadTaskName, DownloadJDKTask.class, (task) -> {
+ task.getUrl().set(env.getUrl());
+ task.getSha256().set(env.getSha256());
+ task.getToDir().set(rootDir.resolve(".jdk"));
+ });
+ }
var linkTaskName = "link" + subName;
project.getTasks().register(linkTaskName, LinkTask.class, (task) -> {
for (var jarTask : project.getTasksByName("jar", true)) {
if (jarTask instanceof Jar) {
task.dependsOn(runtimeClasspath);
} catch (UnknownConfigurationException e) {
// ignored
}
- task.dependsOn(projectPath + ":" + downloadTaskName);
+ if (!isLocal) {
+ task.dependsOn(projectPath + ":" + downloadTaskName);
+ task.getUrl().set(env.getUrl());
+ } else {
+ task.getUrl().set("local");
+ }
task.getToDir().set(buildDir.resolve("images"));
- task.getUrl().set(env.getUrl());
- task.getOS().set(name);
+ task.getOS().set(os);
+ task.getCPU().set(cpu);
task.getLaunchers().set(env.getLaunchers());
task.getModules().set(env.getModules());
});
var launchersTaskName = "launchers" + subName;
project.getTasks().register(launchersTaskName, LaunchersTask.class, (task) -> {
task.getLaunchers().set(env.getLaunchers());
task.getOptions().set(env.getOptions());
task.getToDir().set(buildDir.resolve("launchers"));
- task.getOS().set(name);
+ task.getOS().set(os);
+ task.getCPU().set(cpu);
});
var zipTaskName = "bundleZip" + subName;
project.getTasks().register(zipTaskName, Zip.class, (task) -> {
task.dependsOn(projectPath + ":" + linkTaskName);
task.dependsOn(projectPath + ":" + launchersTaskName);
task.setPreserveFileTimestamps(false);
task.setReproducibleFileOrder(true);
task.getArchiveBaseName().set(project.getName());
- task.getArchiveClassifier().set(name);
+ task.getArchiveClassifier().set(os + "-" + cpu);
task.getArchiveExtension().set("zip");
if (env.getMan().isPresent()) {
var root = project.getRootProject().getRootDir().toPath().toAbsolutePath();
task.from(root.resolve(env.getMan().get()).toString(), (s) -> {
s.into("bin/man");
});
}
- task.from(buildDir.resolve("images").resolve(name), (s) -> {
+ var subdir = os + "-" + cpu;
+ task.from(buildDir.resolve("images").resolve(subdir), (s) -> {
s.into("image");
});
- task.from(buildDir.resolve("launchers").resolve(name), (s) -> {
+ task.from(buildDir.resolve("launchers").resolve(subdir), (s) -> {
s.into("bin");
});
});
var gzipTaskName = "bundleTarGz" + subName;
task.dependsOn(projectPath + ":" + launchersTaskName);
task.setPreserveFileTimestamps(false);
task.setReproducibleFileOrder(true);
task.getArchiveBaseName().set(project.getName());
- task.getArchiveClassifier().set(name);
+ task.getArchiveClassifier().set(os + "-" + cpu);
task.getArchiveExtension().set("tar.gz");
task.setCompression(Compression.GZIP);
if (env.getMan().isPresent()) {
var root = project.getRootProject().getRootDir().toPath().toAbsolutePath();
task.from(root.resolve(env.getMan().get()).toString(), (s) -> {
s.into("bin/man");
});
}
- task.from(buildDir.resolve("images").resolve(name), (s) -> {
+ var subdir = os + "-" + cpu;
+ task.from(buildDir.resolve("images").resolve(subdir), (s) -> {
s.into("image");
});
- task.from(buildDir.resolve("launchers").resolve(name), (s) -> {
+ task.from(buildDir.resolve("launchers").resolve(subdir), (s) -> {
s.into("bin");
});
});
var imageTaskName = "image" + subName;
< prev index next >