186fb8efa9f2eb814c3ccb58e80bbf171b9514760Xavier Ducrohetbuildscript {
286fb8efa9f2eb814c3ccb58e80bbf171b9514760Xavier Ducrohet    repositories {
386fb8efa9f2eb814c3ccb58e80bbf171b9514760Xavier Ducrohet        maven { url '../../prebuilts/gradle-plugin' }
486fb8efa9f2eb814c3ccb58e80bbf171b9514760Xavier Ducrohet        maven { url '../../prebuilts/tools/common/m2/repository' }
586fb8efa9f2eb814c3ccb58e80bbf171b9514760Xavier Ducrohet        maven { url '../../prebuilts/tools/common/m2/internal' }
686fb8efa9f2eb814c3ccb58e80bbf171b9514760Xavier Ducrohet    }
786fb8efa9f2eb814c3ccb58e80bbf171b9514760Xavier Ducrohet    dependencies {
8490bf528b45f551b10d7a487f9b81cf732880bbbChris Banes        classpath 'com.android.tools.build:gradle:1.3.1'
986fb8efa9f2eb814c3ccb58e80bbf171b9514760Xavier Ducrohet    }
1086fb8efa9f2eb814c3ccb58e80bbf171b9514760Xavier Ducrohet}
1186fb8efa9f2eb814c3ccb58e80bbf171b9514760Xavier Ducrohet
12490bf528b45f551b10d7a487f9b81cf732880bbbChris Banesext.supportVersion = '23.0.0'
13490bf528b45f551b10d7a487f9b81cf732880bbbChris Banesext.extraVersion = 17
14020e4328a1e91d9136a498fa10f2cc6553ade5d3Xavier Ducrohetext.supportRepoOut = ''
15f9190ca73c94b1e20ed5e09eff112fa666d74af6Chris Banesext.buildToolsVersion = '22.1.0'
16fa38527bf49f779eeb63a87862f80e83f5f51705Xavier Ducrohetext.buildNumber = Integer.toString(ext.extraVersion)
1786fb8efa9f2eb814c3ccb58e80bbf171b9514760Xavier Ducrohet
18020e4328a1e91d9136a498fa10f2cc6553ade5d3Xavier Ducrohet/*
19020e4328a1e91d9136a498fa10f2cc6553ade5d3Xavier Ducrohet * With the build server you are given two env variables.
20020e4328a1e91d9136a498fa10f2cc6553ade5d3Xavier Ducrohet * The OUT_DIR is a temporary directory you can use to put things during the build.
21020e4328a1e91d9136a498fa10f2cc6553ade5d3Xavier Ducrohet * The DIST_DIR is where you want to save things from the build.
22020e4328a1e91d9136a498fa10f2cc6553ade5d3Xavier Ducrohet *
23020e4328a1e91d9136a498fa10f2cc6553ade5d3Xavier Ducrohet * The build server will copy the contents of DIST_DIR to somewhere and make it available.
24020e4328a1e91d9136a498fa10f2cc6553ade5d3Xavier Ducrohet */
25020e4328a1e91d9136a498fa10f2cc6553ade5d3Xavier Ducrohetif (System.env.DIST_DIR != null && System.env.OUT_DIR != null) {
264e04b7ac030f13f9ea24ca45aba3fae4f1eda9b0Xavier Ducrohet    buildDir = new File(System.env.OUT_DIR + '/gradle/frameworks/support/build').getCanonicalFile()
274e04b7ac030f13f9ea24ca45aba3fae4f1eda9b0Xavier Ducrohet    project.ext.distDir = new File(System.env.DIST_DIR).getCanonicalFile()
28fa38527bf49f779eeb63a87862f80e83f5f51705Xavier Ducrohet
29fa38527bf49f779eeb63a87862f80e83f5f51705Xavier Ducrohet    // the build server does not pass the build number so we infer it from the last folder of the dist path.
30fa38527bf49f779eeb63a87862f80e83f5f51705Xavier Ducrohet    ext.buildNumber = project.ext.distDir.getName()
31020e4328a1e91d9136a498fa10f2cc6553ade5d3Xavier Ducrohet} else {
32020e4328a1e91d9136a498fa10f2cc6553ade5d3Xavier Ducrohet    buildDir = file('../../out/host/gradle/frameworks/support/build')
33020e4328a1e91d9136a498fa10f2cc6553ade5d3Xavier Ducrohet    project.ext.distDir = file('../../out/dist')
34020e4328a1e91d9136a498fa10f2cc6553ade5d3Xavier Ducrohet}
35020e4328a1e91d9136a498fa10f2cc6553ade5d3Xavier Ducrohet
36020e4328a1e91d9136a498fa10f2cc6553ade5d3Xavier Ducrohetext.supportRepoOut = new File(buildDir, 'support_repo')
3786fb8efa9f2eb814c3ccb58e80bbf171b9514760Xavier Ducrohet
389220b5b4086df4d28bcc114f7188a801b086d9deXavier Ducrohet// Main task called by the build server.
399220b5b4086df4d28bcc114f7188a801b086d9deXavier Ducrohettask(createArchive) << {
409220b5b4086df4d28bcc114f7188a801b086d9deXavier Ducrohet}
419220b5b4086df4d28bcc114f7188a801b086d9deXavier Ducrohet
42020e4328a1e91d9136a498fa10f2cc6553ade5d3Xavier Ducrohet
439220b5b4086df4d28bcc114f7188a801b086d9deXavier Ducrohet// upload anchor for subprojects to upload their artifacts
449220b5b4086df4d28bcc114f7188a801b086d9deXavier Ducrohet// to the local repo.
459220b5b4086df4d28bcc114f7188a801b086d9deXavier Ducrohettask(mainUpload) << {
46020e4328a1e91d9136a498fa10f2cc6553ade5d3Xavier Ducrohet}
4786fb8efa9f2eb814c3ccb58e80bbf171b9514760Xavier Ducrohet
489220b5b4086df4d28bcc114f7188a801b086d9deXavier Ducrohet// repository creation task
499220b5b4086df4d28bcc114f7188a801b086d9deXavier Ducrohettask createRepository(type: Zip, dependsOn: mainUpload) {
50020e4328a1e91d9136a498fa10f2cc6553ade5d3Xavier Ducrohet    from project.ext.supportRepoOut
51020e4328a1e91d9136a498fa10f2cc6553ade5d3Xavier Ducrohet    destinationDir project.ext.distDir
529dc4480c79369fe099cae44094b54cbe25d9da52Xavier Ducrohet    into 'm2repository'
53fa38527bf49f779eeb63a87862f80e83f5f51705Xavier Ducrohet    baseName = String.format("sdk-repo-linux-m2repository-%s", project.ext.buildNumber)
54020e4328a1e91d9136a498fa10f2cc6553ade5d3Xavier Ducrohet}
559220b5b4086df4d28bcc114f7188a801b086d9deXavier DucrohetcreateArchive.dependsOn createRepository
5686fb8efa9f2eb814c3ccb58e80bbf171b9514760Xavier Ducrohet
579220b5b4086df4d28bcc114f7188a801b086d9deXavier Ducrohet// prepare repository with older versions
5864fe2322c9c36f54e20c9f6279a70f35854e8152Xavier Ducrohettask unzipRepo(type: Copy) {
5986fb8efa9f2eb814c3ccb58e80bbf171b9514760Xavier Ducrohet    from "$rootDir/../../prebuilts/maven_repo/android"
60855a92237ee9a2006eab3b79fb0e716f33605f55Xavier Ducrohet    into project.ext.supportRepoOut
6186fb8efa9f2eb814c3ccb58e80bbf171b9514760Xavier Ducrohet}
6286fb8efa9f2eb814c3ccb58e80bbf171b9514760Xavier Ducrohet
6364fe2322c9c36f54e20c9f6279a70f35854e8152Xavier DucrohetunzipRepo.doFirst {
64020e4328a1e91d9136a498fa10f2cc6553ade5d3Xavier Ducrohet    project.ext.supportRepoOut.deleteDir()
65020e4328a1e91d9136a498fa10f2cc6553ade5d3Xavier Ducrohet    project.ext.supportRepoOut.mkdirs()
66020e4328a1e91d9136a498fa10f2cc6553ade5d3Xavier Ducrohet}
67020e4328a1e91d9136a498fa10f2cc6553ade5d3Xavier Ducrohet
6864fe2322c9c36f54e20c9f6279a70f35854e8152Xavier Ducrohet// anchor for prepare repo. This is post unzip + sourceProp.
6964fe2322c9c36f54e20c9f6279a70f35854e8152Xavier Ducrohettask(prepareRepo) << {
7064fe2322c9c36f54e20c9f6279a70f35854e8152Xavier Ducrohet}
7164fe2322c9c36f54e20c9f6279a70f35854e8152Xavier Ducrohet
729220b5b4086df4d28bcc114f7188a801b086d9deXavier Ducrohetimport com.google.common.io.Files
739220b5b4086df4d28bcc114f7188a801b086d9deXavier Ducrohetimport com.google.common.base.Charsets
749220b5b4086df4d28bcc114f7188a801b086d9deXavier Ducrohet
759220b5b4086df4d28bcc114f7188a801b086d9deXavier Ducrohettask(createXml) << {
769220b5b4086df4d28bcc114f7188a801b086d9deXavier Ducrohet    def repoArchive = createRepository.archivePath
779220b5b4086df4d28bcc114f7188a801b086d9deXavier Ducrohet    def repoArchiveName = createRepository.archiveName
789220b5b4086df4d28bcc114f7188a801b086d9deXavier Ducrohet    def size = repoArchive.length()
799220b5b4086df4d28bcc114f7188a801b086d9deXavier Ducrohet    def sha1 = getSha1(repoArchive)
809220b5b4086df4d28bcc114f7188a801b086d9deXavier Ducrohet
819220b5b4086df4d28bcc114f7188a801b086d9deXavier Ducrohet    def xml =
829220b5b4086df4d28bcc114f7188a801b086d9deXavier Ducrohet"<sdk:sdk-addon xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:sdk=\"http://schemas.android.com/sdk/android/addon/6\">\n\
839220b5b4086df4d28bcc114f7188a801b086d9deXavier Ducrohet  <sdk:extra>\n\
849220b5b4086df4d28bcc114f7188a801b086d9deXavier Ducrohet    <sdk:revision>\n\
859220b5b4086df4d28bcc114f7188a801b086d9deXavier Ducrohet      <sdk:major>${project.ext.extraVersion}</sdk:major>\n\
869220b5b4086df4d28bcc114f7188a801b086d9deXavier Ducrohet    </sdk:revision>\n\
879220b5b4086df4d28bcc114f7188a801b086d9deXavier Ducrohet    <sdk:vendor-display>Android</sdk:vendor-display>\n\
889220b5b4086df4d28bcc114f7188a801b086d9deXavier Ducrohet    <sdk:vendor-id>android</sdk:vendor-id>\n\
899220b5b4086df4d28bcc114f7188a801b086d9deXavier Ducrohet    <sdk:name-display>Local Maven repository for Support Libraries</sdk:name-display>\n\
909220b5b4086df4d28bcc114f7188a801b086d9deXavier Ducrohet    <sdk:path>m2repository</sdk:path>\n\
919220b5b4086df4d28bcc114f7188a801b086d9deXavier Ducrohet    <sdk:archives>\n\
92c16b62d666044c26e8bd4f70452dfd6c8c49a26fXavier Ducrohet      <sdk:archive>\n\
939220b5b4086df4d28bcc114f7188a801b086d9deXavier Ducrohet       <sdk:size>${size}</sdk:size>\n\
949220b5b4086df4d28bcc114f7188a801b086d9deXavier Ducrohet       <sdk:checksum type=\"sha1\">${sha1}</sdk:checksum>\n\
959220b5b4086df4d28bcc114f7188a801b086d9deXavier Ducrohet       <sdk:url>${repoArchiveName}</sdk:url>\n\
969220b5b4086df4d28bcc114f7188a801b086d9deXavier Ducrohet      </sdk:archive>\n\
979220b5b4086df4d28bcc114f7188a801b086d9deXavier Ducrohet    </sdk:archives>\n\
989220b5b4086df4d28bcc114f7188a801b086d9deXavier Ducrohet  </sdk:extra>\n\
999220b5b4086df4d28bcc114f7188a801b086d9deXavier Ducrohet</sdk:sdk-addon>"
1009220b5b4086df4d28bcc114f7188a801b086d9deXavier Ducrohet
1019220b5b4086df4d28bcc114f7188a801b086d9deXavier Ducrohet    Files.write(xml, new File(project.ext.distDir, 'repo-extras.xml'), Charsets.UTF_8)
1029220b5b4086df4d28bcc114f7188a801b086d9deXavier Ducrohet}
1039220b5b4086df4d28bcc114f7188a801b086d9deXavier DucrohetcreateArchive.dependsOn createXml
1049220b5b4086df4d28bcc114f7188a801b086d9deXavier Ducrohet
10564fe2322c9c36f54e20c9f6279a70f35854e8152Xavier Ducrohettask(createSourceProp) << {
10664fe2322c9c36f54e20c9f6279a70f35854e8152Xavier Ducrohet    def sourceProp =
10764fe2322c9c36f54e20c9f6279a70f35854e8152Xavier Ducrohet"Extra.VendorDisplay=Android\n\
10864fe2322c9c36f54e20c9f6279a70f35854e8152Xavier DucrohetExtra.Path=m2repository\n\
10964fe2322c9c36f54e20c9f6279a70f35854e8152Xavier DucrohetArchive.Arch=ANY\n\
11064fe2322c9c36f54e20c9f6279a70f35854e8152Xavier DucrohetExtra.NameDisplay=Android Support Repository\n\
11164fe2322c9c36f54e20c9f6279a70f35854e8152Xavier DucrohetArchive.Os=ANY\n\
11264fe2322c9c36f54e20c9f6279a70f35854e8152Xavier DucrohetPkg.Revision=${project.ext.extraVersion}.0.0\n\
11364fe2322c9c36f54e20c9f6279a70f35854e8152Xavier DucrohetExtra.VendorId=android"
11464fe2322c9c36f54e20c9f6279a70f35854e8152Xavier Ducrohet
11564fe2322c9c36f54e20c9f6279a70f35854e8152Xavier Ducrohet    Files.write(sourceProp, new File(project.ext.supportRepoOut, 'source.properties'), Charsets.UTF_8)
11664fe2322c9c36f54e20c9f6279a70f35854e8152Xavier Ducrohet}
11764fe2322c9c36f54e20c9f6279a70f35854e8152Xavier DucrohetcreateSourceProp.dependsOn unzipRepo
11864fe2322c9c36f54e20c9f6279a70f35854e8152Xavier DucrohetprepareRepo.dependsOn createSourceProp
11964fe2322c9c36f54e20c9f6279a70f35854e8152Xavier Ducrohet
1209220b5b4086df4d28bcc114f7188a801b086d9deXavier Ducrohet
1219220b5b4086df4d28bcc114f7188a801b086d9deXavier Ducrohetimport com.google.common.hash.HashCode
1229220b5b4086df4d28bcc114f7188a801b086d9deXavier Ducrohetimport com.google.common.hash.HashFunction
1239220b5b4086df4d28bcc114f7188a801b086d9deXavier Ducrohetimport com.google.common.hash.Hashing
12496f1e91a591cea8e671136391fa2eb71c7c6ac40Chris Banesimport java.nio.charset.Charset
1259220b5b4086df4d28bcc114f7188a801b086d9deXavier Ducrohet
1269220b5b4086df4d28bcc114f7188a801b086d9deXavier Ducrohetdef getSha1(File inputFile) {
1279220b5b4086df4d28bcc114f7188a801b086d9deXavier Ducrohet    HashFunction hashFunction = Hashing.sha1()
12896f1e91a591cea8e671136391fa2eb71c7c6ac40Chris Banes    HashCode hashCode = hashFunction.hashString(inputFile.getAbsolutePath(), Charset.forName("UTF-8"))
1299220b5b4086df4d28bcc114f7188a801b086d9deXavier Ducrohet    return hashCode.toString()
1309220b5b4086df4d28bcc114f7188a801b086d9deXavier Ducrohet}
1319220b5b4086df4d28bcc114f7188a801b086d9deXavier Ducrohet
13286fb8efa9f2eb814c3ccb58e80bbf171b9514760Xavier Ducrohetsubprojects {
13386fb8efa9f2eb814c3ccb58e80bbf171b9514760Xavier Ducrohet    // Change buildDir first so that all plugins pick up the new value.
134616b95d231e53cde9c6db0fd98908339a35ca322Xavier Ducrohet    project.buildDir = project.file("$project.parent.buildDir/../$project.name/build")
13586fb8efa9f2eb814c3ccb58e80bbf171b9514760Xavier Ducrohet
13686fb8efa9f2eb814c3ccb58e80bbf171b9514760Xavier Ducrohet    apply plugin: 'maven'
13786fb8efa9f2eb814c3ccb58e80bbf171b9514760Xavier Ducrohet
138855a92237ee9a2006eab3b79fb0e716f33605f55Xavier Ducrohet    version = rootProject.ext.supportVersion
13986fb8efa9f2eb814c3ccb58e80bbf171b9514760Xavier Ducrohet    group = 'com.android.support'
14086fb8efa9f2eb814c3ccb58e80bbf171b9514760Xavier Ducrohet
141be7a54a6e02c9230a08e63f1c964907d129b6a10Yigit Boyar    repositories {
142be7a54a6e02c9230a08e63f1c964907d129b6a10Yigit Boyar        maven { url "${project.parent.projectDir}/../../prebuilts/tools/common/m2/repository" }
143be7a54a6e02c9230a08e63f1c964907d129b6a10Yigit Boyar        maven { url "${project.parent.projectDir}/../../prebuilts/tools/common/m2/internal" }
144be7a54a6e02c9230a08e63f1c964907d129b6a10Yigit Boyar        maven { url "${project.parent.projectDir}/../../prebuilts/maven_repo/android" }
145be7a54a6e02c9230a08e63f1c964907d129b6a10Yigit Boyar    }
146be7a54a6e02c9230a08e63f1c964907d129b6a10Yigit Boyar
14786fb8efa9f2eb814c3ccb58e80bbf171b9514760Xavier Ducrohet    task release(type: Upload) {
14886fb8efa9f2eb814c3ccb58e80bbf171b9514760Xavier Ducrohet        configuration = configurations.archives
14986fb8efa9f2eb814c3ccb58e80bbf171b9514760Xavier Ducrohet        repositories {
15086fb8efa9f2eb814c3ccb58e80bbf171b9514760Xavier Ducrohet            mavenDeployer {
151855a92237ee9a2006eab3b79fb0e716f33605f55Xavier Ducrohet                repository(url: uri("$rootProject.ext.supportRepoOut"))
15286fb8efa9f2eb814c3ccb58e80bbf171b9514760Xavier Ducrohet            }
15386fb8efa9f2eb814c3ccb58e80bbf171b9514760Xavier Ducrohet        }
15486fb8efa9f2eb814c3ccb58e80bbf171b9514760Xavier Ducrohet    }
155020e4328a1e91d9136a498fa10f2cc6553ade5d3Xavier Ducrohet
156e4cf5a90e0b6c66a075504ffe04f7eafb34c525dXavier Ducrohet    def deployer = release.repositories.mavenDeployer
157e4cf5a90e0b6c66a075504ffe04f7eafb34c525dXavier Ducrohet    deployer.pom*.whenConfigured { pom ->
158e4cf5a90e0b6c66a075504ffe04f7eafb34c525dXavier Ducrohet        pom.dependencies.findAll {dep -> dep.groupId == 'com.android.support' && dep.artifactId != 'support-annotations' }*.type = 'aar'
159e4cf5a90e0b6c66a075504ffe04f7eafb34c525dXavier Ducrohet    }
160e4cf5a90e0b6c66a075504ffe04f7eafb34c525dXavier Ducrohet
1619220b5b4086df4d28bcc114f7188a801b086d9deXavier Ducrohet    // before the upload, make sure the repo is ready.
162020e4328a1e91d9136a498fa10f2cc6553ade5d3Xavier Ducrohet    release.dependsOn rootProject.tasks.prepareRepo
1639220b5b4086df4d28bcc114f7188a801b086d9deXavier Ducrohet    // make the mainupload depend on this one.
164020e4328a1e91d9136a498fa10f2cc6553ade5d3Xavier Ducrohet    mainUpload.dependsOn release
16584faec58c451a6e317eb8c1621493fc530e5dbccJeff Davidson
16684faec58c451a6e317eb8c1621493fc530e5dbccJeff Davidson    project.plugins.whenPluginAdded { plugin ->
16784faec58c451a6e317eb8c1621493fc530e5dbccJeff Davidson        if ("com.android.build.gradle.LibraryPlugin".equals(plugin.class.name)) {
16884faec58c451a6e317eb8c1621493fc530e5dbccJeff Davidson            project.android.buildToolsVersion = rootProject.buildToolsVersion
16984faec58c451a6e317eb8c1621493fc530e5dbccJeff Davidson        }
17084faec58c451a6e317eb8c1621493fc530e5dbccJeff Davidson    }
17186fb8efa9f2eb814c3ccb58e80bbf171b9514760Xavier Ducrohet}
17286fb8efa9f2eb814c3ccb58e80bbf171b9514760Xavier Ducrohet
17386fb8efa9f2eb814c3ccb58e80bbf171b9514760Xavier DucrohetFileCollection getAndroidPrebuilt(String apiLevel) {
17486fb8efa9f2eb814c3ccb58e80bbf171b9514760Xavier Ducrohet    files("$rootDir/../../prebuilts/sdk/$apiLevel/android.jar")
17547c59fbbcf7ddf4c2594fc9f2424b3c775211ca0Tor Norbye}
176