]> sourceware.org Git - glibc.git/blobdiff - Makeconfig
* io/tst-fchownat.c: Correctly handle _POSIX_CHOWN_RESTRICTED
[glibc.git] / Makeconfig
index 4c3a4e344c754d5cb827666b5e83ca1c34a32821..d269936f323001871a19b15b6d8d37c6a59c334c 100644 (file)
@@ -1,4 +1,5 @@
-# Copyright (C) 1991-2003, 2004, 2005 Free Software Foundation, Inc.
+# Copyright (C) 1991-2003,2004,2005,2006,2007,2008
+#      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
@@ -99,7 +100,21 @@ 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 <sysdeps/...> 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.
+sysdeps-srcdirs := $(foreach add-on,$(sysdeps-add-ons),\
+                            $(firstword $(filter /%,$(add-on)) \
+                                        $(..)$(add-on)))
++sysdep_dirs = $(sysdirs) $(sysdeps-srcdirs)
+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 +128,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; \
@@ -393,17 +408,24 @@ LDFLAGS.so += $(combreloc-LDFLAGS)
 LDFLAGS-rtld += $(combreloc-LDFLAGS)
 endif
 
-ifeq (yes,$(have-z-relro))
 relro-LDFLAGS = -Wl,-z,relro
 LDFLAGS.so += $(relro-LDFLAGS)
 LDFLAGS-rtld += $(relro-LDFLAGS)
+
+ifeq (yes,$(have-hash-style))
+# For the time being we unconditionally use 'both'.  At some time we
+# should declare statically linked code as 'out of luck' and compile
+# with --hash-style=gnu only.
+hashstyle-LDFLAGS = -Wl,--hash-style=both
+LDFLAGS.so += $(hashstyle-LDFLAGS)
+LDFLAGS-rtld += $(hashstyle-LDFLAGS)
 endif
 
 # Command for linking programs with the C library.
 ifndef +link
 +link = $(CC) -nostdlib -nostartfiles -o $@ \
              $(sysdep-LDFLAGS) $(config-LDFLAGS) $(LDFLAGS) $(LDFLAGS-$(@F)) \
