about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog25
-rw-r--r--Makefile1
-rw-r--r--Makerules17
-rw-r--r--extra-lib.mk29
-rw-r--r--o-iterator.mk9
-rw-r--r--sunrpc/Makefile29
6 files changed, 86 insertions, 24 deletions
diff --git a/ChangeLog b/ChangeLog
index 40d61f4abc..6f7a40ee92 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,15 +1,34 @@
+Fri Mar 17 12:58:37 1995  Roland McGrath  <roland@churchy.gnu.ai.mit.edu>
+
+	* sunrpc/Makefile (install-lib): Variable removed.
+	(rpcsvc-objs): Variable removed.
+	(extra-objs): Don't include $(rpcsvc-objs).
+	(extra-libs): New variable, contains librpcsvc.
+	(librpcsvc-routines): New variable.
+	(librpcsvc-inhibit-o): New variable, contains .so.
+	(omit-deps): Set this to $(librpcsvc-routines).
+	($(objpfx)rpcgen): Don't use $(libc.a).
+	(lib, $(objpfx)librpcsvc.a): Targets removed.
+
+	* o-iterator.mk, extra-lib.mk: New files.
+	* Makerules (o-iterator): New variable.
+	[extra-libs]: Include extra-lib.mk to generate rules for each word
+	of $(extra-libs).
+	* Makefile (distribute): Add extra-lib.mk, o-iterator.mk.
+
 Fri Mar 17 13:28:04 1995  Ulrich Drepper  <drepper@ipd.info.uni-karlsruhe.de>
 
 	* sysdeps/ieee754/ldbl2mpn.c (__mpn_extract_long_double):
 	Handle 80-bit denormalized numbers correctly.
 
 	* stdlib/strtod.c, stdlib/strtof.c, stdlib/strtold.c:
-	[IMPLICIT_ONE,*_MAX_10_EXP_LOG]: not needed anymore.
+	(IMPLICIT_ONE, *_MAX_10_EXP_LOG): Macros removed; no longer needed.
 	* stdlib/strtod.c (RETURN): Add parentheses around return value.
 	(round_and_return): Correct handling of denormalized numbers.
 
-	* stdio/fpioconst.[ch]: [LDBL_MAX_10_EXP_LOG]: don't use it.
-	LAST_POW10 defines the maximal available exponent.
+	* stdio/fpioconst.c, stdio/fpioconst.h: Don't use
+ 	LDBL_MAX_10_EXP_LOG; LAST_POW10 defines the maximal available
+ 	exponent.
 
 Thu Mar 16 00:04:41 1995  Roland McGrath  <roland@churchy.gnu.ai.mit.edu>
 
diff --git a/Makefile b/Makefile
index e3ec603ced..8cf294f651 100644
--- a/Makefile
+++ b/Makefile
@@ -217,6 +217,7 @@ parent_echo-distinfo:
 
 distribute  := README INSTALL NOTES COPYING.LIB COPYING ChangeLog NEWS	\
 	       Makefile Makeconfig Makerules Rules Make-dist MakeTAGS	\
+	       extra-lib.mk o-iterator.mk				\
 	       ansidecl.h mkinstalldirs move-if-change install-sh	\
 	       configure configure.in aclocal.m4 config.sub config.guess\
 	       config.make.in config-name.in Makefile.in \
diff --git a/Makerules b/Makerules
index 6a8073006c..d8d571d993 100644
--- a/Makerules
+++ b/Makerules
@@ -262,6 +262,23 @@ sysdep_routines := $(sysdep_routines)
 # This is the list of all object files, gotten by
 # replacing every ".c" in `sources' with a ".o".
 override objects	:= $(addprefix $(objpfx),$(sources:.c=.o))
