# Bazel settings that apply to this repository.
# Take care to document any settings that you expect users to apply.
# Settings that apply only to CI are in .github/workflows/ci.bazelrc.

# Allow the Bazel server to check directory sources for changes.
# Avoids warning spam with rules_nodejs feature that models node_modules as directories.
# See https://github.com/bazelbuild/rules_nodejs/releases/tag/3.6.0.
startup --host_jvm_args=-DBAZEL_TRACK_SOURCE_DIRECTORIES=1

# In general, the rules in this repository assume that runfiles
# are enabled as we do not support no runfiles case.
#
# If you are developing on Windows, you must either run bazel
# with administrator privileges or enable developer mode. If
# you do not you may hit this error on Windows:
#
#   Bazel needs to create symlinks to build the runfiles tree.
#   Creating symlinks on Windows requires one of the following:
#       1. Bazel is run with administrator privileges.
#       2. The system version is Windows 10 Creators Update (1703) or later
#          and developer mode is enabled.
build --enable_runfiles

common --enable_platform_specific_config

# For testing our --stamp behavior.
# Normally users would use a --workspace_status_command with a script that calls `git describe`.
build --embed_label=v1.2.3

# For releasing, use --workspace_status_command and stamp
build:release --workspace_status_command "${PWD}/workspace_status.sh"
build:release -c opt --stamp

# Turn off legacy external runfiles on all platforms except Windows.
# This allows our users to turn on this flag as well, which is a performance win.
# Skylib's diff_test implementation for Windows depends on legacy external
# runfiles so we cannot disable it fully.
build:linux --nolegacy_external_runfiles
build:macos --nolegacy_external_runfiles
build:freebsd --nolegacy_external_runfiles
build:openbsd --nolegacy_external_runfiles

# Print error messages on test failure.
test --test_output=errors
# Remind us to set quick tests to short
test --test_verbose_timeout_warnings

# Load any settings specific to the current user.
# .bazelrc.user should appear in .gitignore so that settings are not shared with team members.
# This needs to be last statement in this config, as the user configuration should be able to
# overwrite flags from this file.
# See https://docs.bazel.build/versions/master/best-practices.html#bazelrc.
# Note that we use .bazelrc.user so the file appears next to .bazelrc in directory listing,
# rather than user.bazelrc as suggested in the Bazel docs.
try-import %workspace%/.bazelrc.user
