diff options
author | Thibault Gagnaux <tgagnaux@gmail.com> | 2021-11-16 16:45:06 +0100 |
---|---|---|
committer | Thibault Gagnaux <tgagnaux@gmail.com> | 2021-11-16 16:45:06 +0100 |
commit | b996814fc3255338d7eae5a58c9b58dbf9229154 (patch) | |
tree | b6080d8b196ea36b94aee2976f3be03d3c937b41 /src/main/java/ch/fhnw | |
parent | 69a88ef7125bc4314b1fbb12a382dca07d93e642 (diff) | |
download | frege-gradle-plugin-b996814fc3255338d7eae5a58c9b58dbf9229154.tar.gz frege-gradle-plugin-b996814fc3255338d7eae5a58c9b58dbf9229154.tar.bz2 frege-gradle-plugin-b996814fc3255338d7eae5a58c9b58dbf9229154.zip |
feat: adds `compilerFlags` property to configure the Frege compiler
Diffstat (limited to 'src/main/java/ch/fhnw')
4 files changed, 34 insertions, 6 deletions
diff --git a/src/main/java/ch/fhnw/thga/gradleplugins/CompileFregeTask.java b/src/main/java/ch/fhnw/thga/gradleplugins/CompileFregeTask.java index 6ba6212..020bc7c 100644 --- a/src/main/java/ch/fhnw/thga/gradleplugins/CompileFregeTask.java +++ b/src/main/java/ch/fhnw/thga/gradleplugins/CompileFregeTask.java @@ -1,6 +1,9 @@ package ch.fhnw.thga.gradleplugins; +import java.util.Collection; import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.Stream; import javax.inject.Inject; @@ -8,8 +11,12 @@ import org.gradle.api.DefaultTask; import org.gradle.api.file.DirectoryProperty; import org.gradle.api.file.RegularFileProperty; import org.gradle.api.model.ObjectFactory; +import org.gradle.api.provider.ListProperty; +import org.gradle.api.provider.Provider; +import org.gradle.api.tasks.Input; import org.gradle.api.tasks.InputDirectory; import org.gradle.api.tasks.InputFile; +import org.gradle.api.tasks.Internal; import org.gradle.api.tasks.JavaExec; import org.gradle.api.tasks.OutputDirectory; import org.gradle.api.tasks.TaskAction; @@ -23,9 +30,22 @@ public abstract class CompileFregeTask extends DefaultTask { @InputDirectory public abstract DirectoryProperty getFregeMainSourceDir(); + @Input + public abstract ListProperty<String> getFregeCompilerFlags(); + @OutputDirectory public abstract DirectoryProperty getFregeOutputDir(); + @Internal + public final Provider<String> getFregeMainSourcePath() { + return getFregeMainSourceDir().map(srcDir -> srcDir.getAsFile().getAbsolutePath()); + } + + @Internal + public final Provider<List<String>> getSourcePathArg() { + return getFregeMainSourcePath().map(srcPath -> List.of("-sp", srcPath)); + } + @Inject public CompileFregeTask(ObjectFactory objectFactory) { javaExec = objectFactory.newInstance(JavaExec.class); @@ -33,9 +53,11 @@ public abstract class CompileFregeTask extends DefaultTask { @TaskAction public void compileFrege() { - String fregeMainSourceDir = getFregeMainSourceDir().getAsFile().get().getAbsolutePath(); - List<String> args = List.of("-v", "-d", getFregeOutputDir().get().getAsFile().getAbsolutePath(), "-sp", - fregeMainSourceDir, fregeMainSourceDir); - javaExec.setClasspath(getProject().files(getFregeCompilerJar())).setArgs(args).exec(); + List<String> directoryArg = List.of("-d", getFregeOutputDir().getAsFile().get().getAbsolutePath()); + List<String> compilerArgs = Stream + .of(getFregeCompilerFlags().get(), directoryArg, getSourcePathArg().get(), + List.of(getFregeMainSourcePath().get())) + .flatMap(Collection::stream).collect(Collectors.toList()); + javaExec.setClasspath(getProject().files(getFregeCompilerJar())).setArgs(compilerArgs).exec(); } } diff --git a/src/main/java/ch/fhnw/thga/gradleplugins/FregeExtension.java b/src/main/java/ch/fhnw/thga/gradleplugins/FregeExtension.java index 139429b..f134ec2 100644 --- a/src/main/java/ch/fhnw/thga/gradleplugins/FregeExtension.java +++ b/src/main/java/ch/fhnw/thga/gradleplugins/FregeExtension.java @@ -1,9 +1,12 @@ package ch.fhnw.thga.gradleplugins; +import java.util.List; + import javax.inject.Inject; import org.gradle.api.file.DirectoryProperty; import org.gradle.api.file.ProjectLayout; +import org.gradle.api.provider.ListProperty; import org.gradle.api.provider.Property; public abstract class FregeExtension { @@ -22,11 +25,13 @@ public abstract class FregeExtension { public abstract DirectoryProperty getOutputDir(); + public abstract ListProperty<String> getCompilerFlags(); + @Inject public FregeExtension(ProjectLayout projectLayout) { getCompilerDownloadDir().convention(projectLayout.getProjectDirectory().dir(DEFAULT_DOWNLOAD_DIRECTORY)); getMainSourceDir().convention(projectLayout.getProjectDirectory()); getOutputDir().convention(projectLayout.getBuildDirectory().dir(DEFAULT_RELATIVE_OUTPUT_DIR)); + getCompilerFlags().convention(List.of("-O", "-make")); } - } diff --git a/src/main/java/ch/fhnw/thga/gradleplugins/FregePlugin.java b/src/main/java/ch/fhnw/thga/gradleplugins/FregePlugin.java index 8c50a5f..4ac6c61 100644 --- a/src/main/java/ch/fhnw/thga/gradleplugins/FregePlugin.java +++ b/src/main/java/ch/fhnw/thga/gradleplugins/FregePlugin.java @@ -27,6 +27,7 @@ public class FregePlugin implements Plugin<Project> { task.getFregeCompilerJar().set(setupFregeCompilerTask.get().getFregeCompilerOutputPath()); task.getFregeMainSourceDir().set(extension.getMainSourceDir()); task.getFregeOutputDir().set(extension.getOutputDir()); + task.getFregeCompilerFlags().set(extension.getCompilerFlags()); }); project.getTasks().register(RUN_FREGE_TASK_NAME, RunFregeTask.class, task -> { task.dependsOn(compileFregeTask); diff --git a/src/main/java/ch/fhnw/thga/gradleplugins/SetupFregeTask.java b/src/main/java/ch/fhnw/thga/gradleplugins/SetupFregeTask.java index 7f92053..1b12f56 100644 --- a/src/main/java/ch/fhnw/thga/gradleplugins/SetupFregeTask.java +++ b/src/main/java/ch/fhnw/thga/gradleplugins/SetupFregeTask.java @@ -40,7 +40,7 @@ public abstract class SetupFregeTask extends DefaultTask { } @Internal - public Provider<String> getDownloadUrl() { + final public Provider<String> getDownloadUrl() { return getFregeVersionJarName() .map(name -> String.join("/", FREGE_GITHUB_URL_PREFIX, getRelease().get(), name)); } |