in buildSrc/src/main/kotlin/org/fbme/gradle/MpsBuildscriptTasks.kt [10:89]
fun MpsBuildscriptTasks(project: Project, mpsExtension: MpsExtension) {
with(project) {
val sourceSets = the<SourceSetContainer>()
val languages = file("languages").listFiles() ?: emptyArray()
val solutions = file("solutions").listFiles() ?: emptyArray()
val modules = languages + solutions
sourceSets {
create("mps") {
java {
modules.forEach { moduleDir -> srcDir("$moduleDir/source_gen") }
}
}
}
val mpsBinaries by configurations.creating
val antBinaries by configurations.creating
val compileOnly by configurations.getting
val mpsImplementation by configurations.getting {
extendsFrom(compileOnly, mpsBinaries)
}
val mpsInput by configurations.registering {
isCanBeConsumed = false
isCanBeResolved = true
extendsFrom(mpsImplementation)
}
dependencies {
mpsImplementation(project(path))
mpsBinaries(mpsDistribution())
}
val tasksEnabled = file("$projectDir/buildsolution").exists()
val mpsPrepare by tasks.registering(Copy::class) {
enabled = tasksEnabled
dependsOn("jar", mpsInput)
}
val mpsGenerate by tasks.registering {
enabled = tasksEnabled
dependsOn(mpsPrepare)
inputs.file("$projectDir/build.xml")
modules.forEach { moduleDir -> inputs.dir("$moduleDir/models") }
modules.forEach { moduleDir -> outputs.dir("$moduleDir/source_gen") }
doLast {
executeMpsBuild(antBinaries, "generate")
}
}
val mpsAssemble by tasks.registering {
enabled = tasksEnabled
dependsOn(mpsGenerate)
inputs.file("$projectDir/build.xml")
modules.forEach { module -> inputs.dir("${module.path}/source_gen/") }
outputs.dir("$buildDir/artifacts/")
doLast {
executeMpsBuild(antBinaries, "assemble")
}
}
val assemble by tasks.getting {
dependsOn(mpsAssemble)
}
val mpsClean by tasks.registering {
enabled = tasksEnabled && file("build.xml").exists()
doLast {
executeMpsBuild(antBinaries, "clean", "cleanSources")
}
}
val clean by tasks.getting {
dependsOn(mpsClean)
}
}
}