00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 import re
00020 import portage
00021
00022 SHORT_PARA_PATTERN = '-[CfIOW]\\s+\\S+|-[jl](\\s+[^-]\\S*)?|-[^-]\\S+'
00023 LONG_PARA_PATTERN = '--\\S+|--\\S+=\\S+'
00024 PARA_PATTERN = re.compile('(%s|%s)\\b' % (SHORT_PARA_PATTERN, LONG_PARA_PATTERN))
00025
00026 class MakeOpts:
00027 def __init__(self, value=None):
00028 """
00029 >>> m = MakeOpts("-C dir -f file -I dir -o file -W file -j 3 -l 4 -j -j3 -l --always-make")
00030 >>> m.get()
00031 ['-C dir', '-f file', '-I dir', '-W file', '-j 3', '-l 4', '-j', '-j3', '-l', '--always-make']
00032 """
00033 if value is None:
00034 value = portage.settings['MAKEOPTS']
00035 self._makeopts = self._parse(value)
00036
00037 def _parse(self, flags):
00038 list = []
00039 for m in re.finditer(PARA_PATTERN, flags):
00040 text = re.sub('\\s{2,}', ' ', m.group())
00041 list.append(text)
00042 return list
00043
00044 def get(self):
00045 return self._makeopts
00046
00047 def serialize(self):
00048 return self._makeopts
00049
00050 def dump(self):
00051 print 'MAKEOPTS: ' + str(self.get())
00052 print
00053
00054
00055 if __name__ == '__main__':
00056 import doctest
00057 doctest.testmod(verbose=True)