Switch to Gradle 5.1

This commit is contained in:
Ilya Matveev
2019-02-13 11:54:07 +03:00
committed by Ilya Matveev
parent ce1e83945d
commit a576ee4b7d
33 changed files with 179 additions and 153 deletions
+1 -1
View File
@@ -9,7 +9,7 @@ buildscript {
apply plugin: 'project-report' apply plugin: 'project-report'
dependencies { dependencies {
classpath "com.google.protobuf:protobuf-gradle-plugin:0.8.0" classpath "com.google.protobuf:protobuf-gradle-plugin:0.8.8"
} }
} }
@@ -127,7 +127,7 @@ class NamedNativeInteropConfig implements Named {
dependsOn(task) dependsOn(task)
final Project prj; final Project prj;
final String taskName; String taskName;
int index = task.lastIndexOf(':') int index = task.lastIndexOf(':')
if (index != -1) { if (index != -1) {
prj = project.project(task.substring(0, index)) prj = project.project(task.substring(0, index))
+1 -1
View File
@@ -7,7 +7,7 @@ buildscript {
apply from: "$rootBuildDirectory/gradle/kotlinGradlePlugin.gradle" apply from: "$rootBuildDirectory/gradle/kotlinGradlePlugin.gradle"
dependencies { dependencies {
classpath "com.google.protobuf:protobuf-gradle-plugin:0.8.0" classpath "com.google.protobuf:protobuf-gradle-plugin:0.8.8"
} }
} }
+1 -1
View File
@@ -1,5 +1,5 @@
distributionBase=GRADLE_USER_HOME distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.2-all.zip distributionUrl=https\://services.gradle.org/distributions/gradle-5.1-all.zip
zipStoreBase=GRADLE_USER_HOME zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists zipStorePath=wrapper/dists
@@ -1,5 +1,5 @@
distributionBase=GRADLE_USER_HOME distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-5.0-all.zip distributionUrl=https\://services.gradle.org/distributions/gradle-5.1-bin.zip
zipStoreBase=GRADLE_USER_HOME zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists zipStorePath=wrapper/dists
@@ -1,5 +1,5 @@
distributionBase=GRADLE_USER_HOME distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-4.7-all.zip distributionUrl=https\://services.gradle.org/distributions/gradle-5.1-bin.zip
zipStoreBase=GRADLE_USER_HOME zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists zipStorePath=wrapper/dists
+1 -1
View File
@@ -1,5 +1,5 @@
distributionBase=GRADLE_USER_HOME distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-4.7-all.zip distributionUrl=https\://services.gradle.org/distributions/gradle-5.1-bin.zip
zipStoreBase=GRADLE_USER_HOME zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists zipStorePath=wrapper/dists
@@ -37,7 +37,7 @@ buildscript {
dependencies { dependencies {
classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.4' classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.4'
classpath 'com.github.jengelman.gradle.plugins:shadow:4.0.0' classpath 'com.github.jengelman.gradle.plugins:shadow:4.0.4'
classpath "com.gradle.publish:plugin-publish-plugin:0.9.10" classpath "com.gradle.publish:plugin-publish-plugin:0.9.10"
} }
} }
@@ -119,7 +119,7 @@ dependencies {
shadowJar { shadowJar {
from sourceSets.main.output from sourceSets.main.output
configurations = [project.configurations.bundleDependencies] configurations = [project.configurations.bundleDependencies]
classifier = null archiveClassifier.set(null)
relocate('org.jetbrains.kotlinx', 'shadow.org.jetbrains.kotlinx') relocate('org.jetbrains.kotlinx', 'shadow.org.jetbrains.kotlinx')
relocate('org.jetbrains.kotlin.compilerRunner', 'shadow.org.jetbrains.kotlin.compilerRunner') relocate('org.jetbrains.kotlin.compilerRunner', 'shadow.org.jetbrains.kotlin.compilerRunner')
relocate('org.jetbrains.kotlin.konan', 'shadow.org.jetbrains.kotlin.konan') relocate('org.jetbrains.kotlin.konan', 'shadow.org.jetbrains.kotlin.konan')
@@ -21,7 +21,6 @@ import org.gradle.api.artifacts.ConfigurationContainer
import org.gradle.api.attributes.Usage import org.gradle.api.attributes.Usage
import org.gradle.api.file.ConfigurableFileCollection import org.gradle.api.file.ConfigurableFileCollection
import org.gradle.api.file.FileCollection import org.gradle.api.file.FileCollection
import org.gradle.api.file.ProjectLayout
import org.gradle.api.internal.file.FileOperations import org.gradle.api.internal.file.FileOperations
import org.gradle.api.model.ObjectFactory import org.gradle.api.model.ObjectFactory
import org.gradle.api.provider.Property import org.gradle.api.provider.Property
@@ -30,6 +29,7 @@ import org.gradle.language.ComponentDependencies
import org.gradle.language.ComponentWithDependencies import org.gradle.language.ComponentWithDependencies
import org.gradle.language.ComponentWithOutputs import org.gradle.language.ComponentWithOutputs
import org.gradle.language.cpp.CppBinary import org.gradle.language.cpp.CppBinary
import org.gradle.language.cpp.internal.NativeVariantIdentity
import org.gradle.language.internal.DefaultComponentDependencies import org.gradle.language.internal.DefaultComponentDependencies
import org.gradle.language.nativeplatform.internal.ComponentWithNames import org.gradle.language.nativeplatform.internal.ComponentWithNames
import org.gradle.language.nativeplatform.internal.Names import org.gradle.language.nativeplatform.internal.Names
@@ -60,8 +60,7 @@ abstract class AbstractKotlinNativeBinary(
private val name: String, private val name: String,
private val baseName: Provider<String>, private val baseName: Provider<String>,
override val component: AbstractKotlinNativeComponent, override val component: AbstractKotlinNativeComponent,
val identity: KotlinNativeVariantIdentity, val variant: KotlinNativeVariant,
val projectLayout: ProjectLayout,
override val kind: CompilerOutputKind, override val kind: CompilerOutputKind,
objects: ObjectFactory, objects: ObjectFactory,
componentDependencies: KotlinNativeDependenciesImpl, componentDependencies: KotlinNativeDependenciesImpl,
@@ -80,14 +79,16 @@ abstract class AbstractKotlinNativeBinary(
override fun getName(): String = name override fun getName(): String = name
override val konanTarget: KonanTarget override val konanTarget: KonanTarget
get() = identity.konanTarget get() = variant.konanTarget
override fun getTargetPlatform(): KotlinNativePlatform = identity.targetPlatform val identity: NativeVariantIdentity = variant.identity
override fun getTargetPlatform(): KotlinNativePlatform = variant.targetPlatform
val sourceSet: KotlinNativeSourceSet val sourceSet: KotlinNativeSourceSet
get() = component.sources get() = component.sources
val buildType: KotlinNativeBuildType get() = identity.buildType val buildType: KotlinNativeBuildType get() = variant.buildType
open val debuggable: Boolean get() = identity.isDebuggable open val debuggable: Boolean get() = identity.isDebuggable
open val optimized: Boolean get() = identity.isOptimized open val optimized: Boolean get() = identity.isOptimized
@@ -22,9 +22,9 @@ import org.gradle.api.Named
import org.gradle.api.Project import org.gradle.api.Project
import org.gradle.api.artifacts.Configuration import org.gradle.api.artifacts.Configuration
import org.gradle.api.internal.file.FileOperations import org.gradle.api.internal.file.FileOperations
import org.gradle.api.internal.provider.LockableSetProperty
import org.gradle.api.model.ObjectFactory import org.gradle.api.model.ObjectFactory
import org.gradle.api.provider.Property import org.gradle.api.provider.Property
import org.gradle.api.provider.SetProperty
import org.gradle.api.publish.maven.MavenPom import org.gradle.api.publish.maven.MavenPom
import org.gradle.language.internal.DefaultBinaryCollection import org.gradle.language.internal.DefaultBinaryCollection
import org.gradle.language.nativeplatform.internal.ComponentWithNames import org.gradle.language.nativeplatform.internal.ComponentWithNames
@@ -62,8 +62,8 @@ abstract class AbstractKotlinNativeComponent @Inject constructor(
private val baseName: Property<String> = objectFactory.property(String::class.java).apply { set(name) } private val baseName: Property<String> = objectFactory.property(String::class.java).apply { set(name) }
fun getBaseName(): Property<String> = baseName fun getBaseName(): Property<String> = baseName
override val konanTargets: LockableSetProperty<KonanTarget> = override val konanTargets: SetProperty<KonanTarget> =
LockableSetProperty(objectFactory.setProperty(KonanTarget::class.java)).apply { objectFactory.setProperty(KonanTarget::class.java).apply {
set(mutableSetOf(HostManager.host)) set(mutableSetOf(HostManager.host))
} }
@@ -16,9 +16,7 @@
package org.jetbrains.kotlin.gradle.plugin.experimental.internal package org.jetbrains.kotlin.gradle.plugin.experimental.internal
import org.gradle.api.artifacts.Configuration
import org.gradle.api.artifacts.ConfigurationContainer import org.gradle.api.artifacts.ConfigurationContainer
import org.gradle.api.file.ProjectLayout
import org.gradle.api.internal.file.FileOperations import org.gradle.api.internal.file.FileOperations
import org.gradle.api.model.ObjectFactory import org.gradle.api.model.ObjectFactory
import org.gradle.api.provider.Provider import org.gradle.api.provider.Provider
@@ -31,8 +29,7 @@ open class KotlinNativeDynamicImpl @Inject constructor(
baseName: Provider<String>, baseName: Provider<String>,
componentDependencies: KotlinNativeDependenciesImpl, componentDependencies: KotlinNativeDependenciesImpl,
component: KotlinNativeMainComponent, component: KotlinNativeMainComponent,
identity: KotlinNativeVariantIdentity, variant: KotlinNativeVariant,
projectLayout: ProjectLayout,
objects: ObjectFactory, objects: ObjectFactory,
configurations: ConfigurationContainer, configurations: ConfigurationContainer,
fileOperations: FileOperations fileOperations: FileOperations
@@ -40,8 +37,7 @@ open class KotlinNativeDynamicImpl @Inject constructor(
name, name,
baseName, baseName,
component, component,
identity, variant,
projectLayout,
CompilerOutputKind.DYNAMIC, CompilerOutputKind.DYNAMIC,
objects, objects,
componentDependencies, componentDependencies,
@@ -40,7 +40,7 @@ open class KotlinNativeExecutableImpl @Inject constructor(
baseName: Provider<String>, baseName: Provider<String>,
componentDependencies: KotlinNativeDependenciesImpl, componentDependencies: KotlinNativeDependenciesImpl,
component: KotlinNativeMainComponent, component: KotlinNativeMainComponent,
identity: KotlinNativeVariantIdentity, variant: KotlinNativeVariant,
objects: ObjectFactory, objects: ObjectFactory,
projectLayout: ProjectLayout, projectLayout: ProjectLayout,
configurations: ConfigurationContainer, configurations: ConfigurationContainer,
@@ -48,8 +48,7 @@ open class KotlinNativeExecutableImpl @Inject constructor(
) : AbstractKotlinNativeBinary(name, ) : AbstractKotlinNativeBinary(name,
baseName, baseName,
component, component,
identity, variant,
projectLayout,
CompilerOutputKind.PROGRAM, CompilerOutputKind.PROGRAM,
objects, objects,
componentDependencies, componentDependencies,
@@ -18,7 +18,6 @@ package org.jetbrains.kotlin.gradle.plugin.experimental.internal
import org.gradle.api.artifacts.ConfigurationContainer import org.gradle.api.artifacts.ConfigurationContainer
import org.gradle.api.attributes.Usage import org.gradle.api.attributes.Usage
import org.gradle.api.file.ProjectLayout
import org.gradle.api.internal.file.FileOperations import org.gradle.api.internal.file.FileOperations
import org.gradle.api.model.ObjectFactory import org.gradle.api.model.ObjectFactory
import org.gradle.api.provider.Provider import org.gradle.api.provider.Provider
@@ -37,8 +36,7 @@ open class KotlinNativeFrameworkImpl @Inject constructor(
baseName: Provider<String>, baseName: Provider<String>,
componentDependencies: KotlinNativeDependenciesImpl, componentDependencies: KotlinNativeDependenciesImpl,
component: KotlinNativeMainComponent, component: KotlinNativeMainComponent,
identity: KotlinNativeVariantIdentity, variant: KotlinNativeVariant,
projectLayout: ProjectLayout,
objects: ObjectFactory, objects: ObjectFactory,
configurations: ConfigurationContainer, configurations: ConfigurationContainer,
fileOperations: FileOperations fileOperations: FileOperations
@@ -46,8 +44,7 @@ open class KotlinNativeFrameworkImpl @Inject constructor(
name, name,
baseName, baseName,
component, component,
identity, variant,
projectLayout,
CompilerOutputKind.FRAMEWORK, CompilerOutputKind.FRAMEWORK,
objects, objects,
componentDependencies, componentDependencies,
@@ -72,6 +69,7 @@ open class KotlinNativeFrameworkImpl @Inject constructor(
getImplementationDependencies().extendsFrom(this) getImplementationDependencies().extendsFrom(this)
} }
// TODO: Fix embedding
override var embedBitcode: BitcodeEmbeddingMode = if (konanTarget.family == Family.IOS) { override var embedBitcode: BitcodeEmbeddingMode = if (konanTarget.family == Family.IOS) {
buildType.iosEmbedBitcode buildType.iosEmbedBitcode
} else { } else {
@@ -40,7 +40,7 @@ open class KotlinNativeLibraryImpl @Inject constructor(
baseName: Provider<String>, baseName: Provider<String>,
componentDependencies: KotlinNativeDependenciesImpl, componentDependencies: KotlinNativeDependenciesImpl,
component: KotlinNativeMainComponent, component: KotlinNativeMainComponent,
identity: KotlinNativeVariantIdentity, variant: KotlinNativeVariant,
projectLayout: ProjectLayout, projectLayout: ProjectLayout,
objects: ObjectFactory, objects: ObjectFactory,
configurations: ConfigurationContainer, configurations: ConfigurationContainer,
@@ -48,8 +48,7 @@ open class KotlinNativeLibraryImpl @Inject constructor(
) : AbstractKotlinNativeBinary(name, ) : AbstractKotlinNativeBinary(name,
baseName, baseName,
component, component,
identity, variant,
projectLayout,
CompilerOutputKind.LIBRARY, CompilerOutputKind.LIBRARY,
objects, objects,
componentDependencies, componentDependencies,
@@ -23,15 +23,14 @@ import org.gradle.api.component.SoftwareComponent
import org.gradle.api.internal.component.SoftwareComponentInternal import org.gradle.api.internal.component.SoftwareComponentInternal
import org.gradle.api.internal.component.UsageContext import org.gradle.api.internal.component.UsageContext
import org.gradle.api.internal.file.FileOperations import org.gradle.api.internal.file.FileOperations
import org.gradle.api.internal.provider.LockableSetProperty
import org.gradle.api.model.ObjectFactory import org.gradle.api.model.ObjectFactory
import org.gradle.api.provider.Property import org.gradle.api.provider.Property
import org.gradle.api.provider.SetProperty
import org.gradle.internal.Describables import org.gradle.internal.Describables
import org.gradle.internal.DisplayName import org.gradle.internal.DisplayName
import org.gradle.language.ProductionComponent import org.gradle.language.ProductionComponent
import org.gradle.language.cpp.internal.NativeVariantIdentity
import org.gradle.language.nativeplatform.internal.PublicationAwareComponent import org.gradle.language.nativeplatform.internal.PublicationAwareComponent
import org.jetbrains.kotlin.gradle.plugin.EXPECTED_BY_CONFIG_NAME import org.gradle.util.WrapUtil
import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType
import org.jetbrains.kotlin.gradle.plugin.experimental.KotlinNativeBinary import org.jetbrains.kotlin.gradle.plugin.experimental.KotlinNativeBinary
import org.jetbrains.kotlin.gradle.plugin.experimental.sourcesets.KotlinNativeSourceSetImpl import org.jetbrains.kotlin.gradle.plugin.experimental.sourcesets.KotlinNativeSourceSetImpl
@@ -50,7 +49,7 @@ open class KotlinNativeMainComponent @Inject constructor(
override fun getDisplayName(): DisplayName = Describables.withTypeAndName("Kotlin/Native component", name) override fun getDisplayName(): DisplayName = Describables.withTypeAndName("Kotlin/Native component", name)
val outputKinds = LockableSetProperty(objectFactory.setProperty(OutputKind::class.java)).apply { val outputKinds: SetProperty<OutputKind> = objectFactory.setProperty(OutputKind::class.java).apply {
set(mutableSetOf(OutputKind.KLIBRARY)) set(mutableSetOf(OutputKind.KLIBRARY))
} }
@@ -61,42 +60,37 @@ open class KotlinNativeMainComponent @Inject constructor(
extendsFrom(getImplementationDependencies()) extendsFrom(getImplementationDependencies())
} }
private val mainPublication = KotlinNativeVariant() private val mainPublication = KotlinNativePublicationVariants()
override fun getMainPublication(): KotlinNativeVariant = mainPublication override fun getMainPublication(): KotlinNativePublicationVariants = mainPublication
private val developmentBinaryProperty: Property<KotlinNativeBinary> = private val developmentBinaryProperty: Property<KotlinNativeBinary> =
objectFactory.property(KotlinNativeBinary::class.java) objectFactory.property(KotlinNativeBinary::class.java)
override fun getDevelopmentBinary() = developmentBinaryProperty override fun getDevelopmentBinary() = developmentBinaryProperty
private fun <T : KotlinNativeBinary> addBinary(type: Class<T>, identity: NativeVariantIdentity): T = private fun <T : KotlinNativeBinary> addBinary(type: Class<T>, variant: KotlinNativeVariant): T {
objectFactory.newInstance( val name = "$name${variant.identity.name.capitalize()}"
type, return objectFactory.newInstance(type, name, baseName, dependencies, this, variant).apply {
"$name${identity.name.capitalize()}", binaries.add(this)
baseName, }
dependencies, }
this,
identity
).apply {
binaries.add(this)
}
private inline fun <reified T : KotlinNativeBinary> addBinary(identity: NativeVariantIdentity): T = private inline fun <reified T : KotlinNativeBinary> addBinary(variant: KotlinNativeVariant): T =
addBinary(T::class.java, identity) addBinary(T::class.java, variant)
fun addExecutable(identity: NativeVariantIdentity) = addBinary<KotlinNativeExecutableImpl>(identity) fun addExecutable(variant: KotlinNativeVariant) = addBinary<KotlinNativeExecutableImpl>(variant)
fun addLibrary(identity: NativeVariantIdentity) = addBinary<KotlinNativeLibraryImpl>(identity) fun addLibrary(variant: KotlinNativeVariant) = addBinary<KotlinNativeLibraryImpl>(variant)
fun addFramework(identity: NativeVariantIdentity) = addBinary<KotlinNativeFrameworkImpl>(identity) fun addFramework(variant: KotlinNativeVariant) = addBinary<KotlinNativeFrameworkImpl>(variant)
fun addBinary(kind: OutputKind, identity: NativeVariantIdentity) = addBinary(kind.binaryClass, identity) fun addBinary(kind: OutputKind, variant: KotlinNativeVariant) = addBinary(kind.binaryClass, variant)
// region Kotlin/Native variant // region Kotlin/Native component passed to Gradle to determine publication variants
// TODO: SoftwareComponentInternal will be replaced with ComponentWithVariants by Gradle // TODO: SoftwareComponentInternal will be replaced with ComponentWithVariants by Gradle
inner class KotlinNativeVariant: ComponentWithVariants, SoftwareComponentInternal { inner class KotlinNativePublicationVariants: ComponentWithVariants, SoftwareComponentInternal {
private val variants = mutableSetOf<SoftwareComponent>() private val variants = WrapUtil.toDomainObjectSet(SoftwareComponent::class.java)
override fun getVariants() = variants override fun getVariants(): MutableSet<SoftwareComponent> = variants
override fun getName(): String = this@KotlinNativeMainComponent.name override fun getName(): String = this@KotlinNativeMainComponent.name
@@ -16,11 +16,18 @@
package org.jetbrains.kotlin.gradle.plugin.experimental.internal package org.jetbrains.kotlin.gradle.plugin.experimental.internal
import org.gradle.api.Project
import org.gradle.api.internal.component.UsageContext
import org.gradle.api.internal.project.ProjectInternal
import org.gradle.api.model.ObjectFactory import org.gradle.api.model.ObjectFactory
import org.gradle.api.provider.Provider
import org.gradle.internal.os.OperatingSystem import org.gradle.internal.os.OperatingSystem
import org.gradle.language.cpp.internal.NativeVariantIdentity
import org.gradle.nativeplatform.OperatingSystemFamily import org.gradle.nativeplatform.OperatingSystemFamily
import org.gradle.nativeplatform.TargetMachineFactory
import org.gradle.nativeplatform.platform.NativePlatform import org.gradle.nativeplatform.platform.NativePlatform
import org.gradle.nativeplatform.platform.internal.* import org.gradle.nativeplatform.platform.internal.*
import org.jetbrains.kotlin.gradle.utils.isGradleVersionAtLeast
import org.jetbrains.kotlin.konan.target.KonanTarget import org.jetbrains.kotlin.konan.target.KonanTarget
import org.jetbrains.kotlin.konan.util.visibleName import org.jetbrains.kotlin.konan.util.visibleName
@@ -52,3 +59,54 @@ class DefaultKotlinNativePlatform(name: String, override val target: KonanTarget
override fun withArchitecture(architecture: ArchitectureInternal?) = notImplemented() override fun withArchitecture(architecture: ArchitectureInternal?) = notImplemented()
override fun architecture(name: String?) = notImplemented() override fun architecture(name: String?) = notImplemented()
} }
// NativeVariantIdentity constructor was changed in Gradle 5.1
// So we have to use reflection to create instance of this class in earlier versions.
internal fun compatibleVariantIdentity(
project: Project,
name: String,
baseName: Provider<String>,
group: Provider<String>,
version: Provider<String>,
debuggable: Boolean,
optimized: Boolean,
target: KonanTarget,
linkUsage: UsageContext?,
runtimeUsage: UsageContext?
): NativeVariantIdentity =
if (isGradleVersionAtLeast(5, 1)) {
val targetMachineFactory = (project as ProjectInternal).services.get(TargetMachineFactory::class.java)
NativeVariantIdentity(
name,
baseName,
group,
version,
debuggable,
optimized,
targetMachineFactory.os(target.family.name),
linkUsage,
runtimeUsage
)
} else {
NativeVariantIdentity::class.java.getConstructor(
String::class.java,
Provider::class.java,
Provider::class.java,
Provider::class.java,
Boolean::class.javaPrimitiveType,
Boolean::class.javaPrimitiveType,
OperatingSystemFamily::class.java,
UsageContext::class.java,
UsageContext::class.java
).newInstance(
name,
baseName,
group,
version,
debuggable,
optimized,
target.getGradleOSFamily(project.objects),
linkUsage,
runtimeUsage
)
}
@@ -16,9 +16,7 @@
package org.jetbrains.kotlin.gradle.plugin.experimental.internal package org.jetbrains.kotlin.gradle.plugin.experimental.internal
import org.gradle.api.artifacts.Configuration
import org.gradle.api.artifacts.ConfigurationContainer import org.gradle.api.artifacts.ConfigurationContainer
import org.gradle.api.file.ProjectLayout
import org.gradle.api.internal.file.FileOperations import org.gradle.api.internal.file.FileOperations
import org.gradle.api.model.ObjectFactory import org.gradle.api.model.ObjectFactory
import org.gradle.api.provider.Provider import org.gradle.api.provider.Provider
@@ -32,8 +30,7 @@ open class KotlinNativeStaticImpl @Inject constructor(
baseName: Provider<String>, baseName: Provider<String>,
componentDependencies: KotlinNativeDependenciesImpl, componentDependencies: KotlinNativeDependenciesImpl,
component: KotlinNativeMainComponent, component: KotlinNativeMainComponent,
identity: KotlinNativeVariantIdentity, variant: KotlinNativeVariant,
projectLayout: ProjectLayout,
objects: ObjectFactory, objects: ObjectFactory,
configurations: ConfigurationContainer, configurations: ConfigurationContainer,
fileOperations: FileOperations fileOperations: FileOperations
@@ -41,8 +38,7 @@ open class KotlinNativeStaticImpl @Inject constructor(
name, name,
baseName, baseName,
component, component,
identity, variant,
projectLayout,
CompilerOutputKind.STATIC, CompilerOutputKind.STATIC,
objects, objects,
componentDependencies, componentDependencies,
@@ -17,10 +17,8 @@
package org.jetbrains.kotlin.gradle.plugin.experimental.internal package org.jetbrains.kotlin.gradle.plugin.experimental.internal
import org.gradle.api.Task import org.gradle.api.Task
import org.gradle.api.artifacts.Configuration
import org.gradle.api.artifacts.ConfigurationContainer import org.gradle.api.artifacts.ConfigurationContainer
import org.gradle.api.file.FileCollection import org.gradle.api.file.FileCollection
import org.gradle.api.file.ProjectLayout
import org.gradle.api.internal.file.FileOperations import org.gradle.api.internal.file.FileOperations
import org.gradle.api.model.ObjectFactory import org.gradle.api.model.ObjectFactory
import org.gradle.api.provider.Property import org.gradle.api.provider.Property
@@ -37,16 +35,14 @@ open class KotlinNativeTestExecutableImpl @Inject constructor(
componentDependencies: KotlinNativeDependenciesImpl, componentDependencies: KotlinNativeDependenciesImpl,
val testComponent: KotlinNativeTestSuite, val testComponent: KotlinNativeTestSuite,
val mainSources: KotlinNativeSourceSet, val mainSources: KotlinNativeSourceSet,
identity: KotlinNativeVariantIdentity, variant: KotlinNativeVariant,
objects: ObjectFactory, objects: ObjectFactory,
projectLayout: ProjectLayout,
configurations: ConfigurationContainer, configurations: ConfigurationContainer,
fileOperations: FileOperations fileOperations: FileOperations
) : AbstractKotlinNativeBinary(name, ) : AbstractKotlinNativeBinary(name,
baseName, baseName,
testComponent, testComponent,
identity, variant,
projectLayout,
CompilerOutputKind.PROGRAM, CompilerOutputKind.PROGRAM,
objects, objects,
componentDependencies, componentDependencies,
@@ -51,15 +51,15 @@ open class KotlinNativeTestSuite @Inject constructor(
override fun getTestBinary() = testBinaryProperty override fun getTestBinary() = testBinaryProperty
fun addTestExecutable(identity: NativeVariantIdentity): KotlinNativeTestExecutable = fun addTestExecutable(variant: KotlinNativeVariant): KotlinNativeTestExecutable =
objectFactory.newInstance( objectFactory.newInstance(
KotlinNativeTestExecutableImpl::class.java, KotlinNativeTestExecutableImpl::class.java,
"$name${identity.name.capitalize()}", "$name${variant.identity.name.capitalize()}",
getBaseName(), getBaseName(),
dependencies, dependencies,
this, this,
testedComponent.sources, testedComponent.sources,
identity variant
).apply { ).apply {
binaries.add(this) binaries.add(this)
} }
@@ -16,13 +16,13 @@
package org.jetbrains.kotlin.gradle.plugin.experimental.internal package org.jetbrains.kotlin.gradle.plugin.experimental.internal
import org.gradle.api.Project
import org.gradle.api.internal.component.UsageContext import org.gradle.api.internal.component.UsageContext
import org.gradle.api.model.ObjectFactory
import org.gradle.api.provider.Provider import org.gradle.api.provider.Provider
import org.gradle.language.cpp.internal.NativeVariantIdentity import org.gradle.language.cpp.internal.NativeVariantIdentity
import org.jetbrains.kotlin.konan.target.KonanTarget import org.jetbrains.kotlin.konan.target.KonanTarget
open class KotlinNativeVariantIdentity( class KotlinNativeVariant(
name: String, name: String,
baseName: Provider<String>, baseName: Provider<String>,
group: Provider<String>, group: Provider<String>,
@@ -31,17 +31,21 @@ open class KotlinNativeVariantIdentity(
val buildType: KotlinNativeBuildType, val buildType: KotlinNativeBuildType,
linkUsage: UsageContext?, linkUsage: UsageContext?,
runtimeUsage: UsageContext?, runtimeUsage: UsageContext?,
objects: ObjectFactory project: Project
) : NativeVariantIdentity(
name,
baseName,
group,
version,
buildType.debuggable,
buildType.optimized,
konanTarget.getGradleOSFamily(objects),
linkUsage,
runtimeUsage
) { ) {
val identity: NativeVariantIdentity = compatibleVariantIdentity(
project,
name,
baseName,
group,
version,
buildType.debuggable,
buildType.optimized,
konanTarget,
linkUsage,
runtimeUsage
)
val targetPlatform = DefaultKotlinNativePlatform(konanTarget) val targetPlatform = DefaultKotlinNativePlatform(konanTarget)
} }
@@ -38,6 +38,7 @@ import org.jetbrains.kotlin.gradle.plugin.experimental.internal.*
import org.jetbrains.kotlin.gradle.plugin.experimental.internal.OutputKind.Companion.getDevelopmentKind import org.jetbrains.kotlin.gradle.plugin.experimental.internal.OutputKind.Companion.getDevelopmentKind
import org.jetbrains.kotlin.gradle.plugin.experimental.sourcesets.KotlinNativeSourceSetFactory import org.jetbrains.kotlin.gradle.plugin.experimental.sourcesets.KotlinNativeSourceSetFactory
import org.jetbrains.kotlin.gradle.plugin.experimental.sourcesets.KotlinNativeSourceSetImpl import org.jetbrains.kotlin.gradle.plugin.experimental.sourcesets.KotlinNativeSourceSetImpl
import org.jetbrains.kotlin.gradle.utils.isGradleVersionAtLeast
import org.jetbrains.kotlin.konan.target.HostManager import org.jetbrains.kotlin.konan.target.HostManager
import org.jetbrains.kotlin.konan.target.KonanTarget import org.jetbrains.kotlin.konan.target.KonanTarget
import javax.inject.Inject import javax.inject.Inject
@@ -77,14 +78,18 @@ class KotlinNativePlugin @Inject constructor(val attributesFactory: ImmutableAtt
} }
private fun AbstractKotlinNativeComponent.getAndLockTargets(): Set<KonanTarget> { private fun AbstractKotlinNativeComponent.getAndLockTargets(): Set<KonanTarget> {
konanTargets.lockNow() if (isGradleVersionAtLeast(5, 0)) {
konanTargets.finalizeValue()
}
return konanTargets.get().also { return konanTargets.get().also {
require(it.isNotEmpty()) { "A Kotlin/Native target needs to be specified for the component." } require(it.isNotEmpty()) { "A Kotlin/Native target needs to be specified for the component." }
} }
} }
private fun KotlinNativeMainComponent.getAndLockOutputKinds(): Set<OutputKind> { private fun KotlinNativeMainComponent.getAndLockOutputKinds(): Set<OutputKind> {
outputKinds.lockNow() if (isGradleVersionAtLeast(5, 0)) {
konanTargets.finalizeValue()
}
return outputKinds.get().also { return outputKinds.get().also {
require(it.isNotEmpty()) { "An output kind needs to be specified for the component." } require(it.isNotEmpty()) { "An output kind needs to be specified for the component." }
} }
@@ -124,18 +129,18 @@ class KotlinNativePlugin @Inject constructor(val attributesFactory: ImmutableAtt
} }
// TODO: Do we need something like klibUsageContext? // TODO: Do we need something like klibUsageContext?
val variantIdentity = KotlinNativeVariantIdentity( val variant = KotlinNativeVariant(
variantName, variantName,
component.baseName, component.baseName,
group, version, target, group, version, target,
buildType, buildType,
linkUsageContext, linkUsageContext,
runtimeUsageContext, runtimeUsageContext,
objects project
) )
if (hostManager.isEnabled(target)) { if (hostManager.isEnabled(target)) {
val binary = component.addBinary(kind, variantIdentity) val binary = component.addBinary(kind, variant)
if (kind == developmentKind && if (kind == developmentKind &&
buildType == KotlinNativeBuildType.DEBUG && buildType == KotlinNativeBuildType.DEBUG &&
@@ -151,7 +156,7 @@ class KotlinNativePlugin @Inject constructor(val attributesFactory: ImmutableAtt
if (kind.publishable) { if (kind.publishable) {
// Known but not buildable. // Known but not buildable.
// It allows us to publish different parts of a multitarget library from differnt hosts. // It allows us to publish different parts of a multitarget library from differnt hosts.
component.mainPublication.variants.add(variantIdentity) component.mainPublication.variants.add(variant.identity)
} }
} }
} }
@@ -171,18 +176,18 @@ class KotlinNativePlugin @Inject constructor(val attributesFactory: ImmutableAtt
val targetSuffix = createDimensionSuffix(target.name, targets) val targetSuffix = createDimensionSuffix(target.name, targets)
val variantName = "${buildTypeSuffix}${targetSuffix}" val variantName = "${buildTypeSuffix}${targetSuffix}"
val variantIdentity = KotlinNativeVariantIdentity( val variant = KotlinNativeVariant(
variantName, variantName,
component.getBaseName(), component.getBaseName(),
group, version, target, group, version, target,
buildType, buildType,
null, null,
null, null,
objects project
) )
if (hostManager.isEnabled(target)) { if (hostManager.isEnabled(target)) {
val binary = component.addTestExecutable(variantIdentity) val binary = component.addTestExecutable(variant)
if (target == HostManager.host) { if (target == HostManager.host) {
component.testBinary.set(binary) component.testBinary.set(binary)
} }
@@ -37,7 +37,7 @@ open class KonanArtifactContainer(val project: ProjectInternal)
var targets: Iterable<String> = emptyList() var targets: Iterable<String> = emptyList()
override fun create(name: String?): T = override fun create(name: String?): T =
instantiator.newInstance(configClass.java, name, project, instantiator, targets) instantiator.newInstance(configClass.java, name, project, targets)
} }
private val factories = mutableMapOf<KClass<out KonanBuildingConfig<*>>, KonanBuildingConfigFactory<*>>() private val factories = mutableMapOf<KClass<out KonanBuildingConfig<*>>, KonanBuildingConfigFactory<*>>()
@@ -17,27 +17,23 @@
package org.jetbrains.kotlin.gradle.plugin.konan package org.jetbrains.kotlin.gradle.plugin.konan
import groovy.lang.Closure import groovy.lang.Closure
import org.gradle.api.Action import org.gradle.api.*
import org.gradle.api.InvalidUserDataException
import org.gradle.api.Named
import org.gradle.api.Task
import org.gradle.api.internal.DefaultNamedDomainObjectSet
import org.gradle.api.internal.project.ProjectInternal import org.gradle.api.internal.project.ProjectInternal
import org.gradle.api.plugins.BasePlugin import org.gradle.api.plugins.BasePlugin
import org.gradle.api.plugins.ExtensionAware
import org.gradle.api.publish.maven.MavenPom import org.gradle.api.publish.maven.MavenPom
import org.gradle.internal.reflect.Instantiator
import org.gradle.util.ConfigureUtil import org.gradle.util.ConfigureUtil
import org.gradle.util.WrapUtil
import org.jetbrains.kotlin.gradle.plugin.tasks.KonanBuildingTask import org.jetbrains.kotlin.gradle.plugin.tasks.KonanBuildingTask
import org.jetbrains.kotlin.konan.target.KonanTarget import org.jetbrains.kotlin.konan.target.KonanTarget
import java.io.File import java.io.File
/** Base class for all Kotlin/Native artifacts. */ /** Base class for all Kotlin/Native artifacts. */
abstract class KonanBuildingConfig<T: KonanBuildingTask>(private val name_: String, abstract class KonanBuildingConfig<T: KonanBuildingTask>(private val name_: String,
type: Class<T>, val type: Class<T>,
val project: ProjectInternal, val project: ProjectInternal,
instantiator: Instantiator,
val targets: Iterable<String>) val targets: Iterable<String>)
: KonanBuildingSpec, Named, DefaultNamedDomainObjectSet<T>(type, instantiator, { it.konanTarget.visibleName }) { : KonanBuildingSpec, Named, DomainObjectSet<T> by WrapUtil.toDomainObjectSet(type) {
internal val mainVariant = KonanSoftwareComponent(project) internal val mainVariant = KonanSoftwareComponent(project)
override fun getName() = name_ override fun getName() = name_
@@ -63,7 +59,13 @@ abstract class KonanBuildingConfig<T: KonanBuildingTask>(private val name_: Stri
project.logger.info("The target ${targetName} is not supported by the artifact $name") project.logger.info("The target ${targetName} is not supported by the artifact $name")
continue continue
} }
if (this[konanTarget] == null) super.add(createTask(konanTarget)) if (this[konanTarget] == null) {
val task = createTask(konanTarget)
add(task)
targetToTask[konanTarget] = task
// Allow accessing targets just by their names in Groovy DSL.
(this as? ExtensionAware)?.extensions?.add(konanTarget.visibleName, task)
}
if (targetName != konanTarget.visibleName) { if (targetName != konanTarget.visibleName) {
createTargetAliasTaskIfDeclared(targetName) createTargetAliasTaskIfDeclared(targetName)
@@ -89,13 +91,6 @@ abstract class KonanBuildingConfig<T: KonanBuildingTask>(private val name_: Stri
protected open fun targetIsSupported(target: KonanTarget): Boolean = true protected open fun targetIsSupported(target: KonanTarget): Boolean = true
override fun didAdd(toAdd: T) {
super.didAdd(toAdd)
assert(toAdd.konanTarget !in targetToTask)
targetToTask[toAdd.konanTarget] = toAdd
}
data class OutputPlacement(val destinationDir: File, val artifactName: String) data class OutputPlacement(val destinationDir: File, val artifactName: String)
// There are two options for output placement. // There are two options for output placement.
@@ -20,7 +20,6 @@ import groovy.lang.Closure
import org.gradle.api.Task import org.gradle.api.Task
import org.gradle.api.file.FileCollection import org.gradle.api.file.FileCollection
import org.gradle.api.internal.project.ProjectInternal import org.gradle.api.internal.project.ProjectInternal
import org.gradle.internal.reflect.Instantiator
import org.jetbrains.kotlin.gradle.plugin.tasks.* import org.jetbrains.kotlin.gradle.plugin.tasks.*
import org.jetbrains.kotlin.konan.target.Family import org.jetbrains.kotlin.konan.target.Family
import org.jetbrains.kotlin.konan.target.KonanTarget import org.jetbrains.kotlin.konan.target.KonanTarget
@@ -30,9 +29,8 @@ import java.io.File
abstract class KonanCompileConfig<T: KonanCompileTask>(name: String, abstract class KonanCompileConfig<T: KonanCompileTask>(name: String,
type: Class<T>, type: Class<T>,
project: ProjectInternal, project: ProjectInternal,
instantiator: Instantiator,
targets: Iterable<String>) targets: Iterable<String>)
: KonanBuildingConfig<T>(name, type, project, instantiator, targets), KonanCompileSpec { : KonanBuildingConfig<T>(name, type, project, targets), KonanCompileSpec {
protected abstract val typeForDescription: String protected abstract val typeForDescription: String
@@ -76,12 +74,10 @@ abstract class KonanCompileConfig<T: KonanCompileTask>(name: String,
open class KonanProgram(name: String, open class KonanProgram(name: String,
project: ProjectInternal, project: ProjectInternal,
instantiator: Instantiator,
targets: Iterable<String> = project.konanExtension.targets targets: Iterable<String> = project.konanExtension.targets
) : KonanCompileConfig<KonanCompileProgramTask>(name, ) : KonanCompileConfig<KonanCompileProgramTask>(name,
KonanCompileProgramTask::class.java, KonanCompileProgramTask::class.java,
project, project,
instantiator,
targets targets
) { ) {
override val typeForDescription: String override val typeForDescription: String
@@ -93,12 +89,10 @@ open class KonanProgram(name: String,
open class KonanDynamic(name: String, open class KonanDynamic(name: String,
project: ProjectInternal, project: ProjectInternal,
instantiator: Instantiator,
targets: Iterable<String> = project.konanExtension.targets) targets: Iterable<String> = project.konanExtension.targets)
: KonanCompileConfig<KonanCompileDynamicTask>(name, : KonanCompileConfig<KonanCompileDynamicTask>(name,
KonanCompileDynamicTask::class.java, KonanCompileDynamicTask::class.java,
project, project,
instantiator,
targets targets
) { ) {
override val typeForDescription: String override val typeForDescription: String
@@ -112,12 +106,10 @@ open class KonanDynamic(name: String,
open class KonanFramework(name: String, open class KonanFramework(name: String,
project: ProjectInternal, project: ProjectInternal,
instantiator: Instantiator,
targets: Iterable<String> = project.konanExtension.targets) targets: Iterable<String> = project.konanExtension.targets)
: KonanCompileConfig<KonanCompileFrameworkTask>(name, : KonanCompileConfig<KonanCompileFrameworkTask>(name,
KonanCompileFrameworkTask::class.java, KonanCompileFrameworkTask::class.java,
project, project,
instantiator,
targets targets
) { ) {
override val typeForDescription: String override val typeForDescription: String
@@ -132,12 +124,10 @@ open class KonanFramework(name: String,
open class KonanLibrary(name: String, open class KonanLibrary(name: String,
project: ProjectInternal, project: ProjectInternal,
instantiator: Instantiator,
targets: Iterable<String> = project.konanExtension.targets) targets: Iterable<String> = project.konanExtension.targets)
: KonanCompileConfig<KonanCompileLibraryTask>(name, : KonanCompileConfig<KonanCompileLibraryTask>(name,
KonanCompileLibraryTask::class.java, KonanCompileLibraryTask::class.java,
project, project,
instantiator,
targets targets
) { ) {
override val typeForDescription: String override val typeForDescription: String
@@ -149,12 +139,10 @@ open class KonanLibrary(name: String,
open class KonanBitcode(name: String, open class KonanBitcode(name: String,
project: ProjectInternal, project: ProjectInternal,
instantiator: Instantiator,
targets: Iterable<String> = project.konanExtension.targets) targets: Iterable<String> = project.konanExtension.targets)
: KonanCompileConfig<KonanCompileBitcodeTask>(name, : KonanCompileConfig<KonanCompileBitcodeTask>(name,
KonanCompileBitcodeTask::class.java, KonanCompileBitcodeTask::class.java,
project, project,
instantiator,
targets targets
) { ) {
override val typeForDescription: String override val typeForDescription: String
@@ -21,7 +21,6 @@ import org.gradle.api.Action
import org.gradle.api.Task import org.gradle.api.Task
import org.gradle.api.file.FileCollection import org.gradle.api.file.FileCollection
import org.gradle.api.internal.project.ProjectInternal import org.gradle.api.internal.project.ProjectInternal
import org.gradle.internal.reflect.Instantiator
import org.gradle.util.ConfigureUtil import org.gradle.util.ConfigureUtil
import org.jetbrains.kotlin.gradle.plugin.konan.KonanInteropSpec.IncludeDirectoriesSpec import org.jetbrains.kotlin.gradle.plugin.konan.KonanInteropSpec.IncludeDirectoriesSpec
import org.jetbrains.kotlin.gradle.plugin.tasks.KonanInteropTask import org.jetbrains.kotlin.gradle.plugin.tasks.KonanInteropTask
@@ -29,9 +28,8 @@ import java.io.File
open class KonanInteropLibrary(name: String, open class KonanInteropLibrary(name: String,
project: ProjectInternal, project: ProjectInternal,
instantiator: Instantiator,
targets: Iterable<String> = project.konanExtension.targets targets: Iterable<String> = project.konanExtension.targets
) : KonanBuildingConfig<KonanInteropTask>(name, KonanInteropTask::class.java, project, instantiator, targets), ) : KonanBuildingConfig<KonanInteropTask>(name, KonanInteropTask::class.java, project, targets),
KonanInteropSpec KonanInteropSpec
{ {
@@ -30,10 +30,9 @@ import org.gradle.api.internal.tasks.DefaultTaskDependency
import org.gradle.api.tasks.* import org.gradle.api.tasks.*
import org.gradle.language.cpp.CppBinary import org.gradle.language.cpp.CppBinary
import org.gradle.language.cpp.internal.DefaultUsageContext import org.gradle.language.cpp.internal.DefaultUsageContext
import org.gradle.language.cpp.internal.NativeVariantIdentity
import org.gradle.nativeplatform.Linkage import org.gradle.nativeplatform.Linkage
import org.gradle.nativeplatform.OperatingSystemFamily
import org.gradle.util.ConfigureUtil import org.gradle.util.ConfigureUtil
import org.jetbrains.kotlin.gradle.plugin.experimental.internal.compatibleVariantIdentity
import org.jetbrains.kotlin.gradle.plugin.konan.* import org.jetbrains.kotlin.gradle.plugin.konan.*
import org.jetbrains.kotlin.konan.target.HostManager import org.jetbrains.kotlin.konan.target.HostManager
import org.jetbrains.kotlin.konan.target.KonanTarget import org.jetbrains.kotlin.konan.target.KonanTarget
@@ -128,16 +127,20 @@ abstract class KonanArtifactTask: KonanTargetableTask(), KonanArtifactSpec {
override fun getAttributes(): AttributeContainer = platformConfiguration.attributes override fun getAttributes(): AttributeContainer = platformConfiguration.attributes
override fun getGlobalExcludes(): Set<ExcludeRule> = emptySet() override fun getGlobalExcludes(): Set<ExcludeRule> = emptySet()
}, platformConfiguration.allArtifacts, platformConfiguration) }, platformConfiguration.allArtifacts, platformConfiguration)
konanSoftwareComponent.addVariant(NativeVariantIdentity( konanSoftwareComponent.addVariant(
compatibleVariantIdentity(
project,
variantName, variantName,
project.provider{ artifactName }, project.provider{ artifactName },
project.provider{ project.group.toString() }, project.provider{ project.group.toString() },
project.provider{ project.version.toString() }, project.provider{ project.version.toString() },
false, false,
false, false,
target.asOperatingSystemFamily(), target,
context, context,
null)) null
)
)
} }
} }
@@ -154,9 +157,6 @@ abstract class KonanArtifactTask: KonanTargetableTask(), KonanArtifactSpec {
fun destinationDir(dir: Any) { fun destinationDir(dir: Any) {
destinationDir = project.file(dir) destinationDir = project.file(dir)
} }
private fun KonanTarget.asOperatingSystemFamily(): OperatingSystemFamily = project.objects.named(OperatingSystemFamily::class.java, family.name)
} }
/** Task building an artifact with libraries */ /** Task building an artifact with libraries */
@@ -134,6 +134,7 @@ abstract class KonanCompileTask: KonanBuildingTask(), KonanCompileSpec {
addKey("-opt", enableOptimizations) addKey("-opt", enableOptimizations)
addKey("-ea", enableAssertions) addKey("-ea", enableAssertions)
addKey("-Xtime", measureTime) addKey("-Xtime", measureTime)
addKey("-Xprofile-phases", measureTime)
addKey("-nodefaultlibs", noDefaultLibs) addKey("-nodefaultlibs", noDefaultLibs)
addKey("-Xmulti-platform", enableMultiplatform) addKey("-Xmulti-platform", enableMultiplatform)
@@ -21,7 +21,6 @@ import org.gradle.api.GradleScriptException
import org.gradle.api.tasks.Internal import org.gradle.api.tasks.Internal
import org.gradle.api.tasks.TaskAction import org.gradle.api.tasks.TaskAction
import org.jetbrains.kotlin.gradle.plugin.konan.* import org.jetbrains.kotlin.gradle.plugin.konan.*
import org.jetbrains.kotlin.konan.KonanVersion
import org.jetbrains.kotlin.konan.MetaVersion import org.jetbrains.kotlin.konan.MetaVersion
import org.jetbrains.kotlin.konan.util.DependencyProcessor import org.jetbrains.kotlin.konan.util.DependencyProcessor
import org.jetbrains.kotlin.konan.util.DependencySource import org.jetbrains.kotlin.konan.util.DependencySource
@@ -20,10 +20,6 @@ import org.gradle.testkit.runner.BuildResult
import org.gradle.testkit.runner.TaskOutcome import org.gradle.testkit.runner.TaskOutcome
import spock.lang.Unroll import spock.lang.Unroll
import java.nio.file.Files
import java.nio.file.Path
import java.nio.file.Paths
class IncrementalSpecification extends BaseKonanSpecification { class IncrementalSpecification extends BaseKonanSpecification {
Tuple buildTwice(KonanProject project, String task = 'build', Closure change) { Tuple buildTwice(KonanProject project, String task = 'build', Closure change) {
@@ -18,8 +18,8 @@ package org.jetbrains.kotlin.gradle.plugin.test
import org.gradle.testkit.runner.BuildResult import org.gradle.testkit.runner.BuildResult
import org.gradle.testkit.runner.TaskOutcome import org.gradle.testkit.runner.TaskOutcome
import org.jetbrains.kotlin.konan.target.KonanTarget
import org.jetbrains.kotlin.konan.target.HostManager import org.jetbrains.kotlin.konan.target.HostManager
import org.jetbrains.kotlin.konan.target.KonanTarget
import spock.lang.Requires import spock.lang.Requires
import spock.lang.Unroll import spock.lang.Unroll
@@ -50,8 +50,8 @@ class TaskSpecification extends BaseKonanSpecification {
def result = project.createRunner().withArguments('build').build() def result = project.createRunner().withArguments('build').build()
then: then:
result.output.findAll(~/FRONTEND:\s+\d+\s+msec/).size() == 1 result.output.findAll(~/Frontend builds AST:\s+\d+\s+msec/).size() == 1
result.output.findAll(~/BACKEND:\s+\d+\s+msec/).size() == 1 result.output.findAll(~/IR Lowering:\s+\d+\s+msec/).size() == 1
} }
@Unroll('Plugin should support #option option for cinterop') @Unroll('Plugin should support #option option for cinterop')
@@ -20,7 +20,8 @@ import org.junit.Rule
import org.junit.rules.TemporaryFolder import org.junit.rules.TemporaryFolder
import java.io.File import java.io.File
import java.net.URI import java.net.URI
import kotlin.test.* import kotlin.test.Test
import kotlin.test.assertTrue
open class CompatibilityTests { open class CompatibilityTests {
val tmpFolder = TemporaryFolder() val tmpFolder = TemporaryFolder()
@@ -24,7 +24,7 @@ import org.junit.rules.TemporaryFolder
import org.junit.runner.RunWith import org.junit.runner.RunWith
import org.tools4j.spockito.Spockito import org.tools4j.spockito.Spockito
import java.io.File import java.io.File
import kotlin.test.* import kotlin.test.Test
@RunWith(Spockito::class) @RunWith(Spockito::class)
open class PropertiesAsEnvVariablesTest { open class PropertiesAsEnvVariablesTest {
@@ -19,7 +19,9 @@ package org.jetbrains.kotlin.gradle.plugin.test
import org.junit.Rule import org.junit.Rule
import org.junit.rules.TemporaryFolder import org.junit.rules.TemporaryFolder
import java.io.File import java.io.File
import kotlin.test.* import kotlin.test.Test
import kotlin.test.assertFalse
import kotlin.test.assertTrue
class TaskTests { class TaskTests {
val tmpFolder = TemporaryFolder() val tmpFolder = TemporaryFolder()