#!/usr/bin/env python3
#
# Copyright (c) 2021 Nordic Semiconductor NA
#
# SPDX-License-Identifier: Apache-2.0

"""Check minimal libc error numbers against newlib.

This script loads the errno.h included in Zephyr's minimal libc and checks its
contents against the SDK's newlib errno.h. This is done to ensure that both C
libraries are aligned at all times.
"""

import os
import re
import sys
from pathlib import Path


def parse_errno(path):
    with open(path) as f:
        r = re.compile(r'^\s*#define\s+([A-Z]+)\s+([0-9]+)')
        errnos = []
        for line in f:
            m = r.match(line)
            if m:
                errnos.append(m.groups())

    return errnos


def main():
    minimal = Path("lib/libc/minimal/include/errno.h")
    newlib = Path("arm-zephyr-eabi/arm-zephyr-eabi/include/sys/errno.h")

    try:
        minimal = os.environ['ZEPHYR_BASE'] / minimal
        newlib = os.environ['ZEPHYR_SDK_INSTALL_DIR'] / newlib
    except KeyError as e:
        print(f'Environment variable missing: {e}', file=sys.stderr)
        sys.exit(1)

    minimal = parse_errno(minimal)
    newlib = parse_errno(newlib)

    for e in minimal:
        if (
            e[0] not in [x[0] for x in newlib]
            or e[1] != next(filter(lambda _e: _e[0] == e[0], newlib))[1]
        ):
            print('Invalid entry in errno.h:', file=sys.stderr)
            print(f'{e[0]} (with value {e[1]})', file=sys.stderr)
            sys.exit(1)

    print('errno.h validated correctly')


if __name__ == "__main__":
    main()
