buildscript {
    repositories {
        jcenter()
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:1.3.0'
        classpath 'com.jakewharton.sdkmanager:gradle-plugin:0.12.0'
    }
}

apply plugin: 'android-sdk-manager'
apply plugin: 'com.android.application'

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.1"

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_7
        targetCompatibility JavaVersion.VERSION_1_7
    }
    packagingOptions {
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/NOTICE.txt'
    }

    defaultConfig {
        applicationId "io.v.mojo.discovery"
        minSdkVersion 23
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
        // Enabling multidex support.
        multiDexEnabled true
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

    sourceSets {
        main {
            java {
                srcDir "$buildDir/generated-src"
            }
        }
    }
}

repositories {
    jcenter()
}

task copyMojomBindings(type: Copy) {
    from zipTree("../../gen/mojom/v.io/discovery.mojom.srcjar")
    into "$buildDir/generated-src"
}

android.applicationVariants.all { variant ->
    variant.javaCompile.dependsOn copyMojomBindings
}

dependencies {
    compile 'io.v:vanadium-android:1.11+'
    compile 'com.android.support:multidex:1.0.0'

    // Mojo system should not be included in binary.
    provided project(':mojo:system')

    compile project(':mojo:bindings')
    compile project(':mojo:application')
    compile project(':mojo:interfaces:application')
}
