/*
 * Copyright 2020 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

pluginManagement {
    repositories {
        google()
        mavenCentral()
        jcenter()
    }
}

rootProject.name = "playground"

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
}

includeBuild("../androidx-plugin")

includeProject(":benchmark:benchmark-common", "benchmark/common")
includeProject(":fakeannotations", "../fakeannotations")
includeProject(":lint-checks", "../lint-checks")
includeProject(":lint-checks:tests", "../lint-checks/tests")
includeProject(":mppsample:mppsample-library", "../mppsample/mppsample-library")
includeProject(":mppsample:mppsample-executable", "../mppsample/mppsample-executable")
includeProject(":tracing:tracing", "../tracing/tracing")
includeProject(":tracing:tracing-ktx", "../tracing/tracing-ktx")

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")
}
