Skip to content

Commit

Permalink
Borrow some extension goodies from tivi.
Browse files Browse the repository at this point in the history
  • Loading branch information
thomaskioko committed Dec 3, 2023
1 parent 3dd3a57 commit df5221d
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 8 deletions.
10 changes: 3 additions & 7 deletions shared/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import com.thomaskioko.tvmaniac.plugins.addKspDependencyForAllTargets

plugins {
id("plugin.tvmaniac.kotlin.android")
id("plugin.tvmaniac.multiplatform")
Expand Down Expand Up @@ -60,8 +62,6 @@ kotlin {
api(projects.data.similar.implementation)
api(projects.data.trailers.api)
api(projects.data.trailers.implementation)

implementation(libs.kotlinInject.runtime)
}
}
}
Expand All @@ -75,11 +75,7 @@ ksp {
arg("me.tatarka.inject.generateCompanionExtensions", "true")
}

dependencies {
add("kspAndroid", libs.kotlinInject.compiler)
add("kspIosX64", libs.kotlinInject.compiler)
add("kspIosArm64", libs.kotlinInject.compiler)
}
addKspDependencyForAllTargets(libs.kotlinInject.compiler)

multiplatformSwiftPackage {
packageName("TvManiac")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,13 @@ import com.thomaskioko.tvmaniac.extensions.configureKotlin
import com.thomaskioko.tvmaniac.extensions.libs
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.configurationcache.extensions.capitalized
import org.gradle.kotlin.dsl.configure
import org.gradle.kotlin.dsl.dependencies
import org.gradle.kotlin.dsl.getByType
import org.gradle.kotlin.dsl.withType
import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi
import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension
import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget

class KotlinMultiplatformConventionPlugin : Plugin<Project> {
Expand Down Expand Up @@ -63,4 +66,26 @@ class KotlinMultiplatformConventionPlugin : Plugin<Project> {
configureKotlin()
}
}
}

fun Project.addKspDependencyForAllTargets(dependencyNotation: Any) = addKspDependencyForAllTargets("", dependencyNotation)
private fun Project.addKspDependencyForAllTargets(
configurationNameSuffix: String,
dependencyNotation: Any,
) {
val kmpExtension = extensions.getByType<KotlinMultiplatformExtension>()
dependencies {
kmpExtension.targets
.asSequence()
.filter { target ->
// Don't add KSP for common target, only final platforms
target.platformType != KotlinPlatformType.common
}
.forEach { target ->
add(
"ksp${target.targetName.capitalized()}$configurationNameSuffix",
dependencyNotation,
)
}
}
}

0 comments on commit df5221d

Please sign in to comment.