diff options
author | Dierk Koenig <dierk.koenig@canoo.com> | 2015-02-24 00:25:21 +0100 |
---|---|---|
committer | Dierk Koenig <dierk.koenig@canoo.com> | 2015-02-24 00:25:21 +0100 |
commit | b563f27267f9fee7756284feb60797c04e6316cf (patch) | |
tree | eee5233778c782c44f429881ab7ac3945c6631eb /src/main/groovy/frege/gradle | |
parent | 27e2877f5b31b6c1fa387a46c20dc4cd40227ca5 (diff) | |
parent | 38d0cb914a1984b8470cf95abd480cc191cae812 (diff) | |
download | frege-gradle-plugin-b563f27267f9fee7756284feb60797c04e6316cf.tar.gz frege-gradle-plugin-b563f27267f9fee7756284feb60797c04e6316cf.tar.bz2 frege-gradle-plugin-b563f27267f9fee7756284feb60797c04e6316cf.zip |
Merge remote-tracking branch 'origin/master'
Conflicts:
src/main/groovy/frege/gradle/FregePlugin.groovy
Diffstat (limited to 'src/main/groovy/frege/gradle')
-rw-r--r-- | src/main/groovy/frege/gradle/FregePlugin.groovy | 26 | ||||
-rw-r--r-- | src/main/groovy/frege/gradle/FregePluginExtension.groovy | 11 | ||||
-rw-r--r-- | src/main/groovy/frege/gradle/FregeTask.groovy | 101 | ||||
-rw-r--r-- | src/main/groovy/frege/gradle/NativeGenTask.groovy | 25 | ||||
-rw-r--r-- | src/main/groovy/frege/gradle/ReplTask.groovy | 16 |
5 files changed, 179 insertions, 0 deletions
diff --git a/src/main/groovy/frege/gradle/FregePlugin.groovy b/src/main/groovy/frege/gradle/FregePlugin.groovy new file mode 100644 index 0000000..e2777ed --- /dev/null +++ b/src/main/groovy/frege/gradle/FregePlugin.groovy @@ -0,0 +1,26 @@ +package frege.gradle + +import org.gradle.api.Plugin +import org.gradle.api.Project + +class FregePlugin implements Plugin<Project> { + + void apply(Project project) { + project.apply(plugin: 'base') + def e = (FregePluginExtension) project.extensions.create("frege", FregePluginExtension) + + project.task('compileFrege', type: FregeTask, group: 'Build') << { + + } + project.tasks.classes.dependsOn("compileFrege") + + def oFR = project.task('openFregeRepl', type: FregeReplTask, group: 'Runtime', dependsOn: 'classes') + oFR.outputs.upToDateWhen { false } + + + project.task('fregeRepl', type: ReplTask) + project.task('fregeNativeGen', type: NativeGenTask) + + } + +} diff --git a/src/main/groovy/frege/gradle/FregePluginExtension.groovy b/src/main/groovy/frege/gradle/FregePluginExtension.groovy new file mode 100644 index 0000000..dbf0d2a --- /dev/null +++ b/src/main/groovy/frege/gradle/FregePluginExtension.groovy @@ -0,0 +1,11 @@ +package frege.gradle + +/** + * Created by mperry on 6/02/2015. + */ +class FregePluginExtension { + + + String key1 + +} diff --git a/src/main/groovy/frege/gradle/FregeTask.groovy b/src/main/groovy/frege/gradle/FregeTask.groovy new file mode 100644 index 0000000..fc3152d --- /dev/null +++ b/src/main/groovy/frege/gradle/FregeTask.groovy @@ -0,0 +1,101 @@ +package frege.gradle + +import org.gradle.api.DefaultTask +import org.gradle.api.tasks.* +import org.gradle.process.internal.DefaultJavaExecAction +import org.gradle.process.internal.JavaExecAction +import org.gradle.api.internal.file.FileResolver +import org.gradle.tooling.BuildException + +class FregeTask extends DefaultTask { + + static String DEFAULT_CLASSES_SUBDIR = "classes/main" // TODO: should this come from a convention? + static String DEFAULT_SRC_DIR = "src/main/frege" // TODO: should this come from a source set? + + @Optional @Input + boolean hints = false + + @Optional @Input + boolean verbose = false + + @Optional @Input + boolean inline = true + + @Optional @Input + boolean make = true + + @Optional @Input + boolean skipCompile = false + + @Optional @Input + String extraArgs = "" + + @Optional @Input + String allArgs = "" // this is an option to overrule all other settings + + @Optional @Input + String module = "" + + @Optional @InputDirectory + File sourceDir = new File(project.projectDir, DEFAULT_SRC_DIR).exists() ? new File(project.projectDir, DEFAULT_SRC_DIR) : null + + @Optional @OutputDirectory + File outputDir = new File(project.buildDir, DEFAULT_CLASSES_SUBDIR) + + @TaskAction + void executeCompile() { + if (! outputDir.exists() ) { + logger.info "Creating output directory '${outputDir.absolutePath}'." + outputDir.mkdirs() + } + + // access extension configuration values as ${project.frege.key1} + + FileResolver fileResolver = getServices().get(FileResolver.class) + JavaExecAction action = new DefaultJavaExecAction(fileResolver) + action.setMain("frege.compiler.Main") + action.setClasspath(project.files(project.configurations.compile)) + + def args = allArgs ? allArgs.split().toList() : assembleArguments() + + logger.info("Calling Frege compiler with args: '$args'") + action.args(args) + action.execute() + } + + protected List assembleArguments() { + List args = [] + if (hints) + args << "-hints" + if (inline) + args << "-inline" + if (make) + args << "-make" + if (verbose) + args << "-v" + if (skipCompile) + args << "-j" + + if (sourceDir != null) { + args << "-sp" + args << sourceDir.absolutePath + } + + args << "-d" + args << outputDir + + if (!module && !extraArgs) { + logger.info "no module and no extra args given: compiling all of the sourceDir" + if (sourceDir != null) { + args << sourceDir.absolutePath + } + + } else if (module) { + logger.info "compiling module '$module'" + args << module + } else { + args = args + extraArgs.split().toList() + } + args + } +}
\ No newline at end of file diff --git a/src/main/groovy/frege/gradle/NativeGenTask.groovy b/src/main/groovy/frege/gradle/NativeGenTask.groovy new file mode 100644 index 0000000..6c8acc4 --- /dev/null +++ b/src/main/groovy/frege/gradle/NativeGenTask.groovy @@ -0,0 +1,25 @@ +package frege.gradle + +import org.gradle.api.DefaultTask +import org.gradle.api.tasks.TaskAction + +import frege.nativegen.* + +/** + * Created by MarkPerry on 18/02/2015. + */ +class NativeGenTask extends DefaultTask { + + String filename = "types.properties" + + String clazz = null + + + @TaskAction + void gen() { + + frege.nativegen.Main.main([clazz] as String[]) + } + + +} diff --git a/src/main/groovy/frege/gradle/ReplTask.groovy b/src/main/groovy/frege/gradle/ReplTask.groovy new file mode 100644 index 0000000..eb47944 --- /dev/null +++ b/src/main/groovy/frege/gradle/ReplTask.groovy @@ -0,0 +1,16 @@ +package frege.gradle + +import frege.repl.* +import org.gradle.api.DefaultTask +import org.gradle.api.tasks.TaskAction + +/** + * Created by MarkPerry on 17/02/2015. + */ +public class ReplTask extends DefaultTask { + + @TaskAction + void repl() { + frege.repl.FregeRepl.main([] as String[]) + } +} |