groowt/web-view-components-compiler/build.gradle
Jesse Brault 347c66b4c8
All checks were successful
Groowt Check and Publish / ci (push) Successful in 7m8s
Update publish/gitea workflow and bump version number.
2025-06-29 17:40:42 -05:00

241 lines
6.3 KiB
Groovy

import groovy.transform.NullCheck
import groowt.gradle.antlr.GroowtAntlrExecTask
plugins {
id 'groowt-conventions'
id 'groowt-antlr-plugin'
id 'groowt-testing'
id 'groowt-publish'
id 'java-library'
id 'groovy'
id 'org.jetbrains.kotlin.jvm'
id 'java-test-fixtures'
id 'distribution'
}
repositories {
mavenCentral()
}
configurations {
groovyConsole
sketchingImplementation {
extendsFrom(apiElements, runtimeElements)
}
testFixturesApi {
extendsFrom configurations.testing
}
toolsImplementation {
extendsFrom(apiElements, runtimeElements)
}
}
sourceSets {
sketching {
java {
compileClasspath += sourceSets.main.output
runtimeClasspath += sourceSets.main.output
srcDirs = [file('sketching/java')]
}
groovy {
srcDirs = [file('sketching/groovy')]
}
resources {
srcDirs = [file('sketching/resources')]
}
}
tools {
java {
compileClasspath += sourceSets.main.output
runtimeClasspath += sourceSets.main.output
}
}
}
dependencies {
api project(':web-view-components')
api libs.antlr.runtime
compileOnlyApi libs.jetbrains.anotations
implementation libs.slf4j.api
implementation libs.kotlin.stdlib
implementation libs.jansi
implementation libs.asm
implementation libs.di
implementation libs.extensible
groowtAntlr libs.antlr
testing libs.mockito.core, libs.mockito.junit
groovyConsole libs.groovy.console
toolsImplementation libs.picocli
toolsImplementation libs.groovy.console
toolsImplementation libs.log4j.core
toolsRuntimeOnly libs.log4j.slf4jBinding
}
ext {
antlrPackageName = 'groowt.view.component.web.antlr'
toolsPackageName = 'groowt.view.component.web.tools'
}
groowtAntlr {
packageName = project.ext.get('antlrPackageName')
visitor = true
}
tasks.named('generateWebViewComponentsLexerBase', GroowtAntlrExecTask) { task ->
dependsOn('generateLexerFragments')
doLast {
def pattern = ~/public class WebViewComponentsLexerBase(.*)/
def lexerSource = task.resolveOutputFile 'WebViewComponentsLexerBase.java'
def outLines = lexerSource.readLines().collect {
def matcher = pattern.matcher(it)
if (matcher.matches()) {
return 'public abstract class WebViewComponentsLexerBase' + matcher.group(1)
} else {
return it
}
}
lexerSource.write(outLines.join('\n'))
}
}
tasks.named('generateWebViewComponentsParser', GroowtAntlrExecTask) {
dependsOn('generateWebViewComponentsLexerBase')
}
tasks.named({ String name ->
name in ['compileJava', 'compileGroovy', 'compileKotlin']
} as Spec<String>).configureEach {
dependsOn 'generateAllAntlr'
}
tasks.register('groovyConsole', JavaExec) {
group = 'groovy'
classpath += sourceSets.main.runtimeClasspath + configurations.groovyConsole
mainClass = 'groovy.console.ui.Console'
}
tasks.register('toolsJar', Jar) {
group 'tools'
archiveBaseName = 'web-view-components-compiler-tools'
exclude { FileTreeElement element ->
element.file in sourceSets.main.output
}
from sourceSets.tools.output
from sourceSets.tools.runtimeClasspath.filter(File.&exists).collect { it.isDirectory() ? it : zipTree(it) }
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
}
@NullCheck
class ToolSpec {
final String name
final String mainClass
final String mainClassPackage
ToolSpec(String name, String mainClass, String mainClassPackage) {
this.name = name
this.mainClass = mainClass
this.mainClassPackage = mainClassPackage
}
String getFullMainClass() {
this.mainClassPackage + '.' + this.mainClass
}
}
def toolSpec = { String name, String mainClass ->
new ToolSpec(name, mainClass, project.ext.get('toolsPackageName') as String)
}
final List<ToolSpec> toolSpecs = [
toolSpec('astBuilder', 'AstBuilder'),
toolSpec('astFileMaker', 'AstFileMakerCli'), // deprecated
toolSpec('convertToGroovy', 'ConvertToGroovy'),
toolSpec('groovyWvc', 'GroovyWvcCompiler'),
toolSpec('lexer', 'LexerTool'), // deprecated
toolSpec('parser', 'ParserTool'), // deprecated
toolSpec('parseTreeFileMaker', 'ParseTreeFileMakerCli'), // deprecated
toolSpec('parseWvc', 'ParseWvc'),
toolSpec('tokenizeWvc', 'TokenizeWvc'),
toolSpec('tokensFileMaker', 'TokensFileMakerCli') // deprecated
]
toolSpecs.each { spec ->
tasks.register("create${spec.name.capitalize()}StartScripts", CreateStartScripts) {
group = 'tools'
outputDir = file('bin')
applicationName = spec.name
classpath = sourceSets.tools.runtimeClasspath
mainClass = spec.fullMainClass
unixStartScriptGenerator.template = resources.text.fromFile('src/tools/binTemplate.gst')
}
}
tasks.register('createToolsStartScripts') {
group 'tools'
dependsOn tasks.matching { Task task ->
task != it
&& task.name.startsWith('create')
&& task.name.endsWith('StartScripts')
&& task.group == 'tools'
}
}
tasks.register('cleanBin', Delete) {
group = 'tools'
delete file('bin')
}
tasks.register('uberJar', Jar) {
group 'groovyc'
archiveBaseName = 'web-view-components-uber'
from sourceSets.main.output
from sourceSets.main.runtimeClasspath
.filter(File.&exists)
.collect { it.isDirectory() ? it : zipTree(it) }
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
}
test {
jvmArgs '-XX:+EnableDynamicAgentLoading' // for mockito/bytebuddy
}
java {
withSourcesJar()
}
tasks.named('sourcesJar', Jar) {
from fileTree('src/main/antlr')
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
dependsOn 'generateAllAntlr'
}
jar {
archiveBaseName = 'groowt-web-view-components-compiler'
}
sourcesJar {
archiveBaseName = 'groowt-web-view-components-compiler'
}
testFixturesJar {
archiveBaseName = 'groowt-web-view-components-compiler'
}
publishing {
publications {
create('webViewComponentsCompiler', MavenPublication) {
artifactId = 'web-view-components-compiler'
from components.java
}
}
}