/*
 * Copyright (C) 2022 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.LibraryType
import androidx.build.PlatformIdentifier

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

androidXMultiplatform {
    android()

    defaultPlatform(PlatformIdentifier.ANDROID)

    sourceSets {
        all {
            languageSettings.optIn("kotlin.RequiresOptIn")
            languageSettings.optIn("kotlin.contracts.ExperimentalContracts")
        }

        commonMain {
            dependencies {
                api(libs.kotlinStdlib)
                implementation project(':collection:collection')
                implementation 'androidx.annotation:annotation:1.7.0-alpha02'
            }
        }

        commonTest {
            dependencies {
            }
        }

        androidMain {
            dependsOn(commonMain)
            dependencies {
                implementation("androidx.core:core-ktx:1.10.0-rc01")
                implementation("androidx.core:core-ktx:1.8.0")
            }
        }

        androidInstrumentedTest {
            dependsOn(commonTest)
            dependencies {
                implementation(libs.testExtJunit)
                implementation(libs.testCore)
                implementation(libs.testRunner)
                implementation(libs.testRules)
            }
        }
    }
}

android {
    namespace "androidx.graphics.shapes"
}

androidx {
    name = "Graphics Shapes"
    type = LibraryType.PUBLISHED_LIBRARY
    mavenVersion = LibraryVersions.GRAPHICS_SHAPES
    inceptionYear = "2022"
    description = "create and render rounded polygonal shapes"
    metalavaK2UastEnabled = true
}
