summaryrefslogtreecommitdiff
path: root/stdlib/Makefile
diff options
context:
space:
mode:
authorZack Weinberg <zackw@panix.com>2017-06-22 18:28:45 -0400
committerZack Weinberg <zackw@panix.com>2017-06-22 18:28:45 -0400
commit09e65f085e8491db0ada73c558ffe8dc296ade47 (patch)
treec31ff4f8f871bab4762248bffc9c3c508037ef61 /stdlib/Makefile
parentbf7aa82eab0f1f9c78d39cf57a3f6b25eefc47c1 (diff)
downloadglibc-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/Makefile')
-rw-r--r--stdlib/Makefile38
1 files changed, 38 insertions, 0 deletions
diff --git a/stdlib/Makefile b/stdlib/Makefile
index 0314d5926b..31025465cb 100644
--- a/stdlib/Makefile
+++ b/stdlib/Makefile
@@ -149,6 +149,34 @@ ifeq ($(run-built-tests),yes)
tests-special += $(objpfx)tst-fmtmsg.out
endif
+ifdef PYTHON
+# Pretty-printer for errno. The .pysym file is itself generated from
+# errnos.texi, and can be augmented by sysdeps Makefiles, primarily for
+# the sake of the Hurd, which has a bunch of extra error constants.
+pretty-printers := errno-printer.py
+tests-printers := test-errno-printer
+gen-py-const-headers := errno_constants.pysym
+vpath %.pysym $(objpfx)
+
+define sysd-add-errno-constants
+:
+endef
+$(objpfx)errno_constants.pysym: make-errno-constants.awk \
+ $(..)manual/errno.texi
+ ($(AWK) -f make-errno-constants.awk $(..)manual/errno.texi; \
+ $(sysd-add-errno-constants)) > $@T
+ mv -f $@T $@
+
+# We must specify both CFLAGS and CPPFLAGS to override any
+# compiler options the user might have provided that conflict
+# with what we need e.g. user specifies CPPFLAGS with -O2 and
+# we need -O0.
+CFLAGS-test-errno-printer.c := $(CFLAGS-printers-tests)
+CPPFLAGS-test-errno-printer.c := $(CFLAGS-printers-tests)
+
+tests-special += $(objpfx)test-errno-constants.out
+endif
+
include ../Rules
ifeq ($(run-built-tests),yes)
@@ -220,3 +248,13 @@ $(objpfx)tst-setcontext3.out: tst-setcontext3.sh $(objpfx)tst-setcontext3
$(evaluate-test)
$(objpfx)tst-makecontext: $(libdl)
+
+# Note: errno_constants.py depends on errno.h and everything it
+# includes, as well as on errno_constants.pysym, so we don't need to
+# specify that this test also depends on both.
+$(objpfx)test-errno-constants.out: \
+ test-errno-constants.py $(objpfx)errno_constants.py
+ $(PYTHON) $< $(objpfx) $(CC) $(CFLAGS) $(CPPFLAGS) > $@; \
+ $(evaluate-test)
+
+libof-test-errno-constants = testsuite