Mercurial > hgrepos > Python > libs > ConfigMix
annotate windows-dev/ninja_syntax.py @ 765:0180b7deebf1
===== Added signature for changeset 7bdf7d8a4e27
| author | Franz Glasner <fzglas.hg@dom66.de> |
|---|---|
| date | Thu, 07 Dec 2023 08:44:05 +0100 |
| 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) |
