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 {
        // repository containing the cloned 3rd party artifacts.
        maven { url = uri(rootProject.cloneArtifacts.mainRepo) }
        maven { url = uri(rootProject.cloneArtifacts.secondaryRepo) }

        // repository with the artifacts from tools/base
        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.4'
    }

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

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

    group = 'com.android.tools.build'
    project.ext.baseAndroidVersion = "22.0-SNAPSHOT"
}

// 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'
}

