2004-10-20 Roland McGrath * Makeconfig ($(common-objpfx)shlib-versions.v.i): Check also $(config-sysdirs) for shlib-versions files. * Makeconfig ($(common-objpfx)soversions.i): Replace shell loop with use of ... * scripts/soversions.awk: ... this new file. Collect lib info and match any DEFAULT line before emitting anything, so DEFAULT can come later in the concatenation of shlib-versions files. Index: libc/Makeconfig =================================================================== RCS file: /cvs/glibc/libc/Makeconfig,v retrieving revision 1.297 retrieving revision 1.298 diff -u -r1.297 -r1.298 --- libc/Makeconfig 5 Aug 2004 03:34:28 -0000 1.297 +++ libc/Makeconfig 21 Oct 2004 01:29:24 -0000 1.298 @@ -799,26 +799,19 @@ # This lets add-ons give more-specific matches that override defaults # in the top-level file. $(common-objpfx)shlib-versions.v.i: \ - $(wildcard $(patsubst %, $(..)%/shlib-versions,$(add-ons) $(subdirs)))\ + $(wildcard $(patsubst %, $(..)%/shlib-versions,$(add-ons) \ + $(config-sysdirs) \ + $(subdirs))) \ $(..)shlib-versions -$(common-objpfx)soversions.i: $(common-objpfx)shlib-versions.v - default_setname='$(filter-out %_default,$(oldest-abi:%=GLIBC_%))'; \ - while read conf version setname; do \ - test -n "$$version" && \ - test `expr '$(config-machine)-$(config-vendor)-$(config-os)' \ - : "$$conf"` != 0 || continue; \ - if test "x$$version" = xDEFAULT; then \ - default_setname="$$setname"; \ - else \ - $(abi-default_setname) \ - lib=`echo $$version | sed 's/=.*$$//'`; \ - if eval test -z "\$${versioned_$${lib}}"; then \ - eval versioned_$${lib}=yes; \ - number=`echo $$version | sed "s/^.*=//"`; \ - echo $$lib $$number $${setname:-$${default_setname}}; \ - fi; \ - fi; \ - done < $< > $@T; exit 0 + +soversions-default-setname = $(patsubst %, %,\ + $(filter-out %_default,\ + $(oldest-abi:%=GLIBC_%))) +$(common-objpfx)soversions.i: $(..)scripts/soversions.awk \ + $(common-objpfx)shlib-versions.v + $(AWK) -v default_setname='$(soversions-default-setname)' \ + -v config='$(config-machine)-$(config-vendor)-$(config-os)' \ + -f $^ > $@T mv -f $@T $@ $(common-objpfx)soversions.mk: $(common-objpfx)soversions.i (while read lib number setname; do \ Index: libc/scripts/soversions.awk =================================================================== RCS file: /cvs/glibc/libc/scripts/soversions.awk,v retrieving revision 1.1 diff -u -r1.1 soversions.awk --- libc/scripts/soversions.awk 21 Oct 2004 08:31:45 -0000 +++ libc/scripts/soversions.awk 21 Oct 2004 01:29:26 -0000 1.1 @@ -0,0 +1,38 @@ +# awk script for shlib-versions.v.i -> soversions.i; see Makeconfig. + +# Only lines matching `config' (set with -v) are relevant to us. +config !~ $1 { next } + +# Obey the first matching DEFAULT line. +$2 == "DEFAULT" { + if (!matched_default) { + matched_default = 1; + $1 = $2 = ""; + default_setname = $0; + } + next +} + +# Collect all lib lines before emitting anything, so DEFAULT +# can be interspersed. +{ + lib = number = $2; + sub(/=.*$/, "", lib); + sub(/^.*=/, "", number); + if (lib in numbers) next; + numbers[lib] = number; + if (NF > 2) { + $1 = $2 = ""; + versions[lib] = $0 + } +} + +END { + for (lib in numbers) { + set = (lib in versions) ? versions[lib] : default_setname; + if (set) + print lib, numbers[lib], set; + else + print lib, numbers[lib]; + } +}