|  | #!/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 | 
|  | from pathlib import Path | 
|  | import re | 
|  | import sys | 
|  |  | 
|  | def parse_errno(path): | 
|  | with open(path, 'r') 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() |