build.gradle revision 46cefa3d5be5a99484075cf60d1c55ca36ccffd3
1f7ab3f9adec057341742e2ec990e4b8aafa0b493Ben Gruver/* 2f7ab3f9adec057341742e2ec990e4b8aafa0b493Ben Gruver * Copyright 2012, Google Inc. 3f7ab3f9adec057341742e2ec990e4b8aafa0b493Ben Gruver * All rights reserved. 4f7ab3f9adec057341742e2ec990e4b8aafa0b493Ben Gruver * 5f7ab3f9adec057341742e2ec990e4b8aafa0b493Ben Gruver * Redistribution and use in source and binary forms, with or without 6f7ab3f9adec057341742e2ec990e4b8aafa0b493Ben Gruver * modification, are permitted provided that the following conditions are 7f7ab3f9adec057341742e2ec990e4b8aafa0b493Ben Gruver * met: 8f7ab3f9adec057341742e2ec990e4b8aafa0b493Ben Gruver * 9f7ab3f9adec057341742e2ec990e4b8aafa0b493Ben Gruver * * Redistributions of source code must retain the above copyright 10f7ab3f9adec057341742e2ec990e4b8aafa0b493Ben Gruver * notice, this list of conditions and the following disclaimer. 11f7ab3f9adec057341742e2ec990e4b8aafa0b493Ben Gruver * * Redistributions in binary form must reproduce the above 12f7ab3f9adec057341742e2ec990e4b8aafa0b493Ben Gruver * copyright notice, this list of conditions and the following disclaimer 13f7ab3f9adec057341742e2ec990e4b8aafa0b493Ben Gruver * in the documentation and/or other materials provided with the 14f7ab3f9adec057341742e2ec990e4b8aafa0b493Ben Gruver * distribution. 15f7ab3f9adec057341742e2ec990e4b8aafa0b493Ben Gruver * * Neither the name of Google Inc. nor the names of its 16f7ab3f9adec057341742e2ec990e4b8aafa0b493Ben Gruver * contributors may be used to endorse or promote products derived from 17f7ab3f9adec057341742e2ec990e4b8aafa0b493Ben Gruver * this software without specific prior written permission. 18f7ab3f9adec057341742e2ec990e4b8aafa0b493Ben Gruver * 19f7ab3f9adec057341742e2ec990e4b8aafa0b493Ben Gruver * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 20f7ab3f9adec057341742e2ec990e4b8aafa0b493Ben Gruver * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 21f7ab3f9adec057341742e2ec990e4b8aafa0b493Ben Gruver * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 22f7ab3f9adec057341742e2ec990e4b8aafa0b493Ben Gruver * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 23f7ab3f9adec057341742e2ec990e4b8aafa0b493Ben Gruver * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 24f7ab3f9adec057341742e2ec990e4b8aafa0b493Ben Gruver * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 25f7ab3f9adec057341742e2ec990e4b8aafa0b493Ben Gruver * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 26f7ab3f9adec057341742e2ec990e4b8aafa0b493Ben Gruver * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 27f7ab3f9adec057341742e2ec990e4b8aafa0b493Ben Gruver * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 28f7ab3f9adec057341742e2ec990e4b8aafa0b493Ben Gruver * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 29f7ab3f9adec057341742e2ec990e4b8aafa0b493Ben Gruver * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30f7ab3f9adec057341742e2ec990e4b8aafa0b493Ben Gruver */ 31f7ab3f9adec057341742e2ec990e4b8aafa0b493Ben Gruver 322b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruverconfigurations { 332b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver accessorTestGenerator 342b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver} 352b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver 36f7ab3f9adec057341742e2ec990e4b8aafa0b493Ben Gruverdependencies { 37f7ab3f9adec057341742e2ec990e4b8aafa0b493Ben Gruver compile project(':util') 3846cefa3d5be5a99484075cf60d1c55ca36ccffd3Ben Gruver compile depends.findbugs 3946cefa3d5be5a99484075cf60d1c55ca36ccffd3Ben Gruver compile depends.guava 40e2db1542bb72a33e89762a18f42743efbb9c0b86Ben Gruver 4146cefa3d5be5a99484075cf60d1c55ca36ccffd3Ben Gruver testCompile depends.junit 422b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver 432b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver accessorTestGenerator project('accessorTestGenerator') 442b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver} 452b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver 462b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruverext.testAccessorOutputDir = file("${buildDir}/generated-accessor-test-sources") 472b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruverext.testAccessorOutputFile = file("${buildDir}/generated-accessor-test-sources/org/jf/dexlib2/AccessorTypes.java") 482b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver 492b8845bb247e3e5ee154966866b53fa9887e2609Ben GruversourceSets { 502b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver // The sources for building the test dex file for the accessor test 512b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver accessorTestDex { 522b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver java { 532b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver srcDir testAccessorOutputDir 542b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver } 552b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver } 562b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver 572b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver // The sources for the accessor test itself 582b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver accessorTest { 592b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver java { 602b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver compileClasspath += main.output 612b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver runtimeClasspath += main.output 622b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver } 632b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver } 642b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver} 652b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver 662b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruverconfigurations { 672b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver accessorTestDexCompile.extendsFrom compile 682b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver accessorTestDexRuntime.extendsFrom runtime 692b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver 702b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver accessorTestCompile.extendsFrom testCompile 712b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver accessorTestRuntime.extendsFrom testRuntime 722b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver} 732b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver 742b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruveridea { 752b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver module { 762b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver testSourceDirs += sourceSets.accessorTest.java.srcDirs 772b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver } 782b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver} 792b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver 802b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver// You must manually execute this task to regenerate SyntheticAccessorFSM.java, after modifying the ragel file 812b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver// e.g. ./gradlew ragel 822b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruvertask ragel(type:Exec) { 832b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver workingDir = 'src/main/ragel' 842b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver 852b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver commandLine 'ragel', '-J', '-o', file('src/main/java/org/jf/dexlib2/util/SyntheticAccessorFSM.java'), 862b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver 'SyntheticAccessorFSM.rl' 872b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver} 882b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver 892b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruvertask generateAccessorTestSource(type: JavaExec) { 902b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver outputs.dir file(testAccessorOutputDir) 912b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver 922b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver mkdir(file(testAccessorOutputFile).parent) 932b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver 942b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver classpath = configurations.accessorTestGenerator 952b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver main = 'org.jf.dexlib2.AccessorTestGenerator' 962b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver args testAccessorOutputFile 972b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver} 982b8845bb247e3e5ee154966866b53fa9887e2609Ben GruvercompileAccessorTestDexJava.dependsOn(generateAccessorTestSource) 992b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver 1002b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruvertask generateAccessorTestDex(type: Exec, dependsOn: compileAccessorTestDexJava) { 1012b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver def outputDex = file("${sourceSets.accessorTest.output.resourcesDir}/accessorTest.dex") 1022b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver mkdir(outputDex.parent) 1032b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver 1042b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver inputs.dir project.sourceSets.accessorTestDex.output.classesDir 1052b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver outputs.file outputDex 1062b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver 1072b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver sourceSets.accessorTest.resources 1082b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver 1092b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver workingDir project.sourceSets.accessorTestDex.output.classesDir 1102b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver executable 'dx' 1112b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver args '--dex' 1122b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver args "--output=${outputDex}" 1132b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver args '.' 1142b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver} 1152b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver 1162b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruvertask accessorTest(type: Test, dependsOn: generateAccessorTestDex) { 1172b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver testClassesDir = project.sourceSets.accessorTest.output.classesDir 1182b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver classpath = project.sourceSets.accessorTest.runtimeClasspath 1192b8845bb247e3e5ee154966866b53fa9887e2609Ben Gruver} 120