1*f585d8a3SJacky Wang# Copyright (C) 202 The Dagger Authors. 2*f585d8a3SJacky Wang# 3*f585d8a3SJacky Wang# Licensed under the Apache License, Version 2.0 (the "License"); 4*f585d8a3SJacky Wang# you may not use this file except in compliance with the License. 5*f585d8a3SJacky Wang# You may obtain a copy of the License at 6*f585d8a3SJacky Wang# 7*f585d8a3SJacky Wang# http://www.apache.org/licenses/LICENSE-2.0 8*f585d8a3SJacky Wang# 9*f585d8a3SJacky Wang# Unless required by applicable law or agreed to in writing, software 10*f585d8a3SJacky Wang# distributed under the License is distributed on an "AS IS" BASIS, 11*f585d8a3SJacky Wang# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12*f585d8a3SJacky Wang# See the License for the specific language governing permissions and 13*f585d8a3SJacky Wang# limitations under the License. 14*f585d8a3SJacky Wang 15*f585d8a3SJacky Wang"""Macros for building with Bazel. 16*f585d8a3SJacky Wang""" 17*f585d8a3SJacky Wang 18*f585d8a3SJacky Wangload("//third_party/kotlin/build_extensions:rules.bzl", "kt_android_library") 19*f585d8a3SJacky Wang 20*f585d8a3SJacky Wangdef compat_kt_android_library(name, **kwargs): 21*f585d8a3SJacky Wang bazel_kt_android_library(name, kwargs) 22*f585d8a3SJacky Wang 23*f585d8a3SJacky Wangdef bazel_kt_android_library(name, kwargs): 24*f585d8a3SJacky Wang """A macro that wraps Bazel's kt_android_library. 25*f585d8a3SJacky Wang 26*f585d8a3SJacky Wang This macro wraps Bazel's kt_android_library to output the jars files 27*f585d8a3SJacky Wang in the expected locations (b/203519416). It also adds a dependency on 28*f585d8a3SJacky Wang kotlin_stdlib if there are kotlin sources. 29*f585d8a3SJacky Wang 30*f585d8a3SJacky Wang Args: 31*f585d8a3SJacky Wang name: the name of the library. 32*f585d8a3SJacky Wang kwargs: Additional arguments of the library. 33*f585d8a3SJacky Wang """ 34*f585d8a3SJacky Wang 35*f585d8a3SJacky Wang # If there are any kotlin sources, add the kotlin_stdlib, otherwise 36*f585d8a3SJacky Wang # java-only projects may be missing a required runtime dependency on it. 37*f585d8a3SJacky Wang if any([src.endswith(".kt") for src in kwargs.get("srcs", [])]): 38*f585d8a3SJacky Wang # Add the kotlin_stdlib, otherwise it will be missing from java-only projects. 39*f585d8a3SJacky Wang # We use deps rather than exports because exports isn't picked up by the pom file. 40*f585d8a3SJacky Wang # See https://github.com/google/dagger/issues/3119 41*f585d8a3SJacky Wang required_deps = ["@maven//:org_jetbrains_kotlin_kotlin_stdlib"] 42*f585d8a3SJacky Wang kwargs["deps"] = kwargs.get("deps", []) + required_deps 43*f585d8a3SJacky Wang 44*f585d8a3SJacky Wang # TODO(b/203519416): Bazel's kt_android_library outputs its jars under a target 45*f585d8a3SJacky Wang # suffixed with "_kt". Thus, we have to do a bit of name aliasing to ensure that 46*f585d8a3SJacky Wang # the jars exist at the expected targets. 47*f585d8a3SJacky Wang kt_android_library( 48*f585d8a3SJacky Wang name = "{}_internal".format(name), 49*f585d8a3SJacky Wang **kwargs 50*f585d8a3SJacky Wang ) 51*f585d8a3SJacky Wang 52*f585d8a3SJacky Wang native.alias( 53*f585d8a3SJacky Wang name = name, 54*f585d8a3SJacky Wang actual = ":{}_internal_kt".format(name), 55*f585d8a3SJacky Wang ) 56*f585d8a3SJacky Wang 57*f585d8a3SJacky Wang native.alias( 58*f585d8a3SJacky Wang name = "lib{}.jar".format(name), 59*f585d8a3SJacky Wang actual = ":{}_internal_kt.jar".format(name), 60*f585d8a3SJacky Wang ) 61*f585d8a3SJacky Wang 62*f585d8a3SJacky Wang native.alias( 63*f585d8a3SJacky Wang name = "lib{}-src.jar".format(name), 64*f585d8a3SJacky Wang actual = ":{}_internal_kt-sources.jar".format(name), 65*f585d8a3SJacky Wang ) 66