| /* |
| * Copyright 2013, Google Inc. |
| * All rights reserved. |
| * |
| * Redistribution and use in source and binary forms, with or without |
| * modification, are permitted provided that the following conditions are |
| * met: |
| * |
| * * Redistributions of source code must retain the above copyright |
| * notice, this list of conditions and the following disclaimer. |
| * * Redistributions in binary form must reproduce the above |
| * copyright notice, this list of conditions and the following disclaimer |
| * in the documentation and/or other materials provided with the |
| * distribution. |
| * * Neither the name of Google Inc. nor the names of its |
| * contributors may be used to endorse or promote products derived from |
| * this software without specific prior written permission. |
| * |
| * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
| * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
| * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
| * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
| * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
| * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
| * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
| * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
| * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
| * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
| * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| */ |
| |
| buildscript { |
| repositories { |
| maven { |
| url "https://plugins.gradle.org/m2/" |
| } |
| maven { |
| url 'http://dl.bintray.com/jetbrains/intellij-plugin-service' |
| } |
| |
| } |
| dependencies { |
| classpath "gradle.plugin.org.jetbrains:gradle-intellij-plugin:0.1.10" |
| } |
| } |
| |
| apply plugin: 'java' |
| apply plugin: 'idea' |
| apply plugin: 'antlr' |
| |
| |
| version = '0.05' |
| |
| if (!('release' in gradle.startParameter.taskNames)) { |
| def versionSuffix |
| try { |
| def git = org.eclipse.jgit.api.Git.open(file('..')) |
| def head = git.getRepository().getRef('HEAD') |
| versionSuffix = head.getObjectId().abbreviate(8).name() |
| |
| if (!git.status().call().clean) { |
| versionSuffix += '-dirty' |
| } |
| } catch (Exception ex) { |
| // In case we can't get the commit for some reason, |
| // just use -dev |
| versionSuffix = 'dev' |
| } |
| |
| def baseVersion = version |
| version = baseVersion + '-' + versionSuffix |
| } else { |
| if (System.env.JDK7_HOME == null && !JavaVersion.current().isJava7()) { |
| throw new InvalidUserDataException("bzzzzzzzt. Release builds must be performed with java 7. " + |
| "Either run gradle with java 7, or define the JDK7_HOME environment variable.") |
| } |
| } |
| |
| if (System.env.JDK7_HOME != null) { |
| sourceCompatibility = 1.7 |
| targetCompatibility = 1.7 |
| |
| tasks.withType(JavaCompile) { |
| doFirst { |
| options.fork = true |
| options.bootClasspath = "$System.env.JDK7_HOME/jre/lib/rt.jar" |
| options.bootClasspath += "$File.pathSeparator$System.env.JDK7_HOME/jre/lib/jsse.jar" |
| } |
| } |
| } |
| |
| def sandboxDir = "${buildDir}/sandbox" |
| |
| if (!('idea' in gradle.startParameter.taskNames)) { |
| |
| apply plugin: 'org.jetbrains.intellij' |
| |
| intellij { |
| version 'IC-2016.3.5' |
| pluginName 'smalidea' |
| |
| updateSinceUntilBuild false |
| |
| sandboxDirectory sandboxDir |
| } |
| |
| // This prints out the directories that can be used to configure a plugin sdk in IDEA, using |
| // the copy of IDEA downloaded by the org.jetbrains.intellij plugin |
| task ideaDirs() { |
| project.afterEvaluate { |
| if (intellij != null) { |
| println "IDEA Plugin jdk: ${intellij.ideaDependency.classes}" |
| println "sources: ${intellij.ideaDependency.getSources()}" |
| } |
| } |
| } |
| |
| dependencies { |
| compile files("${System.properties['java.home']}/../lib/tools.jar") |
| } |
| |
| } else { |
| project(':') { |
| idea { |
| project { |
| ipr { |
| withXml { |
| def node = it.asNode() |
| |
| /*node.find { it.@name == 'ProjectRootManager' } |
| .@'project-jdk-type' = 'IDEA JDK'*/ |
| |
| def componentNode = node.find { it.@name == 'ProjectRunConfigurationManager' } |
| if (componentNode == null) { |
| componentNode = it.node.appendNode 'component', [name: 'ProjectRunConfigurationManager'] |
| } |
| |
| if (componentNode.find { it.@name == 'All smalidea tests' } == null) { |
| componentNode.append(new XmlParser().parseText(""" |
| <configuration default="false" name="All smalidea tests" type="JUnit" factoryName="JUnit"> |
| <extension name="coverage" enabled="false" merge="false" runner="idea" /> |
| <module name="smalidea" /> |
| <option name="TEST_OBJECT" value="directory" /> |
| <option name="VM_PARAMETERS" value="-Didea.system.path=${sandboxDir}/config -Didea.system.path=${sandboxDir}/system-test -Didea.load.plugins.id=org.jf.smalidea" /> |
| <option name="WORKING_DIRECTORY" value="file://\$PROJECT_DIR\$/smalidea" /> |
| <option name="PASS_PARENT_ENVS" value="true" /> |
| <option name="TEST_SEARCH_SCOPE"> |
| <value defaultName="moduleWithDependencies" /> |
| </option> |
| <dir value="\$PROJECT_DIR\$/smalidea/src/test/java" /> |
| </configuration>""")) |
| } |
| } |
| } |
| } |
| } |
| } |
| |
| idea { |
| module { |
| jdkName = 'IDEA Plugin jdk' |
| |
| excludeDirs -= buildDir |
| if (buildDir.exists()) { |
| excludeDirs.addAll(buildDir.listFiles()) |
| } |
| |
| for (sourceDir in (sourceDirs + testSourceDirs)) { |
| excludeDirs.remove(sourceDir); |
| while ((sourceDir = sourceDir.getParentFile()) != null) { |
| excludeDirs.remove(sourceDir); |
| } |
| } |
| |
| iml { |
| withXml { |
| def node = it.node |
| |
| node.@type = 'PLUGIN_MODULE' |
| |
| def pluginUrl = 'file://$MODULE_DIR$/src/main/resources/META-INF/plugin.xml' |
| |
| def pluginNode = node.find { it.@name == 'DevKit.ModuleBuildProperties' } |
| if (pluginNode == null) { |
| node.appendNode 'component', [name: 'DevKit.ModuleBuildProperties', |
| url : pluginUrl] |
| } else { |
| pluginNode.@url = pluginUrl |
| } |
| } |
| } |
| } |
| } |
| } |
| |
| repositories { |
| mavenLocal() |
| mavenCentral() |
| } |
| |
| dependencies { |
| compile project(':smali') |
| compile depends.antlr_runtime |
| compile depends.gson |
| |
| antlr depends.antlr |
| } |
| |
| task extractTokens(type: org.gradle.api.tasks.Copy, dependsOn: ':smali:build') { |
| project.afterEvaluate { |
| def allArtifacts = configurations.default.resolvedConfiguration.resolvedArtifacts |
| def smaliArtifact = allArtifacts.find { it.moduleVersion.id.name.equals('smali') } |
| |
| from(zipTree(smaliArtifact.file)) { |
| include '**/*.tokens' |
| } |
| into "${buildDir}/tokens" |
| } |
| } |
| |
| generateGrammarSource { |
| def tokensDir = file("${buildDir}/tokens/org/jf/smali") |
| inputs.file new File(tokensDir, 'smaliParser.tokens') |
| setArguments(['-lib', tokensDir.path]) |
| outputDirectory(file("${buildDir}/generated-src/antlr/main/org/jf/smalidea")) |
| } |
| generateGrammarSource.dependsOn(extractTokens) |
| ideaModule.dependsOn(generateGrammarSource) |
| |
| task release(dependsOn: 'buildPlugin') { |
| } |
| |
| tasks.getByPath('idea').dependsOn(project(':').getTasksByName('idea', true).findAll({ |
| it.project.name != 'smalidea' |
| })) |