glibc/mach/Machrules
Roland McGrath aa1075ea2f Sun May 12 11:16:58 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* mach/Machrules (%.udeps rule): Write deps for %_server.[ch] too.
	(%_server.[ch] rule): Don't depend on %.defs; use #include to get
	installed .defs file.

	* stdio-common/vfprintf.c (flockfile, funlockfile): Define to
	nothing for stdio.  Fix fUNlockfile -> funlockfile for libio.
	* stdio-common/vfscanf.c: Likewise.

Sat May 11 13:43:41 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>

	* hurd/hurdfault.c: Include faultexc_server.h instead of faultexc.h.

	* mach/Machrules (%.ir rule): Don't produce deps for imports.

	* elf/dl-fini.c (_dl_fini): Clear L->l_init_called after calling fn.

	* Makerules (install): Depend on $(slibdir)/libc.so$(libc.so-version).
	[!subdir] ($(libdir)/libc.so, $(common-objpfx)/libc-syms.so): Protect
	these targets and install dep on $(libdir)/libc.so with this.

	* hurd/Makefile: Removed all rules and defns for using code from Hurd
	sources and installing headers from there.

	* sysdeps/mach/hurd/errnos.awk: Set in_mach_errors to FILENAME when we
 	set it.  In Mach error matching clause, only match if FILENAME is
 	still the same value.

	* sysdeps/mach/hurd/Makefile: Don't include sysdeps/mach/Makefile;
	$(mach-srcdir) no longer exists.
	(hurd-srcdir): Variable removed.
	(includes): Don't append -I$(hurd-srcdir).
	(last-includes): Variable removed.
	Remove vpath specs using $(hurd-srcdir).
	(mach-errno-h): New canned sequence.
	($(common-objpfx)errnos.d): New target, generated included makefile
	to determine absolute file names of Mach headers to search for error
	codes and set variable mach-errnos-deps.
	($(common-objpfx)stamp-errnos): Depend on $(mach-errnos-deps) instead
	of prior explicit list.
	(generated): Add errnos.d, stamp-errnos.

	* mach/Machrules (some-if-rtn): New variable and target; compute deps
	of some if routine and make all if routines depend on that .d file
	instead of static list of .h files.

	* mach/Makefile (mach/mach_interface.defs,
	mach/memory_object_user.defs): Targets removed.
	($(objpfx)mach-syscalls.mk): Tweak this kludge so it doesn't depend
	directly on Mach sources.

	* sysdeps/mach/Makefile (mach-srcdir): Variable removed.
	(includes): Don't append -I$(mach-srcdir).
	Remove vpath specs using $(mach-srcdir).

	* hurd/Makefile (server-interfaces): Add faultexc.
	(sig): Remove it from here.
	(fault%.[ch]): Rule removed.
	(MIGFLAGS-faultexc): New variable.

	* hurd/faultexc.defs: New file.

	* mach/Machrules (%.ustamp rule): Pass $(MIGFLAGS-$*) to mig.
	(%_server.[ch] rule): Likewise.

	* mach/Makefile: Removed all rules and defns for using code from Mach
	sources and installing headers from there.

	* Makeconfig [$(build-shared)=yes] (link-libc): Append
	$(libc.so-version) to libc.so.

	* mach/Machrules (%.ustamp rule): Don't depend on %.defs.
	(%.udeps): New rule parallel to that one, generating included
	makefiles with -M output from `#include <%.defs>'.

	* Makerules (sed-remove-objpfx): Remove space before \ at eol.
1996-05-12 16:38:08 +00:00

210 lines
7.6 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Rules for MiG interfaces that want to go into the C library.
# Copyright (C) 1991, 92, 93, 94, 95, 96 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 Library General Public License
# as published by the Free Software Foundation; either version 2 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
# Library General Public License for more details.
# You should have received a copy of the GNU Library General Public
# License along with the GNU C Library; see the file COPYING.LIB. If
# not, write to the Free Software Foundation, Inc., 675 Mass Ave,
# Cambridge, MA 02139, USA.
# Makefiles may define these variable before including this file:
# user-interfaces Names of interfaces to put user stubs in for.
# server-interfaces Names of interfaces to put server stubs in for.
# interface-library Name of interface library to build and install.
# This file sets:
# interface-headers Names of generated interface header files.
# interface-routines Names of generated interface routines.
# All user stubs are put in individual files, prefixed with RPC_; header
# for both __ and non-__ names is put in foo.h. Server interfaces are
# written to foo_server.c and foo_server.h; the server functions are called
# _S_rpcname.
# Includers can also add to or modify `migdefines' to set MiG flags.
all:
# Make sure no value comes from the environment, since we append to it.
# This is done also in ../Rules, but we append to the value before
# including Rules, which changes the origin.
ifneq "$(findstring env,$(origin generated))" ""
generated :=
endif
include ../Makeconfig
ifndef MIG
MIG = mig
endif
MIGFLAGS = -DMACH_IPC_COMPAT=0 -DSTANDALONE -DTypeCheck=0 \
$(+includes) $(migdefines) -subrprefix __
.SUFFIXES: .defs # Just to set specified_rule_matched.
define nl # This is needed by *.ir.
endef
ifdef user-interfaces
*.ir := $(addprefix $(objpfx),$(foreach if,$(user-interfaces),$(if).ir))
ifndef no_deps
ifndef inhibit_interface_rules
-include $(*.ir)
endif
endif
ifneq "$(*.ir)" "$(wildcard $(*.ir))"
# If any .ir file is missing, we will be unable to make all the deps.
no_deps=t
endif
generated += $(*.ir:$(objpfx)%=%)
endif
# %.ir defines a variable `%-calls', which lists the RPCs defined by
# %.defs, and a rule to build $(%-calls:%=RPC_$(%-userprefix)%.c) from
# %.defs, where $(%-userprefix) is the user prefix given in %.defs. We use
# the kludgificacious method of defining a pattern rule to build files
# matching patterns we are pretty damn sure will only match the particular
# files we have in mind. To be so damn sure, we use the silly names
# RPC_*.c and the pattern R%C_*.c because using __*.c and _%*.c (or any
# other useful pattern) causes the rule for `host_info' to also match
# `xxx_host_info', and analogous lossage.
#
# Depend on %.h just so they will be built from %.uh in the
# makefile-rebuilding run which builds %.ir; otherwise, %.uh is built as an
# intermediate in order to make %.ir and then removed before re-exec, when
# %.uh is built all over again to build %.h.
$(objpfx)%.ir: $(objpfx)%.uh $(objpfx)%.h
(awk "NF == 4 && (\$$2 == \"Routine\" || \$$2 == \"SimpleRoutine\")\
{ printf \"$*-calls += %s\\n\", \$$3 }" $< ;\
echo '$$($*-calls:%=$$(objpfx)R\%C_%.c): $$(objpfx)$*.ustamp ;';\
) > $@-new
mv $@-new $@
vpath Machrules ../mach # Find ourselves.
ifndef transform-user-stub-output
transform-user-stub-output = tmp
define transform-user-stub
echo "weak_alias (__$$call, $$call)" >> $(objpfx)tmp_$${call}.c;
endef
endif
# Not an implicit rule so the stamps are never removed as intermediates!
$(patsubst %,$(objpfx)%.ustamp,$(user-interfaces)): $(objpfx)%.ustamp:
rm -f $@
echo '#include <$*.defs>' | \
$(MIG) - /dev/null -prefix __ \
$(MIGFLAGS) $(user-MIGFLAGS) $(MIGFLAGS-$*) \
-i $(objpfx)tmp_ \
-server /dev/null -user /dev/null -header /dev/null
for call in $($*-calls); do \
$(transform-user-stub) \
../move-if-change $(objpfx)$(transform-user-stub-output)_$${call}.c \
$(objpfx)RPC_$${call}.c; \
done
touch $@
-include $(patsubst %,$(objpfx)%.udeps,$(user-interfaces))
$(patsubst %,$(objpfx)%.udeps,$(user-interfaces)): $(objpfx)%.udeps:
echo '#include <$*.defs>' | \
$(CC) $(CPPFLAGS) -M -x c - | \
sed -e 's,- *:,$@ $(@:.udeps=.ustamp) \
$(@:.udeps=_server.c) $(@:.udeps=_server.h):,' \
$(sed-remove-objpfx) > $@.new
mv -f $@.new $@
# Look for the server stub files where they will be written.
vpath %_server.c $(addprefix $(objpfx),$(sort $(dir $(server-interfaces))))
# Build the server stubs in $(objdir).
$(objpfx)%_server.c $(objpfx)%_server.h:
echo '#include <$*.defs>' | \
$(MIG) - /dev/null -prefix _S_ \
$(MIGFLAGS) $(server-MIGFLAGS) $(MIGFLAGS-$*) \
$< -user /dev/null -header /dev/null \
-server $(@:.h=.c) -sheader $(@:.c=.h)
# To get header files that declare both the straight and __ functions,
# we generate two files and paste them together.
$(objpfx)%.uh: %.defs; $(mig.uh)
define mig.uh
$(make-target-directory)
$(MIG) $< $(MIGFLAGS) \
-header $@ -server /dev/null -user /dev/null
endef
$(objpfx)%.__h: %.defs; $(mig.__h)
define mig.__h
$(make-target-directory)
$(MIG) $< $(MIGFLAGS) -prefix __ \
-header $@ -server /dev/null -user /dev/null
endef
$(objpfx)%.h: $(objpfx)%.__h $(objpfx)%.uh
# The last line of foo.__h is "#endif _foo_user_".
# The first two lines of foo.uh are "#ifndef _foo_user_"/"#define _foo_user_".
(sed -e '$$d' $<; sed -e '1,2d' $(word 2,$^)) > $@-new
mv $@-new $@
interface-routines := $(foreach if,$(user-interfaces), \
$(addprefix RPC_,$($(if)-calls))) \
$(server-interfaces:%=%_server)
interface-headers := $(user-interfaces:%=%.h) \
$(server-interfaces:%=%_server.h)
# Remove the generated user stub source and header files,
# and don't distribute them.
mach-generated = $(interface-routines:%=%.c) \
$(foreach h,$(interface-headers:%.h=%),$h.h $h.uh $h.__h)
generated += $(mach-generated)
# These are needed to generate the dependencies.
before-compile += $(interface-headers:%=$(objpfx)%)
# Don't let these be intermediate files and get removed.
$(foreach h,$(interface-headers:%.h=$(objpfx)%),$h.h $h.__h $h.uh) :
$(interface-routines:%=$(objpfx)%.c) :
# Convenient target to generate all the headers.
.PHONY: interface-headers
interface-headers: $(interface-headers)
# Don't automatically generate dependencies for the sources we generate.
# There are likely to be a whole lot of them, and we know their
# dependencies ahead of time anyway because they're boilerplate.
omit-deps += $(interface-routines)
# Choose any single module generated by MiG. We will compute this module's
# dependencies and then assume all other MiG-generated modules depend on the
# same headers.
some-if-rtn := $(firstword $(interface-routines))
ifdef some-if-rtn
$(foreach o,$(object-suffixes),$(interfaces-routines:%=%$o)): $(some-if-rtn).d
generated += $(some-if-rtn).d
endif
# If defined, $(interface-library) is `libNAME'. It is to be a library
# containing all the MiG-generated functions for the specified interfaces.
ifdef interface-library
$(interface-library)-routines = $(interface-routines)
extra-libs += $(interface-library)
# Avoid -lmachuser requiring -lc, which may not be built yet. If the
# shared object is absent, ld may choose a static library someplace and
# produce a bogus libmachuser.so.
interface.so = $(interface-library:lib%=%.so)
LDFLAGS-$(interface.so) = -nostdlib -nostartfiles
endif