/*
 * Copyright (C) 2016 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 com.android.builder.core.BuilderConstants
apply plugin: 'com.android.library'
apply plugin: 'maven'

android {
    compileSdkVersion tools.current_sdk
    buildToolsVersion tools.build_tools_version

    defaultConfig {
        minSdkVersion flatfoot.min_sdk
        targetSdkVersion tools.current_sdk
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

    }

    buildTypes.all {
        consumerProguardFiles 'proguard-rules.pro'
    }

    buildTypes {
        release {
            minifyEnabled false
        }
    }

    testOptions {
        unitTests.returnDefaultValues = true
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_7
        targetCompatibility JavaVersion.VERSION_1_7
    }
}

dependencies {
    compile project(":room:common")
    compile project(":room:db")
    compile project(":room:db-impl")
    compile project(":arch:core")
    compile libs.support.core_utils


    testCompile project(":arch:core-testing")
    testCompile libs.junit
    testCompile libs.mockito.all
    testCompile libs.support.annotations

    androidTestCompile libs.junit
    androidTestCompile(libs.test_runner) {
        exclude module: 'support-annotations'
    }
    androidTestCompile(libs.espresso_core, {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
}

archivesBaseName = "runtime"

createAndroidCheckstyle(project)

android.libraryVariants.all { variant ->
    def name = variant.buildType.name
    def suffix = name.capitalize()
    project.tasks.create(name: "jar${suffix}", type: Jar){
        dependsOn variant.javaCompile
        from variant.javaCompile.destinationDir
        destinationDir new File(project.buildDir, "libJar")
    }
}
