xref: /aosp_15_r20/external/wayland-protocols/locations.go (revision 6c119a463dd5c45dd05bbe67429293292dde15ee)
1*6c119a46SAndroid Build Coastguard Worker// Copyright 2023 The Android Open Source Project
2*6c119a46SAndroid Build Coastguard Worker//
3*6c119a46SAndroid Build Coastguard Worker// Licensed under the Apache License, Version 2.0 (the "License");
4*6c119a46SAndroid Build Coastguard Worker// you may not use this file except in compliance with the License.
5*6c119a46SAndroid Build Coastguard Worker// You may obtain a copy of the License at
6*6c119a46SAndroid Build Coastguard Worker//
7*6c119a46SAndroid Build Coastguard Worker//     http://www.apache.org/licenses/LICENSE-2.0
8*6c119a46SAndroid Build Coastguard Worker//
9*6c119a46SAndroid Build Coastguard Worker// Unless required by applicable law or agreed to in writing, software
10*6c119a46SAndroid Build Coastguard Worker// distributed under the License is distributed on an "AS IS" BASIS,
11*6c119a46SAndroid Build Coastguard Worker// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12*6c119a46SAndroid Build Coastguard Worker// See the License for the specific language governing permissions and
13*6c119a46SAndroid Build Coastguard Worker// limitations under the License.
14*6c119a46SAndroid Build Coastguard Worker
15*6c119a46SAndroid Build Coastguard Workerpackage soong_wayland_protocol_codegen
16*6c119a46SAndroid Build Coastguard Worker
17*6c119a46SAndroid Build Coastguard Workerimport (
18*6c119a46SAndroid Build Coastguard Worker	"strings"
19*6c119a46SAndroid Build Coastguard Worker
20*6c119a46SAndroid Build Coastguard Worker	"android/soong/android"
21*6c119a46SAndroid Build Coastguard Worker)
22*6c119a46SAndroid Build Coastguard Worker
23*6c119a46SAndroid Build Coastguard Worker// Note: the types defined here are identical to the types defined in the
24*6c119a46SAndroid Build Coastguard Worker// locations.go file included as "android/soong/genrule" package.
25*6c119a46SAndroid Build Coastguard Worker// Unfortunately all the types defined there are not public, which means we
26*6c119a46SAndroid Build Coastguard Worker// can't reference them from that package.
27*6c119a46SAndroid Build Coastguard Worker
28*6c119a46SAndroid Build Coastguard Worker// location is used to service $(location) and $(locations) entries in
29*6c119a46SAndroid Build Coastguard Worker// wayland_protocol_codegen commands.
30*6c119a46SAndroid Build Coastguard Workertype location interface {
31*6c119a46SAndroid Build Coastguard Worker	Paths(cmd *android.RuleBuilderCommand) []string
32*6c119a46SAndroid Build Coastguard Worker	String() string
33*6c119a46SAndroid Build Coastguard Worker}
34*6c119a46SAndroid Build Coastguard Worker
35*6c119a46SAndroid Build Coastguard Worker// inputLocation is a $(location) result for an entry in the srcs property.
36*6c119a46SAndroid Build Coastguard Workertype inputLocation struct {
37*6c119a46SAndroid Build Coastguard Worker	paths android.Paths
38*6c119a46SAndroid Build Coastguard Worker}
39*6c119a46SAndroid Build Coastguard Worker
40*6c119a46SAndroid Build Coastguard Workerfunc (l inputLocation) String() string {
41*6c119a46SAndroid Build Coastguard Worker	return strings.Join(l.paths.Strings(), " ")
42*6c119a46SAndroid Build Coastguard Worker}
43*6c119a46SAndroid Build Coastguard Worker
44*6c119a46SAndroid Build Coastguard Workerfunc (l inputLocation) Paths(cmd *android.RuleBuilderCommand) []string {
45*6c119a46SAndroid Build Coastguard Worker	return cmd.PathsForInputs(l.paths)
46*6c119a46SAndroid Build Coastguard Worker}
47*6c119a46SAndroid Build Coastguard Worker
48*6c119a46SAndroid Build Coastguard Workervar _ location = inputLocation{}
49*6c119a46SAndroid Build Coastguard Worker
50*6c119a46SAndroid Build Coastguard Worker// outputLocation is a $(location) result for an entry in the out property.
51*6c119a46SAndroid Build Coastguard Workertype outputLocation struct {
52*6c119a46SAndroid Build Coastguard Worker	path android.WritablePath
53*6c119a46SAndroid Build Coastguard Worker}
54*6c119a46SAndroid Build Coastguard Worker
55*6c119a46SAndroid Build Coastguard Workerfunc (l outputLocation) String() string {
56*6c119a46SAndroid Build Coastguard Worker	return l.path.String()
57*6c119a46SAndroid Build Coastguard Worker}
58*6c119a46SAndroid Build Coastguard Worker
59*6c119a46SAndroid Build Coastguard Workerfunc (l outputLocation) Paths(cmd *android.RuleBuilderCommand) []string {
60*6c119a46SAndroid Build Coastguard Worker	return []string{cmd.PathForOutput(l.path)}
61*6c119a46SAndroid Build Coastguard Worker}
62*6c119a46SAndroid Build Coastguard Worker
63*6c119a46SAndroid Build Coastguard Workervar _ location = outputLocation{}
64*6c119a46SAndroid Build Coastguard Worker
65*6c119a46SAndroid Build Coastguard Worker// toolLocation is a $(location) result for an entry in the tools or
66*6c119a46SAndroid Build Coastguard Worker// tool_files property.
67*6c119a46SAndroid Build Coastguard Workertype toolLocation struct {
68*6c119a46SAndroid Build Coastguard Worker	paths android.Paths
69*6c119a46SAndroid Build Coastguard Worker}
70*6c119a46SAndroid Build Coastguard Worker
71*6c119a46SAndroid Build Coastguard Workerfunc (l toolLocation) String() string {
72*6c119a46SAndroid Build Coastguard Worker	return strings.Join(l.paths.Strings(), " ")
73*6c119a46SAndroid Build Coastguard Worker}
74*6c119a46SAndroid Build Coastguard Worker
75*6c119a46SAndroid Build Coastguard Workerfunc (l toolLocation) Paths(cmd *android.RuleBuilderCommand) []string {
76*6c119a46SAndroid Build Coastguard Worker	return cmd.PathsForTools(l.paths)
77*6c119a46SAndroid Build Coastguard Worker}
78*6c119a46SAndroid Build Coastguard Worker
79*6c119a46SAndroid Build Coastguard Workervar _ location = toolLocation{}
80*6c119a46SAndroid Build Coastguard Worker
81*6c119a46SAndroid Build Coastguard Worker// packagedToolLocation is a $(location) result for an entry in the tools or
82*6c119a46SAndroid Build Coastguard Worker// tool_files property that has PackagingSpecs.
83*6c119a46SAndroid Build Coastguard Workertype packagedToolLocation struct {
84*6c119a46SAndroid Build Coastguard Worker	spec android.PackagingSpec
85*6c119a46SAndroid Build Coastguard Worker}
86*6c119a46SAndroid Build Coastguard Worker
87*6c119a46SAndroid Build Coastguard Workerfunc (l packagedToolLocation) String() string {
88*6c119a46SAndroid Build Coastguard Worker	return l.spec.FileName()
89*6c119a46SAndroid Build Coastguard Worker}
90*6c119a46SAndroid Build Coastguard Worker
91*6c119a46SAndroid Build Coastguard Workerfunc (l packagedToolLocation) Paths(cmd *android.RuleBuilderCommand) []string {
92*6c119a46SAndroid Build Coastguard Worker	return []string{cmd.PathForPackagedTool(l.spec)}
93*6c119a46SAndroid Build Coastguard Worker}
94*6c119a46SAndroid Build Coastguard Worker
95*6c119a46SAndroid Build Coastguard Workervar _ location = packagedToolLocation{}
96*6c119a46SAndroid Build Coastguard Worker
97*6c119a46SAndroid Build Coastguard Worker// errorLocation is a placeholder for a $(location) result that returns
98*6c119a46SAndroid Build Coastguard Worker// garbage to break the command when error reporting is delayed by
99*6c119a46SAndroid Build Coastguard Worker// ALLOW_MISSING_DEPENDENCIES=true.
100*6c119a46SAndroid Build Coastguard Workertype errorLocation struct {
101*6c119a46SAndroid Build Coastguard Worker	err string
102*6c119a46SAndroid Build Coastguard Worker}
103*6c119a46SAndroid Build Coastguard Worker
104*6c119a46SAndroid Build Coastguard Workerfunc (l errorLocation) String() string {
105*6c119a46SAndroid Build Coastguard Worker	return l.err
106*6c119a46SAndroid Build Coastguard Worker}
107*6c119a46SAndroid Build Coastguard Worker
108*6c119a46SAndroid Build Coastguard Workerfunc (l errorLocation) Paths(cmd *android.RuleBuilderCommand) []string {
109*6c119a46SAndroid Build Coastguard Worker	return []string{l.err}
110*6c119a46SAndroid Build Coastguard Worker}
111*6c119a46SAndroid Build Coastguard Worker
112*6c119a46SAndroid Build Coastguard Workervar _ location = errorLocation{}
113