gen_git_source.py fails with an "ImportError: No module named builtins" on a default installation of Python 2 (at least, the one that comes with macOS). This can be worked around by installing the "future" package from pip. However, instead of requiring users to go through this extra step, we can simply run the script using Python 3 if it's installed. The script works on a default installation of Python 3, without requiring extra packages.
72 lines
2.2 KiB
Python
72 lines
2.2 KiB
Python
"""Repository rule for Git autoconfiguration.
|
|
|
|
`git_configure` depends on the following environment variables:
|
|
|
|
* `PYTHON_BIN_PATH`: location of python binary.
|
|
"""
|
|
|
|
_PYTHON_BIN_PATH = "PYTHON_BIN_PATH"
|
|
|
|
def _fail(msg):
|
|
"""Output failure message when auto configuration fails."""
|
|
red = "\033[0;31m"
|
|
no_color = "\033[0m"
|
|
fail("%sGit Configuration Error:%s %s\n" % (red, no_color, msg))
|
|
|
|
def _get_python_bin(repository_ctx):
|
|
"""Gets the python bin path."""
|
|
python_bin = repository_ctx.os.environ.get(_PYTHON_BIN_PATH)
|
|
if python_bin != None:
|
|
return python_bin
|
|
python_bin_path = repository_ctx.which("python3")
|
|
if python_bin_path != None:
|
|
return str(python_bin_path)
|
|
python_bin_path = repository_ctx.which("python")
|
|
if python_bin_path != None:
|
|
return str(python_bin_path)
|
|
_fail("Cannot find python in PATH, please make sure " +
|
|
"python is installed and add its directory in PATH, or --define " +
|
|
"%s='/something/else'.\nPATH=%s" % (
|
|
_PYTHON_BIN_PATH,
|
|
repository_ctx.os.environ.get("PATH", ""),
|
|
))
|
|
|
|
def _git_conf_impl(repository_ctx):
|
|
repository_ctx.template(
|
|
"BUILD",
|
|
Label("//third_party/git:BUILD.tpl"),
|
|
)
|
|
|
|
tensorflow_root_path = str(repository_ctx.path(
|
|
Label("@org_tensorflow//:BUILD"),
|
|
))[:-len("BUILD")]
|
|
python_script_path = repository_ctx.path(
|
|
Label("@org_tensorflow//tensorflow/tools/git:gen_git_source.py"),
|
|
)
|
|
generated_files_path = repository_ctx.path("gen")
|
|
|
|
r = repository_ctx.execute(
|
|
["test", "-f", "%s/.git/logs/HEAD" % tensorflow_root_path],
|
|
)
|
|
if r.return_code == 0:
|
|
unused_var = repository_ctx.path(Label("//:.git/HEAD")) # pylint: disable=unused-variable
|
|
|
|
result = repository_ctx.execute([
|
|
_get_python_bin(repository_ctx),
|
|
python_script_path,
|
|
"--configure",
|
|
tensorflow_root_path,
|
|
"--gen_root_path",
|
|
generated_files_path,
|
|
], quiet = False)
|
|
|
|
if not result.return_code == 0:
|
|
_fail(result.stderr)
|
|
|
|
git_configure = repository_rule(
|
|
implementation = _git_conf_impl,
|
|
environ = [
|
|
_PYTHON_BIN_PATH,
|
|
],
|
|
)
|