1*68017707SAndroid Build Coastguard Worker/* 2*68017707SAndroid Build Coastguard Worker * Copyright 2017-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license. 3*68017707SAndroid Build Coastguard Worker */ 4*68017707SAndroid Build Coastguard Worker 5*68017707SAndroid Build Coastguard Workerapply plugin: 'kotlin' 6*68017707SAndroid Build Coastguard Workerapply plugin: 'java-gradle-plugin' 7*68017707SAndroid Build Coastguard Worker 8*68017707SAndroid Build Coastguard Worker// Gradle plugin must be compiled targeting the same Kotlin version as used by Gradle 9*68017707SAndroid Build Coastguard Workerkotlin.sourceSets.configureEach { 10*68017707SAndroid Build Coastguard Worker languageSettings { 11*68017707SAndroid Build Coastguard Worker languageVersion = KotlinConfiguration.getOverridingKotlinLanguageVersion(project) ?: "1.4" 12*68017707SAndroid Build Coastguard Worker apiVersion = KotlinConfiguration.getOverridingKotlinApiVersion(project) ?: "1.4" 13*68017707SAndroid Build Coastguard Worker } 14*68017707SAndroid Build Coastguard Worker} 15*68017707SAndroid Build Coastguard Worker 16*68017707SAndroid Build Coastguard Workerdependencies { 17*68017707SAndroid Build Coastguard Worker implementation(project(":atomicfu-transformer")) { 18*68017707SAndroid Build Coastguard Worker exclude group: 'org.jetbrains.kotlin', module: 'kotlin-stdlib' 19*68017707SAndroid Build Coastguard Worker } 20*68017707SAndroid Build Coastguard Worker 21*68017707SAndroid Build Coastguard Worker compileOnly gradleApi() 22*68017707SAndroid Build Coastguard Worker compileOnly 'org.jetbrains.kotlin:kotlin-stdlib' 23*68017707SAndroid Build Coastguard Worker compileOnly "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" 24*68017707SAndroid Build Coastguard Worker // Atomicfu compiler plugin dependency will be loaded to kotlinCompilerPluginClasspath 25*68017707SAndroid Build Coastguard Worker // Atomicfu plugin will only be applied if the flag is set kotlinx.atomicfu.enableJsIrTransformation=true 26*68017707SAndroid Build Coastguard Worker implementation "org.jetbrains.kotlin:atomicfu:$kotlin_version" 27*68017707SAndroid Build Coastguard Worker 28*68017707SAndroid Build Coastguard Worker testImplementation gradleTestKit() 29*68017707SAndroid Build Coastguard Worker testImplementation 'org.jetbrains.kotlin:kotlin-test' 30*68017707SAndroid Build Coastguard Worker testImplementation 'org.jetbrains.kotlin:kotlin-test-junit' 31*68017707SAndroid Build Coastguard Worker testImplementation 'junit:junit:4.12' 32*68017707SAndroid Build Coastguard Worker} 33*68017707SAndroid Build Coastguard Worker 34*68017707SAndroid Build Coastguard Workerconfigurations { 35*68017707SAndroid Build Coastguard Worker testPluginClasspath { 36*68017707SAndroid Build Coastguard Worker attributes { 37*68017707SAndroid Build Coastguard Worker attribute( 38*68017707SAndroid Build Coastguard Worker Usage.USAGE_ATTRIBUTE, 39*68017707SAndroid Build Coastguard Worker project.objects.named(Usage.class, Usage.JAVA_RUNTIME) 40*68017707SAndroid Build Coastguard Worker ) 41*68017707SAndroid Build Coastguard Worker attribute( 42*68017707SAndroid Build Coastguard Worker Category.CATEGORY_ATTRIBUTE, 43*68017707SAndroid Build Coastguard Worker project.objects.named(Category.class, Category.LIBRARY) 44*68017707SAndroid Build Coastguard Worker ) 45*68017707SAndroid Build Coastguard Worker } 46*68017707SAndroid Build Coastguard Worker } 47*68017707SAndroid Build Coastguard Worker} 48*68017707SAndroid Build Coastguard Worker 49*68017707SAndroid Build Coastguard Workerdependencies { 50*68017707SAndroid Build Coastguard Worker testPluginClasspath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" 51*68017707SAndroid Build Coastguard Worker} 52*68017707SAndroid Build Coastguard Worker 53*68017707SAndroid Build Coastguard WorkerevaluationDependsOn(':atomicfu') 54*68017707SAndroid Build Coastguard Workerdef atomicfu = project(':atomicfu') 55*68017707SAndroid Build Coastguard Workerdef atomicfuJvmJarTask = atomicfu.tasks.getByName(atomicfu.kotlin.targets.jvm.artifactsTaskName) 56*68017707SAndroid Build Coastguard Worker 57*68017707SAndroid Build Coastguard Workerdef jsLegacy = atomicfu.kotlin.targets.hasProperty("jsLegacy") 58*68017707SAndroid Build Coastguard Worker ? atomicfu.kotlin.targets.jsLegacy 59*68017707SAndroid Build Coastguard Worker : atomicfu.kotlin.targets.js 60*68017707SAndroid Build Coastguard Workerdef atomicfuJsJarTask = atomicfu.tasks.getByName(jsLegacy.artifactsTaskName) 61*68017707SAndroid Build Coastguard Worker 62*68017707SAndroid Build Coastguard Workerdef atomicfuMetadataOutput = atomicfu.kotlin.targets.metadata.compilations["main"].output.allOutputs 63*68017707SAndroid Build Coastguard Worker 64*68017707SAndroid Build Coastguard Worker// Write the plugin's classpath to a file to share with the tests 65*68017707SAndroid Build Coastguard Workertask createClasspathManifest { 66*68017707SAndroid Build Coastguard Worker dependsOn(atomicfuJvmJarTask) 67*68017707SAndroid Build Coastguard Worker dependsOn(atomicfuJsJarTask) 68*68017707SAndroid Build Coastguard Worker dependsOn(atomicfuMetadataOutput) 69*68017707SAndroid Build Coastguard Worker 70*68017707SAndroid Build Coastguard Worker def outputDir = file("$buildDir/$name") 71*68017707SAndroid Build Coastguard Worker outputs.dir outputDir 72*68017707SAndroid Build Coastguard Worker 73*68017707SAndroid Build Coastguard Worker doLast { 74*68017707SAndroid Build Coastguard Worker outputDir.mkdirs() 75*68017707SAndroid Build Coastguard Worker file("$outputDir/plugin-classpath.txt").text = (sourceSets.main.runtimeClasspath + configurations.testPluginClasspath).join("\n") 76*68017707SAndroid Build Coastguard Worker file("$outputDir/atomicfu-jvm.txt").text = atomicfuJvmJarTask.archivePath 77*68017707SAndroid Build Coastguard Worker file("$outputDir/atomicfu-js.txt").text = atomicfuJsJarTask.archivePath 78*68017707SAndroid Build Coastguard Worker file("$outputDir/atomicfu-metadata.txt").text = atomicfuMetadataOutput.join("\n") 79*68017707SAndroid Build Coastguard Worker } 80*68017707SAndroid Build Coastguard Worker} 81*68017707SAndroid Build Coastguard Worker 82*68017707SAndroid Build Coastguard Workertask createKotlinRepoUrlResource { 83*68017707SAndroid Build Coastguard Worker def customKotlinRepoUrl = KotlinConfiguration.getCustomKotlinRepositoryURL(project) 84*68017707SAndroid Build Coastguard Worker if (customKotlinRepoUrl == null) return 85*68017707SAndroid Build Coastguard Worker 86*68017707SAndroid Build Coastguard Worker def outputDir = file("$buildDir/$name") 87*68017707SAndroid Build Coastguard Worker outputs.dir outputDir 88*68017707SAndroid Build Coastguard Worker 89*68017707SAndroid Build Coastguard Worker doLast { 90*68017707SAndroid Build Coastguard Worker outputDir.mkdirs() 91*68017707SAndroid Build Coastguard Worker file("$outputDir/kotlin-repo-url.txt").text = customKotlinRepoUrl 92*68017707SAndroid Build Coastguard Worker } 93*68017707SAndroid Build Coastguard Worker} 94*68017707SAndroid Build Coastguard Worker 95*68017707SAndroid Build Coastguard Worker// Add the classpath file to the test runtime classpath 96*68017707SAndroid Build Coastguard Workerdependencies { 97*68017707SAndroid Build Coastguard Worker testRuntimeOnly files(createClasspathManifest) 98*68017707SAndroid Build Coastguard Worker testRuntimeOnly files(createKotlinRepoUrlResource) 99*68017707SAndroid Build Coastguard Worker} 100