| Index: tools/gn/variables.cc
 | 
| diff --git a/tools/gn/variables.cc b/tools/gn/variables.cc
 | 
| index feea7b4b0c56c85a93e8aef2c65524eb00f5bfc4..aaa5159e184c92366437c55673d308b47cb9c3e9 100644
 | 
| --- a/tools/gn/variables.cc
 | 
| +++ b/tools/gn/variables.cc
 | 
| @@ -79,159 +79,98 @@ const char kPythonPath_Help[] =
 | 
|      "  requires Python. You will normally not need this when invoking scripts\n"
 | 
|      "  since GN automatically finds it for you.\n";
 | 
|  
 | 
| -const char kRelativeBuildToSourceRootDir[] =
 | 
| -    "relative_build_to_source_root_dir";
 | 
| -const char kRelativeBuildToSourceRootDir_HelpShort[] =
 | 
| -    "relative_build_to_source_root_dir: [string] Relative location of root";
 | 
| -const char kRelativeBuildToSourceRootDir_Help[] =
 | 
| -    "relative_build_to_source_root_dir: Relative location of root.\n"
 | 
| -    "\n"
 | 
| -    "  A relative path from the build directory to the root of the source\n"
 | 
| -    "  tree, with no terminating slash. The build directory will be the\n"
 | 
| -    "  directory when executing normal build commands (except for scripts).\n"
 | 
| -    "\n"
 | 
| -    "  If the checkout is in \"/foo/src/\" and the build directory is in\n"
 | 
| -    "  \"/foo/src/out/Debug/\" then the relative build to source root dir\n"
 | 
| -    "  will be \"../..\".\n"
 | 
| -    "\n"
 | 
| -    "  See also relative_source_root_dir.\n"
 | 
| -    "\n"
 | 
| -    "Example:\n"
 | 
| -    "  This is typically used to invoke tools checked out in the tree:\n"
 | 
| -    "\n"
 | 
| -    "  tool(\"link\") {\n"
 | 
| -    "    command = \"$relative_build_to_source_root_dir/third_party/gold/ld\n"
 | 
| -    "  }\n";
 | 
| -
 | 
| -const char kRelativeRootGenDir[] = "relative_root_gen_dir";
 | 
| -const char kRelativeRootGenDir_HelpShort[] =
 | 
| -    "relative_root_gen_dir: [string] Relative root dir for generated files.";
 | 
| -const char kRelativeRootGenDir_Help[] =
 | 
| -    "relative_root_gen_dir: Relative root for generated files.\n"
 | 
| -    "\n"
 | 
| -    "  Relative path from the directory of the current build file to the\n"
 | 
| -    "  root of the generated file directory hierarchy for the current\n"
 | 
| -    "  toolchain.\n"
 | 
| -    "\n"
 | 
| -    "  Generally scripts should use \"relative_target_output_dir\" instead.\n"
 | 
| -    "\n"
 | 
| -    "  See also \"root_gen_dir\".\n"
 | 
| -    "\n"
 | 
| -    "Example:\n"
 | 
| +const char kRootGenDir[] = "root_gen_dir";
 | 
| +const char kRootGenDir_HelpShort[] =
 | 
| +    "root_gen_dir: [string] Directory for the toolchain's generated files.";
 | 
| +const char kRootGenDir_Help[] =
 | 
| +    "root_gen_dir: Directory for the toolchain's generated files.\n"
 | 
|      "\n"
 | 
| -    "  If your current build file is in \"//tools\", you might write\n"
 | 
| -    "  args = [ \"$relative_root_gen_dir/output.txt\" ]\n";
 | 
| -
 | 
| -const char kRelativeRootOutputDir[] = "relative_root_output_dir";
 | 
| -const char kRelativeRootOutputDir_HelpShort[] =
 | 
| -    "relative_root_output_dir: [string] Relative dir for output files.";
 | 
| -const char kRelativeRootOutputDir_Help[] =
 | 
| -    "relative_root_output_dir: Relative dir for output files.\n"
 | 
