// Copyright (c) 2023, the R8 project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

rootProject.name = "d8-r8"

// third_party/dependencies and third_party/dependencies_plugin
// is downloaded and populated by running 'tools/gradle.py'.
pluginManagement {
  repositories {
    maven { url = uri("third_party/dependencies") }
    maven { url = uri("third_party/dependencies_plugin") }
  }
  includeBuild(rootProject.projectDir.resolve("d8_r8/commonBuildSrc"))
}

dependencyResolutionManagement { repositories { maven { url = uri("third_party/dependencies") } } }

/**
 * path is a path to the folder containing the project, while projectPath is the gradle name (e.g.
 * :utils).
 */
private fun includeProject(path: String, projectPath: String) {
  val name = projectPath.removePrefix(":")
  val dir = "${path}${name.replace(":", "/")}"
  include(projectPath)
  project(projectPath).projectDir = file(dir)
}

fun includeProject(projectPath: String) {
  includeProject("d8_r8/", projectPath)
}

fun includeTestProject(projectPath: String) {
  includeProject("d8_r8/test_modules/", projectPath)
}

includeProject(":third_party")

includeProject(":assistant")

includeProject(":keepradius")

includeProject(":keepanno")

includeProject(":libanalyzer")

includeProject(":resourceshrinker")

includeProject(":main")

includeProject(":utils")

includeProject(":dist")

includeProject(":library_desugar")

includeProject(":test")

includeTestProject(":testbase")

includeTestProject(":tests_bootstrap")

includeTestProject(":tests_java_8")

includeTestProject(":tests_java_8:classmerging")

includeTestProject(":tests_java_8:ir")

includeTestProject(":tests_java_8:shaking")

includeTestProject(":tests_java_8:desugar")

includeTestProject(":tests_java_8:naming")

includeTestProject(":tests_java_8:kotlin")

includeTestProject(":tests_java_8:keepanno")

includeTestProject(":tests_java_8:retrace")

includeTestProject(":tests_java_8:resolution")

includeTestProject(":tests_java_11")

includeTestProject(":tests_java_17")

includeTestProject(":tests_java_21")

includeTestProject(":tests_java_25")
