blob: a99e997ff65d70a4e53c333293735549affe1351 [file] [log] [blame]
# -*- coding: utf-8 -*-
# Copyright 2018 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Common functions used from multiple files.
"""
from __future__ import print_function
# Usually we should use cros_build_lib.RunCommand over subprocess.check_output
# to avoid possible issues in subprocess. Here we use subprocess exceptionally,
# because the usage is simple enough, and lower overhead is important as it
# being called about ten times per each ebuild. See crbug.com/868820 for the
# time comparison.
import subprocess
def parse_shell_args(s):
"""Parses the string representing shell arguments (e.g. C++ flags) as a list.
For example, '''-DFOO=a -DBAR='"b c"' -DBAZ="d e f"''' becomes
['-DFOO=a', '-DBAR="b c"', '-DBAZ=d e f'].
For GN, strings to be passed to the shell must have been parsed, as otherwise
they are escaped by GN on emitting ninja files.
"""
# The dummy variable prevents the first value in s from interpreted as a flag
# for echo. IFS is set to separate $* with newlines.
output = subprocess.check_output(
['eval "set -- dummy $0"; IFS=$\'\\n\'; printf "%s" "$*"', s], shell=True,
encoding='utf-8')
return output.splitlines()[1:]