| +    "  Absolute path to the root of the generated output directory tree for\n"
 | 
| +    "  the current toolchain. An example value might be \"//out/Debug/gen\".\n"
 | 
| +    "  It will not have a trailing slash.\n"
 | 
|      "\n"
 | 
| -    "  Relative path from the directory of the current build file to the\n"
 | 
| -    "  current toolchain's root build output directory.\n"
 | 
| +    "  This is primarily useful for setting up include paths for generated\n"
 | 
| +    "  files. If you are passing this to a script, you will want to pass it\n"
 | 
| +    "  through to_build_path() (see \"gn help to_build_path\") to convert it\n"
 | 
| +    "  to be relative to the build directory.\n"
 | 
|      "\n"
 | 
| -    "  Generally scripts should use \"relative_target_output_dir\" instead.\n";
 | 
| +    "  See also \"target_gen_dir\" which is usually a better location for\n"
 | 
| +    "  generated files. It will be inside the root generated dir.\n";
 | 
|  
 | 
| -extern const char kRelativeSourceRootDir[] = "relative_source_root_dir";
 | 
| -extern const char kRelativeSourceRootDir_HelpShort[] =
 | 
| -    "relative_source_root_dir: [string] Relative location of root.";
 | 
| -extern const char kRelativeSourceRootDir_Help[] =
 | 
| -    "relative_source_root_dir: Relative location of root.\n"
 | 
| +const char kRootOutDir[] = "root_out_dir";
 | 
| +const char kRootOutDir_HelpShort[] =
 | 
| +    "root_out_dir: [string] Root directory for toolchain output files.";
 | 
| +const char kRootOutDir_Help[] =
 | 
| +    "root_out_dir: [string] Root directory for toolchain output files.\n"
 | 
|      "\n"
 | 
| -    "  A relative path from the current source directory to the root of the\n"
 | 
| -    "  source tree, with no terminating slash. The build directory will be\n"
 | 
| -    "  the directory when executing scripts.\n"
 | 
| +    "  Absolute path to the root of the output directory tree for the current\n"
 | 
| +    "  toolchain. An example value might be \"//out/Debug/gen\". It will not\n"
 | 
| +    "  have a trailing slash.\n"
 | 
|      "\n"
 | 
| -    "  If the checkout is in \"/foo/src/\" and the build directory is in\n"
 | 
| -    "  \"/foo/src/out/Debug/\" then the relative build to source root dir\n"
 | 
| -    "  will be \"../..\".\n"
 | 
| +    "  This is primarily useful for setting up script calls. If you are\n"
 | 
| +    "  passing this to a script, you will want to pass it through\n"
 | 
| +    "  to_build_path() (see \"gn help to_build_path\") to convert it\n"
 | 
| +    "  to be relative to the build directory.\n"
 | 
|      "\n"
 | 
| -    "  See also relative_build_to_source_root_dir.\n"
 | 
| +    "  See also \"target_out_dir\" which is usually a better location for\n"
 | 
| +    "  output files. It will be inside the root output dir.\n"
 | 
|      "\n"
 | 
|      "Example:\n"
 | 
| -    "  This is typically used to invoke tools checked out in the tree:\n"
 | 
|      "\n"
 | 
| -    "  tool(\"link\") {\n"
 | 
| -    "    command = \"$relative_build_to_source_root_dir/third_party/gold/ld\n"
 | 
| +    "  custom(\"myscript\") {\n"
 | 
| +    "    # Pass the output dir to the script.\n"
 | 
| +    "    args = [ \"-o\", to_build_path(root_out_dir) ]\n"
 | 
|      "  }\n";
 | 
|  
 | 
| -const char kRelativeTargetGenDir[] = "relative_target_gen_dir";
 | 
| -const char kRelativeTargetGenDir_HelpShort[] =
 | 
| -    "relative_target_gen_dir: [string] Relative dir for generated files.";
 | 
| -const char kRelativeTargetGenDir_Help[] =
 | 
