File: generate_params.py

package info (click to toggle)
chromium 139.0.7258.127-1
  • links: PTS, VCS
  • area: main
  • in suites:
  • size: 6,122,068 kB
  • sloc: cpp: 35,100,771; ansic: 7,163,530; javascript: 4,103,002; python: 1,436,920; asm: 946,517; xml: 746,709; pascal: 187,653; perl: 88,691; sh: 88,436; objc: 79,953; sql: 51,488; cs: 44,583; fortran: 24,137; makefile: 22,147; tcl: 15,277; php: 13,980; yacc: 8,984; ruby: 7,485; awk: 3,720; lisp: 3,096; lex: 1,327; ada: 727; jsp: 228; sed: 36
file content (88 lines) | stat: -rwxr-xr-x 2,422 bytes parent folder | download | duplicates (10)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
#!/usr/bin/env python
# Copyright 2021 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""generate_params.py processes input .sb seatbelt files and extracts
parameter definitions of the form

    (define "sandbox-param-name")

And generates C++ constants of the form

    kParamSandboxParamName

Usage:

    generate_sandbox_params.py path/to/params policy1.sb policy2.sb...

Where |path/to/params| specifies the file prefix for the generated .h
and .cc files.
"""

from __future__ import print_function

import re
import sys


def generate_sandbox_params(argv):
    if len(argv) < 3:
        print('Usage: {} output_file_prefix file1.sb...'.format(argv[0]),
              file=sys.stderr)
        return 1

    h_contents = ''
    cc_contents = ''
    for (name, value) in _process_policy_files(argv[2:]):
        variable_name = 'kParam' + name.title().replace('-', '')
        h_contents += 'SANDBOX_POLICY_EXPORT extern const char {}[];\n'.format(
            variable_name)
        cc_contents += 'const char {}[] = "{}";\n'.format(variable_name, value)

    with open(argv[1] + '.h', 'w') as f:
        f.write(
            FILE_TEMPLATE.format(includes='#include "sandbox/policy/export.h"',
                                 contents=h_contents))

    with open(argv[1] + '.cc', 'w') as f:
        f.write(
            FILE_TEMPLATE.format(
                includes='#include "sandbox/policy/mac/params.h"',
                contents=cc_contents))

    return 0


def _process_policy_files(files):
    """Iterates the files in |files|, parsing out parameter definitions, and
    yields the name-value pair.
    """
    for sb_file in files:
        with open(sb_file, 'r') as f:
            for line in f:
                comment_start = line.find(';')
                if comment_start != -1:
                    line = line[:comment_start]
                match = DEFINE_RE.match(line)
                if match:
                    groups = match.groups()
                    yield (groups[0], groups[1])


DEFINE_RE = re.compile(r'^\(define\s+([a-zA-Z0-9\-]+).*"(\w+)"\)')

FILE_TEMPLATE = """// Generated by generate_params.py. Do not edit!!!

{includes}

namespace sandbox {{
namespace policy {{

{contents}

}}  // namespace policy
}}  // namespace sandbox
"""

if __name__ == '__main__':
    sys.exit(generate_sandbox_params(sys.argv))