apply plugin: 'groovy' apply plugin: 'cpp' allprojects { apply plugin: 'java' apply plugin: 'idea' apply plugin: 'maven' repositories { mavenCentral() maven { url "http://repo.gradle.org/gradle/libs-releases-local" } } dependencies { testCompile 'org.spockframework:spock-core:0.6-groovy-1.8' } group = 'net.rubygrapefruit' version = '0.3-rc-3' sourceCompatibility = 1.5 targetCompatibility = 1.5 tasks.withType(Upload) { repositories { mavenDeployer { if (project.hasProperty('release')) { repository(url: uri("https://gradle.artifactoryonline.com/gradle/libs-releases-local")) { authentication(userName: artifactoryUserName, password: artifactoryPassword) } } else { repository(url: uri("$rootProject.buildDir/repo")) } } } } } dependencies { testCompile 'org.codehaus.groovy:groovy:1.8.7' } def nativeHeadersDir = file("$buildDir/nativeHeaders") 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.PosixFileSystemFunctions' 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' args 'net.rubygrapefruit.platform.internal.jni.WindowsHandleFunctions' } } } model { platforms { create("osx_i386") { architecture "i386" operatingSystem "osx" } create("osx_amd64") { architecture "amd64" operatingSystem "osx" } create("linux_i386") { architecture "i386" operatingSystem "linux" } create("linux_amd64") { architecture "amd64" operatingSystem "linux" } create("windows_i386") { architecture "i386" operatingSystem "windows" } create("windows_amd64") { architecture "amd64" operatingSystem "windows" } } } libraries { nativePlatform { baseName 'native-platform' } nativePlatformCurses { baseName 'native-platform-curses' targetPlatforms "osx_i386", "osx_amd64", "linux_i386", "linux_amd64" binaries.all { linker.args "-lcurses" } } all { binaries.all { if (targetPlatform.operatingSystem.name == "osx") { cppCompiler.args '-I', "${org.gradle.internal.jvm.Jvm.current().javaHome}/include" cppCompiler.args '-I', "${org.gradle.internal.jvm.Jvm.current().javaHome}/include/darwin" } else if (targetPlatform.operatingSystem.name == "linux") { cppCompiler.args '-I', "${org.gradle.internal.jvm.Jvm.current().javaHome}/include" cppCompiler.args '-I', "${org.gradle.internal.jvm.Jvm.current().javaHome}/include/linux" } else if (targetPlatform.operatingSystem.name == "windows") { cppCompiler.args '-I', "${org.gradle.internal.jvm.Jvm.current().javaHome}/include" cppCompiler.args '-I', "${org.gradle.internal.jvm.Jvm.current().javaHome}/include/win32" cppCompiler.define("WIN32") } cppCompiler.args '-I', nativeHeadersDir.absolutePath tasks.withType(CppCompile) { task -> task.dependsOn nativeHeaders } } } } sources { nativePlatform { cpp { source.srcDirs = ['src/main/cpp'] exportedHeaders.srcDirs = ['src/main/headers'] source.exclude 'curses.cpp' } } nativePlatformCurses { cpp { source.srcDirs = ['src/main/cpp'] exportedHeaders.srcDirs = ['src/main/headers'] source.include 'curses.cpp' source.include 'generic.cpp' source.include 'generic_posix.cpp' } } } configurations { jni } def deployer = uploadJni.repositories.mavenDeployer binaries.withType(SharedLibraryBinary) { binary -> if (!buildable) { return } def variantName = "${targetPlatform.operatingSystem.name}-${targetPlatform.architecture.name}" def taskName = "jar-${variantName}" def nativeJar = project.tasks.findByName(taskName) if (nativeJar == null) { nativeJar = project.task(taskName, type: Jar) { baseName = "native-platform-$variantName" } artifacts { jni nativeJar runtime nativeJar } def jniPom = deployer.addFilter(variantName) { artifact, file -> return file == nativeJar.archivePath } jniPom.groupId = project.group jniPom.artifactId = nativeJar.baseName jniPom.version = project.version jniPom.scopeMappings.mappings.clear() } def builderTask = binary.tasks.builder nativeJar.into("net/rubygrapefruit/platform/$variantName") { from builderTask.outputFile } nativeJar.dependsOn builderTask } javadoc { exclude '**/internal/**' } task sourceZip(type: Zip) { from sourceSets.main.allSource classifier = 'sources' extension = 'jar' } task javadocZip(type: Zip) { from javadoc classifier = 'javadoc' extension = 'jar' } artifacts { archives sourceZip archives javadocZip } def mainPom = uploadArchives.repositories.mavenDeployer.pom mainPom.groupId = project.group mainPom.artifactId = jar.baseName mainPom.version = project.version mainPom.scopeMappings.mappings.clear() mainPom.withXml { provider -> def node = provider.asNode() def deps = node.appendNode('dependencies') ['osx-i386', 'osx-amd64', 'linux-amd64', 'linux-i386', 'windows-amd64', 'windows-i386'].each { platform -> def dep = deps.appendNode('dependency') dep.appendNode('groupId', project.group) dep.appendNode('artifactId', "native-platform-${platform}") dep.appendNode('version', project.version) } }