/* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ plugins { alias(libs.plugins.dependency.analysis) } apply plugin: 'com.android.library' apply plugin: 'kotlin-android' def generatedSrcDir = new File(layout.buildDirectory.get().asFile, "generated/components/src/main/java") android { defaultConfig { def appServicesVersion = ApplicationServicesConfig.version if (gradle.hasProperty("localProperties.branchBuild.application-services.version")) { appServicesVersion = gradle["localProperties.branchBuild.application-services.version"] } buildConfigField("String", "LIBRARY_VERSION", "\"" + config.componentsVersion + "\"") buildConfigField("String", "APPLICATION_SERVICES_VERSION", "\"" + appServicesVersion + "\"") buildConfigField("String", "GLEAN_SDK_VERSION", "\"" + project.ext.gleanVersion + "\"") if (gradle.mozconfig.substs.MOZ_INCLUDE_SOURCE_INFO) { buildConfigField("String", "VCS_HASH", "\"" + gradle.mozconfig.source_repo.MOZ_SOURCE_STAMP + "\"") } else { buildConfigField("String", "VCS_HASH", "\"\"") } } sourceSets { main { java { srcDirs += generatedSrcDir } } } buildFeatures { viewBinding = true buildConfig = true } namespace = 'mozilla.components.support.base' } dependencies { api project(":components:concept-base") // We expose the app-compat as API so that consumers get access to the Lifecycle classes automatically api libs.androidx.appcompat implementation project(':components:concept-fetch') implementation libs.androidx.activity implementation libs.androidx.core.ktx implementation libs.androidx.lifecycle.viewmodel implementation libs.kotlinx.coroutines testImplementation project(':components:support-test') testImplementation libs.androidx.test.core testImplementation libs.androidx.test.junit testImplementation libs.kotlinx.coroutines.test testImplementation libs.robolectric } /** * Generates a "Components" enum listing all published components. */ tasks.register("generateComponentEnum") { def buildConfigCache = buildConfig def publishedProjects = buildConfigCache.projects.findAll { project -> project.value.publish } def file = new File(generatedSrcDir, "Component.kt") inputs.property("publishedProjects", publishedProjects.collect { project -> project.key + ":" + project.value.publish }.sort()) outputs.file(file) doLast { generatedSrcDir.mkdirs() def content = new StringBuilder() content << "/* This Source Code Form is subject to the terms of the Mozilla Public\n" + " * License, v. 2.0. If a copy of the MPL was not distributed with this\n" + " * file, You can obtain one at http://mozilla.org/MPL/2.0/. */\n" content << "package mozilla.components.support.base" << "\n" content << "\n" content << "// Automatically generated file. DO NOT MODIFY" << "\n" content << "\n" content << "enum class Component {" << "\n" content << publishedProjects.collect { project -> " " + project.key.replaceFirst(/^components:/, "").replace("-", "_").toUpperCase(Locale.US) }.join(", \n") content << "\n" content << "}\n" content << "\n" file.text = content.toString() } } afterEvaluate { tasks.matching { (it.name.startsWith("compile") && it.name.endsWith("Kotlin")) || it.name.startsWith("explodeCodeSource") || it.name in ["sourceReleaseJar", "sourcesJar"] }.configureEach { dependsOn("generateComponentEnum") } } apply from: '../../../common-config.gradle' apply from: '../../../publish.gradle' ext.configurePublish(config.componentsGroupId, project.name, project.ext.description)