⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 machrules

📁 一个C源代码分析器
💻
字号:
# Rules for MiG interfaces that want to go into the C library.# Copyright (C) 1991, 1992, 1993, 1994 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_ (and the# function names prefixed with __), and a symbol-alias to the un-__'d form# generated; header for both 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 :=endifinclude ../Makeconfigifndef MIGMIG = migendifMIGFLAGS = -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.endefifdef user-interfaces*.ir := $(addprefix $(objpfx),$(foreach if,$(user-interfaces),$(if).ir))ifndef inhibit_interface_rulesinclude $(*.ir)endififneq "$(*.ir)" "$(wildcard $(*.ir))"# If any .ir file is missing, we will be unable to make all the deps.no_deps=tendifgenerated += $(*.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.## While we're at it, we figure out the imports used by %.defs and give them# as dependencies of the object files for the generated RPC_*.c files.## 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 }	\	      /^#include/ { printf \"$*-imports += %s\\n\", \$$2 }" $<	;\	 echo '$$($*-calls:%=$$(objpfx)R\%C_%.c): $$(objpfx)$*.ustamp ;';\	 echo '$$($*-calls:%=$$(objpfx)RPC_%.o): $$($*-imports:<%>=%)'	;\	) > $@-new	mv $@-new $@vpath Machrules ../mach	# Find ourselves.ifndef transform-user-stub-outputtransform-user-stub-output = tmpendif# Not an implicit rule so the stamps are never removed as intermediates!$(patsubst %,$(objpfx)%.ustamp,$(user-interfaces)): $(objpfx)%.ustamp: %.defs	$(MIG) $< $(MIGFLAGS) $(user-MIGFLAGS) \	       -prefix __ -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 $@# 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: %.defs	$(MIG) $< $(MIGFLAGS) $(server-MIGFLAGS) \	       -prefix _S_ \	       -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/nullendef$(objpfx)%.__h: %.defs; $(mig.__h)define mig.__h$(make-target-directory)$(MIG) $< $(MIGFLAGS) -prefix __ \       -header $@ -server /dev/null -user /dev/nullendef$(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 $@if-calls.c := $(strip $(foreach if,$(user-interfaces),$($(if)-calls:%=%.c)))ifdef if-calls.c$(addprefix $(objpfx),$(if-calls.c)): $(objpfx)%.c: # Machrules	(echo '#include <gnu-stabs.h>'; \	 echo 'symbol_alias (__$*, $*);') > $@-new	mv $@-new $@endifinterface-routines := $(foreach if,$(user-interfaces),			\				$($(if)-calls)				\				$(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-headersinterface-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)# Specify the static dependencies of the generated files.$(foreach if,$(user-interfaces),$($(if)-calls:%=$(objpfx)RPC_%.o))): \    mach/boolean.h mach/kern_return.h mach/message.h mach/notify.h \    mach/mach_types.h mach/mig_errors.h mach/mig_support.h mach/msg_type.h$(foreach if,$(user-interfaces),$($(if)-calls:%=$(objpfx)%.o)): ../gnu-stabs.h$(server-interfaces:%=$(objpfx)%.o): \    mach/boolean.h mach/kern_return.h mach/message.h mach/mig_errors.h \    mach/mig_support.h mach/std_types.h# The MiG-generated sources also depend on the imports in their .defs files.# These dependencies are generated into the .ir files above.# If defined, $(interface-library) is `libNAME.a'.  It is to be a library# containing all the MiG-generated functions for the specified interfaces.ifdef interface-library$(interface-library)-objs := $(interface-routines:%=%.o)install-lib += $(interface-library)extra-objs += $($(interface-library)-objs)$(objpfx)$(interface-library): $(addprefix $(objpfx),\					   $($(interface-library)-objs))ifdef objdir	cd $(objdir); $(AR) cru$(verbose) $(@:$(objpfx)%=%) $(^:$(objpfx)%=%)else	$(AR) cru$(verbose) $@ $^endif	$(RANLIB) $@lib-noranlib: $(objpfx)$(interface-library)mostlyclean:	-rm -f $(objpfx)$(interface-library)endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -