blob: c6623a441a143accc52f7113f965f645ac00befe [file] [log] [blame]
// Copyright 2024 The Bazel Authors. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package com.google.devtools.common.options;
import com.google.common.collect.ImmutableList;
import java.util.function.Predicate;
/** Utility functions for global RC files. */
final class GlobalRcUtils {
private GlobalRcUtils() {}
private static final ImmutableList<String> GLOBAL_RC_FILES =
ImmutableList.of(
// LINT.IfChange
"client",
// LINT.ThenChange(//src/main/cpp/option_processor.cc)
// LINT.IfChange
"Invocation policy"
// LINT.ThenChange(//src/main/java/com/google/devtools/common/options/InvocationPolicyEnforcer.java)
);
/** No global RC files in Bazel. Consider "client" options to be global. */
static final Predicate<ParsedOptionDescription> IS_GLOBAL_RC_OPTION =
// LINT.IfChange
(option) -> {
for (String globalRc : GLOBAL_RC_FILES) {
// Don't match the full RC file location to be resilient to builds with the same global
// RC but different workspaces.
if (option.getOrigin().getSource() != null
&& option.getOrigin().getSource().endsWith(globalRc)) {
return true;
}
if (option.getExpandedFrom() != null) {
if (option.getExpandedFrom().getOrigin().getSource() != null
&& option.getExpandedFrom().getOrigin().getSource().endsWith(globalRc)) {
return true;
}
}
}
return false;
};
// LINT.ThenChange(//src/main/cpp/option_processor.cc,
// src/main/java/com/google/devtools/common/options/InvocationPolicyEnforcer.java
}