plugins {
    id "java"
    id "maven-publish"

    id "com.github.johnrengelman.shadow"
    id "com.google.protobuf"
    id "ru.vyarus.animalsniffer"
}

description = "gRPC: XDS plugin"

[compileJava].each() {
    it.options.compilerArgs += [
        // valueOf(int) in RoutingPriority has been deprecated
        "-Xlint:-deprecation",
    ]
}

evaluationDependsOn(project(':grpc-core').path)

dependencies {
    compile project(':grpc-protobuf'),
            project(':grpc-stub'),
            project(':grpc-core'),
            project(':grpc-netty'),
            project(':grpc-services'),
            project(':grpc-alts'),
            libraries.netty_epoll
    
    compile (libraries.pgv) {
        // PGV depends on com.google.protobuf:protobuf-java 3.6.1 conflicting with :grpc-protobuf
        exclude group: 'com.google.protobuf'
    }
    compile (libraries.protobuf_util) {
        // prefer our own versions instead of protobuf-util's dependency
        exclude group: 'com.google.guava', module: 'guava'
        exclude group: 'com.google.errorprone', module: 'error_prone_annotations'
    }

    testCompile project(':grpc-core').sourceSets.test.output

    compileOnly libraries.javax_annotation
    
    testCompile project(':grpc-testing'), 
            project(':grpc-testing-proto'),
            libraries.guava_testlib
    signature "org.codehaus.mojo.signature:java17:1.0@signature"
    testRuntime libraries.netty_tcnative
}

sourceSets {
    main {
        proto {
            srcDir 'third_party/envoy/src/main/proto'
            srcDir 'third_party/udpa/src/main/proto'
        }
    }
}

configureProtoCompilation()

jar {
    classifier = 'original'
}

shadowJar {
    classifier = null
    dependencies {
        include(project(':grpc-xds'))
        include(dependency('io.envoyproxy.protoc-gen-validate:'))
    }
    relocate 'com.github.udpa', 'io.grpc.xds.shaded.com.github.udpa'
    relocate 'io.envoyproxy', 'io.grpc.xds.shaded.io.envoyproxy'
    relocate 'io.grpc.netty', 'io.grpc.netty.shaded.io.grpc.netty'
    relocate 'io.netty', 'io.grpc.netty.shaded.io.netty'
    exclude "**/*.proto"
}

publishing {
    publications {
        maven(MavenPublication) {
            artifact shadowJar
            artifacts.removeAll { it.classifier == 'original' }

            pom.withXml {
                // Swap our dependency to grpc-netty-shaded. Projects depending on this via
                // project(':grpc-xds') will still be using the non-shaded form.
                asNode().dependencies.'*'.findAll() { dep ->
                    dep.artifactId.text() == 'grpc-netty'
                }.each() { netty ->
                    netty.artifactId*.value = 'grpc-netty-shaded'
                    netty.version*.value = "[" + netty.version.text() + "]"
                }
            }
        }
    }
}
[publishMavenPublicationToMavenRepository]*.onlyIf { false }
