buildscript {
    repositories {
        maven { url "$rootDir/../../prebuilts/tools/common/gradle-plugins/repository" }
    }
    dependencies {
        classpath 'com.android.tools.internal:internal-plugins:1.0'
    }
}

apply plugin: 'idea'
apply plugin: 'clone-artifacts'

// artifact cloning destinations
cloneArtifacts {
    mainRepo = "$rootDir/../../prebuilts/tools/common/m2/repository"
    secondaryRepo = "$rootDir/../../prebuilts/tools/common/m2/internal"
}

// ext.androidHostOut is shared by all tools/{base,build,swt} gradle projects/
ext.androidHostOut = file("$rootDir/../../out/host/gradle")
ext.androidRootDir = file(new File(ext.androidHostOut, "../../../"))
// rootProject.buildDir is specific to this gradle build.
buildDir = new File(file(ext.androidHostOut), "tools/build/build")

subprojects {
    // Change buildDir first so that all plugins pick up the new value.
    project.buildDir = project.file("$project.parent.buildDir/../$project.name")

    apply plugin: 'idea'
    apply plugin: 'findbugs'

    repositories {
        maven { url = uri("$rootProject.ext.androidHostOut/repo") }
    }

    // find bug dependencies is added dynamically so it's hard for the
    // clone artifact plugin to find it. This custom config lets us manually
    // add such dependencies.
    configurations {
        hidden
    }
    dependencies {
        hidden "com.google.code.findbugs:findbugs:2.0.1"
    }

    project.ext {
        baseVersion = '0.5.0'
    }

    task disableTestFailures << {
        tasks.withType(Test) {
            ignoreFailures = true
        }
    }

    findbugs {
        ignoreFailures = true
        effort = "max"
        reportLevel = "high"
    }

    group = 'com.android.tools.build'
    project.ext.baseAndroidVersion = "22.2.0"
    if (!project.has("release")) {
        project.ext.baseAndroidVersion = project.ext.baseAndroidVersion + "-SNAPSHOT"
    }

}

task prepareRepo(type: Copy) {
    from { rootProject.cloneArtifacts.mainRepo }
    from { rootProject.cloneArtifacts.secondaryRepo }
    into { "$rootProject.ext.androidHostOut/repo" }
}

// delay evaluation of this project before all subprojects have been evaluated.
subprojects.each { subproject -> evaluationDependsOn(subproject.name) }

def testTasks = subprojects.collect { it.tasks.withType(Test) }.flatten()

task aggregateResults(type: Copy) {
    from { testTasks*.testResultsDir }
    into { file("$buildDir/results") }
}

task clean(type: Delete) {
   delete '$buildDir'
}

