Index: tools/gn/visual_studio_writer.h |
diff --git a/tools/gn/visual_studio_writer.h b/tools/gn/visual_studio_writer.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..5f54b3f5aa47be77d4ab3d66560ed550832316e3 |
--- /dev/null |
+++ b/tools/gn/visual_studio_writer.h |
@@ -0,0 +1,98 @@ |
+// Copyright 2016 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#ifndef TOOLS_GN_VISUAL_STUDIO_WRITER_H_ |
+#define TOOLS_GN_VISUAL_STUDIO_WRITER_H_ |
+ |
+#include <iosfwd> |
+#include <string> |
+#include <vector> |
+ |
+#include "base/gtest_prod_util.h" |
+#include "base/macros.h" |
+ |
+namespace base { |
+class FilePath; |
+} |
+ |
+class Builder; |
+class BuildSettings; |
+class Err; |
+class Target; |
+ |
+class VisualStudioWriter { |
+ public: |
+ // On failure will populate |err| and will return false. |
+ static bool RunAndWriteFiles(const BuildSettings* build_settings, |
+ Builder* builder, |
+ Err* err); |
+ |
+ private: |
+ FRIEND_TEST_ALL_PREFIXES(VisualStudioWriterTest, ResolveSolutionFolders); |
+ FRIEND_TEST_ALL_PREFIXES(VisualStudioWriterTest, |
+ ResolveSolutionFolders_AbsPath); |
+ |
+ // Solution project or folder. |
+ struct SolutionEntry { |
+ SolutionEntry(const std::string& name, |
+ const std::string& path, |
+ const std::string& guid); |
+ |
+ ~SolutionEntry(); |
+ |
+ // Entry name. For projects must be unique in the solution. |
+ std::string name; |
+ // Absolute project file or folder directory path. |
+ std::string path; |
+ // Absolute label dir path (only for projects). |
+ std::string label_dir_path; |
+ // GUID-like string. |
+ std::string guid; |
+ // Pointer to parent folder. nullptr if entry has no parent. |
+ SolutionEntry* parent_folder; |
+ }; |
+ |
+ using SolutionEntries = std::vector<SolutionEntry*>; |
+ |
+ explicit VisualStudioWriter(const BuildSettings* build_settings); |
+ ~VisualStudioWriter(); |
+ |
+ bool WriteProjectFiles(const Target* target, Err* err); |
+ bool WriteProjectFileContents(std::ostream& out, |
+ const SolutionEntry& solution_project, |
+ const Target* target, |
+ Err* err); |
+ void WriteFiltersFileContents(std::ostream& out, const Target* target); |
+ bool WriteSolutionFile(Err* err); |
+ void WriteSolutionFileContents(std::ostream& out, |
+ const base::FilePath& solution_dir_path); |
+ |
+ // Resolves all solution folders (parent folders for projects) into |folders_| |
+ // and updates |root_folder_dir_|. Also sets |parent_folder| for |projects_|. |
+ void ResolveSolutionFolders(); |
+ |
+ const BuildSettings* build_settings_; |
+ |
+ // Indicates if project files are generated for Debug mode configuration. |
+ bool is_debug_config_; |
+ |
+ // Platform for projects configuration (Win32, x64). |
+ std::string config_platform_; |
+ |
+ // All projects contained by solution. |
+ SolutionEntries projects_; |
+ |
+ // Absolute root solution folder path. |
+ std::string root_folder_path_; |
+ |
+ // Folders for all solution projects. |
+ SolutionEntries folders_; |
+ |
+ // Semicolon-separated Windows SDK include directories. |
+ std::string windows_kits_include_dirs_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(VisualStudioWriter); |
+}; |
+ |
+#endif // TOOLS_GN_VISUAL_STUDIO_WRITER_H_ |