-
Notifications
You must be signed in to change notification settings - Fork 30
/
update_python_in_workspace.py
77 lines (66 loc) · 2.09 KB
/
update_python_in_workspace.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
# Used during Docker builds to update WORKSPACE to
# reflect the python installation in the Docker file
# Basically just finds the relevant 'path = ' sections
# in WORKSPACE and updates them
# We assume that the caller has copied the original to a
# safe location, this script writes to stdout.
# cp WORKSPACE /tmp
# update_python_in_workspace /tmp/WORKSPACE > WORKSPACE
import logging
import os
import re
import sys
import sysconfig
have_pybind = True
try:
from pybind11 import *
except:
logging.info("No pybind11 build will fail")
have_pybind = False
# Scan a WORKSPACE file and change the 'path = ' directive
# for new_local_repository's 'pybind11' and 'python'.
# We assume that each new_local_repository contains
# 'name = ' BEFORE 'path ='.
def update_python_in_workspace(argv):
# The location of python and pybind11 includes
python_install = sysconfig.get_path('include')
logging.info("Python in %s", python_install)
pybind_install = ""
if have_pybind:
pybind_install = get_include()
logging.info("pybind11 in %s", pybind_install)
in_new_local_repository = False
# The name of the new_local_repository we are in
name = ""
with open(argv[1], "r") as reader:
for line in reader:
line = line.rstrip()
if line.startswith("new_local_repository"):
in_new_local_repository = True
print(line)
continue
if line.startswith(")"):
if in_new_local_repository:
name = ""
in_new_local_repository = False
print(line)
continue
m = re.search(r'name *= *"(\S+)"', line)
if m:
name = m[1]
print(line)
continue
m = re.search(r'path *= *"(\S+)"', line)
if m:
if not in_new_local_repository:
print(line)
elif name == "python":
print(' path = "' + python_install + '",')
elif name == "pybind11" and len(pybind_install) > 0:
print(' path = "' + pybind_install + '",')
else:
print(line)
else:
print(line)
if __name__ == "__main__":
update_python_in_workspace(sys.argv)