| -    "relative_target_gen_dir: Relative dir for generated files.\n"
 | 
| -    "\n"
 | 
| -    "  Relative path from the directory of the current build file to the\n"
 | 
| -    "  current target's generated file directory.\n"
 | 
| -    "\n"
 | 
| -    "  Normally used when invoking scripts (the current directory of which is\n"
 | 
| -    "  that of the invoking buildfile) that need to write files.\n"
 | 
| -    "\n"
 | 
| -    "  Scripts generating final rather than intermediate files should use the\n"
 | 
| -    "  \"relative_target_output_dir\" instead.\n"
 | 
| -    "\n"
 | 
| -    "  See also \"target_gen_dir\".\n"
 | 
| -    "\n"
 | 
| -    "Example:\n"
 | 
| -    "\n"
 | 
| -    "  If your current build file is in \"//tools\", you might write\n"
 | 
| -    "  args = [ \"$relative_root_gen_dir/output.txt\" ]\n";
 | 
| -
 | 
| -const char kRelativeTargetOutputDir[] = "relative_target_output_dir";
 | 
| -const char kRelativeTargetOutputDir_HelpShort[] =
 | 
| -    "relative_target_output_dir: [string] Relative dir for build results.";
 | 
| -const char kRelativeTargetOutputDir_Help[] =
 | 
| -    "relative_target_output_dir: Relative dir for build results."
 | 
| +const char kTargetGenDir[] = "target_gen_dir";
 | 
| +const char kTargetGenDir_HelpShort[] =
 | 
| +    "target_gen_dir: [string] Directory for a target's generated files.";
 | 
| +const char kTargetGenDir_Help[] =
 | 
| +    "target_gen_dir: Directory for a target's generated files.\n"
 | 
|      "\n"
 | 
| -    "  Relative path from the directory of the current build file to the\n"
 | 
| -    "  current target's generated file directory.\n"
 | 
| +    "  Absolute path to the target's generated file directory. If your\n"
 | 
| +    "  current target is in \"//tools/doom_melon\" then this value might be\n"
 | 
| +    "  \"//out/Debug/gen/tools/doom_melon\". It will not have a trailing\n"
 | 
| +    "  slash.\n"
 | 
|      "\n"
 | 
| -    "  Normally used when invoking scripts (the current directory of which is\n"
 | 
| -    "  that of the invoking buildfile) that need to write files.\n"
 | 
| +    "  This is primarily useful for setting up include paths for generated\n"
 | 
| +    "  files. If you are passing this to a script, you will want to pass it\n"
 | 
| +    "  through to_build_path() (see \"gn help to_build_path\") to convert it\n"
 | 
| +    "  to be relative to the build directory.\n"
 | 
|      "\n"
 | 
| -    "  Scripts generating intermediate files rather than final output files\n"
 | 
| -    "  should use the \"relative_target_output_dir\" instead.\n"
 | 
| +    "  See also \"gn help root_gen_dir\".\n"
 | 
|      "\n"
 | 
|      "Example:\n"
 | 
|      "\n"
 | 
| -    "  If your current build file is in \"//tools\", you might write\n"
 | 
| -    "  args = [ \"$relative_target_output_dir/final.lib\" ]\n";
 | 
| -
 | 
| -const char kRootGenDir[] = "root_gen_dir";
 | 
| -const char kRootGenDir_HelpShort[] =
 | 
| -    "root_gen_dir: [string] Absolute root dir for generated files.";
 | 
| -const char kRootGenDir_Help[] =
 | 
| -    "root_gen_dir: Absolute root dir for generated files.\n"
 | 
| -    "\n"
 | 
| -    "  Absolute path to the root of the generated output directory tree for\n"
 | 
| -    "  the current toolchain. An example value might be \"//out/Debug/gen\".\n"
 | 
| -    "  It will not have a trailing slash.\n"
 | 
| -    "\n"
 | 
| -    "  This is primarily useful for setting up include paths for generated\n"
 | 
