/*
 * Copyright (C) 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.
 */


import org.jetbrains.kotlin.gradle.tasks.KotlinCompile

import static androidx.build.dependencies.DependenciesKt.*
import androidx.build.LibraryGroups
import androidx.build.LibraryVersions
import androidx.build.AndroidXExtension
import androidx.build.Publish

plugins {
  id("AndroidXPlugin")
  id("com.android.library")
  id("org.jetbrains.kotlin.android")
}

dependencies {
  api(project(":lifecycle:lifecycle-reactivestreams"))
  api(KOTLIN_STDLIB)

  testImplementation(JUNIT)
  testImplementation(RX_JAVA)
  testImplementation(TRUTH)
  testImplementation(KOTLIN_COROUTINES_TEST)
  testImplementation(project(":lifecycle:lifecycle-runtime-testing"))
  testImplementation("androidx.arch.core:core-testing:2.1.0")
}

androidx {
  name = "Android Lifecycle ReactiveStreams KTX"
  publish = Publish.SNAPSHOT_AND_RELEASE
  mavenVersion = LibraryVersions.LIFECYCLE
  mavenGroup = LibraryGroups.LIFECYCLE
  inceptionYear = "2018"
  description = "Kotlin extensions for Lifecycle ReactiveStreams"
  url = AndroidXExtension.ARCHITECTURE_URL
}

// Allow usage of Kotlin's @OptIn.
tasks.withType(KotlinCompile).configureEach {
  kotlinOptions {
    freeCompilerArgs += ["-Xopt-in=kotlin.RequiresOptIn"]
  }
}