diff --git a/pym/install/variables/system.py b/pym/install/variables/system.py index ad3fa9f..e743a48 100644 --- a/pym/install/variables/system.py +++ b/pym/install/variables/system.py @@ -719,20 +719,21 @@ class VariableOsNvidiaMask(ReadonlyVariable): nvidiacards))) if not cardsid: return "" + cardsid = set(cardsid) eclassdata = readFile(nvidiaeclass) - drv_categories = re.findall('^drv_([^=]+)="', eclassdata, re.M) - drvs = map(lambda x: (x[0], x[1].replace('\\\n', '').split()), - re.findall( - '\ndrv_(%s)="(.*?)"' % "|".join(drv_categories), - eclassdata, re.S)) - mask_categories = re.findall('^mask_([^=]+)="', eclassdata, re.M) - masks = dict(map(lambda x: (x[0], x[1].replace('\\\n', '')), - re.findall('\nmask_(%s)="(.*?)"' % "|".join( - drv_categories), - eclassdata, re.S))) - drvsForCardsid = filter(lambda x: set(x[1]) & set(cardsid), drvs) - if drvsForCardsid and drvsForCardsid[0][0] in masks: - return masks[drvsForCardsid[0][0]] + reBlock = re.compile( + r"if has \$\{nvidia_gpu\}\s+\\([^;]+);\s*then(.*?)fi", re.S) + reMask = re.compile('>=x11-drivers/nvidia-drivers[^"]+') + masks = [] + for block in reBlock.findall(eclassdata): + nvidia_ids, mask_data = block + nvidia_ids = nvidia_ids.strip().replace('\\','') + nvidia_ids = {x for x in nvidia_ids.split() if x} + m = reMask.search(mask_data) + if m: + mask_str = m.group() + if cardsid & nvidia_ids: + return mask_str finally: if image: image.close()