From 2040d4ee182c7467cc65d58ca76b5bd595f157db Mon Sep 17 00:00:00 2001 From: "Dmitriy.Panov" Date: Mon, 16 Dec 2024 12:09:06 +0100 Subject: [PATCH] IJPL-172978 a current UUID of a binary as an argument (cherry picked from commit aab92c882b3a4e4e8e0c2040efc41eb17352fe35) IJ-CR-151551 GitOrigin-RevId: 5d7e319582ed313a27a355f4b93b19a81950819a --- .../intellij/build/MacDistributionCustomizer.kt | 2 +- .../intellij/build/impl/MacDistributionBuilder.kt | 3 +-- .../org/jetbrains/intellij/build/impl/macOS/MachOUuid.kt | 9 ++++++--- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/platform/build-scripts/src/org/jetbrains/intellij/build/MacDistributionCustomizer.kt b/platform/build-scripts/src/org/jetbrains/intellij/build/MacDistributionCustomizer.kt index 291475bd0f47..67536cc257ce 100644 --- a/platform/build-scripts/src/org/jetbrains/intellij/build/MacDistributionCustomizer.kt +++ b/platform/build-scripts/src/org/jetbrains/intellij/build/MacDistributionCustomizer.kt @@ -171,7 +171,7 @@ open class MacDistributionCustomizer { * @see org.jetbrains.intellij.build.NativeBinaryDownloader.getLauncher */ @ApiStatus.Internal - open fun getDistributionUUID(context: BuildContext): UUID { + open fun getDistributionUUID(context: BuildContext, currentUuid: UUID?): UUID { return UUID.nameUUIDFromBytes("${context.fullBuildNumber}-${context.options.buildDateInSeconds}".toByteArray()) } } diff --git a/platform/build-scripts/src/org/jetbrains/intellij/build/impl/MacDistributionBuilder.kt b/platform/build-scripts/src/org/jetbrains/intellij/build/impl/MacDistributionBuilder.kt index 6797045d44ab..3e14ef93691d 100644 --- a/platform/build-scripts/src/org/jetbrains/intellij/build/impl/MacDistributionBuilder.kt +++ b/platform/build-scripts/src/org/jetbrains/intellij/build/impl/MacDistributionBuilder.kt @@ -25,7 +25,6 @@ import java.nio.file.Files import java.nio.file.Path import java.nio.file.StandardCopyOption import java.time.LocalDate -import java.util.UUID import java.util.zip.Deflater import kotlin.io.path.* @@ -216,7 +215,7 @@ class MacDistributionBuilder( val (execPath, licensePath) = NativeBinaryDownloader.getLauncher(context, OsFamily.MACOS, arch) val copy = macDistDir.resolve("MacOS/$executable") copyFile(execPath, copy) - MachOUuid(copy, customizer.getDistributionUUID(context), context).patch() + MachOUuid(copy, customizer, context).patch() copyFile(licensePath, macDistDir.resolve("license/launcher-third-party-libraries.html")) val icnsPath = Path.of((if (context.applicationInfo.isEAP) customizer.icnsPathForEAP else null) ?: customizer.icnsPath) diff --git a/platform/build-scripts/src/org/jetbrains/intellij/build/impl/macOS/MachOUuid.kt b/platform/build-scripts/src/org/jetbrains/intellij/build/impl/macOS/MachOUuid.kt index 09af79233204..a6a0c3e65064 100644 --- a/platform/build-scripts/src/org/jetbrains/intellij/build/impl/macOS/MachOUuid.kt +++ b/platform/build-scripts/src/org/jetbrains/intellij/build/impl/macOS/MachOUuid.kt @@ -4,6 +4,7 @@ package org.jetbrains.intellij.build.impl.macOS import com.intellij.openapi.util.SystemInfoRt import kotlinx.coroutines.runBlocking import org.jetbrains.intellij.build.BuildContext +import org.jetbrains.intellij.build.MacDistributionCustomizer import org.jetbrains.intellij.build.io.runProcess import java.nio.ByteBuffer import java.nio.ByteOrder @@ -13,10 +14,10 @@ import java.nio.file.StandardOpenOption import java.util.* /** - * Patches UUID value in the Mach-O [executable] with the [newUuid]. + * Patches UUID value in the Mach-O [executable] with the [MacDistributionCustomizer.getDistributionUUID]. * Only single-arch 64-bit files are supported. */ -internal class MachOUuid(private val executable: Path, private val newUuid: UUID, private val context: BuildContext) { +internal class MachOUuid(private val executable: Path, private val customizer: MacDistributionCustomizer, private val context: BuildContext) { private companion object { const val LC_UUID = 0x1b } @@ -47,8 +48,10 @@ internal class MachOUuid(private val executable: Path, private val newUuid: UUID buffer.flip() val msb = buffer.getLong() val lsb = buffer.getLong() - context.messages.info("current UUID of $executable: ${UUID(msb, lsb)}") + val currentUuid = UUID(msb, lsb) + context.messages.info("current UUID of $executable: $currentUuid") buffer.clear() + val newUuid = customizer.getDistributionUUID(context, currentUuid) buffer.putLong(newUuid.mostSignificantBits) buffer.putLong(newUuid.leastSignificantBits) buffer.flip()