#!/usr/bin/env python import subprocess import sys from lib.util import scoped_cwd class GNProject: def __init__(self, out_dir): self.out_dir = out_dir def _get_executable_name(self): if sys.platform == 'win32': return 'gn.bat' return 'gn' def run(self, command_name, command_args): with scoped_cwd(self.out_dir): complete_args = [self._get_executable_name(), command_name, '.'] + \ command_args return subprocess.check_output(complete_args) def args(self): return GNArgs(self) class GNArgs: def __init__(self, project): self.project = project def _get_raw_value(self, name): # E.g. 'version = "1.0.0"\n' raw_output = self.project.run('args', ['--list={}'.format(name), '--short']) # E.g. 'version = "1.0.0"' name_with_raw_value = raw_output[:-1] # E.g. ['version', '"1.0.0"'] name_and_raw_value = name_with_raw_value.split(' = ') raw_value = name_and_raw_value[1] return raw_value def get_string(self, name): # Expects to get a string in double quotes, e.g. '"some_value"'. raw_value = self._get_raw_value(name) # E.g. 'some_value' (without enclosing quotes). value = raw_value[1:-1] return value def get_boolean(self, name): # Expects to get a 'true' or a 'false' string. raw_value = self._get_raw_value(name) if raw_value == 'true': return True if raw_value == 'false': return False return None def gn(out_dir): return GNProject(out_dir)