diff options
-rw-r--r-- | src/main/groovy/frege/gradle/FregeDocTask.groovy | 57 | ||||
-rw-r--r-- | src/main/groovy/frege/gradle/FregePlugin.groovy | 8 | ||||
-rw-r--r-- | src/main/groovy/frege/gradle/FregeReplTask.groovy | 2 |
3 files changed, 63 insertions, 4 deletions
diff --git a/src/main/groovy/frege/gradle/FregeDocTask.groovy b/src/main/groovy/frege/gradle/FregeDocTask.groovy new file mode 100644 index 0000000..077c4e5 --- /dev/null +++ b/src/main/groovy/frege/gradle/FregeDocTask.groovy @@ -0,0 +1,57 @@ +package frege.gradle + +import org.gradle.api.DefaultTask +import org.gradle.api.internal.file.FileResolver +import org.gradle.api.tasks.Input +import org.gradle.api.tasks.InputDirectory +import org.gradle.api.tasks.Optional +import org.gradle.api.tasks.OutputDirectory +import org.gradle.api.tasks.TaskAction +import org.gradle.process.internal.DefaultJavaExecAction +import org.gradle.process.internal.JavaExecAction + +class FregeDocTask extends DefaultTask { + + static String DEFAULT_SRC_DIR = "src/main/frege" // TODO: should this come from a source set? + static String DEFAULT_DOCS_SUBDIR = "docs/frege" // TODO: should this come from a convention? + + @Optional + @InputDirectory + File sourceDir = new File(project.projectDir, DEFAULT_SRC_DIR).exists() ? new File(project.projectDir, DEFAULT_SRC_DIR) : null + + @Optional + @OutputDirectory + File targetDir = new File(project.buildDir, DEFAULT_DOCS_SUBDIR) + + @Input + String module = "$project.buildDir/classes/main" // module name or directory or class path. Default is all production modules + + @Input @Optional + String exclude = null + + @Input @Optional + Boolean verbose = null + + @TaskAction + void fregedoc() { + + FileResolver fileResolver = getServices().get(FileResolver.class) + JavaExecAction action = new DefaultJavaExecAction(fileResolver) + action.setMain("frege.tools.Doc") + action.workingDir = sourceDir ?: project.projectDir + action.standardInput = System.in + action.standardOutput = System.out + action.errorOutput = System.err + action.setClasspath(project.files(project.configurations.compile) + project.files("$project.buildDir/classes/main")) + + def args = [] + if (verbose) args << '-v' + args << '-d' << targetDir.absolutePath + if (exclude) args << '-x' << exclude + args << module + action.args args + action.execute() + } + +} + diff --git a/src/main/groovy/frege/gradle/FregePlugin.groovy b/src/main/groovy/frege/gradle/FregePlugin.groovy index 07d0ea2..21958b0 100644 --- a/src/main/groovy/frege/gradle/FregePlugin.groovy +++ b/src/main/groovy/frege/gradle/FregePlugin.groovy @@ -17,13 +17,15 @@ class FregePlugin implements Plugin<Project> { } project.tasks.classes.dependsOn("compileFrege") - def replTask = project.task('fregeRepl', type: FregeReplTask, group: 'Tools', dependsOn: 'classes') + def replTask = project.task('fregeRepl', type: FregeReplTask, group: 'Tools', dependsOn: 'compileFrege') replTask.outputs.upToDateWhen { false } // always run, regardless of up to date checks - def checkTask = project.task('quickCheck', type: FregeQuickCheckTask, group: 'Tools', dependsOn: 'classes') + def checkTask = project.task('quickCheck', type: FregeQuickCheckTask, group: 'Tools', dependsOn: 'compileFrege') checkTask.outputs.upToDateWhen { false } // always run, regardless of up to date checks - project.task('fregeNativeGen', type: NativeGenTask) + project.task('fregeDoc', type: FregeDocTask, group: 'Tools', dependsOn: 'compileFrege') + + project.task('fregeNativeGen', type: NativeGenTask, group: 'Tools') } diff --git a/src/main/groovy/frege/gradle/FregeReplTask.groovy b/src/main/groovy/frege/gradle/FregeReplTask.groovy index 843cafb..d79a73f 100644 --- a/src/main/groovy/frege/gradle/FregeReplTask.groovy +++ b/src/main/groovy/frege/gradle/FregeReplTask.groovy @@ -14,7 +14,7 @@ class FregeReplTask extends DefaultTask { @Optional @InputDirectory File sourceDir = new File(project.projectDir, DEFAULT_SRC_DIR).exists() ? new File(project.projectDir, DEFAULT_SRC_DIR) : null - @Optional @InputDirectory + @Optional @OutputDirectory File targetDir = new File(project.buildDir, DEFAULT_CLASSES_SUBDIR) @TaskAction |