diff options
author | Zack Weinberg <zackw@panix.com> | 2017-06-22 18:28:45 -0400 |
---|---|---|
committer | Zack Weinberg <zackw@panix.com> | 2017-06-22 18:28:45 -0400 |
commit | 09e65f085e8491db0ada73c558ffe8dc296ade47 (patch) | |
tree | c31ff4f8f871bab4762248bffc9c3c508037ef61 /stdlib/test-errno-constants.py | |
parent | bf7aa82eab0f1f9c78d39cf57a3f6b25eefc47c1 (diff) | |
download | glibc-zack/errno-prettyprint.tar.gz |
Add pretty-printer for errno.zack/errno-prettyprint
This patch adds the actual pretty-printer for errno. I could have
used Python's built-in errno module to get the symbolic names for the
constants, but it seemed better to do something entirely under our
control, so there's a .pysym file generated from errnos.texi, with a
hook that allows the Hurd to add additional constants. Then a .py
module is generated from that plus errno.h in the usual manner; many
thanks to the authors of the .pysym mechanism.
There is also a test which verifies that the .py file (not the .pysym
file) covers all of the constants defined in errno.h.
hurd-add-errno-constants.awk has been manually tested, but the
makefile logic that runs it has not been tested.
* stdlib/errno-printer.py: New pretty-printer.
* stdlib/test-errno-constants.py: New special test.
* stdlib/test-errno-printer.c, stdlib/test-errno-printer.py:
New pretty-printer test.
* stdlib/make-errno-constants.awk: New script to generate the
.pysym file needed by errno-printer.py.
* stdlib/Makefile: Install, run, and test all of the above, as
appropriate.
* sysdeps/mach/hurd/hurd-add-errno-constants.awk: New script to
add Mach/Hurd-specific errno constants to the .pysym file used by
stdlib/errno-printer.py.
* sysdeps/mach/hurd/Makefile: Hook hurd-add-errno-constants.awk
into the generation of that .pysym file.
Diffstat (limited to 'stdlib/test-errno-constants.py')
-rw-r--r-- | stdlib/test-errno-constants.py | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/stdlib/test-errno-constants.py b/stdlib/test-errno-constants.py new file mode 100644 index 0000000000..a79df97625 --- /dev/null +++ b/stdlib/test-errno-constants.py @@ -0,0 +1,58 @@ +# Test that errno_constants.py includes every error number defined by errno.h. +# Copyright (C) 2017 Free Software Foundation, Inc. +# This file is part of the GNU C Library. +# +# The GNU C Library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# The GNU C Library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with the GNU C Library; if not, see +# <http://www.gnu.org/licenses/>. + +# Usage: test-errno-constants.py $(common-objpfx)stdlib $(CC) $(CFLAGS) $(CPPFLAGS) + +import os +import sys +import subprocess + +sys.path.append(sys.argv[1]) +import errno_constants + +def main(): + cc_cmd = sys.argv[2:] + cc_cmd.extend(["-E", "-dM", "-xc", "-"]) + cc_proc = subprocess.Popen(cc_cmd, + stdin=subprocess.PIPE, + stdout=subprocess.PIPE) + cc_proc.stdin.write(b"#define _GNU_SOURCE\n" + b"#include <errno.h>\n") + cc_proc.stdin.close() + + cc_output = cc_proc.stdout.read() + status = cc_proc.wait() + if status: + sys.stderr.write("{}\nunsuccessful exit, status {:04x}" + .format(" ".join(cc_cmd), status)) + sys.exit(1) + + ok = True + for line in cc_output.decode("utf-8").splitlines(): + if not line.startswith("#define E"): + continue + emacro = line.split()[1] + if not hasattr(errno_constants, emacro): + if ok: + sys.stderr.write("*** Missing constants:\n") + ok = False + sys.stderr.write(emacro + "\n") + + sys.exit(0 if ok else 1) + +main() |