[llvm] r355694 - gn build: Unbreak finding a working `gn` on $PATH on Unix after r355645

Nico Weber via llvm-commits llvm-commits at lists.llvm.org
Fri Mar 8 05:02:00 PST 2019


Author: nico
Date: Fri Mar  8 05:01:58 2019
New Revision: 355694

URL: http://llvm.org/viewvc/llvm-project?rev=355694&view=rev
Log:
gn build: Unbreak finding a working `gn` on $PATH on Unix after r355645

>From the Python subprocess docs:

   If shell is True, it is recommended to pass args as a string rather than as
   a sequence.

   [...]

   If args is a sequence, the first item specifies the command string, and any
   additional items will be treated as additional arguments to the shell itself.

Prior to this change, the `--version` would be passed to the shell, not to
a potential gn binary on $PATH, and running `gn` without any arguments makes
it exit with an exit code != 0, so the script would think that there wasn't
a working gn binary on $PATH.

Fix this by following the documentation's recommendation of using a string
now that we pass shell=True. I tested this on macOS and Windows, each with
the three cases of

- no gn on PATH (should run gn downloaded by get.py if present,
  else suggest running get.py)
- broken gn wrapper on PATH (should behave like the previous item)
- working gn on PATH (should use gn on PATH)

Modified:
    llvm/trunk/utils/gn/gn.py

Modified: llvm/trunk/utils/gn/gn.py
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/gn/gn.py?rev=355694&r1=355693&r2=355694&view=diff
==============================================================================
--- llvm/trunk/utils/gn/gn.py (original)
+++ llvm/trunk/utils/gn/gn.py Fri Mar  8 05:01:58 2019
@@ -38,9 +38,9 @@ def print_no_gn(mention_get):
 def main():
     # Find real gn executable.
     gn = 'gn'
-    if subprocess.call([gn, '--version'], stdout=open(os.devnull, 'w'),
-                                          stderr=subprocess.STDOUT,
-                                          shell=True) != 0:
+    if subprocess.call('gn --version', stdout=open(os.devnull, 'w'),
+                                       stderr=subprocess.STDOUT,
+                                       shell=True) != 0:
         # Not on path. See if get.py downloaded a prebuilt binary and run that
         # if it's there, or suggest to run get.py if it isn't.
         platform = get_platform()




More information about the llvm-commits mailing list