import edu.wpi.first.nativeutils.NativeUtils import edu.wpi.first.nativeutils.tasks.JNIHeaders buildscript { repositories { mavenLocal() maven { url "https://plugins.gradle.org/m2/" } } dependencies { classpath 'gradle.plugin.edu.wpi.first:native-utils:1.5.0' } } plugins { id 'net.ltgt.errorprone' version '0.0.10' id 'edu.wpi.first.wpilib.versioning.WPILibVersioningPlugin' version '2.0' id 'idea' } ext.licenseFile = file("$rootDir/LICENSE.txt") ext.getJNIHeadersClass = { return JNIHeaders } ext.getClassifier = { binary-> return NativeUtils.getClassifier(binary) } ext.getPlatformPath = { binary-> return NativeUtils.getPlatformPath(binary) } ext.createComponentZipTasks = { components, name, base, type, project, func -> def configMap = [:] components.each { if (it in NativeLibrarySpec && it.name == name) { it.binaries.each { def target = getClassifier(it) if (configMap.containsKey(target)) { configMap.get(target).add(it) } else { configMap.put(target, []) configMap.get(target).add(it) } } } } def taskList = [] def outputsFolder = file("$project.buildDir/outputs") def baseN = base + name configMap.each { key, value -> def task = project.tasks.create(baseN + "-${key}", type) { description = 'Creates component archive for platform ' + key destinationDir = outputsFolder classifier = key baseName = baseN + '-classifier' duplicatesStrategy = 'exclude' from(licenseFile) { into '/' } func(it, value) } taskList.add(task) project.build.dependsOn task project.artifacts { task } } return taskList } ext.createAllCombined = { list, name, base, type, project -> def outputsFolder = file("$project.buildDir/outputs") def baseN = base + name def task = project.tasks.create(baseN + '-all', type) { description = 'Creates component archive for all classifiers' destinationDir = outputsFolder classifier = 'all' baseName = baseN + '-classifier' duplicatesStrategy = 'exclude' list.each { it.outputs.files.each { from project.zipTree(it) } dependsOn it } } project.build.dependsOn task project.artifacts { task } return task } ext.includeStandardZipFormat = { task, value -> value.each { binary-> if (binary.buildable) { if (binary instanceof SharedLibraryBinarySpec) { task.dependsOn binary.buildTask task.from(new File(binary.sharedLibraryFile.absolutePath + ".debug")) { into getPlatformPath(binary) + '/shared' } task.from (binary.sharedLibraryFile) { into getPlatformPath(binary) + '/shared' } task.from (binary.sharedLibraryLinkFile) { into getPlatformPath(binary) + '/shared' } } else if (binary instanceof StaticLibraryBinarySpec) { task.dependsOn binary.buildTask task.from (binary.staticLibraryFile) { into getPlatformPath(binary) + '/static' } } } } } // Ensure that the WPILibVersioningPlugin is setup by setting the release type, if releaseType wasn't // already specified on the command line if (!hasProperty('releaseType')) { WPILibVersion { releaseType = 'dev' } } def pubVersion if (project.hasProperty("publishVersion")) { pubVersion = project.publishVersion } else { pubVersion = WPILibVersion.version } def outputsFolder = file("$buildDir/outputs") def versionFile = file("$outputsFolder/version.txt") task outputVersions() { description = 'Prints the versions of wpilib to a file for use by the downstream packaging project' group = 'Build' outputs.files(versionFile) doFirst { buildDir.mkdir() outputsFolder.mkdir() } doLast { versionFile.write pubVersion } } task build() {} build.dependsOn outputVersions task clean(type: Delete) { delete buildDir } subprojects { apply plugin: 'eclipse' apply plugin: 'idea' apply plugin: 'checkstyle' repositories { mavenCentral() } checkstyle { toolVersion = "8.1" configFile = new File(rootDir, "styleguide/checkstyle.xml") } // Disables doclint in java 8. if (JavaVersion.current().isJava8Compatible()) { tasks.withType(Javadoc) { options.addStringOption('Xdoclint:none', '-quiet') } } ext.setupWpilibRepo = { publishing -> publishing.repositories.maven { url = WPILibVersion.mavenLocalUrl } } } task wrapper(type: Wrapper) { gradleVersion = '4.1' }