Index: tools/gn/setup.cc |
diff --git a/tools/gn/setup.cc b/tools/gn/setup.cc |
index 192230d67d99ef60c89b003a970c6c0a19744b35..7fc4a2ed4f29e09857304d0dc9abefc38fe9acf8 100644 |
--- a/tools/gn/setup.cc |
+++ b/tools/gn/setup.cc |
@@ -98,6 +98,11 @@ Variables |
build file containing this target name. This defaults to "//:" which will |
cause the file //BUILD.gn to be loaded. |
+ script_executable [optional] |
+ Path to specific Python executable or potentially a different language |
+ interpreter that is used to execute scripts in action targets and |
+ exec_script calls. |
+ |
secondary_source [optional] |
Label of an alternate directory tree to find input files. When searching |
for a BUILD.gn file (or the build config file discussed above), the file |
@@ -314,13 +319,6 @@ bool Setup::DoSetup(const std::string& build_dir, bool force_create) { |
if (!FillBuildDir(build_dir, !force_create)) |
return false; |
- // Check for unused variables in the .gn file. |
- Err err; |
- if (!dotfile_scope_.CheckForUnusedVars(&err)) { |
- err.PrintToStdout(); |
- return false; |
- } |
- |
// Apply project-specific default (if specified). |
// Must happen before FillArguments(). |
if (default_args_) { |
@@ -333,7 +331,15 @@ bool Setup::DoSetup(const std::string& build_dir, bool force_create) { |
if (!FillArguments(*cmdline)) |
return false; |
} |
- FillPythonPath(*cmdline); |
+ if (!FillPythonPath(*cmdline)) |
+ return false; |
+ |
+ // Check for unused variables in the .gn file. |
+ Err err; |
+ if (!dotfile_scope_.CheckForUnusedVars(&err)) { |
+ err.PrintToStdout(); |
+ return false; |
+ } |
return true; |
} |
@@ -626,12 +632,21 @@ bool Setup::FillBuildDir(const std::string& build_dir, bool require_exists) { |
return true; |
} |
-void Setup::FillPythonPath(const base::CommandLine& cmdline) { |
+bool Setup::FillPythonPath(const base::CommandLine& cmdline) { |
// Trace this since it tends to be a bit slow on Windows. |
ScopedTrace setup_trace(TraceItem::TRACE_SETUP, "Fill Python Path"); |
+ const Value* value = dotfile_scope_.GetValue("script_executable", true); |
if (cmdline.HasSwitch(switches::kScriptExecutable)) { |
build_settings_.set_python_path( |
cmdline.GetSwitchValuePath(switches::kScriptExecutable)); |
+ } else if (value) { |
+ Err err; |
+ if (!value->VerifyTypeIs(Value::STRING, &err)) { |
+ err.PrintToStdout(); |
+ return false; |
+ } |
+ build_settings_.set_python_path( |
+ base::FilePath(UTF8ToFilePath(value->string_value()))); |
} else { |
#if defined(OS_WIN) |
base::FilePath python_path = FindWindowsPython(); |
@@ -645,6 +660,7 @@ void Setup::FillPythonPath(const base::CommandLine& cmdline) { |
build_settings_.set_python_path(base::FilePath("python")); |
#endif |
} |
+ return true; |
} |
bool Setup::RunConfigFile() { |