Make gn.py support root directories other than 'src'.

In https://codereview.chromium.org/341533006/ a change
was made so that gn.py is not looking for the .gn file
to identify the root of the checkout. This breaks
GN functionality for projects that uses gclient but
have a top directory named something else than 'src'.

This change adds support for arbitrarily named primary (the first)
solutions in the .gclient file.
It also adds a check for the generated GN path so a friendly
error message can be printed if the GN executable cannot be found.


BUG=389883
TESTED=Various cases of Chromium, WebRTC and custom checkouts
with .gclient containing empty solution list, solution missing the
'name' key and so on.

Review URL: https://codereview.chromium.org/538393002

git-svn-id: svn://svn.chromium.org/chrome/trunk/tools/depot_tools@291819 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/gn.py b/gn.py
index e3bcc97..325e685 100755
--- a/gn.py
+++ b/gn.py
@@ -24,9 +24,13 @@
     print >> sys.stderr, ('gn.py: Could not find checkout in any parent of '
                           'the current path.\nThis must be run inside a '
                           'checkout.')
-    sys.exit(1)
+    return 1
   gn_path = os.path.join(bin_path, 'gn' + gclient_utils.GetExeSuffix())
-  return subprocess.call([gn_path] + sys.argv[1:])
+  if not os.path.exists(gn_path):
+    print >> sys.stderr, 'gn.py: Could not find gn executable at: %s' % gn_path
+    return 2
+  else:
+    return subprocess.call([gn_path] + sys.argv[1:])
 
 
 if __name__ == '__main__':