Files
jlibloader/build.gradle
2013-12-06 18:42:13 +11:00

220 lines
6.7 KiB
Groovy
Executable File

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)
}
}