import org.jetbrains.kotlin.gradle.tasks.KotlinCompile

buildscript {
    project.ext.supportRootFolder = project.projectDir.getParentFile()
    apply from: "repos.gradle"
    repos.addMavenRepositories(repositories)

    dependencies {
        classpath(libs.kotlinGradlePluginz)
    }

    configurations.classpath.resolutionStrategy {
        eachDependency { details ->
            if (details.requested.group == "org.jetbrains.kotlin") {
                details.useVersion libs.versions.kotlin.get()
            }
        }
    }
}

apply from: "out.gradle"
init.chooseOutDir()

ext.supportRootFolder = project.projectDir.getParentFile()
apply from: "repos.gradle"
apply plugin: "kotlin"

allprojects {
    repos.addMavenRepositories(repositories)

    tasks.withType(KotlinCompile).configureEach {
        kotlinOptions {
            jvmTarget = "11"
            freeCompilerArgs += [
                    "-Werror",
                    "-Xskip-runtime-version-check",
                    "-Xskip-metadata-version-check",
                    // Allow `@OptIn` and `@UseExperimental`
                    "-Xopt-in=kotlin.RequiresOptIn",
                    // Issue where sam conversion in gradle's kts file causes task-out-of-date
                    // Details: KT-46445 and https://github.com/gradle/gradle/issues/17052
                    "-Xsam-conversions=class"
            ]
            languageVersion = "1.5"
            apiVersion = "1.5"
        }
    }
}

dependencies {
  api(project("plugins"))
}
