about summary refs log tree commit diff
path: root/sysdeps/mach
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps/mach')
-rw-r--r--sysdeps/mach/Makefile29
-rw-r--r--sysdeps/mach/hurd/Makefile71
-rw-r--r--sysdeps/mach/hurd/errnos.awk12
3 files changed, 32 insertions, 80 deletions
diff --git a/sysdeps/mach/Makefile b/sysdeps/mach/Makefile
index fab174c0d6..a179b1f83e 100644
--- a/sysdeps/mach/Makefile
+++ b/sysdeps/mach/Makefile
@@ -1,4 +1,4 @@
-# Copyright (C) 1993, 1994 Free Software Foundation, Inc.
+# Copyright (C) 1993, 1994, 1996 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
@@ -16,38 +16,11 @@
 # not, write to the Free Software Foundation, Inc., 675 Mass Ave,
 # Cambridge, MA 02139, USA.
 
-ifndef mach-srcdir-computed
-mach-srcdir-computed := yes
-
-# If we were configured with `--with-mach=DIR', then config.make sets
-# mach-srcdir to DIR.  Otherwise guess we are in a big source tree.
-ifndef mach-srcdir
-mach-srcdir = ../mach
-endif
-
-# mach-srcdir is now set to the logical directory name.  This name might be
-# relative to $(objdir), might be relative to the source directory $(..), or
-# might be absolute.  We choose among these possibilities by looking for a
-# canonical file in each of those places (in that order).
-f := mach/mach.defs # Random file that identifies the Mach source dir.
-f := $(strip $f)
-mach-srcdir := $(firstword $(patsubst %/$f,%,$(wildcard $(addsuffix /$f,\
-	       $(objpfx)$(mach-srcdir) $(..)$(mach-srcdir)))) $(mach-srcdir))
-
-endif	# ! mach-srcdir-computed
-
 ifdef in-Makerules
 
 # Look for header files in mach/ under the top-level library source directory.
 includes += -I$(..)mach
 
-# When compiling, use the Mach header files directly from the kernel sources.
-includes += -I$(mach-srcdir)
-
-# Find Mach header files in the kernel source.
-vpath mach/%.h $(mach-srcdir)
-vpath device/%.h $(mach-srcdir)
-
 ifneq (mach,$(subdir))
 # Subdirectories other than mach/ might use the generated Mach headers.
 # So make sure we get a chance to run in mach/ to make them before all else.
diff --git a/sysdeps/mach/hurd/Makefile b/sysdeps/mach/hurd/Makefile
index 462eb23b0e..14dc1ebc83 100644
--- a/sysdeps/mach/hurd/Makefile
+++ b/sysdeps/mach/hurd/Makefile
@@ -16,33 +16,6 @@
 # not, write to the Free Software Foundation, Inc., 675 Mass Ave,
 # Cambridge, MA 02139, USA.
 
-# Get mach-srcdir defined.
-old-in-Makerules := $(in-Makerules)
-in-Makerules :=
-include $(..)sysdeps/mach/Makefile
-in-Makerules := $(old-in-Makerules)
-
-
-ifndef hurd-srcdir-computed
-hurd-srcdir-computed := yes
-
-# If we were configured with `--with-hurd=DIR', then config.make sets
-# hurd-srcdir to DIR.  Otherwise guess we are in a big source tree.
-ifndef hurd-srcdir
-hurd-srcdir = ../hurd
-endif
-
-# hurd-srcdir is now set to the logical directory name.  This name might be
-# relative to $(objdir), might be relative to the source directory $(..), or
-# might be absolute.  We choose among these possibilities by looking for a
-# canonical file in each of those places (in that order).
-f := hurd/hurd_types.defs # Random file that identifies the Hurd source dir.
-f := $(strip $f)
-hurd-srcdir := $(firstword $(patsubst %/$f,%,$(wildcard $(addsuffix /$f,\
-	       $(objpfx)$(hurd-srcdir) $(..)$(hurd-srcdir)))) $(hurd-srcdir))
-
-endif	# ! hurd-srcdir-computed
-
 ifdef in-Makerules
 
 subdirs := $(filter-out sunrpc,$(subdirs)) # XXX skip broken dirs
@@ -50,17 +23,6 @@ subdirs := $(filter-out sunrpc,$(subdirs)) # XXX skip broken dirs
 # Look for header files in hurd/ under the top-level library source directory.
 includes += -I$(..)hurd
 
