import org.gradle.nativeplatform.toolchain.internal.msvcpp.VisualStudioLocator import org.gradle.internal.os.OperatingSystem import org.gradle.util.VersionNumber plugins { id 'cpp' id 'maven-publish' } if (OperatingSystem.current().isWindows()) { def outputsFolder = file("$buildDir/outputs") def baseArtifactId = 'runtime' def artifactGroupId = "edu.wpi.first.msvc" def zipBaseName = "_GROUP_edu_wpi_first_msvc_ID_runtime_CLS" def vsLocator = gradle.services.get(VisualStudioLocator) def vsLocation = vsLocator.locateAllComponents().first() def visualCppVersion = vsLocation.visualCpp.version def vsDirectory = vsLocation.visualStudioDir def runtimeLocation = file("$vsDirectory\\VC\\Redist\\MSVC") def runtimeVerNumber = null runtimeLocation.eachFile { def verNumber = VersionNumber.parse(it.name) if (verNumber.major == visualCppVersion.major && verNumber.minor == visualCppVersion.minor) { runtimeVerNumber = verNumber } } if (runtimeVerNumber != null) { runtimeLocation = file("$runtimeLocation\\$runtimeVerNumber") def x64Folder = null file("$runtimeLocation\\x64").eachFile { if (it.name.endsWith('.CRT')) { x64Folder = it } } def x64ZipTask = tasks.create('x64RuntimeZip', Zip) { destinationDirectory = outputsFolder archiveBaseName = zipBaseName classifier = 'x64' from x64Folder } addTaskToCopyAllOutputs(x64ZipTask) build.dependsOn x64ZipTask publishing { publications { runtime(MavenPublication) { artifact x64ZipTask artifactId = "${baseArtifactId}" groupId artifactGroupId version wpilibVersioning.version.get() } } } } }