apply plugin: 'groovy'
apply plugin: 'idea'
apply plugin: 'maven'

repositories {
    maven { url = "$rootDir/../../prebuilts/tools/common/m2/repository" }
    maven { url = "$rootDir/../../prebuilts/tools/common/m2/internal" }
}

buildDir = "../../out/build/buildSrc/build"

dependencies {
    compile gradleApi()
    compile localGroovy()

    compile "com.googlecode.jarjar:jarjar:1.3"
    compile "commons-io:commons-io:1.3.2"
    compile "com.google.guava:guava:15.0"
    compile ('com.google.protobuf:protobuf-gradle-plugin:0.8.0') {
        exclude group: 'org.apache.maven', module: 'maven-plugin-api'
    }
    compile 'commons-lang:commons-lang:2.6@jar'
    compile "org.pegdown:pegdown:1.1.0"
    compile "org.jsoup:jsoup:1.6.3"

    testCompile "junit:junit:4.12"
}

// See README.
sourceSets {
    main {
        groovy {
            srcDir 'src/fromGradle/groovy'
        }

        resources {
            srcDir 'src/fromGradle/resources'
        }
    }
}

// Make sure that we are compiling with a valid JDK. This can be overridden by setting the
// 'JAVA_FOR_TESTS' environment variable (to, e.g., '1.6')
task('checkJavaVersion').doLast {

    def requiredJdkVersion = JavaVersion.VERSION_1_8
    def javaForTests = System.getenv('JAVA_FOR_TESTS')
    if (javaForTests != null) {
        requiredJdkVersion = JavaVersion.toVersion(javaForTests)
    }

    def jvmVersion = JavaVersion.current()
    if (jvmVersion != requiredJdkVersion) {
        throw new RuntimeException("Tools need to be compiled with Java $requiredJdkVersion, you are using Java $jvmVersion.")
    }
}

assemble.dependsOn checkJavaVersion
