pluginManagement {
    plugins {
        id "com.android.application" version "7.4.0"
        id "com.android.library" version "7.4.0"
        id "com.github.johnrengelman.shadow" version "7.1.2"
        id "com.github.kt3k.coveralls" version "2.12.0"
        id "com.google.cloud.tools.jib" version "3.3.1"
        id "com.google.osdetector" version "1.7.1"
        id "com.google.protobuf" version "0.9.1"
        id "digital.wup.android-maven-publish" version "3.6.3"
        id "me.champeau.gradle.japicmp" version "0.3.0"
        id "me.champeau.jmh" version "0.6.8"
        id "net.ltgt.errorprone" version "3.0.1"
        id "ru.vyarus.animalsniffer" version "1.6.0"
    }
    resolutionStrategy {
        eachPlugin {
            if (target.id.namespace == "com.android") {
                useModule("com.android.tools.build:gradle:${target.version}")
            }
        }
    }
    repositories {
        gradlePluginPortal()
        google()
    }
}

rootProject.name = "grpc"
include ":grpc-api"
include ":grpc-core"
include ":grpc-context"
include ":grpc-stub"
include ":grpc-census"
include ":grpc-auth"
include ":grpc-okhttp"
include ":grpc-protobuf"
include ":grpc-protobuf-lite"
include ":grpc-netty"
include ":grpc-netty-shaded"
include ":grpc-googleapis"
include ":grpc-grpclb"
include ":grpc-testing"
include ":grpc-testing-proto"
include ":grpc-interop-testing"
include ":grpc-gae-interop-testing-jdk8"
include ":grpc-all"
include ":grpc-alts"
include ":grpc-benchmarks"
include ":grpc-services"
include ":grpc-servlet"
include ":grpc-servlet-jakarta"
include ":grpc-xds"
include ":grpc-bom"
include ":grpc-rls"
include ":grpc-authz"
include ":grpc-gcp-observability"
include ":grpc-gcp-observability:interop"
include ":grpc-istio-interop-testing"

project(':grpc-api').projectDir = "$rootDir/api" as File
project(':grpc-core').projectDir = "$rootDir/core" as File
project(':grpc-context').projectDir = "$rootDir/context" as File
project(':grpc-stub').projectDir = "$rootDir/stub" as File
project(':grpc-census').projectDir = "$rootDir/census" as File
project(':grpc-auth').projectDir = "$rootDir/auth" as File
project(':grpc-okhttp').projectDir = "$rootDir/okhttp" as File
project(':grpc-protobuf').projectDir = "$rootDir/protobuf" as File
project(':grpc-protobuf-lite').projectDir = "$rootDir/protobuf-lite" as File
project(':grpc-netty').projectDir = "$rootDir/netty" as File
project(':grpc-netty-shaded').projectDir = "$rootDir/netty/shaded" as File
project(':grpc-googleapis').projectDir = "$rootDir/googleapis" as File
project(':grpc-grpclb').projectDir = "$rootDir/grpclb" as File
project(':grpc-testing').projectDir = "$rootDir/testing" as File
project(':grpc-testing-proto').projectDir = "$rootDir/testing-proto" as File
project(':grpc-interop-testing').projectDir = "$rootDir/interop-testing" as File
project(':grpc-gae-interop-testing-jdk8').projectDir = "$rootDir/gae-interop-testing/gae-jdk8" as File
project(':grpc-all').projectDir = "$rootDir/all" as File
project(':grpc-alts').projectDir = "$rootDir/alts" as File
project(':grpc-benchmarks').projectDir = "$rootDir/benchmarks" as File
project(':grpc-services').projectDir = "$rootDir/services" as File
project(':grpc-servlet').projectDir = "$rootDir/servlet" as File
project(':grpc-servlet-jakarta').projectDir = "$rootDir/servlet/jakarta" as File
project(':grpc-xds').projectDir = "$rootDir/xds" as File
project(':grpc-bom').projectDir = "$rootDir/bom" as File
project(':grpc-rls').projectDir = "$rootDir/rls" as File
project(':grpc-authz').projectDir = "$rootDir/authz" as File
project(':grpc-gcp-observability').projectDir = "$rootDir/gcp-observability" as File
project(':grpc-gcp-observability:interop').projectDir = "$rootDir/gcp-observability/interop" as File
project(':grpc-istio-interop-testing').projectDir = "$rootDir/istio-interop-testing" as File

if (settings.hasProperty('skipCodegen') && skipCodegen.toBoolean()) {
    println '*** Skipping the build of codegen and compilation of proto files because skipCodegen=true'
} else {
    include ":grpc-compiler"
    project(':grpc-compiler').projectDir = "$rootDir/compiler" as File
}

if (settings.hasProperty('skipAndroid') && skipAndroid.toBoolean()) {
    println '  * Skipping the build of Android projects because skipAndroid=true'
} else {
    println '*** Android SDK is required. To avoid building Android projects, set -PskipAndroid=true'
    include ":grpc-cronet"
    project(':grpc-cronet').projectDir = "$rootDir/cronet" as File
    include ":grpc-android"
    project(':grpc-android').projectDir = "$rootDir/android" as File
    include ":grpc-android-interop-testing"
    project(':grpc-android-interop-testing').projectDir = "$rootDir/android-interop-testing" as File
    include ":grpc-binder"
    project(':grpc-binder').projectDir = "$rootDir/binder" as File
}
