OLD | NEW |
1 // Copyright (c) 2016 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 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/qt_creator_writer.h" | 5 #include "tools/gn/qt_creator_writer.h" |
6 | 6 |
7 #include <set> | 7 #include <set> |
8 #include <sstream> | 8 #include <sstream> |
9 #include <string> | 9 #include <string> |
10 | 10 |
(...skipping 14 matching lines...) Expand all Loading... |
25 base::FilePath::CharType kProjectName[] = FILE_PATH_LITERAL("all"); | 25 base::FilePath::CharType kProjectName[] = FILE_PATH_LITERAL("all"); |
26 base::FilePath::CharType kMainProjectFileSuffix[] = | 26 base::FilePath::CharType kMainProjectFileSuffix[] = |
27 FILE_PATH_LITERAL(".creator"); | 27 FILE_PATH_LITERAL(".creator"); |
28 base::FilePath::CharType kSourcesFileSuffix[] = FILE_PATH_LITERAL(".files"); | 28 base::FilePath::CharType kSourcesFileSuffix[] = FILE_PATH_LITERAL(".files"); |
29 base::FilePath::CharType kIncludesFileSuffix[] = FILE_PATH_LITERAL(".includes"); | 29 base::FilePath::CharType kIncludesFileSuffix[] = FILE_PATH_LITERAL(".includes"); |
30 base::FilePath::CharType kDefinesFileSuffix[] = FILE_PATH_LITERAL(".config"); | 30 base::FilePath::CharType kDefinesFileSuffix[] = FILE_PATH_LITERAL(".config"); |
31 } | 31 } |
32 | 32 |
33 // static | 33 // static |
34 bool QtCreatorWriter::RunAndWriteFile(const BuildSettings* build_settings, | 34 bool QtCreatorWriter::RunAndWriteFile(const BuildSettings* build_settings, |
35 const Builder* builder, | 35 const Builder& builder, |
36 Err* err, | 36 Err* err, |
37 const std::string& root_target) { | 37 const std::string& root_target) { |
38 base::FilePath project_dir = | 38 base::FilePath project_dir = |
39 build_settings->GetFullPath(build_settings->build_dir()) | 39 build_settings->GetFullPath(build_settings->build_dir()) |
40 .Append(kProjectDirName); | 40 .Append(kProjectDirName); |
41 if (!base::DirectoryExists(project_dir)) { | 41 if (!base::DirectoryExists(project_dir)) { |
42 base::File::Error error; | 42 base::File::Error error; |
43 if (!base::CreateDirectoryAndGetError(project_dir, &error)) { | 43 if (!base::CreateDirectoryAndGetError(project_dir, &error)) { |
44 *err = | 44 *err = |
45 Err(Location(), "Could not create the QtCreator project directory '" + | 45 Err(Location(), "Could not create the QtCreator project directory '" + |
46 FilePathToUTF8(project_dir) + "': " + | 46 FilePathToUTF8(project_dir) + "': " + |
47 base::File::ErrorToString(error)); | 47 base::File::ErrorToString(error)); |
48 return false; | 48 return false; |
49 } | 49 } |
50 } | 50 } |
51 | 51 |
52 base::FilePath project_prefix = project_dir.Append(kProjectName); | 52 base::FilePath project_prefix = project_dir.Append(kProjectName); |
53 QtCreatorWriter gen(build_settings, builder, project_prefix, root_target); | 53 QtCreatorWriter gen(build_settings, builder, project_prefix, root_target); |
54 gen.Run(); | 54 gen.Run(); |
55 if (gen.err_.has_error()) { | 55 if (gen.err_.has_error()) { |
56 *err = gen.err_; | 56 *err = gen.err_; |
57 return false; | 57 return false; |
58 } | 58 } |
59 return true; | 59 return true; |
60 } | 60 } |
61 | 61 |
62 QtCreatorWriter::QtCreatorWriter(const BuildSettings* build_settings, | 62 QtCreatorWriter::QtCreatorWriter(const BuildSettings* build_settings, |
63 const Builder* builder, | 63 const Builder& builder, |
64 const base::FilePath& project_prefix, | 64 const base::FilePath& project_prefix, |
65 const std::string& root_target_name) | 65 const std::string& root_target_name) |
66 : build_settings_(build_settings), | 66 : build_settings_(build_settings), |
67 builder_(builder), | 67 builder_(builder), |
68 project_prefix_(project_prefix), | 68 project_prefix_(project_prefix), |
69 root_target_name_(root_target_name) {} | 69 root_target_name_(root_target_name) {} |
70 | 70 |
71 QtCreatorWriter::~QtCreatorWriter() {} | 71 QtCreatorWriter::~QtCreatorWriter() {} |
72 | 72 |
73 void QtCreatorWriter::CollectDeps(const Target* target) { | 73 void QtCreatorWriter::CollectDeps(const Target* target) { |
74 for (const auto& dep : target->GetDeps(Target::DEPS_ALL)) { | 74 for (const auto& dep : target->GetDeps(Target::DEPS_ALL)) { |
75 const Target* dep_target = dep.ptr; | 75 const Target* dep_target = dep.ptr; |
76 if (targets_.count(dep_target)) | 76 if (targets_.count(dep_target)) |
77 continue; | 77 continue; |
78 targets_.insert(dep_target); | 78 targets_.insert(dep_target); |
79 CollectDeps(dep_target); | 79 CollectDeps(dep_target); |
80 } | 80 } |
81 } | 81 } |
82 | 82 |
83 bool QtCreatorWriter::DiscoverTargets() { | 83 bool QtCreatorWriter::DiscoverTargets() { |
84 auto all_targets = builder_->GetAllResolvedTargets(); | 84 auto all_targets = builder_.GetAllResolvedTargets(); |
85 | 85 |
86 if (root_target_name_.empty()) { | 86 if (root_target_name_.empty()) { |
87 targets_ = std::set<const Target*>(all_targets.begin(), all_targets.end()); | 87 targets_ = std::set<const Target*>(all_targets.begin(), all_targets.end()); |
88 return true; | 88 return true; |
89 } | 89 } |
90 | 90 |
91 const Target* root_target = nullptr; | 91 const Target* root_target = nullptr; |
92 for (const Target* target : all_targets) { | 92 for (const Target* target : all_targets) { |
93 if (target->label().name() == root_target_name_) { | 93 if (target->label().name() == root_target_name_) { |
94 root_target = target; | 94 root_target = target; |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
153 output << item << std::endl; | 153 output << item << std::endl; |
154 WriteFileIfChanged(file_path, output.str(), &err_); | 154 WriteFileIfChanged(file_path, output.str(), &err_); |
155 } | 155 } |
156 | 156 |
157 void QtCreatorWriter::Run() { | 157 void QtCreatorWriter::Run() { |
158 if (!DiscoverTargets()) | 158 if (!DiscoverTargets()) |
159 return; | 159 return; |
160 | 160 |
161 for (const Target* target : targets_) { | 161 for (const Target* target : targets_) { |
162 if (target->toolchain()->label() != | 162 if (target->toolchain()->label() != |
163 builder_->loader()->GetDefaultToolchain()) | 163 builder_.loader()->GetDefaultToolchain()) |
164 continue; | 164 continue; |
165 HandleTarget(target); | 165 HandleTarget(target); |
166 } | 166 } |
167 | 167 |
168 std::set<std::string> empty_list; | 168 std::set<std::string> empty_list; |
169 | 169 |
170 GenerateFile(kMainProjectFileSuffix, empty_list); | 170 GenerateFile(kMainProjectFileSuffix, empty_list); |
171 GenerateFile(kSourcesFileSuffix, sources_); | 171 GenerateFile(kSourcesFileSuffix, sources_); |
172 GenerateFile(kIncludesFileSuffix, includes_); | 172 GenerateFile(kIncludesFileSuffix, includes_); |
173 GenerateFile(kDefinesFileSuffix, defines_); | 173 GenerateFile(kDefinesFileSuffix, defines_); |
174 } | 174 } |
OLD | NEW |