#!/usr/bin/env python3
# Copyright 2020 The Skywater PDK Authors
#
# 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
#
#     https://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 os
import re

import common


re_lef = re.compile('^\s*macro\s*([^ ]+)')


broken = []
for pn in common.files(['.lef']):
    print("lef file", pn)
    found = False
    for l in common.read_without_cmts(pn, 'shell'):
        l = l.strip().lower()
        if 'macro' not in l:
            continue
        if '_macro' in l:
            continue
        m = re_lef.search(l)
        if not m:
            print("  Error:", repr(l), repr(m))
            continue
        mod = m.group(1)
        assert mod, (l, m.groups())
        common.add_file_for_module(mod, pn)
        found = True

    if not found:
        broken.append(pn)
        print(" !!!! No cells found in", pn)


common.write_mod_json('lef', common.modules, broken)