| -    "  files. Scripts will want the \"relative_root_gen_dir\" instead\n"
 | 
| -    "  which will be relative to the scripts' current directory.\n"
 | 
| -    "\n"
 | 
| -    "  See also \"relative_root_gen_dir\" and \"target_gen_dir\".\n";
 | 
| +    "  custom(\"myscript\") {\n"
 | 
| +    "    # Pass the generated output dir to the script.\n"
 | 
| +    "    args = [ \"-o\", to_build_path(target_gen_dir) ]\n"
 | 
| +    "  }\n";
 | 
|  
 | 
| -const char kTargetGenDir[] = "target_gen_dir";
 | 
| -const char kTargetGenDir_HelpShort[] =
 | 
| -    "target_gen_dir: [string] Absolute dir for generated files.";
 | 
| -const char kTargetGenDir_Help[] =
 | 
| -    "target_gen_dir: Absolute dir for generated files.\n"
 | 
| +const char kTargetOutDir[] = "target_out_dir";
 | 
| +const char kTargetOutDir_HelpShort[] =
 | 
| +    "target_out_dir: [string] Directory for target output files.";
 | 
| +const char kTargetOutDir_Help[] =
 | 
| +    "target_out_dir: [string] Directory for target output files."
 | 
|      "\n"
 | 
|      "  Absolute path to the target's generated file directory. If your\n"
 | 
|      "  current target is in \"//tools/doom_melon\" then this value might be\n"
 | 
| -    "  \"//out/Debug/gen/tools/doom_melon\". It will not have a trailing\n"
 | 
| +    "  \"//out/Debug/obj/tools/doom_melon\". It will not have a trailing\n"
 | 
|      "  slash.\n"
 | 
|      "\n"
 | 
| -    "  Scripts generating files will generally want the relative version of\n"
 | 
| -    "  this instead: \"relative_target_gen_dir\".\n"
 | 
| +    "  This is primarily useful for setting up arguments for calling\n"
 | 
| +    "  scripts. If you are passing this to a script, you will want to pass it\n"
 | 
| +    "  through to_build_path() (see \"gn help to_build_path\") to convert it\n"
 | 
| +    "  to be relative to the build directory.\n"
 | 
| +    "\n"
 | 
| +    "  See also \"gn help root_out_dir\".\n"
 | 
|      "\n"
 | 
|      "Example:\n"
 | 
|      "\n"
 | 
| -    "  # Add the gen directory to the include path.\n"
 | 
| -    "  args = [ target_gen_dir ]\n";
 | 
| +    "  custom(\"myscript\") {\n"
 | 
| +    "    # Pass the output dir to the script.\n"
 | 
| +    "    args = [ \"-o\", to_build_path(target_out_dir) ]\n"
 | 
| +    "  }\n";
 | 
|  
 | 
|  // Target variables ------------------------------------------------------------
 | 
|  
 | 
| @@ -639,14 +578,10 @@ const VariableInfoMap& GetBuiltinVariables() {
 | 
|      INSERT_VARIABLE(IsPosix)
 | 
|      INSERT_VARIABLE(IsWin)
 | 
|      INSERT_VARIABLE(PythonPath)
 | 
| -    INSERT_VARIABLE(RelativeBuildToSourceRootDir)
 | 
| -    INSERT_VARIABLE(RelativeRootGenDir)
 | 
| -    INSERT_VARIABLE(RelativeRootOutputDir)
 | 
| -    INSERT_VARIABLE(RelativeSourceRootDir)
 | 
| -    INSERT_VARIABLE(RelativeTargetGenDir)
 | 
| -    INSERT_VARIABLE(RelativeTargetOutputDir)
 | 
|      INSERT_VARIABLE(RootGenDir)
 | 
| +    INSERT_VARIABLE(RootOutDir)
 | 
|      INSERT_VARIABLE(TargetGenDir)
 | 
| +    INSERT_VARIABLE(TargetOutDir)
 | 
|    }
 | 
|    return info_map;
 | 
|  }
 | 
| 
 |