/*
 * Copyright (C) 2014 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: 'java'

sourceCompatibility = dataBindingConfig.javaTargetCompatibility
targetCompatibility = dataBindingConfig.javaSourceCompatibility

sourceSets {
    main {
        java {
            srcDir 'src/main/java'
        }
    }
    test {
        java {
            srcDir 'src/test/java'
        }
    }
}

dependencies {
    testCompile 'junit:junit:4.12'
}

uploadArchives {
    repositories {
        mavenDeployer {
            pom.artifactId = 'baseLibrary'
            pom.project {
                licenses {
                    license {
                        name dataBindingConfig.licenseName
                        url dataBindingConfig.licenseUrl
                        distribution dataBindingConfig.licenseDistribution
                    }
                }
            }
        }
    }
}

task prebuildJar(type : Copy) {
    dependsOn uploadArchives
    from "$buildDir/libs/baseLibrary-${version}.jar"
    into dataBindingConfig.prebuildFolder
    rename { String fileName ->
        "databinding-baseLibrary.jar"
    }
}

project.ext.pomName = 'Data Binding Base Library'
project.ext.pomDesc = 'Shared library between Data Binding runtime lib and compiler'
enablePublishing(this, true)