apply plugin: 'com.android.library'
archivesBaseName = 'support-fragment'

dependencies {
    compile project(':support-compat')
    compile project(':support-media-compat')
    compile project(':support-core-ui')
    compile project(':support-core-utils')
    androidTestCompile ("com.android.support.test:runner:${project.rootProject.ext.testRunnerVersion}") {
        exclude module: 'support-annotations'
    }
    androidTestCompile ("com.android.support.test.espresso:espresso-core:${project.rootProject.ext.espressoVersion}") {
        exclude module: 'support-annotations'
    }
    androidTestCompile 'org.mockito:mockito-core:1.9.5'
    androidTestCompile 'com.google.dexmaker:dexmaker:1.2'
    androidTestCompile 'com.google.dexmaker:dexmaker-mockito:1.2'
    testCompile 'junit:junit:4.12'
}

android {
    compileSdkVersion project.ext.currentSdk

    defaultConfig {
        minSdkVersion 9

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

    sourceSets {
        main.manifest.srcFile 'AndroidManifest.xml'
        main.java.srcDirs = [
                'gingerbread',
                'honeycomb',
                'jellybean',
                'api21',
                'java'
        ]

        androidTest.setRoot('tests')
        androidTest.java.srcDir 'tests/java'
        androidTest.res.srcDir 'tests/res'
        androidTest.manifest.srcFile 'tests/AndroidManifest.xml'
    }

    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
        exclude('android/content/pm/**')
        exclude('android/service/media/**')
    }

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

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

            pom.project {
                name 'Android Support Library v4'
                description "The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs. Compatible on devices running API 4 or later."
                url 'http://developer.android.com/tools/extras/support-library.html'
                inceptionYear '2011'

                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'
                    }
                }
            }
        }
    }
}