summaryrefslogtreecommitdiff
path: root/tools/missing_soong_module_info.py
blob: 6fa7f2bccbf912cd6071b4b3a6703a6cd5a2a690 (plain)
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
#!/usr/bin/env python3
#
# Copyright (C) 2016 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the 'License');
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an 'AS IS' BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

import json
import os
import sys

def main():
    try:
        product_out = os.environ["ANDROID_PRODUCT_OUT"]
    except KeyError:
        sys.stderr.write("Can't get ANDROID_PRODUCT_OUT. Run lunch first.\n")
        sys.exit(1)

    filename = os.path.join(product_out, "module-info.json")
    try:
        with open(filename) as f:
            modules = json.load(f)
    except FileNotFoundError:
        sys.stderr.write(f"File not found: {filename}\n")
        sys.exit(1)
    except json.JSONDecodeError:
        sys.stderr.write(f"Invalid json: {filename}\n")
        return None

    classes = {}

    for name, info in modules.items():
        make = info.get("make")
        make_gen = info.get("make_generated_module_info")
        if not make and make_gen:
            classes.setdefault(frozenset(info.get("class")), []).append(name)

    for cl, names in classes.items():
        print(" ".join(cl))
        for name in names:
            print(" ", name)

if __name__ == "__main__":
    main()