import android.support.LibraryGroups

plugins {
    id("SupportJavaLibraryPlugin")
}

jar {
    from sourceSets.main.output
    // Strip out typedef classes. For Android libraries, this is done
    // automatically by the Gradle plugin, but the Annotation library is a
    // plain jar, built by the regular Gradle java plugin. The typedefs
    // themselves have been manually extracted into the
    // external-annotations directory, and those are packaged separately
    // below by the annotationsZip task.
    exclude('android/support/annotation/ProductionVisibility.class')
    exclude('android/support/annotation/DimensionUnit.class')
    preserveFileTimestamps = false
}

// configuration for the javadoc to include all source sets.
javadoc {
    source    sourceSets.main.allJava
}

// Disable strict javadoc lint checks with javadoc v8 builds on Mac. http://b/26744780
if (JavaVersion.current().isJava8Compatible()) {
    tasks.withType(Javadoc) {
        if (options.doclet == null) {
            options.addBooleanOption('Xdoclint:none', true)
        }
    }
}

task javadocJar(type: Jar, dependsOn:javadoc) {
    classifier         'javadoc'
    from               javadoc.destinationDir
}

task annotationsZip(type: Zip) {
    classifier         'annotations'
    from               'external-annotations'
}

// add javadoc/source/annotations jar tasks as artifacts
artifacts {
    archives jar
    archives javadocJar
    archives annotationsZip
}

supportLibrary {
    name = "Android Support Library Annotations"
    publish = true
    mavenGroup = LibraryGroups.SUPPORT
    inceptionYear = "2013"
    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."
}