235 lines
8.2 KiB
Groovy
235 lines
8.2 KiB
Groovy
/*
|
|
* 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'
|
|
})) |