xref: /aosp_15_r20/external/bazelbuild-rules_go/go/tools/gopackagesdriver/utils.go (revision 9bb1b549b6a84214c53be0924760be030e66b93a)
1*9bb1b549SSpandan Das// Copyright 2021 The Bazel Authors. All rights reserved.
2*9bb1b549SSpandan Das//
3*9bb1b549SSpandan Das// Licensed under the Apache License, Version 2.0 (the "License");
4*9bb1b549SSpandan Das// you may not use this file except in compliance with the License.
5*9bb1b549SSpandan Das// You may obtain a copy of the License at
6*9bb1b549SSpandan Das//
7*9bb1b549SSpandan Das//    http://www.apache.org/licenses/LICENSE-2.0
8*9bb1b549SSpandan Das//
9*9bb1b549SSpandan Das// Unless required by applicable law or agreed to in writing, software
10*9bb1b549SSpandan Das// distributed under the License is distributed on an "AS IS" BASIS,
11*9bb1b549SSpandan Das// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12*9bb1b549SSpandan Das// See the License for the specific language governing permissions and
13*9bb1b549SSpandan Das// limitations under the License.
14*9bb1b549SSpandan Das
15*9bb1b549SSpandan Daspackage main
16*9bb1b549SSpandan Das
17*9bb1b549SSpandan Dasimport (
18*9bb1b549SSpandan Das	"context"
19*9bb1b549SSpandan Das	"fmt"
20*9bb1b549SSpandan Das	"go/build"
21*9bb1b549SSpandan Das	"os"
22*9bb1b549SSpandan Das	"os/signal"
23*9bb1b549SSpandan Das	"path"
24*9bb1b549SSpandan Das	"path/filepath"
25*9bb1b549SSpandan Das)
26*9bb1b549SSpandan Das
27*9bb1b549SSpandan Dasfunc getenvDefault(key, defaultValue string) string {
28*9bb1b549SSpandan Das	if v, ok := os.LookupEnv(key); ok {
29*9bb1b549SSpandan Das		return v
30*9bb1b549SSpandan Das	}
31*9bb1b549SSpandan Das	return defaultValue
32*9bb1b549SSpandan Das}
33*9bb1b549SSpandan Das
34*9bb1b549SSpandan Dasfunc concatStringsArrays(values ...[]string) []string {
35*9bb1b549SSpandan Das	ret := []string{}
36*9bb1b549SSpandan Das	for _, v := range values {
37*9bb1b549SSpandan Das		ret = append(ret, v...)
38*9bb1b549SSpandan Das	}
39*9bb1b549SSpandan Das	return ret
40*9bb1b549SSpandan Das}
41*9bb1b549SSpandan Das
42*9bb1b549SSpandan Dasfunc ensureAbsolutePathFromWorkspace(path string) string {
43*9bb1b549SSpandan Das	if filepath.IsAbs(path) {
44*9bb1b549SSpandan Das		return path
45*9bb1b549SSpandan Das	}
46*9bb1b549SSpandan Das	return filepath.Join(workspaceRoot, path)
47*9bb1b549SSpandan Das}
48*9bb1b549SSpandan Das
49*9bb1b549SSpandan Dasfunc signalContext(parentCtx context.Context, signals ...os.Signal) (ctx context.Context, stop context.CancelFunc) {
50*9bb1b549SSpandan Das	ctx, cancel := context.WithCancel(parentCtx)
51*9bb1b549SSpandan Das	ch := make(chan os.Signal, 1)
52*9bb1b549SSpandan Das	go func() {
53*9bb1b549SSpandan Das		select {
54*9bb1b549SSpandan Das		case <-ch:
55*9bb1b549SSpandan Das			cancel()
56*9bb1b549SSpandan Das		case <-ctx.Done():
57*9bb1b549SSpandan Das		}
58*9bb1b549SSpandan Das	}()
59*9bb1b549SSpandan Das	signal.Notify(ch, signals...)
60*9bb1b549SSpandan Das
61*9bb1b549SSpandan Das	return ctx, cancel
62*9bb1b549SSpandan Das}
63*9bb1b549SSpandan Das
64*9bb1b549SSpandan Dasfunc isLocalPattern(pattern string) bool {
65*9bb1b549SSpandan Das	return build.IsLocalImport(pattern) || filepath.IsAbs(pattern)
66*9bb1b549SSpandan Das}
67*9bb1b549SSpandan Das
68*9bb1b549SSpandan Dasfunc packageID(pattern string) string {
69*9bb1b549SSpandan Das	pattern = path.Clean(pattern)
70*9bb1b549SSpandan Das	if filepath.IsAbs(pattern) {
71*9bb1b549SSpandan Das		if relPath, err := filepath.Rel(workspaceRoot, pattern); err == nil {
72*9bb1b549SSpandan Das			pattern = relPath
73*9bb1b549SSpandan Das		}
74*9bb1b549SSpandan Das	}
75*9bb1b549SSpandan Das
76*9bb1b549SSpandan Das	return fmt.Sprintf("//%s", pattern)
77*9bb1b549SSpandan Das}
78