+
+
+# This variable is used in ``include $(o-iterator)'' after defining
+# $(o-iterator-doit) to produce some desired rule using $o for the object
+# suffix, and setting $(object-suffixes-left) to $(object-suffixes); a copy
+# is produced for each object suffix in use.
+o-iterator = $(patsubst %,$(..)o-iterator.mk,$(object-suffixes))
+
+# The makefile may define $(extra-libs) with `libfoo libbar'
+# to build libfoo.a et al from the modules listed in $(libfoo-routines).
+ifdef extra-libs
+# extra-lib.mk is included once for each extra lib to define rules
+# to build it, and to add its objects to the various variables.
+# During its evaluation, $(lib) is set to the name of the library.
+extra-libs-left := $(extra-libs)
+include $(patsubst %,$(..)extra-lib.mk,$(extra-libs))
+endif
 
 +depfiles := $(strip $(sources:.c=.d) \
 		     $(patsubst %.o,%.d,$(filter %.o,$(extra-objs))) \
diff --git a/extra-lib.mk b/extra-lib.mk
new file mode 100644
index 0000000000..353b576872
--- /dev/null
+++ b/extra-lib.mk
@@ -0,0 +1,29 @@
+# This file is included several times in a row, once
+# for each element of $(extra-libs).  $(extra-libs-left)
+# is initialized first to $(extra-libs) so that with each
+# inclusion, we advance $(lib) to the next library name (e.g. libfoo).
+# The variable $($(lib)-routines) defines the list of modules
+# to be included in that library.
+
+lib := $(firstword $(extra-libs-left))
+extra-libs-left := $(filter-out $(lib),$(extra-libs-left))
+
+# Add each flavor of library to the lists of things to build and install.
+install-lib += $(foreach o,$(object-suffixes),$(lib:lib%=$(libtype$o)))
+extra-objs += $(foreach o,$(object-suffixes),$($(lib)-routines:=$o))
+alltypes-$(lib) = $(foreach o,$(object-suffixes),\
+			    $(objpfx)$(patsubst %,$(libtype$o),\
+			    $(lib:lib%=%)))
+ifeq (yes,$(build-shared))
+alltypes-$(lib) += $(objpfx)$(lib).so
+endif
+
+lib-noranlib: $(alltypes-$(lib))
+
+# Use o-iterator.mk to generate a rule for each flavor of library.
+define o-iterator-doit
+$(objpfx)$(patsubst %,$(libtype$o),$(lib:lib%=%)): \
+  $($(lib)-routines:%=$(objpfx)%$o); $$(build-extra-lib)
+endef
+object-suffixes-left := $(filter-out $($(lib)-inhibit-o),$(object-suffixes))
+include $(o-iterator)
diff --git a/o-iterator.mk b/o-iterator.mk
new file mode 100644
index 0000000000..18a6e48ae3
--- /dev/null
+++ b/o-iterator.mk
@@ -0,0 +1,9 @@
+# This file is included several times in a row, once
+# for each element of $(object-suffixes).  $(object-suffixes-left)
+# is initialized first to $(object-suffixes) so that with each
+# inclusion, we advance $o to the next suffix.
+
+o := $(firstword $(object-suffixes-left))
+object-suffixes-left := $(filter-out $o,$(object-suffixes-left))
+
+$(o-iterator-doit)
diff --git a/sunrpc/Makefile b/sunrpc/Makefile
index 6a5f895722..40026fecd4 100644
--- a/sunrpc/Makefile
+++ b/sunrpc/Makefile
@@ -64,25 +64,27 @@ routines := auth_none auth_unix authuxprot bindrsvprt \
 	    svc_tcp svc_udp xdr xdr_array xdr_float xdr_mem \
 	    xdr_rec xdr_ref xdr_stdio
 
-install-lib := librpcsvc.a
+others := portmap rpcinfo
 install-bin := rpcgen
 install-sbin := rpcinfo portmap
-rpcsvc-objs = $(rpcsvc:%.x=x%.o)
 rpcgen-objs = rpc_main.o rpc_hout.o rpc_cout.o rpc_parse.o \
 	      rpc_scan.o rpc_util.o rpc_svcout.o rpc_clntout.o
-extra-objs = $(rpcgen-objs) $(rpcsvc-objs)
-omit-deps = $(basename $(rpcsvc-objs))
 # These headers are part of rpcgen.
 distribute := rpc_util.h rpc_parse.h rpc_scan.h $(rpcgen-objs:.o=.c) etc.rpc
+extra-objs = $(rpcgen-objs)
+
+extra-libs := librpcsvc
+librpcsvc-routines = $(rpcsvc:%.x=x%)
+librpcsvc-inhibit-o = .so # Build no shared rpcsvc library.
+omit-deps = $(librpcsvc-routines)
 
-others := portmap rpcinfo
 
 # Sun's code is not too clean.
 override +gccwarn := -w
 
 include ../Rules
 
-$(objpfx)rpcgen: $(addprefix $(objpfx),$(rpcgen-objs)) $(libc.a)
+$(objpfx)rpcgen: $(addprefix $(objpfx),$(rpcgen-objs)) $(common-objpfx)libc.a
 	$(+link)
 
 rpcgen-cmd = $(dir $(word 2,$^))$(notdir $(word 2,$^))
@@ -100,21 +102,6 @@ $(sysconfdir)/rpc: etc.rpc
 
 defines := $(defines) -D_PATH_RPC='"$(sysconfdir)/rpc"'
 
-# Build the `rpcsvc' library of XDR functions.
-
-lib: $(objpfx)librpcsvc.a
-
-$(objpfx)librpcsvc.a: $(addprefix $(objpfx),$(rpcsvc-objs))
-# This library is small enough that it's simplest to recreate the archive
-# from scratch each time.
-	rm -f $@
-ifdef objdir
-	cd $(objdir); $(AR) cq$(verbose) $@ $(^:$(objpfx)%=%)
-else
-	$(AR) cq$(verbose) $@ $^
-endif
-	$(RANLIB) $@
-
 # Generate the rpcsvc headers with rpcgen.
 $(objpfx)rpcsvc/%.h: rpcsvc/%.x $(objpfx)rpcgen
 	$(make-target-directory)