apply plugin: "kotlin"
apply from: "../kotlin-dsl-dependency.gradle"
apply plugin: "java-gradle-plugin"

buildscript {
    project.ext.supportRootFolder = project.projectDir.getParentFile().getParentFile()
    apply from: "../repos.gradle"
    repos.addMavenRepositories(repositories)
    dependencies {
        classpath(libs.kotlinGradlePluginz)
    }
}

dependencies {
    implementation(project(":jetpad-integration"))

    // Gradle APIs
    implementation(gradleApi())
    compileOnly(findGradleKotlinDsl())

    // Plugins we use and configure
    implementation(libs.androidGradlePluginz)
    implementation(libs.androidToolsCommon) // for com.android.Version.ANDROID_GRADLE_PLUGIN_VERSION
    implementation(libs.kotlinGradlePluginz)
    implementation(libs.dokkaGradlePluginz)

    // variety of json parsers
    implementation(libs.gson)
    implementation(libs.json) // b/241475613
    implementation(libs.jsonSimple)

    // XML parsers used in MavenUploadHelper.kt
    implementation(libs.dom4j) {
        // Optional dependency where Ivy fails to parse the POM file.
        exclude(group:"net.java.dev.msv", module:"xsdlib")
    }
    implementation(libs.xerces)

    implementation(libs.shadow) // used by BundleInsideHelper.kt
    implementation(libs.apacheAnt) // used in AarManifestTransformerTask.kt for unziping
    implementation(libs.toml)
    implementation(libs.apacheCommonIo) // used in CheckApiEquivalenceTask.kt
    implementation(libs.dexMemberList) // used in ReportLibraryMetricsTask.kt

    implementation(libs.protobufGradlePluginz) // needed to compile inspection plugin
    implementation(libs.kotlinPoet) // needed to compile material-icon-generator
    implementation(libs.xmlpull) // needed to compile material-icon-generator

    // dependencies that aren't used by buildSrc directly but that we resolve here so that the
    // root project doesn't need to re-resolve them and their dependencies on every build
    runtimeOnly(libs.hiltAndroidGradlePluginz)
    runtimeOnly(libs.javapoet) // for hiltAndroidGradlePluginz to workaround https://github.com/google/dagger/issues/3068
    runtimeOnly(libs.kspGradlePluginz)
    runtimeOnly(libs.wireGradlePluginz)
}

project.tasks.withType(Jar) { task ->
    task.reproducibleFileOrder = true
    task.preserveFileTimestamps = false
}

validatePlugins {
    enableStricterValidation = true
}
