/*
 * 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.agp = "4.0.0-alpha01"
    build_versions.lint = "27.0.0-alpha01"
} else {
    build_versions.kotlin = "1.3.60"
    build_versions.agp = '3.6.1'
    build_versions.lint = '26.6.1'
}

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-g007'

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.error_prone_gradle = 'net.ltgt.gradle:gradle-errorprone-plugin:0.0.13'
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
