forked from Mirror/frr
python: move MakeVars class into separate module
... so I can reuse it. Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
This commit is contained in:
parent
2768748b88
commit
879a9dc5cd
|
@ -183,6 +183,7 @@ EXTRA_DIST += \
|
|||
\
|
||||
python/clidef.py \
|
||||
python/clippy/__init__.py \
|
||||
python/makevars.py \
|
||||
\
|
||||
redhat/frr.logrotate \
|
||||
redhat/frr.pam \
|
||||
|
|
50
python/makevars.py
Normal file
50
python/makevars.py
Normal file
|
@ -0,0 +1,50 @@
|
|||
#
|
||||
# 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
|
|
@ -21,49 +21,9 @@ import sys, os, subprocess
|
|||
import re
|
||||
from collections import namedtuple
|
||||
|
||||
class MakeVars(object):
|
||||
'''
|
||||
makevars['FOO_CFLAGS'] gets you "FOO_CFLAGS" from Makefile
|
||||
'''
|
||||
def __init__(self):
|
||||
self._data = dict()
|
||||
sys.path.insert(0, os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))), 'python'))
|
||||
|
||||
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
|
||||
from makevars import MakeVars
|
||||
|
||||
SymRowBase = namedtuple('SymRow', ['target', 'object', 'name', 'address', 'klass', 'typ', 'size', 'line', 'section', 'loc'])
|
||||
class SymRow(SymRowBase):
|
||||
|
|
Loading…
Reference in a new issue