import java.security.MessageDigest apply plugin: 'maven-publish' def outputsFolder = file("$buildDir/outputs") def baseArtifactId = nativeName def artifactGroupId = "edu.wpi.first.${nativeName}" def zipBaseName = "_GROUP_edu_wpi_first_${nativeName}_ID_${nativeName}-cpp_CLS" def jniBaseName = "_GROUP_edu_wpi_first_${nativeName}_ID_${nativeName}-jni_CLS" def jniCvStaticBaseName = "_GROUP_edu_wpi_first_${nativeName}_ID_${nativeName}-jnicvstatic_CLS" def licenseFile = file("$rootDir/license.md") task cppSourcesZip(type: Zip) { destinationDirectory = outputsFolder archiveBaseName = zipBaseName classifier = "sources" duplicatesStrategy = 'exclude' from(licenseFile) { into '/' } from('src/main/native/cpp') { into '/' } model { components { it.all { if (it in getJniSpecClass()) { it.jniHeaderLocations.each { dependsOn it.key from(it.value) { into '/jni' } } } } } } } task cppHeadersZip(type: Zip) { destinationDirectory = outputsFolder archiveBaseName = zipBaseName classifier = "headers" from(licenseFile) { into '/' } ext.includeDirs = [ project.file('src/main/native/include') ] ext.includeDirs.each { from(it) { into '/' } } } artifacts { archives cppHeadersZip archives cppSourcesZip } addTaskToCopyAllOutputs(cppSourcesZip) addTaskToCopyAllOutputs(cppHeadersZip) model { publishing { def taskList = createComponentZipTasks($.components, [ nativeName, "${nativeName}JNIShared" ], zipBaseName, Zip, project, includeStandardZipFormat) def jniTaskList = createComponentZipTasks($.components, ["${nativeName}JNI"], jniBaseName, Jar, project, { task, value -> value.each { binary -> if (binary.buildable) { if (binary instanceof SharedLibraryBinarySpec) { task.dependsOn binary.tasks.link def hashFile = new File(binary.sharedLibraryFile.parentFile.absolutePath, "${binary.component.baseName}.hash") task.outputs.file(hashFile) task.inputs.file(binary.sharedLibraryFile) task.from(hashFile) { into nativeUtils.getPlatformPath(binary) } task.doFirst { hashFile.text = MessageDigest.getInstance("MD5").digest(binary.sharedLibraryFile.bytes).encodeHex().toString() } task.from(binary.sharedLibraryFile) { into nativeUtils.getPlatformPath(binary) } } } } }) publications { cpp(MavenPublication) { taskList.each { artifact it } artifact cppHeadersZip artifact cppSourcesZip artifactId = "${baseArtifactId}-cpp" groupId artifactGroupId version wpilibVersioning.version.get() } jni(MavenPublication) { jniTaskList.each { artifact it } artifactId = "${baseArtifactId}-jni" groupId artifactGroupId version wpilibVersioning.version.get() } } if (project.hasProperty('cvStaticBuild') && project.getProperty('cvStaticBuild') == true) { def jniCvTaskList = createComponentZipTasks($.components, ["${nativeName}JNICvStatic"], jniCvStaticBaseName, Zip, project, { task, value -> value.each { binary -> if (binary.buildable) { if (binary instanceof SharedLibraryBinarySpec) { task.dependsOn binary.tasks.link task.inputs.file(binary.sharedLibraryFile) task.from(binary.sharedLibraryFile) { into nativeUtils.getPlatformPath(binary) + '/shared' } def sharedPath = binary.sharedLibraryFile.absolutePath sharedPath = sharedPath.substring(0, sharedPath.length() - 4) task.from(new File(sharedPath + '.pdb')) { into nativeUtils.getPlatformPath(binary) + '/shared' } } } } }) publications { jniCvStatic(MavenPublication) { jniCvTaskList.each { artifact it } artifactId = "${baseArtifactId}-jnicvstatic" groupId artifactGroupId version wpilibVersioning.version.get() } } } } }