[ninja] collect build configs
This is to know what build configs are popular among chromium developer.
Bug: 900161
Change-Id: Id07722e70fc407b3f8668080d49033da6e1a7f34
Reviewed-on: https://chromium-review.googlesource.com/c/1358034
Commit-Queue: Takuto Ikuta <[email protected]>
Reviewed-by: Shinya Kawanaka <[email protected]>
Reviewed-by: Fumitoshi Ukai <[email protected]>
diff --git a/ninjalog_uploader.py b/ninjalog_uploader.py
index 8cbc09f..b602156 100755
--- a/ninjalog_uploader.py
+++ b/ninjalog_uploader.py
@@ -24,6 +24,7 @@
import os
import platform
import socket
+import subprocess
import sys
from third_party import httplib2
@@ -37,18 +38,55 @@
except httplib2.HttpLib2Error:
return False
+def ParseGNArgs(gn_args):
+ """Parse gn_args as json and return config dictionary.
+
+ >>> ParseGNArgs("[]")
+ {}
+ >>> ParseGNArgs('[{\
+ "current": {"value": "true"}, \
+ "default": {"value": "false"}, \
+ "name": "is_component_build"}]')
+ {u'is_component_build': u'true'}
+ """
+ configs = json.loads(gn_args)
+ build_configs = {}
+ for config in configs:
+ build_configs[config["name"]] = config["current"]["value"]
+ return build_configs
+
+
def GetMetadata(cmdline, ninjalog):
"""Get metadata for uploaded ninjalog."""
- # TODO(tikuta): Support build_configs from args.gn.
-
build_dir = os.path.dirname(ninjalog)
+
+ build_configs = {}
+
+ try:
+ args = ['gn', 'args', build_dir, '--list', '--overrides-only',
+ '--short', '--json']
+ if sys.platform == 'win32':
+ # gn in PATH is bat file in windows environment (except cygwin).
+ args = ['cmd', '/c'] + args
+
+ gn_args = subprocess.check_output(args)
+ build_configs = ParseGNArgs(gn_args)
+ except subprocess.CalledProcessError as e:
+ logging.error("Failed to call gn %s", e)
+ build_configs = {}
+
+ # Stringify config.
+ for k in build_configs:
+ build_configs[k] = str(build_configs[k])
+
metadata = {
'platform': platform.system(),
'cwd': build_dir,
'hostname': socket.gethostname(),
'cpu_core': multiprocessing.cpu_count(),
'cmdline': cmdline,
+ 'build_configs': build_configs,
}
return metadata