gn.py 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. #!/usr/bin/env python
  2. import subprocess
  3. import sys
  4. from lib.util import scoped_cwd
  5. class GNProject:
  6. def __init__(self, out_dir):
  7. self.out_dir = out_dir
  8. def _get_executable_name(self):
  9. if sys.platform == 'win32':
  10. return 'gn.bat'
  11. return 'gn'
  12. def run(self, command_name, command_args):
  13. with scoped_cwd(self.out_dir):
  14. complete_args = [self._get_executable_name(), command_name, '.'] + \
  15. command_args
  16. return subprocess.check_output(complete_args)
  17. def args(self):
  18. return GNArgs(self)
  19. class GNArgs:
  20. def __init__(self, project):
  21. self.project = project
  22. def _get_raw_value(self, name):
  23. # E.g. 'version = "1.0.0"\n'
  24. raw_output = self.project.run('args',
  25. ['--list={}'.format(name), '--short'])
  26. # E.g. 'version = "1.0.0"'
  27. name_with_raw_value = raw_output[:-1]
  28. # E.g. ['version', '"1.0.0"']
  29. name_and_raw_value = name_with_raw_value.split(' = ')
  30. raw_value = name_and_raw_value[1]
  31. return raw_value
  32. def get_string(self, name):
  33. # Expects to get a string in double quotes, e.g. '"some_value"'.
  34. raw_value = self._get_raw_value(name)
  35. # E.g. 'some_value' (without enclosing quotes).
  36. value = raw_value[1:-1]
  37. return value
  38. def get_boolean(self, name):
  39. # Expects to get a 'true' or a 'false' string.
  40. raw_value = self._get_raw_value(name)
  41. if raw_value == 'true':
  42. return True
  43. if raw_value == 'false':
  44. return False
  45. return None
  46. def gn(out_dir):
  47. return GNProject(out_dir)