xref: /aosp_15_r20/external/bazelbuild-rules_go/go/tools/bazel/bazel.go (revision 9bb1b549b6a84214c53be0924760be030e66b93a)
1*9bb1b549SSpandan Das// Copyright 2017 Google Inc.
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 Das// Package bazel provides utilities for interacting with the surrounding Bazel environment.
16*9bb1b549SSpandan Daspackage bazel
17*9bb1b549SSpandan Das
18*9bb1b549SSpandan Dasimport (
19*9bb1b549SSpandan Das	"fmt"
20*9bb1b549SSpandan Das	"io/ioutil"
21*9bb1b549SSpandan Das	"os"
22*9bb1b549SSpandan Das)
23*9bb1b549SSpandan Das
24*9bb1b549SSpandan Dasconst TEST_SRCDIR = "TEST_SRCDIR"
25*9bb1b549SSpandan Dasconst TEST_TMPDIR = "TEST_TMPDIR"
26*9bb1b549SSpandan Dasconst TEST_WORKSPACE = "TEST_WORKSPACE"
27*9bb1b549SSpandan Das
28*9bb1b549SSpandan Das// NewTmpDir creates a new temporary directory in TestTmpDir().
29*9bb1b549SSpandan Dasfunc NewTmpDir(prefix string) (string, error) {
30*9bb1b549SSpandan Das	return ioutil.TempDir(TestTmpDir(), prefix)
31*9bb1b549SSpandan Das}
32*9bb1b549SSpandan Das
33*9bb1b549SSpandan Das// TestTmpDir returns the path the Bazel test temp directory.
34*9bb1b549SSpandan Das// If TEST_TMPDIR is not defined, it returns the OS default temp dir.
35*9bb1b549SSpandan Dasfunc TestTmpDir() string {
36*9bb1b549SSpandan Das	if tmp, ok := os.LookupEnv(TEST_TMPDIR); ok {
37*9bb1b549SSpandan Das		return tmp
38*9bb1b549SSpandan Das	}
39*9bb1b549SSpandan Das	return os.TempDir()
40*9bb1b549SSpandan Das}
41*9bb1b549SSpandan Das
42*9bb1b549SSpandan Das// SpliceDelimitedOSArgs is a utility function that scans the os.Args list for
43*9bb1b549SSpandan Das// entries delimited by the begin and end delimiters (typically the values
44*9bb1b549SSpandan Das// "-begin_files" and "-end_files" are used). Entries between these delimiters
45*9bb1b549SSpandan Das// are spliced out of from os.Args and returned to the caller.  If the ordering
46*9bb1b549SSpandan Das// of -begin_files or -end_files is malformed, error is returned.
47*9bb1b549SSpandan Dasfunc SpliceDelimitedOSArgs(begin, end string) ([]string, error) {
48*9bb1b549SSpandan Das	var files []string
49*9bb1b549SSpandan Das	beginFiles, endFiles := -1, -1
50*9bb1b549SSpandan Das	for i, arg := range os.Args {
51*9bb1b549SSpandan Das		if arg == begin {
52*9bb1b549SSpandan Das			beginFiles = i
53*9bb1b549SSpandan Das		} else if arg == end {
54*9bb1b549SSpandan Das			endFiles = i
55*9bb1b549SSpandan Das			break
56*9bb1b549SSpandan Das		} else if arg == "--" {
57*9bb1b549SSpandan Das			break
58*9bb1b549SSpandan Das		}
59*9bb1b549SSpandan Das	}
60*9bb1b549SSpandan Das
61*9bb1b549SSpandan Das	if beginFiles >= 0 && endFiles < 0 ||
62*9bb1b549SSpandan Das		beginFiles < 0 && endFiles >= 0 ||
63*9bb1b549SSpandan Das		beginFiles >= 0 && beginFiles >= endFiles {
64*9bb1b549SSpandan Das		return nil, fmt.Errorf("error: %s, %s not set together or in order", begin, end)
65*9bb1b549SSpandan Das	}
66*9bb1b549SSpandan Das
67*9bb1b549SSpandan Das	if beginFiles >= 0 {
68*9bb1b549SSpandan Das		files = os.Args[beginFiles+1 : endFiles]
69*9bb1b549SSpandan Das		os.Args = append(os.Args[:beginFiles:beginFiles], os.Args[endFiles+1:]...)
70*9bb1b549SSpandan Das	}
71*9bb1b549SSpandan Das
72*9bb1b549SSpandan Das	return files, nil
73*9bb1b549SSpandan Das}
74