frr/python/makevars.py

51 lines
1.2 KiB
Python
Raw Normal View History

#
# helper class to grab variables from FRR's Makefile
#
import os
import subprocess
class MakeVars(object):
'''
makevars['FOO_CFLAGS'] gets you "FOO_CFLAGS" from Makefile
'''
def __init__(self):
self._data = dict()
def getvars(self, varlist):
'''
get a batch list of variables from make. faster than individual calls.
'''
rdfd, wrfd = os.pipe()
shvars = ['shvar-%s' % s for s in varlist]
make = subprocess.Popen(['make', '-s', 'VARFD=%d' % wrfd] + shvars, pass_fds = [wrfd])
os.close(wrfd)
data = b''
rdf = os.fdopen(rdfd, 'rb')
while True:
rdata = rdf.read()
if len(rdata) == 0:
break
data += rdata
del rdf
make.wait()
data = data.decode('US-ASCII').strip().split('\n')
for row in data:
k, v = row.split('=', 1)
v = v[1:-1]
self._data[k] = v
def __getitem__(self, k):
if k not in self._data:
self.getvars([k])
return self._data[k]
def get(self, k, defval = None):
if k not in self._data:
self.getvars([k])
return self._data[k] or defval