hurd: Rework generating errno.h
authorSamuel Thibault <samuel.thibault@ens-lyon.org>
Sun, 6 Aug 2023 20:32:46 +0000 (20:32 +0000)
committerSamuel Thibault <samuel.thibault@ens-lyon.org>
Sun, 6 Aug 2023 20:35:01 +0000 (22:35 +0200)
We only need to give to gawk the headers that actually define error
numbers, so let's rather filter out the other included headers early.

sysdeps/mach/hurd/Makefile
sysdeps/mach/hurd/bits/errno.h
sysdeps/mach/hurd/errnos.awk

index 5bc682a..029dac4 100644 (file)
@@ -66,26 +66,32 @@ errno.texinfo = $(..)manual/errno.texi
 
 hurd = $(..)sysdeps/mach/hurd
 
-define mach-errno-h
-($(foreach h,mach/message.h \
+mach-errno-h = \
+            mach/message.h \
             mach/kern_return.h \
             mach/mig_errors.h \
-            device/device_types.h,\
- echo '#include <$h>';\
- ))
-endef
+            device/device_types.h
 
 # We use the compiler to generate a list of absolute file names for
 # the headers we want to search for Mach error codes, listed above (and
 # incidentally, all other headers those include).
 -include $(common-objpfx)errnos.d
 $(common-objpfx)errnos.d: $(mach-errnos-deps)
-       $(mach-errno-h) | \
-       $(CC) $(CFLAGS) \
-           $(subst -include $(common-objpfx)libc-modules.h,,$(CPPFLAGS)) \
-           -M -x c - | \
-       sed $(sed-remove-objpfx) -e 's,- *:,mach-errnos-deps :=,' \
-           -e 's, \.\./, $(..),g' > $@t
+       echo -n "mach-errnos-deps := " > $@t
+       for h in $(mach-errno-h) ; do \
+               echo "#include <$$h>" \
+               | $(CC) $(CFLAGS) \
+                   $(subst -include $(common-objpfx)libc-modules.h,,$(CPPFLAGS)) \
+                   -M -x c - \
+               | sed $(sed-remove-objpfx) \
+                   -e 's, \.\./, $(..),g' \
+                   -e 's,\\$$,,g' \
+                   -e 's, ,\n,g' \
+               | grep "$$h$$" \
+               | tr '\n' ' ' \
+                 >> $@t ; \
+       done
+       echo >> $@t
        mv -f $@t $@
 
 $(hurd)/bits/errno.h: $(common-objpfx)stamp-errnos ;
index a0794f9..3b54f58 100644 (file)
@@ -1,33 +1,9 @@
 /* This file generated by errnos.awk from
      errno.texi
-     stdc-predef.h
-     libc-symbols.h
      mach/message.h
      mach/kern_return.h
-     mach/port.h
-     mach/boolean.h
-     stdint.h
-     ../stdlib/stdint.h
-     ../bits/libc-header-start.h
-     features.h
-     features-time64.h
-     ../sysdeps/generic/features-time64.h
-     sys/cdefs.h
-     ../misc/sys/cdefs.h
-     ../sysdeps/x86/bits/wordsize.h
-     ../sysdeps/ieee754/ldbl-96/bits/long-double.h
-     gnu/stubs.h
-     bits/types.h
-     ../posix/bits/types.h
-     ../sysdeps/mach/hurd/bits/timesize.h
-     ../sysdeps/mach/hurd/bits/typesizes.h
-     ../bits/time64.h
-     ../bits/wchar.h
-     ../bits/stdint-intn.h
-     ../bits/stdint-uintn.h
      mach/mig_errors.h
      device/device_types.h
-     mach/std_types.h
    Do not edit this file; edit errnos.awk and regenerate it.  */
 
 #ifndef _BITS_ERRNO_H
index b9f717c..507e9d2 100644 (file)
@@ -23,12 +23,8 @@ BEGIN {
     for (i = 1; i < ARGC; i++)
       {
        arg = ARGV[i];
-       sub(/.*(manual|include)\//, "", arg);
+       sub(/.*(manual|include|-gnu)\//, "", arg);
        if (arg ~ /.*errnos.d/) continue;
-       # Those not not actually define anything for errno.h
-       if (arg ~ /mach\/.*\/kern_return.h/) continue;
-       if (arg ~ /mach\/.*\/boolean.h/) continue;
-       if (arg ~ /mach\/.*\/vm_types.h/) continue;
        print "     " arg;
       }
     print "   Do not edit this file; edit errnos.awk and regenerate it.  */";