// Copyright 2025 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.

edition = "2023";

package build_project;

// Tells blaze how to respond when builds and tests set flags that don't match
// canonical project settings. Doesn't apply to TAP builds.
//
// All policies apply to flags set at the command line or in a user blazerc.
// Global blazerc flags that aren't hidden behind a --config are always allowed,
// egardless of policy.
//
// See https://github.com/bazelbuild/bazel/issues/24839.
enum EnforcementPolicy {
  // Policy not specified
  // (https://protobuf.dev/programming-guides/editions/#enum-default).
  ENFORCEMENT_POLICY_UNSPECIFIED = 0;
  // Warn when a developer sets flags that aren't specified in the project's
  // configuration file.
  //
  // For example: "$ blaze build //foo --define a=1" emits a warning when
  // //foo's PROJECT.scl sets "--compilation_mode-opt". But "$ blaze build //foo
  // --compilation_mode=opt" emits no warning.
  WARN = 1;
  // Fail when a developer sets flags that conflict with the project's
  // canonical flags.
  //
  // For example, "$ blaze build //foo -compilation_mode=dbg" fails the build
  // when //foo's PROJECT.scl sets "--compilation_mode=opt". But "$ blaze build
  // //foo --compilation_mode=opt" and "$ blaze build //foo
  // --define unrelated=1" both succeed.
  COMPATIBLE = 2;
  // Fail when a developer sets flags that don't exactly match project flags.
  //
  // For example, "$ blaze build //foo --define unrelated=1" fails the build
  // when //foo's PROJECT.scl sets "--compilation_mode=opt". But "$ blaze build
  // //foo --compilation_mode=opt" succeeds.
  STRICT = 3;
}
