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-metadata-version-check",
                    // Allow `@OptIn` and `@UseExperimental`
                    "-opt-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"))
}
