apply plugin: 'maven-publish' def baseArtifactId = 'SysId' def artifactGroupId = 'org.wpilib.tools' def zipBaseName = makeZipBaseName(artifactGroupId, baseArtifactId) def outputsFolder = file("$project.buildDir/outputs") model { tasks { // Create the run task. $.components.sysid.binaries.each { bin -> if (bin.buildable && bin.name.toLowerCase().contains("debug") && nativeUtils.isNativeDesktopPlatform(bin.targetPlatform)) { Task run = project.tasks.create("run", Exec) { commandLine bin.tasks.install.runScriptFile.get().asFile.toString() } run.dependsOn bin.tasks.install } } } publishing { def sysIdTaskList = [] $.components.each { component -> component.binaries.each { binary -> if (binary in NativeExecutableBinarySpec && binary.component.name.contains("sysid")) { if (binary.buildable && (binary.name.contains('Release') || binary.name.contains('release'))) { // We are now in the binary that we want. // This is the default application path for the ZIP task. def applicationPath = binary.executable.file def icon = file("$project.projectDir/src/main/native/mac/sysid.icns") // Create the macOS bundle. def bundleTask = project.tasks.create("bundleSysIdOsxApp" + binary.targetPlatform.architecture.name, Copy) { description = "Creates a macOS application bundle for SysId" from(file("$project.projectDir/Info.plist")) into(file("$project.buildDir/outputs/bundles/$binary.targetPlatform.architecture.name/SysId.app/Contents")) into("MacOS") { with copySpec { from binary.executable.file } } into("Resources") { with copySpec { from icon } } inputs.property "HasDeveloperId", project.hasProperty("developerID") doLast { if (project.hasProperty("developerID")) { // Get path to binary. providers.exec { setWorkingDir(rootDir) def args = [ "sh", "-c", "codesign --force --strict --deep " + "--timestamp --options=runtime " + "--verbose -s ${project.findProperty("developerID")} " + "$project.buildDir/outputs/bundles/$binary.targetPlatform.architecture.name/SysId.app/" ] commandLine(args) }.result.get() } } } // Reset the application path if we are creating a bundle. if (binary.targetPlatform.operatingSystem.isMacOsX()) { applicationPath = file("$project.buildDir/outputs/bundles/$binary.targetPlatform.architecture.name") project.build.dependsOn bundleTask } // Create the ZIP. def task = project.tasks.create("copySysIdExecutable" + binary.targetPlatform.architecture.name, Zip) { description = "Copies the SysId executable to the outputs directory." destinationDirectory = outputsFolder archiveBaseName = zipBaseName duplicatesStrategy = 'exclude' archiveClassifier = nativeUtils.getPublishClassifier(binary) from(licenseFile) { into '/' } from(applicationPath) if (binary.targetPlatform.operatingSystem.isWindows()) { def exePath = binary.executable.file.absolutePath exePath = exePath.substring(0, exePath.length() - 4) def pdbPath = new File(exePath + '.pdb') from(pdbPath) } into(nativeUtils.getPlatformPath(binary)) } if (binary.targetPlatform.operatingSystem.isMacOsX()) { bundleTask.dependsOn binary.tasks.link task.dependsOn(bundleTask) } task.dependsOn binary.tasks.link sysIdTaskList.add(task) project.build.dependsOn task project.artifacts { task } addTaskToCopyAllOutputs(task) } } } } publications { sysId(MavenPublication) { sysIdTaskList.each { artifact it } artifactId = baseArtifactId groupId = artifactGroupId version = wpilibVersioning.version.get() } } } }