1// Copyright 2020 Google Inc. All rights reserved.
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7//     http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15package android
16
17import "github.com/google/blueprint"
18
19// Dependency tags can implement this interface and return true from InstallDepNeeded to annotate
20// that the installed files of the parent should depend on the installed files of the child.
21type InstallNeededDependencyTag interface {
22	// If InstallDepNeeded returns true then the installed files of the parent will depend on the
23	// installed files of the child.
24	InstallDepNeeded() bool
25}
26
27// Dependency tags can embed this struct to annotate that the installed files of the parent should
28// depend on the installed files of the child.
29type InstallAlwaysNeededDependencyTag struct{}
30
31func (i InstallAlwaysNeededDependencyTag) InstallDepNeeded() bool {
32	return true
33}
34
35var _ InstallNeededDependencyTag = InstallAlwaysNeededDependencyTag{}
36
37// IsInstallDepNeeded returns true if the dependency tag implements the InstallNeededDependencyTag
38// interface and the InstallDepNeeded returns true, meaning that the installed files of the parent
39// should depend on the installed files of the child.
40func IsInstallDepNeeded(tag blueprint.DependencyTag) bool {
41	if i, ok := tag.(InstallNeededDependencyTag); ok {
42		return i.InstallDepNeeded()
43	}
44	return false
45}
46