/*
 * 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.
 */
apply plugin: 'com.android.library'

project.ext.noDocs = true

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"
        javaCompileOptions {
            annotationProcessorOptions {
                arguments = ["room.schemaLocation": "$projectDir/schemas".toString()]
            }
        }
    }
    testOptions {
        unitTests.returnDefaultValues = true
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_7
        targetCompatibility JavaVersion.VERSION_1_7
    }
    sourceSets {
        androidTest.assets.srcDirs += files("$projectDir/schemas".toString())
    }
}

dependencies {
    compile project(":room:common")
    compile project(":room:db")
    compile project(":room:db-impl")
    compile project(':room:runtime')
    compile project(':apptoolkit:core')

    compile libs.support.app_compat
    annotationProcessor project(":room:compiler")
    androidTestAnnotationProcessor project(":room:compiler")

    androidTestCompile(libs.test_runner) {
        exclude module: 'support-annotations'
    }
    androidTestCompile(libs.espresso_core, {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    // IJ's gradle integration just cannot figure this out ...
    androidTestCompile project(':lifecycle:extensions')
    androidTestCompile project(':lifecycle:common')
    androidTestCompile project(':lifecycle:runtime')
    androidTestCompile project(':room:testing')
    testCompile libs.junit
    testCompile libs.mockito_core

}

createAndroidCheckstyle(project)
tasks['check'].dependsOn(tasks['connectedCheck'])

uploadArchives.enabled = false
