apply plugin: 'com.android.library'
archivesBaseName = 'preference-leanback-v17'

dependencies {
    compile project(':support-v4')
    compile project(':support-appcompat-v7')
    compile project(':support-recyclerview-v7')
    compile project(':support-preference-v7')
    compile project(':support-preference-v14')
    compile project(':support-leanback-v17')
}

android {
    compileSdkVersion project.ext.currentSdk

    sourceSets {
        main.manifest.srcFile 'AndroidManifest.xml'
        main.java.srcDirs = [
                'api21',
                'src'
        ]
        main.res.srcDir 'res'
    }

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_7
        targetCompatibility JavaVersion.VERSION_1_7
    }
}

android.libraryVariants.all { variant ->
    def name = variant.buildType.name

    if (name.equals(com.android.builder.core.BuilderConstants.DEBUG)) {
        return; // Skip debug builds.
    }
    def suffix = name.capitalize()

    def sourcesJarTask = project.tasks.create(name: "sourceJar${suffix}", type: Jar) {
        classifier = 'sources'
        from android.sourceSets.main.java.srcDirs
    }

    artifacts.add('archives', sourcesJarTask);
}

uploadArchives {
    repositories {
        mavenDeployer {
            repository(url: uri(rootProject.ext.supportRepoOut)) {
            }

            pom.project {
                name 'Android Support Leanback Preference v17'
                description "Android Support Leanback Preference v17"
                url 'http://developer.android.com/tools/extras/support-library.html'
                inceptionYear '2015'

                licenses {
                    license {
                        name 'The Apache Software License, Version 2.0'
                        url 'http://www.apache.org/licenses/LICENSE-2.0.txt'
                        distribution 'repo'
                    }
                }

                scm {
                    url "http://source.android.com"
                    connection "scm:git:https://android.googlesource.com/platform/frameworks/support"
                }
                developers {
                    developer {
                        name 'The Android Open Source Project'
                    }
                }
            }
        }
    }
}
