apply plugin: 'java' apply plugin: 'groovy' apply plugin: 'cpp-lib' apply plugin: 'idea' apply plugin: 'application' repositories { mavenCentral() } dependencies { groovy 'org.codehaus.groovy:groovy:1.8.7' testCompile 'org.spockframework:spock-core:0.6-groovy-1.8' } mainClassName = 'net.rubygrapefruit.platform.Main' def nativeHeadersDir = file("$buildDir/nativeHeaders") sourceCompatibility = 1.5 targetCompatibility = 1.5 configurations.compile.extendsFrom = [] libraries { main { spec { includes([nativeHeadersDir]) if (org.gradle.internal.os.OperatingSystem.current().macOsX) { includes(['/System/Library/Frameworks/JavaVM.framework/Versions/Current/Headers/']) args("-lcurses") } else if (org.gradle.internal.os.OperatingSystem.current().windows) { includes(["${org.gradle.internal.jvm.Jvm.current().javaHome}/include"]) includes(["${org.gradle.internal.jvm.Jvm.current().javaHome}/include/win32"]) args("/DWIN32") } else if (org.gradle.internal.os.OperatingSystem.current().linux) { includes(["${org.gradle.internal.jvm.Jvm.current().javaHome}/include"]) includes(["${org.gradle.internal.jvm.Jvm.current().javaHome}/include/linux"]) args("-lcurses") } else { includes(["${org.gradle.internal.jvm.Jvm.current().javaHome}/include"]) includes(["${org.gradle.internal.jvm.Jvm.current().javaHome}/include/solaris"]) args("-DSOLARIS", "-lcurses") } } } } task nativeHeaders { def outputFile = file("$nativeHeadersDir/native.h") inputs.files sourceSets.main.output outputs.file outputFile doLast { outputFile.parentFile.mkdirs() exec { executable org.gradle.internal.jvm.Jvm.current().getExecutable('javah') args '-o', outputFile args '-classpath', sourceSets.main.output.classesDir args 'net.rubygrapefruit.platform.internal.jni.NativeLibraryFunctions' args 'net.rubygrapefruit.platform.internal.jni.PosixFileFunctions' args 'net.rubygrapefruit.platform.internal.jni.PosixProcessFunctions' args 'net.rubygrapefruit.platform.internal.jni.PosixTerminalFunctions' args 'net.rubygrapefruit.platform.internal.jni.TerminfoFunctions' args 'net.rubygrapefruit.platform.internal.jni.WindowsConsoleFunctions' } } } task nativeJar(type: Jar) { from compileMain archiveName = 'native-platform-jni.jar' } startScripts.classpath += nativeJar.outputs.files applicationDistribution.from(nativeJar) { into 'lib' } compileMain.dependsOn nativeHeaders test.dependsOn compileMain