mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
don't expose MacDistributionCustomizer — it is internal implementation detail
GitOrigin-RevId: f2b11863537e5be74c719979e168ed0cb39f76fc
This commit is contained in:
committed by
intellij-monorepo-bot
parent
6509545109
commit
c241b222fd
@@ -7,15 +7,22 @@ import kotlinx.collections.immutable.PersistentList
|
||||
import org.jetbrains.jps.model.module.JpsModule
|
||||
import java.nio.file.Path
|
||||
|
||||
interface BuildContext: CompilationContext {
|
||||
interface BuildContext : CompilationContext {
|
||||
val productProperties: ProductProperties
|
||||
val windowsDistributionCustomizer: WindowsDistributionCustomizer?
|
||||
val linuxDistributionCustomizer: LinuxDistributionCustomizer?
|
||||
val macDistributionCustomizer: MacDistributionCustomizer?
|
||||
val proprietaryBuildTools: ProprietaryBuildTools
|
||||
|
||||
val applicationInfo: ApplicationInfoProperties
|
||||
|
||||
/**
|
||||
* Relative paths to files in distribution which should take 'executable' permissions.
|
||||
* No need to add *.sh.
|
||||
*/
|
||||
fun addExtraExecutablePattern(os: OsFamily, pattern: String)
|
||||
|
||||
fun getExtraExecutablePattern(os: OsFamily): List<String>
|
||||
|
||||
/**
|
||||
* Build number without product code (e.g. '162.500.10')
|
||||
*/
|
||||
|
||||
+3
-20
@@ -5,10 +5,11 @@ import kotlinx.collections.immutable.PersistentList
|
||||
import kotlinx.collections.immutable.persistentListOf
|
||||
import org.jetbrains.intellij.build.impl.support.RepairUtilityBuilder
|
||||
import java.nio.file.Path
|
||||
import java.util.concurrent.atomic.AtomicReference
|
||||
import java.util.function.Predicate
|
||||
|
||||
abstract class MacDistributionCustomizer {
|
||||
abstract class MacDistributionCustomizer(
|
||||
val extraExecutables: List<String> = emptyList(),
|
||||
) {
|
||||
/**
|
||||
* Path to icns file containing product icon bundle for macOS distribution
|
||||
* For full description of icns files see <a href="https://en.wikipedia.org/wiki/Apple_Icon_Image_format">Apple Icon Image Format</a>
|
||||
@@ -79,24 +80,6 @@ abstract class MacDistributionCustomizer {
|
||||
*/
|
||||
var associateIpr = false
|
||||
|
||||
|
||||
/**
|
||||
* Relative paths to files in macOS distribution which should take 'executable' permissions
|
||||
*/
|
||||
private var extraExecutablesRef = AtomicReference<PersistentList<String>>(persistentListOf())
|
||||
|
||||
// use setter only if you configure build context first time
|
||||
var extraExecutables: PersistentList<String>
|
||||
get() = extraExecutablesRef.get()
|
||||
set(value) {
|
||||
extraExecutablesRef.set(value)
|
||||
}
|
||||
|
||||
// thread-safe
|
||||
fun addExtraExecutable(path: String) {
|
||||
extraExecutablesRef.updateAndGet { it.add(path) }
|
||||
}
|
||||
|
||||
/**
|
||||
* Filter for files that is going to be put to `<distribution>/bin` directory.
|
||||
*/
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
@file:Suppress("ReplaceJavaStaticMethodWithKotlinAnalog")
|
||||
@file:Suppress("ReplaceJavaStaticMethodWithKotlinAnalog", "ReplaceGetOrSet")
|
||||
|
||||
package org.jetbrains.intellij.build.impl
|
||||
|
||||
@@ -8,8 +8,7 @@ import com.intellij.openapi.util.text.Strings
|
||||
import io.opentelemetry.api.common.AttributeKey
|
||||
import io.opentelemetry.api.common.Attributes
|
||||
import io.opentelemetry.api.trace.Span
|
||||
import kotlinx.collections.immutable.persistentListOf
|
||||
import kotlinx.collections.immutable.toImmutableList
|
||||
import kotlinx.collections.immutable.*
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.runBlocking
|
||||
import org.jetbrains.intellij.build.*
|
||||
@@ -27,15 +26,19 @@ import java.nio.file.Files
|
||||
import java.nio.file.Path
|
||||
import java.util.*
|
||||
import java.util.concurrent.ConcurrentLinkedQueue
|
||||
import java.util.concurrent.atomic.AtomicReference
|
||||
|
||||
class BuildContextImpl private constructor(private val compilationContext: CompilationContextImpl,
|
||||
override val productProperties: ProductProperties,
|
||||
override val windowsDistributionCustomizer: WindowsDistributionCustomizer?,
|
||||
override val linuxDistributionCustomizer: LinuxDistributionCustomizer?,
|
||||
override val macDistributionCustomizer: MacDistributionCustomizer?,
|
||||
override val proprietaryBuildTools: ProprietaryBuildTools = ProprietaryBuildTools.DUMMY,
|
||||
private val distFiles: ConcurrentLinkedQueue<Map.Entry<Path, String>>) : BuildContext {
|
||||
class BuildContextImpl private constructor(
|
||||
private val compilationContext: CompilationContextImpl,
|
||||
override val productProperties: ProductProperties,
|
||||
override val windowsDistributionCustomizer: WindowsDistributionCustomizer?,
|
||||
override val linuxDistributionCustomizer: LinuxDistributionCustomizer?,
|
||||
internal val macDistributionCustomizer: MacDistributionCustomizer?,
|
||||
override val proprietaryBuildTools: ProprietaryBuildTools = ProprietaryBuildTools.DUMMY
|
||||
) : BuildContext {
|
||||
private val distFiles = ConcurrentLinkedQueue<Map.Entry<Path, String>>()
|
||||
|
||||
private val extraExecutablePatterns = AtomicReference<PersistentMap<OsFamily, PersistentList<String>>>(persistentHashMapOf())
|
||||
|
||||
override val fullBuildNumber: String
|
||||
get() = "${applicationInfo.productCode}-$buildNumber"
|
||||
@@ -117,8 +120,7 @@ class BuildContextImpl private constructor(private val compilationContext: Compi
|
||||
windowsDistributionCustomizer = windowsDistributionCustomizer,
|
||||
linuxDistributionCustomizer = linuxDistributionCustomizer,
|
||||
macDistributionCustomizer = macDistributionCustomizer,
|
||||
proprietaryBuildTools = proprietaryBuildTools,
|
||||
distFiles = ConcurrentLinkedQueue())
|
||||
proprietaryBuildTools = proprietaryBuildTools)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -150,6 +152,7 @@ class BuildContextImpl private constructor(private val compilationContext: Compi
|
||||
|
||||
override val options: BuildOptions
|
||||
get() = compilationContext.options
|
||||
|
||||
@Suppress("SSBasedInspection")
|
||||
override val messages: BuildMessages
|
||||
get() = compilationContext.messages
|
||||
@@ -260,7 +263,6 @@ class BuildContextImpl private constructor(private val compilationContext: Compi
|
||||
linuxDistributionCustomizer = productProperties.createLinuxCustomizer(projectHomeForCustomizersAsString),
|
||||
macDistributionCustomizer = productProperties.createMacCustomizer(projectHomeForCustomizersAsString),
|
||||
proprietaryBuildTools = proprietaryBuildTools,
|
||||
distFiles = ConcurrentLinkedQueue()
|
||||
)
|
||||
@Suppress("DEPRECATION") val productCode = productProperties.productCode
|
||||
copy.paths.artifactDir = paths.artifactDir.resolve(productCode!!)
|
||||
@@ -298,6 +300,14 @@ class BuildContextImpl private constructor(private val compilationContext: Compi
|
||||
jvmArgs.addAll(getCommandLineArgumentsForOpenPackages(this, os))
|
||||
return jvmArgs
|
||||
}
|
||||
|
||||
override fun addExtraExecutablePattern(os: OsFamily, pattern: String) {
|
||||
extraExecutablePatterns.updateAndGet { prev ->
|
||||
prev.put(os, (prev.get(os) ?: persistentListOf()).add(pattern))
|
||||
}
|
||||
}
|
||||
|
||||
override fun getExtraExecutablePattern(os: OsFamily): List<String> = extraExecutablePatterns.get().get(os) ?: emptyList()
|
||||
}
|
||||
|
||||
private fun createBuildOutputRootEvaluator(projectHome: Path,
|
||||
|
||||
@@ -56,7 +56,9 @@ import java.util.function.BiConsumer
|
||||
import java.util.function.Predicate
|
||||
import java.util.stream.Collectors
|
||||
|
||||
class BuildTasksImpl(private val context: BuildContext) : BuildTasks {
|
||||
class BuildTasksImpl(context: BuildContext) : BuildTasks {
|
||||
private val context = context as BuildContextImpl
|
||||
|
||||
override suspend fun zipSourcesOfModules(modules: List<String>, targetFile: Path, includeLibraries: Boolean) {
|
||||
zipSourcesOfModules(modules = modules, targetFile = targetFile, includeLibraries = includeLibraries, context = context)
|
||||
}
|
||||
@@ -614,14 +616,16 @@ private suspend fun compileModulesForDistribution(pluginsToPublish: Set<PluginLa
|
||||
}
|
||||
|
||||
private suspend fun compileModulesForDistribution(context: BuildContext): DistributionBuilderState {
|
||||
val pluginsToPublish = getPluginsByModules(context.productProperties.productLayout.pluginModulesToPublish, context)
|
||||
return compileModulesForDistribution(pluginsToPublish, context)
|
||||
return compileModulesForDistribution(
|
||||
pluginsToPublish = getPluginsByModules(modules = context.productProperties.productLayout.pluginModulesToPublish, context = context),
|
||||
context = context
|
||||
)
|
||||
}
|
||||
|
||||
suspend fun buildDistributions(context: BuildContext) {
|
||||
try {
|
||||
spanBuilder("build distributions").useWithScope2 {
|
||||
checkProductProperties(context)
|
||||
checkProductProperties(context as BuildContextImpl)
|
||||
copyDependenciesFile(context)
|
||||
logFreeDiskSpace("before compilation", context)
|
||||
val pluginsToPublish = getPluginsByModules(context.productProperties.productLayout.pluginModulesToPublish, context)
|
||||
@@ -731,7 +735,7 @@ private fun CoroutineScope.createMavenArtifactJob(context: BuildContext, distrib
|
||||
}
|
||||
}
|
||||
|
||||
private fun checkProductProperties(context: BuildContext) {
|
||||
private fun checkProductProperties(context: BuildContextImpl) {
|
||||
checkProductLayout(context)
|
||||
|
||||
val properties = context.productProperties
|
||||
@@ -1065,7 +1069,9 @@ fun getOsDistributionBuilder(os: OsFamily, ideaProperties: Path? = null, context
|
||||
OsFamily.LINUX -> LinuxDistributionBuilder(context = context,
|
||||
customizer = context.linuxDistributionCustomizer ?: return null,
|
||||
ideaProperties = ideaProperties)
|
||||
OsFamily.MACOS -> MacDistributionBuilder(context, context.macDistributionCustomizer ?: return null, ideaProperties)
|
||||
OsFamily.MACOS -> MacDistributionBuilder(context = context,
|
||||
customizer = (context as BuildContextImpl).macDistributionCustomizer ?: return null,
|
||||
ideaProperties = ideaProperties)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -4,6 +4,7 @@ package org.jetbrains.intellij.build.impl
|
||||
import com.intellij.diagnostic.telemetry.use
|
||||
import com.intellij.openapi.util.SystemInfoRt
|
||||
import com.intellij.openapi.util.io.NioFiles
|
||||
import kotlinx.collections.immutable.persistentListOf
|
||||
import org.apache.commons.compress.archivers.tar.TarArchiveInputStream
|
||||
import org.jetbrains.intellij.build.*
|
||||
import org.jetbrains.intellij.build.dependencies.BuildDependenciesDownloader
|
||||
@@ -24,7 +25,6 @@ class BundledRuntimeImpl(
|
||||
private val error: (String) -> Unit,
|
||||
private val info: (String) -> Unit) : BundledRuntime {
|
||||
companion object {
|
||||
@JvmStatic
|
||||
fun getProductPrefix(context: BuildContext): String {
|
||||
return context.options.bundledRuntimePrefix ?: context.productProperties.runtimeDistribution.artifactPrefix
|
||||
}
|
||||
@@ -124,14 +124,14 @@ class BundledRuntimeImpl(
|
||||
override fun executableFilesPatterns(os: OsFamily): List<String> {
|
||||
val pathPrefix = if (os == OsFamily.MACOS) "jbr/Contents/Home/" else "jbr/"
|
||||
@Suppress("SpellCheckingInspection")
|
||||
val executableFilesPatterns = mutableListOf(
|
||||
var executableFilesPatterns = persistentListOf(
|
||||
pathPrefix + "bin/*",
|
||||
pathPrefix + "lib/jexec",
|
||||
pathPrefix + "lib/jspawnhelper",
|
||||
pathPrefix + "lib/chrome-sandbox"
|
||||
)
|
||||
if (os == OsFamily.LINUX) {
|
||||
executableFilesPatterns += "jbr/lib/jcef_helper"
|
||||
executableFilesPatterns = executableFilesPatterns.add("jbr/lib/jcef_helper")
|
||||
}
|
||||
return executableFilesPatterns
|
||||
}
|
||||
|
||||
+5
-17
@@ -9,6 +9,7 @@ import com.intellij.openapi.util.io.NioFiles
|
||||
import io.opentelemetry.api.common.AttributeKey
|
||||
import io.opentelemetry.api.common.Attributes
|
||||
import io.opentelemetry.api.trace.Span
|
||||
import kotlinx.collections.immutable.persistentListOf
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.withContext
|
||||
import org.jetbrains.intellij.build.*
|
||||
@@ -129,13 +130,12 @@ class LinuxDistributionBuilder(override val context: BuildContext,
|
||||
}
|
||||
|
||||
override fun generateExecutableFilesPatterns(includeRuntime: Boolean): List<String> {
|
||||
val patterns = ArrayList<String>()
|
||||
patterns.addAll(listOf("bin/*.sh", "bin/*.py", "bin/fsnotifier*", "bin/remote-dev-server.sh"))
|
||||
patterns.addAll(customizer.extraExecutables)
|
||||
var patterns = persistentListOf("bin/*.sh", "plugins/**/*.sh", "bin/*.py", "bin/fsnotifier*")
|
||||
.addAll(customizer.extraExecutables)
|
||||
if (includeRuntime) {
|
||||
patterns.addAll(context.bundledRuntime.executableFilesPatterns(OsFamily.LINUX))
|
||||
patterns = patterns.addAll(context.bundledRuntime.executableFilesPatterns(OsFamily.LINUX))
|
||||
}
|
||||
return patterns
|
||||
return patterns.addAll(context.getExtraExecutablePattern(OsFamily.LINUX))
|
||||
}
|
||||
|
||||
override fun getArtifactNames(context: BuildContext): List<String> {
|
||||
@@ -325,18 +325,6 @@ private fun makeFileExecutable(file: Path) {
|
||||
Files.setPosixFilePermissions(file, PosixFilePermissions.fromString("rwxr-xr-x"))
|
||||
}
|
||||
|
||||
fun copyFileSymlinkAware(source: Path, target: Path) {
|
||||
target.parent?.let { Files.createDirectories(it) }
|
||||
if (Files.isSymbolicLink(source)) {
|
||||
// append 'NOFOLLOW_LINKS' copy option to be able to copy symbolic links
|
||||
Files.copy(source, target, StandardCopyOption.REPLACE_EXISTING, LinkOption.NOFOLLOW_LINKS)
|
||||
}
|
||||
else {
|
||||
Files.copy(source, target, StandardCopyOption.REPLACE_EXISTING, LinkOption.NOFOLLOW_LINKS)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
internal const val REMOTE_DEV_SCRIPT_FILE_NAME = "remote-dev-server.sh"
|
||||
|
||||
internal fun generateUnixScripts(context: BuildContext,
|
||||
|
||||
+4
-1
@@ -343,6 +343,7 @@ class MacDistributionBuilder(override val context: BuildContext,
|
||||
override fun generateExecutableFilesPatterns(includeRuntime: Boolean): List<String> {
|
||||
var executableFilePatterns = persistentListOf(
|
||||
"bin/*.sh",
|
||||
"plugins/**/*.sh",
|
||||
"bin/*.py",
|
||||
"bin/fsnotifier",
|
||||
"bin/printenv",
|
||||
@@ -353,7 +354,9 @@ class MacDistributionBuilder(override val context: BuildContext,
|
||||
if (includeRuntime) {
|
||||
executableFilePatterns = executableFilePatterns.addAll(context.bundledRuntime.executableFilesPatterns(OsFamily.MACOS))
|
||||
}
|
||||
return executableFilePatterns.addAll(customizer.extraExecutables)
|
||||
return executableFilePatterns
|
||||
.addAll(customizer.extraExecutables)
|
||||
.addAll(context.getExtraExecutablePattern(OsFamily.MACOS))
|
||||
}
|
||||
|
||||
private suspend fun buildForArch(builtinModule: BuiltinModulesFileData?,
|
||||
|
||||
+1
-1
@@ -5,7 +5,7 @@ import org.jetbrains.intellij.build.ApplicationInfoProperties
|
||||
import org.jetbrains.intellij.build.BuildContext
|
||||
import org.jetbrains.intellij.build.MacDistributionCustomizer
|
||||
|
||||
open class PyCharmMacDistributionCustomizer : MacDistributionCustomizer() {
|
||||
open class PyCharmMacDistributionCustomizer(extraExecutables: List<String> = emptyList()) : MacDistributionCustomizer(extraExecutables = extraExecutables) {
|
||||
override fun copyAdditionalFiles(context: BuildContext, targetDirectory: String) {
|
||||
super.copyAdditionalFiles(context, targetDirectory)
|
||||
PyCharmBuildUtils.copySkeletons(context, targetDirectory, "skeletons-mac*.zip")
|
||||
|
||||
Reference in New Issue
Block a user