Mercurial > hgrepos > Python > libs > ConfigMix
annotate windows-dev/ninja_syntax.py @ 654:0d6673d06c2c
Add support for using "tomllib" (in Python's stdlib since 3.11) and "tomli" TOML packages.
They are preferred if they are found to be installed.
But note that the declared dependency for the "toml" extra nevertheless
is the "toml" package. Because it is available for all supported Python
versions.
So use Python 3.11+ or install "tomli" manually if you want to use the
alternate packages.
| author | Franz Glasner <fzglas.hg@dom66.de> |
|---|---|
| date | Thu, 19 May 2022 22:10:59 +0200 |
| parents | aa240af27589 |
| children |
| 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) |
