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

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

Issue 2152413002: GN: don't write separate files for non-binary targets (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: typo Created 4 years, 4 months 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
« no previous file with comments | « tools/gn/eclipse_writer.h ('k') | tools/gn/json_project_writer.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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/eclipse_writer.h" 5 #include "tools/gn/eclipse_writer.h"
6 6
7 #include <fstream> 7 #include <fstream>
8 #include <memory> 8 #include <memory>
9 9
10 #include "base/files/file_path.h" 10 #include "base/files/file_path.h"
(...skipping 18 matching lines...) Expand all
29 result += "&amp;"; 29 result += "&amp;";
30 else 30 else
31 result.push_back(c); 31 result.push_back(c);
32 } 32 }
33 return result; 33 return result;
34 } 34 }
35 35
36 } // namespace 36 } // namespace
37 37
38 EclipseWriter::EclipseWriter(const BuildSettings* build_settings, 38 EclipseWriter::EclipseWriter(const BuildSettings* build_settings,
39 const Builder* builder, 39 const Builder& builder,
40 std::ostream& out) 40 std::ostream& out)
41 : build_settings_(build_settings), builder_(builder), out_(out) { 41 : build_settings_(build_settings), builder_(builder), out_(out) {
42 languages_.push_back("C++ Source File"); 42 languages_.push_back("C++ Source File");
43 languages_.push_back("C Source File"); 43 languages_.push_back("C Source File");
44 languages_.push_back("Assembly Source File"); 44 languages_.push_back("Assembly Source File");
45 languages_.push_back("GNU C++"); 45 languages_.push_back("GNU C++");
46 languages_.push_back("GNU C"); 46 languages_.push_back("GNU C");
47 languages_.push_back("Assembly"); 47 languages_.push_back("Assembly");
48 } 48 }
49 49
50 EclipseWriter::~EclipseWriter() {} 50 EclipseWriter::~EclipseWriter() {}
51 51
52 // static 52 // static
53 bool EclipseWriter::RunAndWriteFile( 53 bool EclipseWriter::RunAndWriteFile(
54 const BuildSettings* build_settings, 54 const BuildSettings* build_settings,
55 const Builder* builder, 55 const Builder& builder,
56 Err* err) { 56 Err* err) {
57 base::FilePath file = build_settings->GetFullPath(build_settings->build_dir()) 57 base::FilePath file = build_settings->GetFullPath(build_settings->build_dir())
58 .AppendASCII("eclipse-cdt-settings.xml"); 58 .AppendASCII("eclipse-cdt-settings.xml");
59 std::ofstream file_out; 59 std::ofstream file_out;
60 file_out.open(FilePathToUTF8(file).c_str(), 60 file_out.open(FilePathToUTF8(file).c_str(),
61 std::ios_base::out | std::ios_base::binary); 61 std::ios_base::out | std::ios_base::binary);
62 if (file_out.fail()) { 62 if (file_out.fail()) {
63 *err = 63 *err =
64 Err(Location(), "Couldn't open eclipse-cdt-settings.xml for writing"); 64 Err(Location(), "Couldn't open eclipse-cdt-settings.xml for writing");
65 return false; 65 return false;
66 } 66 }
67 67
68 EclipseWriter gen(build_settings, builder, file_out); 68 EclipseWriter gen(build_settings, builder, file_out);
69 gen.Run(); 69 gen.Run();
70 return true; 70 return true;
71 } 71 }
72 72
73 void EclipseWriter::Run() { 73 void EclipseWriter::Run() {
74 GetAllIncludeDirs(); 74 GetAllIncludeDirs();
75 GetAllDefines(); 75 GetAllDefines();
76 WriteCDTSettings(); 76 WriteCDTSettings();
77 } 77 }
78 78
79 void EclipseWriter::GetAllIncludeDirs() { 79 void EclipseWriter::GetAllIncludeDirs() {
80 std::vector<const Target*> targets = builder_->GetAllResolvedTargets(); 80 std::vector<const Target*> targets = builder_.GetAllResolvedTargets();
81 for (const Target* target : targets) { 81 for (const Target* target : targets) {
82 if (!UsesDefaultToolchain(target)) 82 if (!UsesDefaultToolchain(target))
83 continue; 83 continue;
84 84
85 for (ConfigValuesIterator it(target); !it.done(); it.Next()) { 85 for (ConfigValuesIterator it(target); !it.done(); it.Next()) {
86 for (const SourceDir& include_dir : it.cur().include_dirs()) { 86 for (const SourceDir& include_dir : it.cur().include_dirs()) {
87 include_dirs_.insert( 87 include_dirs_.insert(
88 FilePathToUTF8(build_settings_->GetFullPath(include_dir))); 88 FilePathToUTF8(build_settings_->GetFullPath(include_dir)));
89 } 89 }
90 } 90 }
91 } 91 }
92 } 92 }
93 93
94 void EclipseWriter::GetAllDefines() { 94 void EclipseWriter::GetAllDefines() {
95 std::vector<const Target*> targets = builder_->GetAllResolvedTargets(); 95 std::vector<const Target*> targets = builder_.GetAllResolvedTargets();
96 for (const Target* target : targets) { 96 for (const Target* target : targets) {
97 if (!UsesDefaultToolchain(target)) 97 if (!UsesDefaultToolchain(target))
98 continue; 98 continue;
99 99
100 for (ConfigValuesIterator it(target); !it.done(); it.Next()) { 100 for (ConfigValuesIterator it(target); !it.done(); it.Next()) {
101 for (const std::string& define : it.cur().defines()) { 101 for (const std::string& define : it.cur().defines()) {
102 size_t equal_pos = define.find('='); 102 size_t equal_pos = define.find('=');
103 std::string define_key; 103 std::string define_key;
104 std::string define_value; 104 std::string define_value;
105 if (equal_pos == std::string::npos) { 105 if (equal_pos == std::string::npos) {
106 define_key = define; 106 define_key = define;
107 } else { 107 } else {
108 define_key = define.substr(0, equal_pos); 108 define_key = define.substr(0, equal_pos);
109 define_value = define.substr(equal_pos + 1); 109 define_value = define.substr(equal_pos + 1);
110 } 110 }
111 defines_[define_key] = define_value; 111 defines_[define_key] = define_value;
112 } 112 }
113 } 113 }
114 } 114 }
115 } 115 }
116 116
117 bool EclipseWriter::UsesDefaultToolchain(const Target* target) const { 117 bool EclipseWriter::UsesDefaultToolchain(const Target* target) const {
118 return target->toolchain()->label() == 118 return target->toolchain()->label() ==
119 builder_->loader()->GetDefaultToolchain(); 119 builder_.loader()->GetDefaultToolchain();
120 } 120 }
121 121
122 void EclipseWriter::WriteCDTSettings() { 122 void EclipseWriter::WriteCDTSettings() {
123 out_ << "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" << std::endl; 123 out_ << "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" << std::endl;
124 XmlElementWriter cdt_properties_element(out_, "cdtprojectproperties", 124 XmlElementWriter cdt_properties_element(out_, "cdtprojectproperties",
125 XmlAttributes()); 125 XmlAttributes());
126 126
127 { 127 {
128 const char* kIncludesSectionName = 128 const char* kIncludesSectionName =
129 "org.eclipse.cdt.internal.ui.wizards.settingswizards.IncludePaths"; 129 "org.eclipse.cdt.internal.ui.wizards.settingswizards.IncludePaths";
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
163 XmlAttributes("name", language)); 163 XmlAttributes("name", language));
164 for (const auto& key_val : defines_) { 164 for (const auto& key_val : defines_) {
165 std::unique_ptr<XmlElementWriter> macro_element = 165 std::unique_ptr<XmlElementWriter> macro_element =
166 language_element->SubElement("macro"); 166 language_element->SubElement("macro");
167 macro_element->SubElement("name")->Text(EscapeForXML(key_val.first)); 167 macro_element->SubElement("name")->Text(EscapeForXML(key_val.first));
168 macro_element->SubElement("value")->Text(EscapeForXML(key_val.second)); 168 macro_element->SubElement("value")->Text(EscapeForXML(key_val.second));
169 } 169 }
170 } 170 }
171 } 171 }
172 } 172 }
OLDNEW
« no previous file with comments | « tools/gn/eclipse_writer.h ('k') | tools/gn/json_project_writer.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698