pluginManagement {
    repositories {
        maven {
            url = new File(buildscript.sourceFile.parent + "/../../../prebuilts/androidx/external").getCanonicalFile()
        }
    }
}

// Calling includeProject(name, filePath) is shorthand for:
//
//   include(name)
//   project(name).projectDir = new File(filePath)
//
// Note that <name> directly controls the Gradle project name, and also indirectly sets:
//   the project name in the IDE
//   the Maven artifactId
//
def includeProject(name, filePath) {
    settings.include(name)

    def file
    if (filePath instanceof String) {
        file = new File(rootDir, filePath)
    } else {
        file = filePath
    }
    if (!file.exists()) {
        // This option is supported so that development/simplify_build_failure.sh can try
        // deleting entire projects at once to identify the cause of a build failure
        if (System.getenv("ALLOW_MISSING_PROJECTS") == null) {
            throw new Exception("Path " + file + " does not exist; cannot include project " + name)
        }
    }
    project(name).projectDir = file
}

includeProject(":annotation", "../annotation")
includeProject(":annotation:annotation-sampled", "../annotation/annotation-sampled")
includeProject(":annotation:annotation-experimental", "../annotation/annotation-experimental")
includeProject(":annotation:annotation-experimental-lint", "../annotation/annotation-experimental-lint")
includeProject(":annotation:annotation-experimental-lint-integration-tests", "../annotation/annotation-experimental-lint/integration-tests")
includeProject(":benchmark", "../benchmark")
includeProject(":benchmark:benchmark-common", "../benchmark/common")
includeProject(":benchmark:benchmark-junit4", "../benchmark/junit4")
includeProject(":compose", "../compose")
includeProject(":compose:compose-compiler", "../compose/compose-compiler")
includeProject(":compose:compose-compiler-hosted", "../compose/compose-compiler-hosted")
includeProject(":compose:compose-compiler-hosted:integration-tests", "../compose/compose-compiler-hosted/integration-tests")
includeProject(":compose:runtime:runtime-dispatch", "../compose/compose-dispatch")
includeProject(":compose:runtime:runtime", "../compose/compose-runtime")
includeProject(":compose:runtime:runtime:benchmark", "../compose/compose-runtime/compose-runtime-benchmark")
includeProject(":compose:runtime:runtime:samples", "../compose/compose-runtime/samples")
includeProject(":compose:runtime", "../compose/runtime")
includeProject(":lint-checks", "../lint-checks")
includeProject(":tracing", "../tracing")
includeProject(":tracing:tracing", "../tracing/tracing")
includeProject(":tracing:tracing-ktx", "../tracing/tracing-ktx")
includeProject(":compose:integration-tests:benchmark", "integration-tests/benchmark")
includeProject(":compose:integration-tests:demos", "integration-tests/demos")
includeProject(":compose:integration-tests:demos:common", "integration-tests/demos/common")
includeProject(":compose:integration-tests", "integration-tests")
includeProject(":compose:ui:ui-text-android", "ui-text-android")
includeProject(":compose:android-view", "../compose/android-view")
includeProject(":compose:android-view:android-view", "ui-android-view")
includeProject(":compose:android-view:android-view:integration-tests:android-view-demos", "ui-android-view/integration-tests/android-view-demos")
includeProject(":compose:android-view:android-view:samples", "ui-android-view/samples")
includeProject(":compose:animation", "../compose/animation")
includeProject(":compose:animation:animation", "ui-animation")
includeProject(":compose:animation:animation-core", "ui-animation-core")
includeProject(":compose:animation:animation-core:samples", "ui-animation-core/samples")
includeProject(":compose:animation:animation:integration-tests:animation-demos", "ui-animation/integration-tests/animation-demos")
includeProject(":compose:animation:animation:samples", "ui-animation/samples")
includeProject(":ui", "ui")
includeProject(":ui:ui-animation-tooling-internal", "ui-animation-tooling-internal")
includeProject(":compose:ui:ui", "ui-core")
includeProject(":compose:ui:ui:integration-tests:ui-demos", "ui-core/integration-tests/ui-core-demos")
includeProject(":compose:ui:ui:samples", "ui-core/samples")
if (!startParameter.projectProperties.containsKey('compose.desktop.disable')) {
    includeProject(":compose:desktop", "../compose/desktop")
    includeProject(":compose:desktop:desktop", "ui-desktop")
    includeProject(":compose:desktop:desktop:android-emu", "ui-desktop/android-emu")
    includeProject(":compose:desktop:desktop:samples", "ui-desktop/samples")
}
includeProject(":compose:foundation", "../compose/foundation")
includeProject(":compose:foundation:foundation", "ui-foundation")
includeProject(":compose:foundation:foundation:integration-tests:foundation-demos", "ui-foundation/integration-tests/foundation-demos")
includeProject(":compose:foundation:foundation:samples", "ui-foundation/samples")
includeProject(":compose:internal-lint-checks", "ui-internal-lint-checks")
includeProject(":compose:ui", "../compose/ui")
includeProject(":compose:ui:ui-geometry", "ui-geometry")
includeProject(":compose:ui:ui-graphics", "ui-graphics")
includeProject(":compose:ui:ui-graphics:samples", "ui-graphics/samples")
includeProject(":compose:foundation:foundation-layout", "ui-layout")
includeProject(":compose:foundation:foundation-layout:integration-tests:foundation-layout-demos", "ui-layout/integration-tests/layout-demos")
includeProject(":compose:foundation:foundation-layout:samples", "ui-layout/samples")
includeProject(":compose:material", "../compose/material")
includeProject(":compose:material:material", "ui-material")
includeProject(":compose:material:material:integration-tests:material-demos", "ui-material/integration-tests/material-demos")
includeProject(":compose:material:material:integration-tests:material-studies", "ui-material/integration-tests/material-studies")
includeProject(":compose:material:material:samples", "ui-material/samples")
includeProject(":compose:material:material-icons-core", "ui-material/icons/core")
includeProject(":compose:material:material-icons-core:samples", "ui-material/icons/core/samples")
includeProject(":compose:material:material-icons-extended", "ui-material/icons/extended")
includeProject(":compose:material:material:icons:generator", "ui-material/icons/generator")
includeProject(":ui:ui-test", "ui-test")
includeProject(":compose:ui:ui-test-font", "ui-test-font")
includeProject(":compose:foundation:foundation-text", "ui-text")
includeProject(":compose:foundation:foundation-text:integration-tests:foundation-text-demos", "ui-text/integration-tests/ui-text-compose-demos")
includeProject(":compose:foundation:foundation-text:samples", "ui-text/samples")
includeProject(":compose:ui:ui-text", "ui-text-core")
includeProject(":compose:ui:ui-text:samples", "ui-text-core/samples")
includeProject(":ui:ui-tooling", "ui-tooling")
includeProject(":compose:ui:ui-unit", "ui-unit")
includeProject(":compose:ui:ui-unit:samples", "ui-unit/samples")
includeProject(":compose:ui:ui-util", "ui-util")
includeProject(":compose:runtime:runtime-saved-instance-state", "ui-saved-instance-state")
includeProject(":compose:runtime:runtime-saved-instance-state:samples", "ui-saved-instance-state/samples")
includeProject(":compose:runtime:runtime-livedata", "ui-livedata")
includeProject(":compose:runtime:runtime-livedata:samples", "ui-livedata/samples")
includeProject(":test-screenshot", "../test/screenshot")
includeProject(":compose:runtime:runtime-rxjava2", "ui-rxjava2")
includeProject(":compose:runtime:runtime-rxjava2:samples", "ui-rxjava2/samples")

/////////////////////////////
//
// External
//
/////////////////////////////

apply(from: "../include-composite-deps.gradle")

if (!startParameter.projectProperties.containsKey('android.injected.invoked.from.ide')) {
    // we don't need it in ide, so we don't configure it there
    includeProject(":docs-fake", "../docs-fake")
    includeProject(":docs-runner", "../docs-runner")
}

// dumb test project that has a test for each size to ensure that at least one test is run
// for each size and test runner is happy when there is nothing to test.
includeProject(":dumb-tests", "../dumb-tests")

includeProject(":fakeannotations", "../fakeannotations")

/////////////////////////////
//
// Remote build cache set up
//
/////////////////////////////

apply from: new File('buildSrc/remoteBuildCache.gradle')
