1# Copyright (c) 2012 Google Inc. All rights reserved.
2# Use of this source code is governed by a BSD-style license that can be
3# found in the LICENSE file.
4
5"""Visual Studio project reader/writer."""
6
7import gyp.common
8import gyp.easy_xml as easy_xml
9
10
11class Writer(object):
12  """Visual Studio XML tool file writer."""
13
14  def __init__(self, tool_file_path, name):
15    """Initializes the tool file.
16
17    Args:
18      tool_file_path: Path to the tool file.
19      name: Name of the tool file.
20    """
21    self.tool_file_path = tool_file_path
22    self.name = name
23    self.rules_section = ['Rules']
24
25  def AddCustomBuildRule(self, name, cmd, description,
26                         additional_dependencies,
27                         outputs, extensions):
28    """Adds a rule to the tool file.
29
30    Args:
31      name: Name of the rule.
32      description: Description of the rule.
33      cmd: Command line of the rule.
34      additional_dependencies: other files which may trigger the rule.
35      outputs: outputs of the rule.
36      extensions: extensions handled by the rule.
37    """
38    rule = ['CustomBuildRule',
39            {'Name': name,
40             'ExecutionDescription': description,
41             'CommandLine': cmd,
42             'Outputs': ';'.join(outputs),
43             'FileExtensions': ';'.join(extensions),
44             'AdditionalDependencies':
45                 ';'.join(additional_dependencies)
46            }]
47    self.rules_section.append(rule)
48
49  def WriteIfChanged(self):
50    """Writes the tool file."""
51    content = ['VisualStudioToolFile',
52               {'Version': '8.00',
53                'Name': self.name
54               },
55               self.rules_section
56               ]
57    easy_xml.WriteXmlIfChanged(content, self.tool_file_path,
58                               encoding="Windows-1252")
59