plugins {
    id 'java'
    id 'application'
    id 'org.jetbrains.kotlin.jvm'
    id 'com.github.johnrengelman.shadow' version '7.1.2'
    id 'io.kotest' version '0.3.9'
    id 'com.peterabeles.gversion' version '1.10.2'
}

java {
    toolchain {
        languageVersion = JavaLanguageVersion.of(javaVersion)
    }
}

compileKotlin {
    kotlinOptions {
        jvmTarget = javaVersion
    }
}

compileTestKotlin {
    kotlinOptions {
        jvmTarget = javaVersion
    }
}

dependencies {
    implementation project(':codeCore')
    implementation project(':codeOptimizers')
    implementation project(':compilerAst')
    implementation project(':codeGenCpu6502')
    implementation project(':codeGenIntermediate')
    implementation project(':codeGenExperimental')
    implementation project(':virtualmachine')
    implementation "org.antlr:antlr4-runtime:4.13.1"
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8"
    // implementation "org.jetbrains.kotlin:kotlin-reflect"
    implementation 'org.jetbrains.kotlinx:kotlinx-cli:0.3.6'
    implementation "com.michael-bull.kotlin-result:kotlin-result-jvm:1.1.18"

    testImplementation project(':intermediate')
    testImplementation 'io.kotest:kotest-runner-junit5-jvm:5.8.0'
}

configurations.all {
    exclude group: 'com.ibm.icu', module: 'icu4j'
    exclude group: "org.antlr", module: "antlr4"
}

configurations {
    // strange antlr plugin issue, see https://github.com/gradle/gradle/issues/820
    // this avoids linking in the complete antlr binary jar
    compile {
        extendsFrom = extendsFrom.findAll { it != configurations.antlr }
    }
}

sourceSets {
    main {
        java {
            srcDir "${project.projectDir}/src"
        }
        resources {
            srcDir "${project.projectDir}/res"
        }
    }
    test {
        java {
            srcDir "${project.projectDir}/test"
        }
    }
}

startScripts.enabled = true

application {
    mainClass = 'prog8.CompilerMainKt'
    applicationName = 'p8compile'
}

shadowJar {
    archiveBaseName = 'prog8compiler'
    archiveVersion = version
    // minimize()
}


test {
    // Enable JUnit 5 (Gradle 4.6+).
    useJUnitPlatform()

    // Always run tests, even when nothing changed.
    dependsOn 'cleanTest'

    // Show test results.
    testLogging {
        events "skipped", "failed"
    }
}

gversion {
    srcDir       = "src/"           // path is relative to the sub-project by default
    classPackage = "prog8.buildversion"
    className    = "BuildVersion"
    language     = "kotlin"
}


build.finalizedBy installDist, installShadowDist

compileKotlin.dependsOn createVersionFile    // , failDirtyNotSnapshot
compileJava.dependsOn createVersionFile

