// Copyright 2014 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

buildscript {
    repositories {
        google()
        mavenCentral()
        // TODO(jmagman): Remove with https://github.com/flutter/flutter/issues/78338
        jcenter {
            content {
                includeModule("org.jetbrains.trove4j", "trove4j")
            }
        }
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:4.1.0'
    }
}

allprojects {
    repositories {
        google()
        mavenCentral()
        mavenCentral()
        // TODO(jmagman): Remove with https://github.com/flutter/flutter/issues/78338
        jcenter {
            content {
                includeModule("org.jetbrains.trove4j", "trove4j")
            }
        }
    }
}

rootProject.buildDir = '../build'
subprojects {
    project.buildDir = "${rootProject.buildDir}/${project.name}"
    project.evaluationDependsOn(':app')
}

task clean(type: Delete) {
    delete rootProject.buildDir
}
