if (!hasProperty('mainClass')) {
    ext.mainClass = ''
}

String classBuildDir = "${buildDir}" + File.separator + 'classes'

sourceSets {
    main {
        java {
            srcDir 'src/main/java'
            srcDir 'src/common/java'
        }
    }
}

dependencies {
    compile project(':jme3-core')
    compile project(':jme3-terrain')
}

task generateNativeHeaders(type: Exec, dependsOn: classes) {
    def files0 = fileTree("src/main/java/").filter { it.isFile() && it.getName().endsWith(".java") }.files
    def files1 = fileTree("src/common/java/").filter { it.isFile() && it.getName().endsWith(".java") }.files
    def files2 = fileTree("../jme3-core/src/main/java/").filter { it.isFile() && it.getName().endsWith(".java") }.files
    def files3 = fileTree("../jme3-core/src/plugins/java/").filter { it.isFile() && it.getName().endsWith(".java") }.files
    def files4 = fileTree("../jme3-core/src/tools/java/").filter { it.isFile() && it.getName().endsWith(".java") }.files
    def files5 = fileTree("../jme3-terrain/src/main/java/").filter { it.isFile() && it.getName().endsWith(".java") }.files
    def classpath = sourceSets.main.runtimeClasspath.asPath
    def nativeIncludes = new File(project(":jme3-bullet-native").projectDir, "src/native/cpp")
	def filesList = "\"" + files0.join("\"\n\"") + "\"\n\"" + files1.join("\"\n\"") + "\"\n\"" + files2.join("\"\n\"") + "\"\n\"" + files3.join("\"\n\"") + "\"\n\"" + files4.join("\"\n\"") + "\"\n\"" + files5.join("\"\n\"") + "\""
	new File("$projectDir/java_classes.jtxt").text = filesList.replaceAll(java.util.regex.Pattern.quote("\\"), java.util.regex.Matcher.quoteReplacement("/"))
    executable org.gradle.internal.jvm.Jvm.current().getExecutable('javac')
    args "-h", nativeIncludes
    args "@$projectDir/java_classes.jtxt"
    args '-d', classBuildDir
    args "-encoding", "UTF-8"
}

assemble.dependsOn(generateNativeHeaders)