-# When compiling, use the Hurd header files directly from the sources.
-includes += -I$(hurd-srcdir)
-
-# When compiling, find cthreads.h in the Hurd cthreads source.
-# This directory has some other (private) header file with
-# conflicting names, so we put it last.
-last-includes += -I$(hurd-srcdir)/libthreads
-
-# Find the Hurd header files in the Hurd source.
-vpath hurd/%.h $(hurd-srcdir)
-
 # Do not use any assembly code from sysdeps/unix (and subdirectories).
 # This bypasses all the system call stubs and uses any existing posix or
 # generic C files instead.
@@ -98,19 +60,36 @@ errno.texinfo = $(..)manual/errno.texi
 
 hurd = $(..)sysdeps/mach/hurd
 
-$(hurd)/errnos.h: $(objpfx)stamp-errnos ;
-$(objpfx)stamp-errnos: $(hurd)/errnos.awk $(errno.texinfo) \
-		       $(mach-srcdir)/mach/message.h \
-		       $(mach-srcdir)/mach/kern_return.h \
-		       $(mach-srcdir)/mach/mig_errors.h \
-		       $(mach-srcdir)/device/device_types.h
+define mach-errno-h
+($(foreach h,mach/message.h \
+	     mach/kern_return.h \
+	     mach/mig_errors.h \
+	     device/device_types.h,\
+ echo '#include <$h>';\
+ ))
+endef
+
+# 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) $(CPPFLAGS) -M -x c - | \
+	sed -e 's,- *:,mach-errnos-deps :=,' > $@t
+	mv -f $@t $@
+
+$(hurd)/errnos.h: $(common-objpfx)stamp-errnos ;
+$(common-objpfx)stamp-errnos: $(hurd)/errnos.awk $(errno.texinfo) \
+			      $(mach-errnos-deps)
 	gawk -f $^ > $(hurd)/errnos.h-tmp
 # Make it unwritable so noone will edit it by mistake.
 	-chmod a-w $(hurd)/errnos.h-tmp
 	./$(..)move-if-change $(hurd)/errnos.h-tmp $(hurd)/errnos.h
-	test ! -d CVS || \
-	  (cd $(hurd); cvs commit -m'Regenerated from $^' errnos.h)
+#	test ! -d CVS || \
+#	  (cd $(hurd); cvs commit -m'Regenerated from $^' errnos.h)
 	touch $@
+generated += errnos.d stamp-errnos
 
 $(hurd)/errlist.c: $(hurd)/errlist.awk $(errno.texinfo)
 	gawk -f $^ > $@-tmp
diff --git a/sysdeps/mach/hurd/errnos.awk b/sysdeps/mach/hurd/errnos.awk
index e3ff7a843b..24a01ba935 100644
--- a/sysdeps/mach/hurd/errnos.awk
+++ b/sysdeps/mach/hurd/errnos.awk
@@ -34,7 +34,7 @@ BEGIN {
     print "enum __error_t_codes\n{";
     errnoh = 0;
     maxerrno = 0;
-    in_mach_errors = 0;
+    in_mach_errors = "";
     in_math = 0;
     edom = erange = "";
     print "#undef EDOM\n#undef ERANGE";
@@ -76,22 +76,22 @@ errnoh == 3 && $1 == "@comment" && $2 == "errno" {
 
 NF == 3 && $1 == "#define" && $2 == "MACH_SEND_IN_PROGRESS" \
   {
-    in_mach_errors = 1;
+    in_mach_errors = FILENAME;
     print "\n\t/* Errors from <mach/message.h>.  */";
   }
 NF == 3 && $1 == "#define" && $2 == "KERN_SUCCESS" \
   {
-    in_mach_errors = 1;
+    in_mach_errors = FILENAME;
     print "\n\t/* Errors from <mach/kern_return.h>.  */";
     next;
   }
 
-in_mach_errors && $2 == "MACH_IPC_COMPAT" \
+in_mach_errors != "" && $2 == "MACH_IPC_COMPAT" \
   {
-    in_mach_errors = 0;
+    in_mach_errors = "";
   }
 
-in_mach_errors == 1 && NF == 3 && $1 == "#define" \
+in_mach_errors == FILENAME && NF == 3 && $1 == "#define" \
   {
     printf "\t%-32s= %s,\n", "E" $2, $3;
   }