annotate windows-dev/ninja_syntax.py @ 760:1514e7d2f691

FIX: add forgotten test configuration data file
author Franz Glasner <fzglas.hg@dom66.de>
date Thu, 07 Dec 2023 08:40:46 +0100
parents aa240af27589
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
570
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1 # -*- coding: utf-8 -*-
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2 #
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3 # Copyright 2011 Google Inc. All Rights Reserved.
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4 # Copyright 2020 Franz Glasner. All Rights Reserved.
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5 #
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6 # Licensed under the Apache License, Version 2.0 (the "License");
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7 # you may not use this file except in compliance with the License.
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8 # You may obtain a copy of the License at
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9 #
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10 # http://www.apache.org/licenses/LICENSE-2.0
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11 #
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12 # Unless required by applicable law or agreed to in writing, software
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13 # distributed under the License is distributed on an "AS IS" BASIS,
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15 # See the License for the specific language governing permissions and
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16 # limitations under the License.
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17 #
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18 r"""Python module for generating .ninja files.
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20 Note that this is emphatically not a required piece of Ninja; it's
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21 just a helpful utility for build-file-generation systems that already
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22 use Python.
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24 :Copyright: \(c) 2001 Google Inc. All Rights Reserved.
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25 :Copyright: \(c) 2020 Franz Glasner. All Rights Reserved.
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
26 :License: Apache License 2.0. See :ref:`LICENSE.txt <license>` for details.
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
27
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
28 """
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
29
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
30 from __future__ import absolute_import
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
31
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
32 import re
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
33 import textwrap
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
34
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
35
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
36 def escape_path(word):
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
37 """Escape `word` according to Ninja's path interpretation rules.
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
38
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
39 Escapes not only ``$`` but also spaces and colons.
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
40 """
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
41 return word.replace('$ ', '$$ ').replace(' ', '$ ').replace(':', '$:')
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
42
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
43
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
44 class Writer(object):
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
45
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
46 """An object-oriented writer of a Ninja build file.
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
47
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
48 Can act as its own context manager.
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
49 """
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
50
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
51 def __init__(self, output, width=78):
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
52 """
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
53 :param output: an opened file-alike where to write into
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
54 :param int width: the width where line-wrapping should happen
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
55
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
56 `output` just needs a `write()` and -- if :meth:`~.close` is called
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
57 -- a `close()` method.
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
58 """
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
59 self.output = output
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
60 self.width = width
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
61
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
62 def newline(self):
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
63 self.output.write('\n')
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
64
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
65 def comment(self, text):
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
66 for line in textwrap.wrap(text, self.width - 2, break_long_words=False,
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
67 break_on_hyphens=False):
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
68 self.output.write('# ' + line + '\n')
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
69
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
70 def variable(self, key, value, indent=0):
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
71 if value is None:
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
72 return
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
73 if isinstance(value, list):
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
74 value = ' '.join(filter(None, value)) # Filter out empty strings.
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
75 self._line('%s = %s' % (key, value), indent)
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
76
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
77 def pool(self, name, depth):
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
78 self._line('pool %s' % name)
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
79 self.variable('depth', depth, indent=1)
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
80
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
81 def rule(self, name, command, description=None, depfile=None,
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
82 generator=False, pool=None, restat=False, rspfile=None,
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
83 rspfile_content=None, deps=None):
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
84 self._line('rule %s' % name)
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
85 self.variable('command', command, indent=1)
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
86 if description:
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
87 self.variable('description', description, indent=1)
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
88 if depfile:
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
89 self.variable('depfile', depfile, indent=1)
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
90 if generator:
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
91 self.variable('generator', '1', indent=1)
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
92 if pool:
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
93 self.variable('pool', pool, indent=1)
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
94 if restat:
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
95 self.variable('restat', '1', indent=1)
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
96 if rspfile:
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
97 self.variable('rspfile', rspfile, indent=1)
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
98 if rspfile_content:
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
99 self.variable('rspfile_content', rspfile_content, indent=1)
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
100 if deps:
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
101 self.variable('deps', deps, indent=1)
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
102
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
103 def build(self, outputs, rule, inputs=None, implicit=None, order_only=None,
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
104 variables=None, implicit_outputs=None, pool=None):
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
105 outputs = as_list(outputs)
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
106 out_outputs = [escape_path(x) for x in outputs]
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
107 all_inputs = [escape_path(x) for x in as_list(inputs)]
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
108
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
109 if implicit:
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
110 implicit = [escape_path(x) for x in as_list(implicit)]
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
111 all_inputs.append('|')
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
112 all_inputs.extend(implicit)
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
113 if order_only:
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
114 order_only = [escape_path(x) for x in as_list(order_only)]
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
115 all_inputs.append('||')
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
116 all_inputs.extend(order_only)
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
117 if implicit_outputs:
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
118 implicit_outputs = [escape_path(x)
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
119 for x in as_list(implicit_outputs)]
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
120 out_outputs.append('|')
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
121 out_outputs.extend(implicit_outputs)
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
122
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
123 self._line('build %s: %s' % (' '.join(out_outputs),
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
124 ' '.join([rule] + all_inputs)))
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
125 if pool is not None:
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
126 self._line(' pool = %s' % pool)
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
127
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
128 if variables:
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
129 if isinstance(variables, dict):
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
130 iterator = iter(variables.items())
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
131 else:
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
132 iterator = iter(variables)
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
133
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
134 for key, val in iterator:
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
135 self.variable(key, val, indent=1)
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
136
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
137 return outputs
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
138
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
139 def include(self, path):
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
140 self._line('include %s' % path)
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
141
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
142 def subninja(self, path):
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
143 self._line('subninja %s' % path)
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
144
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
145 def default(self, paths):
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
146 self._line('default %s' % ' '.join(as_list(paths)))
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
147
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
148 def _count_dollars_before_index(self, s, i):
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
149 """Returns the number of '$' characters right in front of s[i]."""
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
150 dollar_count = 0
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
151 dollar_index = i - 1
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
152 while dollar_index > 0 and s[dollar_index] == '$':
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
153 dollar_count += 1
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
154 dollar_index -= 1
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
155 return dollar_count
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
156
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
157 def _line(self, text, indent=0):
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
158 """Write 'text' word-wrapped at self.width characters."""
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
159 leading_space = ' ' * indent
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
160 while len(leading_space) + len(text) > self.width:
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
161 # The text is too wide; wrap if possible.
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
162
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
163 # Find the rightmost space that would obey our width constraint and
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
164 # that's not an escaped space.
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
165 available_space = self.width - len(leading_space) - len(' $')
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
166 space = available_space
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
167 while True:
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
168 space = text.rfind(' ', 0, space)
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
169 if (space < 0
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
170 or self._count_dollars_before_index(text, space) % 2 == 0): # noqa: E501
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
171 break
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
172
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
173 if space < 0:
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
174 #
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
175 # No such space;
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
176 # just use the first unescaped space we can find.
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
177 #
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
178 space = available_space - 1
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
179 while True:
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
180 space = text.find(' ', space + 1)
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
181 if (space < 0
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
182 or self._count_dollars_before_index(text, space) % 2 == 0): # noqa: E501
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
183 break
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
184 if space < 0:
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
185 # Give up on breaking.
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
186 break
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
187
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
188 self.output.write(leading_space + text[0:space] + ' $\n')
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
189 text = text[space+1:]
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
190
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
191 # Subsequent lines are continuations, so indent them.
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
192 leading_space = ' ' * (indent+2)
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
193
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
194 self.output.write(leading_space + text + '\n')
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
195
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
196 def close(self):
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
197 """Close the associated output"""
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
198 self.output.close()
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
199
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
200 def __enter__(self):
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
201 """Return `self`"""
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
202 return self
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
203
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
204 def __exit__(self, *args, **kwds):
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
205 """Close the associated output"""
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
206 self.close()
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
207
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
208
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
209 def as_list(input):
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
210 """Ensure that `input` is always a :class:`list` -- wrap if needed
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
211
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
212 :rtype: list
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
213
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
214 """
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
215
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
216 if input is None:
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
217 return []
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
218 if isinstance(input, list):
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
219 return input
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
220 return [input]
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
221
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
222
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
223 def escape(string):
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
224 """Escape a string such that it can be embedded into a Ninja file without
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
225 further interpretation."""
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
226 assert '\n' not in string, 'Ninja syntax does not allow newlines'
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
227 # We only have one special metacharacter: '$'.
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
228 return string.replace('$', '$$')
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
229
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
230
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
231 def expand(string, vars, local_vars={}):
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
232 """Expand a string containing $vars as Ninja would.
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
233
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
234 Note: doesn't handle the full Ninja variable syntax, but it's enough
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
235 to make configure.py's use of it work.
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
236 """
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
237 def exp(m):
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
238 var = m.group(1)
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
239 if var == '$':
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
240 return '$'
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
241 return local_vars.get(var, vars.get(var, ''))
e15e86c47a27 ADD: Configure.py ind ninjy_syntax.py from py3-extension-tests
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
242 return re.sub(r'\$(\$|\w*)', exp, string)