buildscript {
    repositories {
        mavenCentral()
        maven { url = "https://oss.sonatype.org/content/repositories/snapshots/" }
        jcenter()
    }

    configurations.all {
        resolutionStrategy {
            force 'commons-io:commons-io:2.4'
        }
    }

    dependencies {
        classpath 'com.github.jengelman.gradle.plugins:shadow:2.0.4'
        classpath 'org.jfrog.buildinfo:build-info-extractor-gradle:4.8.1'
    }
}

plugins {
    id 'net.minecrell.licenser' version '0.4.1' apply false
    id "org.ajoberstar.grgit" version "2.3.0"
}

println """
*******************************************
 You are building WorldEdit!

 If you encounter trouble:
 1) Read COMPILING.md if you haven't yet
 2) Try running 'build' in a separate Gradle run
 3) Use gradlew and not gradle
 4) If you still need help, ask on IRC! irc.esper.net #sk89q

 Output files will be in [subproject]/build/libs
*******************************************
"""

allprojects {
    group = 'com.sk89q.worldedit'
    version = '7.0.0-SNAPSHOT'
}

if (!project.hasProperty("artifactory_contextUrl")) ext.artifactory_contextUrl = "http://localhost"
if (!project.hasProperty("artifactory_user")) ext.artifactory_user = "guest"
if (!project.hasProperty("artifactory_password")) ext.artifactory_password = ""

if (!project.hasProperty("gitCommitHash") && !JavaVersion.current().isJava6()) {
    try {
        def repo = grgit.open()
        ext.gitCommitHash = repo.head().abbreviatedId
    } catch (Exception e) {
        println "Error getting commit hash: " + e.getMessage()
    }
}
if (!project.hasProperty("gitCommitHash")) {
    ext.gitCommitHash = "no_git_id"
}

apply plugin: 'com.jfrog.artifactory'
artifactory {
    contextUrl = "${artifactory_contextUrl}"
    publish {
        repository {
            repoKey = project.version.contains("SNAPSHOT") ? 'libs-snapshot-local' : 'libs-release-local'
            username = "${artifactory_user}"
            password = "${artifactory_password}"
            maven = true
            ivy = false
        }
    }
}
artifactoryPublish.skip = true

subprojects {
    repositories {
        mavenCentral()
        maven { url "http://maven.sk89q.com/repo/" }
        maven { url "https://oss.sonatype.org/content/repositories/snapshots/" }
    }
    configurations.all {
        resolutionStrategy {
            cacheChangingModulesFor 5, 'minutes'
        }
    }
}

configure(['core', 'bukkit', 'forge', 'sponge'].collect { project(":worldedit-$it") }) {
    apply plugin: 'java'
    apply plugin: 'maven'
    apply plugin: 'checkstyle'
    apply plugin: 'com.github.johnrengelman.shadow'
    apply plugin: 'com.jfrog.artifactory'
    apply plugin: 'net.minecrell.licenser'

    ext.internalVersion = version + ";" + gitCommitHash

    sourceCompatibility = JavaVersion.VERSION_1_8
    targetCompatibility = JavaVersion.VERSION_1_8

    checkstyle.configFile = new File(rootProject.projectDir, "config/checkstyle/checkstyle.xml")
    checkstyle.toolVersion = '7.6.1'

    if (JavaVersion.current().isJava8Compatible()) {
        // Java 8 turns on doclint which we fail
        tasks.withType(Javadoc) {
            options.addStringOption('Xdoclint:none', '-quiet')
        }
    }

    task javadocJar(type: Jar, dependsOn: javadoc) {
        classifier = 'javadoc'
        from javadoc.destinationDir
    }

    artifacts {
        archives jar
        archives javadocJar
    }

    if (!(name.equals('worldedit-forge') || name.equals('worldedit-sponge'))) {
        task sourcesJar(type: Jar, dependsOn: classes) {
            classifier = 'sources'
            from sourceSets.main.allSource
        }

        artifacts {
            archives sourcesJar
        }
        build.dependsOn(sourcesJar)
    }

    build.dependsOn(checkstyleMain)
    build.dependsOn(checkstyleTest)
    build.dependsOn(javadocJar)

    artifactoryPublish {
        publishConfigs('archives')
    }

    license {
        header = rootProject.file("HEADER.txt")
        include '**/*.java'
    }
}

configure(['bukkit', 'forge', 'sponge'].collect { project(":worldedit-$it") }) {
    shadowJar {
        classifier 'dist'
        dependencies {
            include(project(":worldedit-libs:core"))
            include(project(":worldedit-libs:${project.name.replace("worldedit-", "")}"))
            include(project(":worldedit-core"))
        }
        exclude 'GradleStart**'
        exclude '.cache'
        exclude 'LICENSE*'
    }
}
