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

import androidx.build.BuildOnServerKt
import androidx.build.BuildServerConfigurationKt
import androidx.build.LibraryGroups
import androidx.build.LibraryType
import androidx.build.SdkResourceGenerator

import static androidx.build.dependencies.DependenciesKt.*

plugins {
    id("AndroidXPlugin")
    id("kotlin")
    id("java-gradle-plugin")
}

apply from: "../../buildSrc/kotlin-dsl-dependency.gradle"

dependencies {
    implementation(findGradleKotlinDsl())
    implementation(gradleApi())
    implementation("com.android.tools.build:gradle:4.0.0-beta04")
    implementation(KOTLIN_STDLIB)

    testImplementation(gradleTestKit())
    testImplementation(project(":internal-testutils-gradle-plugin"))
    testImplementation(ANDROIDX_TEST_RUNNER)
    testImplementation(JUNIT)
    testImplementation(KOTLIN_TEST)
}

SdkResourceGenerator.generateForHostTest(project)

def buildOnServer = tasks.register("buildOnServer", Copy.class) {
  it.from {
    def f = project.file("src/main/resources/scripts/lockClocks.sh")
    if (!f.exists()) {
        throw new GradleException(f.toString() + " does not exist")
    }
    return f
  }
  it.destinationDir BuildServerConfigurationKt.getDistributionDirectory(rootProject)

}

BuildOnServerKt.addToBuildOnServer(project, buildOnServer)

gradlePlugin {
    plugins {
        benchmark {
            id = "androidx.benchmark"
            implementationClass = "androidx.benchmark.gradle.BenchmarkPlugin"
        }
    }
}

androidx {
    name = "Android Benchmark Gradle Plugin"
    type = LibraryType.GRADLE_PLUGIN
    mavenGroup = LibraryGroups.BENCHMARK
    inceptionYear = "2019"
    description = "Android Benchmark Gradle Plugin"
}
