/*
 * Copyright 2017 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.
 */

def isUiProject = System.getenv("DIST_SUBDIR") == "/ui"

def build_versions = [:]

// NOTE: lint versions *must* be kept in sync with agp
if (isUiProject) {
    build_versions.kotlin = "1.3.61"
    build_versions.kotlin_coroutines = "1.3.0"
    build_versions.agp = '4.1.0-alpha03'
    build_versions.lint = '27.1.0-alpha03'
} else {
    build_versions.kotlin = "1.3.71"
    build_versions.kotlin_coroutines = "1.3.4"
    build_versions.agp = '4.0.0-beta03'
    build_versions.lint = '27.0.0-beta03'
}

def agpOverride = System.getenv("GRADLE_PLUGIN_VERSION")
if (agpOverride != null) {
    logger.warn("Using custom version ${agpOverride} of AGP due to GRADLE_PLUGIN_VERSION being set.")
    build_versions.agp = agpOverride
}

build_versions.dokka = '0.9.17-g009'

rootProject.ext['build_versions'] = build_versions

def build_libs = [:]

build_libs.agp = "com.android.tools.build:gradle:${build_versions.agp}"

build_libs.lint = [
    core: "com.android.tools.lint:lint:${build_versions.lint}",
    api: "com.android.tools.lint:lint-api:${build_versions.lint}",
    tests: "com.android.tools.lint:lint-tests:${build_versions.lint}"
]

build_libs.kotlin = [
    stdlib: "org.jetbrains.kotlin:kotlin-stdlib:${build_versions.kotlin}",
    gradle_plugin: "org.jetbrains.kotlin:kotlin-gradle-plugin:${build_versions.kotlin}"
]
build_libs.dex_member_list = "com.jakewharton.dex:dex-member-list:4.1.1"
build_libs.dokka_gradle = [
    "org.jetbrains.dokka:dokka-android-gradle-plugin:${build_versions.dokka}",
    "org.jetbrains.dokka:dokka-gradle-plugin:${build_versions.dokka}",
]
build_libs.kotlinpoet = "com.squareup:kotlinpoet:1.4.0"

rootProject.ext['build_libs'] = build_libs
