| // 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. */ | |
| public final class GlobalRcUtils { | |
| private GlobalRcUtils() {} | |
| /* No global RC files in Bazel, so no global configs. */ | |
| public static final ImmutableList<String> ALLOWED_GLOBAL_CONFIGS = ImmutableList.of(); | |
| 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) | |
| /** Is an rc file path a global rc? */ | |
| public static boolean isGlobalRcFile(String rcFilePath) { | |
| for (String globalRc : GLOBAL_RC_FILES) { | |
| if (rcFilePath.endsWith(globalRc)) { | |
| return true; | |
| } | |
| } | |
| return false; | |
| } | |
| } |