/*
 * 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.60-eap-25"
    build_versions.agp = "4.0.0-alpha01"
    build_versions.lint = "27.0.0-alpha01"
} else {
    build_versions.kotlin = "1.3.41"
    build_versions.agp = '3.6.0-beta04'
    build_versions.lint = '26.6.0-beta04'
}

build_versions.dokka = '0.9.17-g002'

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}",
]

rootProject.ext['build_libs'] = build_libs
