From 5da1db5aed67ed19e0af443f8039eedcbdb00420 Mon Sep 17 00:00:00 2001 From: nik Date: Thu, 4 Oct 2018 16:56:34 +0300 Subject: [PATCH] build scripts: use special icon for EAP builds in .exe launcher The icon from exe file is used as window icon on Windows so this is also needed to show special icons for EAP builds at runtime (IDEA-192585). --- .../impl/WindowsDistributionBuilder.groovy | 29 ++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/WindowsDistributionBuilder.groovy b/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/WindowsDistributionBuilder.groovy index d0804455ac47..c8bc37bb5376 100644 --- a/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/WindowsDistributionBuilder.groovy +++ b/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/WindowsDistributionBuilder.groovy @@ -16,6 +16,8 @@ package org.jetbrains.intellij.build.impl import com.intellij.openapi.util.io.FileFilters +import com.intellij.openapi.util.io.FileUtil +import groovy.xml.XmlUtil import org.jetbrains.intellij.build.* import org.jetbrains.intellij.build.impl.productInfo.ProductInfoGenerator import org.jetbrains.intellij.build.impl.productInfo.ProductInfoValidator @@ -187,6 +189,8 @@ class WindowsDistributionBuilder extends OsSpecificDistributionBuilder { String jdkEnvVarSuffix = arch == JvmArchitecture.x64 && customizer.include32BitLauncher ? "_64" : "" String vmOptionsEnvVarSuffix = arch == JvmArchitecture.x64 && customizer.include32BitLauncher ? "64" : "" def envVarBaseName = buildContext.productProperties.getEnvironmentVariableBaseName(buildContext.applicationInfo) + File icoFilesDirectory = new File(buildContext.paths.temp, "win-launcher-ico") + File appInfoForLauncher = generateApplicationInfoForLauncher(patchedApplicationInfo, icoFilesDirectory) new File(launcherPropertiesPath).text = """ IDS_JDK_ONLY=$buildContext.productProperties.toolsJarRequired IDS_JDK_ENV_VAR=${envVarBaseName}_JDK$jdkEnvVarSuffix @@ -208,7 +212,7 @@ IDS_VM_OPTIONS=$vmOptions buildContext.ant.java(classname: "com.pme.launcher.LauncherGeneratorMain", fork: "true", failonerror: "true") { sysproperty(key: "java.awt.headless", value: "true") arg(value: inputPath) - arg(value: patchedApplicationInfo.absolutePath) + arg(value: appInfoForLauncher.absolutePath) arg(value: "$communityHome/native/WinLauncher/WinLauncher/resource.h") arg(value: launcherPropertiesPath) arg(value: outputPath) @@ -225,11 +229,34 @@ IDS_VM_OPTIONS=$vmOptions buildContext.productProperties.brandingResourcePaths.each { pathelement(location: it) } + pathelement(location: icoFilesDirectory.absolutePath) } } } } + /** + * Generates ApplicationInfo.xml file for launcher generator which contains link to proper *.ico file. + * //todo[nik] pass path to ico file to LauncherGeneratorMain directly (probably after IDEA-196705 is fixed). + */ + File generateApplicationInfoForLauncher(File applicationInfoFile, File icoFilesDirectory) { + FileUtil.createDirectory(icoFilesDirectory) + if (icoPath == null) { + return applicationInfoFile + } + + def icoFile = new File(icoPath) + buildContext.ant.copy(file: icoPath, todir: icoFilesDirectory.absolutePath) + def root = new XmlParser().parse(applicationInfoFile) + def iconNode = root.icon.first() + iconNode.@ico = icoFile.name + def patchedFile = new File(buildContext.paths.temp, "win-launcher-application-info.xml") + patchedFile.withWriter { + XmlUtil.serialize(root, it) + } + return patchedFile + } + private void buildWinZip(List jreDirectoryPaths, String zipNameSuffix, String winDistPath) { zipNameSuffix += buildContext.bundledJreManager.jreSuffix() buildContext.messages.block("Build Windows ${zipNameSuffix}.zip distribution") {