Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(188)

Side by Side Diff: tools/gn/substitution_writer.cc

Issue 2481423002: Convert gn docstrings to C++11 raw strings. (Closed)
Patch Set: More Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "tools/gn/substitution_writer.h" 5 #include "tools/gn/substitution_writer.h"
6 6
7 #include "tools/gn/build_settings.h" 7 #include "tools/gn/build_settings.h"
8 #include "tools/gn/escape.h" 8 #include "tools/gn/escape.h"
9 #include "tools/gn/filesystem_utils.h" 9 #include "tools/gn/filesystem_utils.h"
10 #include "tools/gn/output_file.h" 10 #include "tools/gn/output_file.h"
(...skipping 16 matching lines...) Expand all
27 else 27 else
28 dest->assign(dir); 28 dest->assign(dir);
29 29
30 if (dest->empty()) 30 if (dest->empty())
31 dest->push_back('.'); 31 dest->push_back('.');
32 } 32 }
33 33
34 } // namespace 34 } // namespace
35 35
36 const char kSourceExpansion_Help[] = 36 const char kSourceExpansion_Help[] =
37 "How Source Expansion Works\n" 37 R"(How Source Expansion Works
38 "\n" 38
39 " Source expansion is used for the action_foreach and copy target types\n" 39 Source expansion is used for the action_foreach and copy target types to map
40 " to map source file names to output file names or arguments.\n" 40 source file names to output file names or arguments.
41 "\n" 41
42 " To perform source expansion in the outputs, GN maps every entry in the\n" 42 To perform source expansion in the outputs, GN maps every entry in the
43 " sources to every entry in the outputs list, producing the cross\n" 43 sources to every entry in the outputs list, producing the cross product of
44 " product of all combinations, expanding placeholders (see below).\n" 44 all combinations, expanding placeholders (see below).
45 "\n" 45
46 " Source expansion in the args works similarly, but performing the\n" 46 Source expansion in the args works similarly, but performing the placeholder
47 " placeholder substitution produces a different set of arguments for\n" 47 substitution produces a different set of arguments for each invocation of the
48 " each invocation of the script.\n" 48 script.
49 "\n" 49
50 " If no placeholders are found, the outputs or args list will be treated\n" 50 If no placeholders are found, the outputs or args list will be treated as a
51 " as a static list of literal file names that do not depend on the\n" 51 static list of literal file names that do not depend on the sources.
52 " sources.\n" 52
53 "\n" 53 See "gn help copy" and "gn help action_foreach" for more on how this is
54 " See \"gn help copy\" and \"gn help action_foreach\" for more on how\n" 54 applied.
55 " this is applied.\n" 55
56 "\n" 56 Placeholders
57 "Placeholders\n" 57
58 "\n" 58 This section discusses only placeholders for actions. There are other
59 " This section discusses only placeholders for actions. There are other\n" 59 placeholders used in the definition of tools. See "gn help tool" for those.
60 " placeholders used in the definition of tools. See \"gn help tool\" for\n" 60
61 " those.\n" 61 {{source}}
62 "\n" 62 The name of the source file including directory (*). This will generally
63 " {{source}}\n" 63 be used for specifying inputs to a script in the "args" variable.
64 " The name of the source file including directory (*). This will\n" 64 "//foo/bar/baz.txt" => "../../foo/bar/baz.txt"
65 " generally be used for specifying inputs to a script in the\n" 65
66 " \"args\" variable.\n" 66 {{source_file_part}}
67 " \"//foo/bar/baz.txt\" => \"../../foo/bar/baz.txt\"\n" 67 The file part of the source including the extension.
68 "\n" 68 "//foo/bar/baz.txt" => "baz.txt"
69 " {{source_file_part}}\n" 69
70 " The file part of the source including the extension.\n" 70 {{source_name_part}}
71 " \"//foo/bar/baz.txt\" => \"baz.txt\"\n" 71 The filename part of the source file with no directory or extension. This
72 "\n" 72 will generally be used for specifying a transformation from a source file
73 " {{source_name_part}}\n" 73 to a destination file with the same name but different extension.
74 " The filename part of the source file with no directory or\n" 74 "//foo/bar/baz.txt" => "baz"
75 " extension. This will generally be used for specifying a\n" 75
76 " transformation from a source file to a destination file with the\n" 76 {{source_dir}}
77 " same name but different extension.\n" 77 The directory (*) containing the source file with no trailing slash.
78 " \"//foo/bar/baz.txt\" => \"baz\"\n" 78 "//foo/bar/baz.txt" => "../../foo/bar"
79 "\n" 79
80 " {{source_dir}}\n" 80 {{source_root_relative_dir}}
81 " The directory (*) containing the source file with no\n" 81 The path to the source file's directory relative to the source root, with
82 " trailing slash.\n" 82 no leading "//" or trailing slashes. If the path is system-absolute,
83 " \"//foo/bar/baz.txt\" => \"../../foo/bar\"\n" 83 (beginning in a single slash) this will just return the path with no
84 "\n" 84 trailing slash. This value will always be the same, regardless of whether
85 " {{source_root_relative_dir}}\n" 85 it appears in the "outputs" or "args" section.
86 " The path to the source file's directory relative to the source\n" 86 "//foo/bar/baz.txt" => "foo/bar"
87 " root, with no leading \"//\" or trailing slashes. If the path is\n" 87
88 " system-absolute, (beginning in a single slash) this will just\n" 88 {{source_gen_dir}}
89 " return the path with no trailing slash. This value will always\n" 89 The generated file directory (*) corresponding to the source file's path.
90 " be the same, regardless of whether it appears in the \"outputs\"\n" 90 This will be different than the target's generated file directory if the
91 " or \"args\" section.\n" 91 source file is in a different directory than the BUILD.gn file.
92 " \"//foo/bar/baz.txt\" => \"foo/bar\"\n" 92 "//foo/bar/baz.txt" => "gen/foo/bar"
93 "\n" 93
94 " {{source_gen_dir}}\n" 94 {{source_out_dir}}
95 " The generated file directory (*) corresponding to the source\n" 95 The object file directory (*) corresponding to the source file's path,
96 " file's path. This will be different than the target's generated\n" 96 relative to the build directory. this us be different than the target's
97 " file directory if the source file is in a different directory\n" 97 out directory if the source file is in a different directory than the
98 " than the BUILD.gn file.\n" 98 build.gn file.
99 " \"//foo/bar/baz.txt\" => \"gen/foo/bar\"\n" 99 "//foo/bar/baz.txt" => "obj/foo/bar"
100 "\n" 100
101 " {{source_out_dir}}\n" 101 (*) Note on directories
102 " The object file directory (*) corresponding to the source file's\n" 102
103 " path, relative to the build directory. this us be different than\n" 103 Paths containing directories (except the source_root_relative_dir) will be
104 " the target's out directory if the source file is in a different\n" 104 different depending on what context the expansion is evaluated in. Generally
105 " directory than the build.gn file.\n" 105 it should "just work" but it means you can't concatenate strings containing
106 " \"//foo/bar/baz.txt\" => \"obj/foo/bar\"\n" 106 these values with reasonable results.
107 "\n" 107
108 "(*) Note on directories\n" 108 Details: source expansions can be used in the "outputs" variable, the "args"
109 "\n" 109 variable, and in calls to "process_file_template". The "args" are passed to a
110 " Paths containing directories (except the source_root_relative_dir)\n" 110 script which is run from the build directory, so these directories will
111 " will be different depending on what context the expansion is evaluated\n" 111 relative to the build directory for the script to find. In the other cases,
112 " in. Generally it should \"just work\" but it means you can't\n" 112 the directories will be source- absolute (begin with a "//") because the
113 " concatenate strings containing these values with reasonable results.\n" 113 results of those expansions will be handled by GN internally.
114 "\n" 114
115 " Details: source expansions can be used in the \"outputs\" variable,\n" 115 Examples
116 " the \"args\" variable, and in calls to \"process_file_template\". The\n" 116
117 " \"args\" are passed to a script which is run from the build directory,\n" 117 Non-varying outputs:
118 " so these directories will relative to the build directory for the\n" 118 action("hardcoded_outputs") {
119 " script to find. In the other cases, the directories will be source-\n" 119 sources = [ "input1.idl", "input2.idl" ]
120 " absolute (begin with a \"//\") because the results of those expansions\n" 120 outputs = [ "$target_out_dir/output1.dat",
121 " will be handled by GN internally.\n" 121 "$target_out_dir/output2.dat" ]
122 "\n" 122 }
123 "Examples\n" 123 The outputs in this case will be the two literal files given.
124 "\n" 124
125 " Non-varying outputs:\n" 125 Varying outputs:
126 " action(\"hardcoded_outputs\") {\n" 126 action_foreach("varying_outputs") {
127 " sources = [ \"input1.idl\", \"input2.idl\" ]\n" 127 sources = [ "input1.idl", "input2.idl" ]
128 " outputs = [ \"$target_out_dir/output1.dat\",\n" 128 outputs = [ "{{source_gen_dir}}/{{source_name_part}}.h",
129 " \"$target_out_dir/output2.dat\" ]\n" 129 "{{source_gen_dir}}/{{source_name_part}}.cc" ]
130 " }\n" 130 }
131 " The outputs in this case will be the two literal files given.\n" 131 Performing source expansion will result in the following output names:
132 "\n" 132 //out/Debug/obj/mydirectory/input1.h
133 " Varying outputs:\n" 133 //out/Debug/obj/mydirectory/input1.cc
134 " action_foreach(\"varying_outputs\") {\n" 134 //out/Debug/obj/mydirectory/input2.h
135 " sources = [ \"input1.idl\", \"input2.idl\" ]\n" 135 //out/Debug/obj/mydirectory/input2.cc
136 " outputs = [ \"{{source_gen_dir}}/{{source_name_part}}.h\",\n" 136 )";
137 " \"{{source_gen_dir}}/{{source_name_part}}.cc\" ]\n"
138 " }\n"
139 " Performing source expansion will result in the following output names:\n"
140 " //out/Debug/obj/mydirectory/input1.h\n"
141 " //out/Debug/obj/mydirectory/input1.cc\n"
142 " //out/Debug/obj/mydirectory/input2.h\n"
143 " //out/Debug/obj/mydirectory/input2.cc\n";
144 137
145 // static 138 // static
146 void SubstitutionWriter::WriteWithNinjaVariables( 139 void SubstitutionWriter::WriteWithNinjaVariables(
147 const SubstitutionPattern& pattern, 140 const SubstitutionPattern& pattern,
148 const EscapeOptions& escape_options, 141 const EscapeOptions& escape_options,
149 std::ostream& out) { 142 std::ostream& out) {
150 // The result needs to be quoted as if it was one string, but the $ for 143 // The result needs to be quoted as if it was one string, but the $ for
151 // the inserted Ninja variables can't be escaped. So write to a buffer with 144 // the inserted Ninja variables can't be escaped. So write to a buffer with
152 // no quoting, and then quote the whole thing if necessary. 145 // no quoting, and then quote the whole thing if necessary.
153 EscapeOptions no_quoting(escape_options); 146 EscapeOptions no_quoting(escape_options);
(...skipping 422 matching lines...) Expand 10 before | Expand all | Expand 10 after
576 return tool->default_output_extension(); 569 return tool->default_output_extension();
577 if (target->output_extension().empty()) 570 if (target->output_extension().empty())
578 return std::string(); // Explicitly set to no extension. 571 return std::string(); // Explicitly set to no extension.
579 return std::string(".") + target->output_extension(); 572 return std::string(".") + target->output_extension();
580 573
581 default: 574 default:
582 NOTREACHED(); 575 NOTREACHED();
583 return std::string(); 576 return std::string();
584 } 577 }
585 } 578 }
OLDNEW
« tools/gn/setup.cc ('K') | « tools/gn/setup.cc ('k') | tools/gn/switches.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698