From e0a3ed4ff95ec2e422c1211b35ddf7bf6fbc0a5a Mon Sep 17 00:00:00 2001 From: Roland McGrath Date: Tue, 28 Feb 2006 07:11:04 +0000 Subject: * Makefile (subdir-target-args): New variable. ($(all-subdirs-targets)): Use it in place of -C option. * Rules: Use $(..) instead of ../ if it's already defined. * Makeconfig (subdir-srcdirs): New variable. * csu/Makefile (all-Banner-files): Use it. * configure.in (--enable-add-ons): Set to "yes" by default. Handle absolute add-on directory names when looking for configure fragments. Also look for sysdeps/*/preconfigure fragments in add-ons. Require add-on configure to set $libc_add_on_canonical, use that in $add_ons_sfx. Substitute add_on_subdirs with computed list of subdir names each add-on configure set in libc_add_on_subdirs. * configure: Regenerated. * Makefile (%/preconfigure: %/preconfigure.in): New pattern rule. * config.make.in (add-on-subdirs): New substituted variable. * Makeconfig (all-subdirs): Include $(add-on-subdirs). Remove $(add-ons), $(sysdep-subdirs). Don't filter out $(sysdep-inhibit-subdirs). ($(common-objpfx)sysd-dirs): Target removed. Don't include it. ($(common-objpfx)sysd-sorted): Rewritten to feed Depend and Subdirs files together to gen-sorted.awk, and $(subdirs) via -v. (subdirs): Remove magic reordering for mach and hurd. * scripts/gen-sorted.awk: Use subdirs from command line. Process Subdirs and Depend files directly. Let Subdirs files use "first dir" and "inhibit dir". Always move elf to the end of the list. * hurd/Depend: New file. * sysdeps/mach/Subdirs: Use "first mach". * Makefile (dist-separate): Remove linuxthreads. (dist-separate-linuxthreads): Variable removed. (glibc-%.tar rule): Use $(sysdeps-add-ons). * Makerules ($(common-objpfx)Versions.v.i): Use $(subdirs), not $(all-subdirs). (sysdep-makefiles): Use $(sysdirs). (sysdirs): Remove export. ($(+sysdir_pfx)sysd-rules): Handle absolute directory names in $(config-sysdirs). (+sysdir_pfx): Variable removed. (sysd-rules): Use $(common-objpfx) in place of it. (sysdirs): Variable moved to ... * Makeconfig (sysdirs): ... here. Handle absolute directory names in $(config-sysdirs). (full_config_sysdirs): Variable removed. * csu/Makefile: Use $(sysdirs) in vpath directive. * math/Makefile (ulps-file): Use $(sysdirs). * sysdeps/gnu/Makefile (errlist-c): Likewise. ($(objpfx)errlist-compat.c): Likewise. * Makeconfig (all-Subdirs-files): Likewise. ($(common-objpfx)config.status): Likewise. * configure.in (sysnames): Handle absolute add-on directory names. (sysdeps_add_ons): New variable, AC_SUBST it. Compute which add-ons contributed sysdeps directories. * configure: Regenerated. * config.make.in (sysdeps-add-ons): New substituted variable. * Makerules (+sysdep_dirs, +sysdep-includes): Variables moved ... * Makeconfig: ... to here. (+sysdep_dirs): Append $(sysdeps-add-ons) here. (+includes): Remove $(objpfx) include, already in $(+sysdep_dirs). Remove $(includes). (sysdep-makeconfigs): Use $(+sysdep_dirs). ($(common-objpfx)shlib-versions.v.i): Likewise. * Makeconfig: Remove hair to set Makeconfig-add-on. * sysdeps/unix/Makefile (sysdirs): Remove export. (asm_CPP): Variable removed. ($(common-objpfx)sysd-syscalls): Pass them directly for the script. * sysdeps/posix/Makefile: New file. * Makerules (L_tmpnam, TMP_MAX, L_ctermid, L_cuserid): Set non-posix values here with ?=. * stdlib/gen-mpn-copy: File removed. * stdlib/Makefile (distribute): Remove it. * configure.in: Don't grok --with-gmp. * configure: Regenerated. * configure.in (libc_cv_idn): Don't check it; libidn/configure does it. * configure: Regenerated. * bare: Directory removed, saved in ports repository. --- Makeconfig | 121 ++++++++++++++++++++++--------------------------------------- 1 file changed, 44 insertions(+), 77 deletions(-) (limited to 'Makeconfig') diff --git a/Makeconfig b/Makeconfig index 64ab926666..a0638f8343 100644 --- a/Makeconfig +++ b/Makeconfig @@ -99,7 +99,20 @@ binfmt-subdir = aout endif # Complete path to sysdep dirs. -export full_config_sysdirs := $(addprefix $(..),$(config-sysdirs)) +# `configure' writes a definition of `config-sysdirs' in `config.make'. +sysdirs := $(foreach D,$(config-sysdirs),$(firstword $(filter /%,$D) $(..)$D)) + +# Add-ons that contribute sysdeps trees get added to the include list +# after sysdeps/generic. This makes #include work right +# to find specific add-on files without assuming the add-on directory name. +# It also means that headers can go into an add-on's base directory +# instead of the add-on needing a sysdeps/generic of its own. ++sysdep_dirs := $(sysdirs) $(foreach add-on,$(sysdeps-add-ons),\ + $(firstword $(filter /%,$(add-on)) \ + $(..)$(add-on))) +ifdef objdir ++sysdep_dirs := $(objdir) $(+sysdep_dirs) +endif # Run config.status to update config.make and config.h. We don't show the # dependence of config.h to Make, because it is only touched when it @@ -113,16 +126,16 @@ $(common-objpfx)config.make: $(common-objpfx)config.status \ # Find all the add-on and sysdeps configure fragments, to make sure we # re-run configure when any of them changes. $(common-objpfx)config.status: $(..)version.h $(..)configure \ - $(foreach dir,$(full_config_sysdirs),\ - $(wildcard \ - $(dir)/Implies) \ + $(foreach dir,$(sysdirs),\ + $(wildcard $(dir)/Implies) \ $(patsubst %.in,%,\ $(firstword $(wildcard \ $(addprefix $(dir)/,configure configure.in))))) \ $(patsubst %.in,%,\ - $(foreach dir,$(add-ons),\ + $(foreach add-on,$(add-ons),\ $(firstword $(wildcard \ - $(addprefix $(..)$(dir)/,configure configure.in))))) + $(addprefix $(firstword $(filter /%,$(add-on)) $(..)$(add-on))/,\ + configure configure.in))))) @cd $(@D); if test -f $(@F); then exec $(SHELL) $(@F) --recheck; else \ echo The GNU C library has not been configured. >&2; \ echo Run \`configure\' to configure it before building. >&2; \ @@ -632,11 +645,10 @@ endif # $(+cflags) == "" # include files (including ones given in angle brackets) in the parent # library source directory, in the include directory, and in the # current directory. -# `+sysdep-includes' will be defined by Makerules. -+includes = -I$(..)include \ - $(patsubst %/,-I%,$(objpfx)) $(+sysdep-includes) \ - $(patsubst %/,-I%,$(..)) $(libio-include) $(includes) -I. \ - $(sysincludes) ++sysdep-includes = $(addprefix -I,$(+sysdep_dirs)) ++includes = -I$(..)include $(if $(subdir),$(objpfx:%/=-I%)) \ + $(+sysdep-includes) \ + $(patsubst %/,-I%,$(..)) $(libio-include) -I. $(sysincludes) # Since libio has several internal header files, we use a -I instead # of many little headers in the include directory. @@ -753,12 +765,10 @@ endif move-if-change = $(SHELL) $(..)scripts/move-if-change --include $(common-objpfx)sysd-dirs - -ifeq ($(sysd-dirs-done),t) -include $(common-objpfx)sysd-sorted subdirs = $(sorted-subdirs) -endif +subdir-srcdirs = $(foreach dir,$(subdirs),\ + $(firstword $($(dir)-srcdir) $(..)$(dir))) ifeq (yes, $(build-shared)) @@ -789,9 +799,8 @@ ifndef avoid-generated # 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) \ - $(config-sysdirs) \ - $(subdirs))) \ + $(wildcard $(+sysdep_dirs:=/shlib-versions) \ + $(subdir-srcdirs:=/shlib-versions)) \ $(..)shlib-versions soversions-default-setname = $(patsubst %, %,\ @@ -891,81 +900,39 @@ endif # These are the subdirectories containing the library source. The order # is more or less arbitrary. The sorting step will take care of the -# dependencies. Only the $(binfmt-subdir) should always be kept at the -# end of the list. +# dependencies. all-subdirs = csu assert ctype locale intl catgets math setjmp signal \ - stdlib stdio-common libio malloc string wcsmbs time dirent \ + stdlib stdio-common libio malloc string wcsmbs time dirent \ grp pwd posix io termios resource misc socket sysvipc gmon \ gnulib iconv iconvdata wctype manual shadow po argp \ - crypt $(add-ons) nss localedata timezone rt conform debug \ - $(sysdep-subdirs) $(dlfcn) $(binfmt-subdir) -all-subdirs := $(filter-out $(sysdep-inhibit-subdirs),$(all-subdirs)) - -# The mach and hurd subdirectories have many generated header files which -# much of the rest of the library depends on, so it is best to build them -# first (and mach before hurd, at that). The before-compile additions in -# sysdeps/{mach,hurd}/Makefile should make it reliably work for these files -# not to exist when making in other directories, but it will be slower that -# way with more somewhat expensive `make' invocations. -subdirs := $(filter mach,$(subdirs)) $(filter hurd,$(subdirs)) \ - $(filter-out mach hurd,$(subdirs)) + crypt nss localedata timezone rt conform debug \ + $(add-on-subdirs) $(dlfcn) $(binfmt-subdir) ifndef avoid-generated -all-Subdirs-files = $(wildcard $(config-sysdirs:%=$(..)%/Subdirs)) -$(common-objpfx)sysd-dirs: $(common-objpfx)config.make $(all-Subdirs-files) - $(AWK) 'BEGIN { subdirs = ""; inhibit = "" }; \ - /^#/ { next }; \ - /^[^-]/ { subdirs = subdirs " " $$0 }; \ - /^-/ { inhibit = inhibit " " substr($$0, 2) }; \ - END { printf "sysdep-subdirs =%s\n", subdirs; \ - printf "sysdep-inhibit-subdirs =%s\n", inhibit; \ - print "sysd-dirs-done = t" }' \ - $(patsubst $<,/dev/null,$^) > $@-tmp - mv -f $@-tmp $@ - -all-Depend-files = $(wildcard $(..)*/Depend) -$(common-objpfx)sysd-sorted: $(..)scripts/gen-sorted.awk $(all-Depend-files) \ - $(common-objpfx)sysd-dirs $(..)Makeconfig - { { dirs='$(patsubst $(..)%/Depend,%,$(filter %/Depend,$^))'; \ - for d in $$dirs; do \ - while read on; do \ - echo "depend $$d $$on"; \ - done < $(..)$$d/Depend; \ - done; \ - for f in $(all-subdirs); do \ - echo $$f; \ - done; \ - } | $(AWK) -f $< && \ - echo sysd-sorted-done = t; \ - } > $@-tmp +all-Depend-files := $(wildcard $(foreach dir,$(all-subdirs),\ + $(firstword $($(dir)-srcdir) \ + $(..)$(dir))/Depend)) +$(common-objpfx)sysd-sorted: $(..)scripts/gen-sorted.awk \ + $(common-objpfx)config.make $(..)Makeconfig \ + $(wildcard $(sysdirs:=/Subdirs)) \ + $(all-Depend-files) + $(AWK) -f $< \ + -v subdirs='$(all-subdirs)' \ + -v srcpfx='$(..)' \ + $(filter %/Subdirs %/Depend,$^) > $@-tmp mv -f $@-tmp $@ $(all-Depend-files): ; endif # Let sysdeps/ subdirs contain a Makeconfig fragment for us to include here. -sysdep-makeconfigs := $(wildcard $(patsubst %,$(..)%/Makeconfig,\ - $(config-sysdirs) $(add-ons))) - +sysdep-makeconfigs := $(wildcard $(+sysdep_dirs:=/Makeconfig)) ifneq (,$(sysdep-makeconfigs)) -Makeconfig-doing-sysdep := $(sysdep-makeconfigs) -# Before each one, include ourselves again to do the bit below that -# will set `Makeconfig-add-on' in an add-on's Makeconfig fragment. -include $(foreach M,$(sysdep-makeconfigs),$(..)Makeconfig $M) +include $(sysdep-makeconfigs) endif endif # Makeconfig not yet included -# The whole body above didn't run when we are included as a subroutine -# of ourselves in the sysdep-makeconfigs include line. This bit runs. -ifneq (,$(Makeconfig-doing-sysdep)) -sysdep-Makeconfig := $(firstword $(Makeconfig-doing-sysdep)) -Makeconfig-doing-sysdep := $(filter-out $(sysdep-Makeconfig),\ - $(Makeconfig-doing-sysdep)) -Makeconfig-add-on := $(filter $(add-ons),$(patsubst $(..)%/Makeconfig,%,\ - $(sysdep-Makeconfig))) -endif - # Local Variables: # mode: makefile # End: -- cgit 1.4.1