ci: Add an errno.h check to CI
Add a very simple check that verifies that new error numbers are added according to the errno.h file in newlib, in order to maintain compatibility with it. Signed-off-by: Carles Cufi <carles.cufi@nordicsemi.no>
This commit is contained in:
parent
14b358a252
commit
2189c08e4e
20
.github/workflows/errno.yml
vendored
Normal file
20
.github/workflows/errno.yml
vendored
Normal file
|
@ -0,0 +1,20 @@
|
|||
name: Error numbers
|
||||
on:
|
||||
pull_request:
|
||||
paths:
|
||||
- 'lib/libc/minimal/include/errno.h'
|
||||
|
||||
jobs:
|
||||
check-errno:
|
||||
runs-on: ubuntu-latest
|
||||
container:
|
||||
image: zephyrprojectrtos/ci:v0.17.1
|
||||
|
||||
steps:
|
||||
- name: checkout
|
||||
uses: actions/checkout@v2
|
||||
|
||||
- name: Run errno.py
|
||||
run: |
|
||||
export ZEPHYR_BASE=${PWD}
|
||||
./scripts/ci/errno.py
|
56
scripts/ci/errno.py
Executable file
56
scripts/ci/errno.py
Executable file
|
@ -0,0 +1,56 @@
|
|||
#!/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()
|
Loading…
Reference in a new issue