-             $(combreloc-LDFLAGS) $(relro-LDFLAGS) \
+             $(combreloc-LDFLAGS) $(relro-LDFLAGS) $(hashstyle-LDFLAGS) \
              $(addprefix $(csu-objpfx),$(start-installed-name)) \
              $(+preinit) $(+prector) \
              $(filter-out $(addprefix $(csu-objpfx),start.o \
@@ -415,7 +437,7 @@ endif
 # Command for statically linking programs with the C library.
 ifndef +link-static
 +link-static = $(CC) -nostdlib -nostartfiles -static -o $@ \
-             $(sysdep-LDFLAGS) $(LDFLAGS)  \
+             $(sysdep-LDFLAGS) $(LDFLAGS) $(LDFLAGS-$(@F))  \
              $(addprefix $(csu-objpfx),$(static-start-installed-name)) \
              $(+preinit) $(+prector) \
              $(filter-out $(addprefix $(csu-objpfx),start.o \
@@ -552,10 +574,15 @@ endif
 
 # Extra flags to pass to GCC.
 ifeq ($(all-warnings),yes)
-+gccwarn := -Wall -Wwrite-strings -Winline -Wstrict-prototypes -Wcast-qual -Wbad-function-cast -Wmissing-noreturn -Wmissing-prototypes -Wmissing-declarations -Wcomment -Wcomments -Wtrigraphs -Wsign-compare -Wfloat-equal -Wmultichar
++gccwarn := -Wall -Wwrite-strings -Winline -Wcast-qual -Wbad-function-cast -Wmissing-noreturn -Wmissing-prototypes -Wmissing-declarations -Wcomment -Wcomments -Wtrigraphs -Wsign-compare -Wfloat-equal -Wmultichar
 else
-+gccwarn := -Wall -Wwrite-strings -Winline -Wstrict-prototypes
++gccwarn := -Wall -Wwrite-strings -Winline
 endif
++gccwarn-c = -Wstrict-prototypes
+
+# We do not depend on the address of constants in different files to be
+# actually different, so allow the compiler to merge them all.
++merge-constants = -fmerge-all-constants
 
 # This is the program that generates makefile dependencies from C source files.
 # The -MP flag tells GCC >= 3.2 (which we now require) to produce dummy
@@ -567,6 +594,11 @@ endif
 # The program that makes Emacs-style TAGS files.
 ETAGS  := etags
 
+# The `xgettext' program for producing .pot files from sources.
+ifndef XGETTEXT
+XGETTEXT = xgettext
+endif
+
 # The `m4' macro processor; this is used by sysdeps/sparc/Makefile (and
 # perhaps others) to preprocess assembly code in some cases.
 M4 = m4
@@ -611,21 +643,21 @@ ifeq      "$(strip $(+cflags))" ""
 +cflags        := $(default_cflags)
 endif  # $(+cflags) == ""
 
-+cflags := $(+cflags) $(+gccwarn)
++cflags += $(addprefix -mcpu=,$(with-cpu)) $(+gccwarn) $(+merge-constants)
 +gcc-nowarn := -w
 
 # Don't duplicate options if we inherited variables from the parent.
 +cflags        := $(sort $(+cflags))
 
 
-# These are flags given to the C compiler to tell it to look for include
-# files (including ones given in angle brackets) in the current directory,
-# in the parent library source directory and in the include directory.
-# `+sysdep-includes' will be defined by Makerules.
-+includes = -I$(..)include -I. \
-           $(patsubst %/,-I%,$(objpfx)) $(patsubst %/,-I%,$(..)) \
-           $(libio-include) $(includes) \
-           $(+sysdep-includes) $(sysincludes)
+# These are flags given to the C compiler to tell it to look for
+# 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 = $(addprefix -I,$(+sysdep_dirs))
++includes = -I$(..)include $(if $(subdir),$(objpfx:%/=-I%)) \
+           $(+sysdep-includes) $(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.
@@ -641,9 +673,13 @@ CPPFLAGS = $($(subdir)-CPPFLAGS) $(+includes) $(defines) \
           $(foreach lib,$(libof-$(basename $(@F))) \
                         $(libof-$(<F)) $(libof-$(@F)),$(CPPFLAGS-$(lib))) \
           $(CPPFLAGS-$(<F)) $(CPPFLAGS-$(@F)) $(CPPFLAGS-$(basename $(@F)))
-override CFLAGS        = -std=gnu99 \
-                 $(filter-out %frame-pointer,$(+cflags)) $(sysdep-CFLAGS) \
-                 $(CFLAGS-$(suffix $@)) $(CFLAGS-$(<F)) $(CFLAGS-$(@F))
+override CFLAGS        = -std=gnu99 $(gnu89-inline-CFLAGS) \
+                 $(filter-out %frame-pointer,$(+cflags)) $(+gccwarn-c) \
+                 $(sysdep-CFLAGS) $(CFLAGS-$(suffix $@)) $(CFLAGS-$(<F)) \
+                 $(CFLAGS-$(@F))
+override CXXFLAGS = $(c++-sysincludes) \
+                   $(filter-out %frame-pointer,$(+cflags)) $(sysdep-CFLAGS) \
+                   $(CFLAGS-$(suffix $@)) $(CFLAGS-$(<F)) $(CFLAGS-$(@F))
 
 # If everything is compiled with -fPIC (implicitly) we must tell this by
 # defining the PIC symbol.
@@ -732,20 +768,16 @@ endif
 endif
 ASFLAGS += $(ASFLAGS-config)
 
-+gnu-stabs = $(shell echo>&2 '*** BARF ON ME')
-
 ifndef BUILD_CC
 BUILD_CC = $(CC)
 endif
 
 move-if-change = $(SHELL) $(..)scripts/move-if-change
 \f
--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))
 
@@ -759,8 +791,7 @@ ifeq (yes, $(build-shared))
 # (but no commands).
 %.v.i: $(common-objpfx)config.h
        sed '/^[        ]*#/d;s/^[      ]*%/#/' $(filter-out FORCE %.h,$^) \
-       | $(CC) -E -undef $(CPPFLAGS) \
-                  -DASSEMBLER -x assembler-with-cpp - \
+       | $(CC) -E -undef $(CPPFLAGS) -x assembler-with-cpp - \
                   > $@T
        mv -f $@T $@
 %.v: %.v.i
@@ -776,9 +807,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 %, %,\
@@ -827,7 +857,7 @@ $(common-objpfx)gnu/lib-names.stmp: $(..)scripts/lib-names.awk \
                                    $(common-objpfx)soversions.i
        $(make-target-directory)
        @rm -f ${@:stmp=T} $@
-       $(AWK) -f $^ > ${@:stmp=T}
+       LC_ALL=C $(AWK) -f $^ > ${@:stmp=T}
        $(move-if-change) ${@:stmp=T} ${@:stmp=h}
        touch $@
 endif
@@ -878,80 +908,48 @@ 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)))
+# This gives partial TARGET:SOURCE pattern pairs to have rules
+# emitted into sysd-rules.  A sysdeps Makeconfig fragment can
+# add its own special object file prefix to this list with e.g. foo-%:%
+# to have foo-*.? compiled from *.? using $(foo-CPPFLAGS).
+sysd-rules-patterns := %:% rtld-%:% m_%:s_%
 
+# Let sysdeps/ subdirs contain a Makeconfig fragment for us to include here.
+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
 
+# Compute just the target patterns.  Makeconfig has set sysd-rules-patterns.
+sysd-rules-targets := $(foreach p,$(sysd-rules-patterns),\
+                               $(firstword $(subst :, ,$p)))
 
 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:
This page took 0.035513 seconds and 5 git commands to generate.