// Add dependency on the protobuf plugin
buildscript {
    repositories {
        maven { // The google mirror is less flaky than mavenCentral()
            url "https://maven-central.storage-download.googleapis.com/repos/central/data/" }
    }
    dependencies { classpath libraries.protobuf_plugin }
}

description = 'gRPC: Protobuf Nano'

dependencies {
    compile project(':grpc-core'),
            libraries.protobuf_nano
    compile (libraries.guava) {
        // prefer 2.2.0 from libraries instead of 2.1.3
        exclude group: 'com.google.errorprone', module: 'error_prone_annotations'
        // prefer 3.0.2 from libraries instead of 3.0.1
        exclude group: 'com.google.code.findbugs', module: 'jsr305'
        // prefer 1.17 from libraries instead of 1.14
        exclude group: 'org.codehaus.mojo', module: 'animal-sniffer-annotations'
    }
    signature "org.codehaus.mojo.signature:java17:1.0@signature"
    signature "net.sf.androidscents.signature:android-api-level-14:4.0_r4@signature"
}

configureProtoCompilation()

if (project.hasProperty('protobuf')) {
    protobuf {
        generateProtoTasks {
            all().each { task ->
                task.builtins {
                    remove java
                    javanano { option 'ignore_services=true' }
                }
            }
        }
    }
}
