aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/main/groovy/frege/gradle/FregeDocTask.groovy57
-rw-r--r--src/main/groovy/frege/gradle/FregePlugin.groovy8
-rw-r--r--src/main/groovy/frege/gradle/FregeReplTask.groovy2
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