fix(local-toolchains): don't watch non-existent include directory (#3048)
Apparently, Macs can mis-report their include directory.
Since includes are only needed if C extensions are built, skip watching
the directory
if it doesn't exist.
Work around for
https://github.com/bazel-contrib/rules_python/issues/3043
---------
Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
Co-authored-by: Ignas Anikevicius <240938+aignas@users.noreply.github.com>
diff --git a/CHANGELOG.md b/CHANGELOG.md
index d8dda48..da22192 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -79,6 +79,9 @@
* (runfiles) The pypi runfiles package now includes `py.typed` to indicate it
supports type checking
([#2503](https://github.com/bazel-contrib/rules_python/issues/2503)).
+* (toolchains) `local_runtime_repo` now checks if the include directory exists
+ before attempting to watch it, fixing issues on macOS with system Python
+ ({gh-issue}`3043`).
{#v0-0-0-added}
### Added
diff --git a/python/private/local_runtime_repo.bzl b/python/private/local_runtime_repo.bzl
index ec0643e..3b4b4c0 100644
--- a/python/private/local_runtime_repo.bzl
+++ b/python/private/local_runtime_repo.bzl
@@ -99,7 +99,15 @@
interpreter_path = info["base_executable"]
# NOTE: Keep in sync with recursive glob in define_local_runtime_toolchain_impl
- repo_utils.watch_tree(rctx, rctx.path(info["include"]))
+ include_path = rctx.path(info["include"])
+
+ # The reported include path may not exist, and watching a non-existant
+ # path is an error. Silently skip, since includes are only necessary
+ # if C extensions are built.
+ if include_path.exists and include_path.is_dir:
+ repo_utils.watch_tree(rctx, include_path)
+ else:
+ pass
# The cc_library.includes values have to be non-absolute paths, otherwise
# the toolchain will give an error. Work around this error by making them