]> git.ipfire.org Git - thirdparty/glibc.git/blobdiff - Makeconfig
update from main archive 970120
[thirdparty/glibc.git] / Makeconfig
index 9533b776cb43a5d23fb053a716864ba20bc7d3e9..37d5f62173f083f5cc2dc236e65be49ec0ca99d2 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 1991, 1992, 1993, 1994, 1995 Free Software Foundation, Inc.
+# Copyright (C) 1991, 92, 93, 94, 95, 96, 97 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
@@ -12,9 +12,9 @@
 # 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.
+# License along with the GNU C Library; see the file COPYING.LIB.  If not,
+# write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
 
 #
 #      Makefile configuration options for the GNU C library.
@@ -56,11 +56,11 @@ objdir = $(ARCH)
 endif
 endif
 
-# $(common-objdir) is the place to put objects and 
+# $(common-objdir) is the place to put objects and
 # such that are not specific to a single subdir.
 ifdef objdir
-objpfx = $(objdir)/
-common-objpfx = $(objpfx)
+objpfx := $(patsubst %//,%/,$(objdir)/$(subdir)/)
+common-objpfx = $(objdir)/
 common-objdir = $(objdir)
 else
 objpfx :=
@@ -74,20 +74,35 @@ common-objdir = .
 endif
 endif
 
+# Root of the sysdeps tree.
+sysdep_dir := $(..)sysdeps
+export sysdep_dir := $(sysdep_dir)
 
 # Get the values defined by options to `configure'.
 include $(common-objpfx)config.make
 
+# Complete path to sysdep dirs.
+full-config-sysdirs := $(filter /%, $(config-sysdirs)) \
+                      $(addprefix $(..), $(filter-out /%, $(config-sysdirs)))
+export full-config-sysdirs := $(full-config-sysdirs)
+
 # 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
 # changes and so config.status would be run every time; the dependence of
 # config.make should suffice to force regeneration and re-exec, and the new
 # image will notice if config.h changed.
-$(common-objpfx)config.make: $(common-objpfx)config.status
+$(common-objpfx)config.make: $(common-objpfx)config.status $(..)config.h.in
        cd $(<D); $(SHELL) $(<F)
 
-# Force the user to configure before making.
-$(common-objpfx)config.status: $(..)configure
+# Find all the 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) \
+                                        $(patsubst %.in,%,\
+                                                   $(firstword $(wildcard \
+ $(addprefix $(dir)/,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; \
@@ -99,13 +114,10 @@ ifneq ($(wildcard $(..)configparms),)
 include $(..)configparms
 endif
 ifneq ($(objpfx),)
-ifneq ($(wildcard $(objpfx)configparms),)
-include $(objpfx)configparms
+ifneq ($(wildcard $(common-objpfx)configparms),)
+include $(common-objpfx)configparms
 endif
 endif
-
-sysdep_dir := $(..)sysdeps
-export sysdep_dir := $(sysdep_dir)
 \f
 ####
 ####   These are the configuration variables.  You can define values for
@@ -114,6 +126,12 @@ export sysdep_dir := $(sysdep_dir)
 ####
 
 
+# Set this to either `stdio' or `libio', to compile in either GNU stdio
+# or GNU libio.
+ifndef stdio
+stdio = stdio
+endif
+
 # Common prefix for machine-independent installation directories.
 ifeq ($(origin prefix),undefined) # ifndef would override explicit empty value.
 prefix = /usr/local
@@ -129,6 +147,11 @@ ifndef libdir
 libdir = $(exec_prefix)/lib
 endif
 
+# Where to install the shared library and dynamic linker.
+ifndef slibdir
+slibdir = $(exec_prefix)/lib
+endif
+
 # Prefix to put on files installed in $(libdir).  For libraries `libNAME.a',
 # the prefix is spliced between `lib' and the name, so the linker switch
 # `-l$(libprefix)NAME' finds the library; for other files the prefix is
@@ -160,8 +183,8 @@ localedir = $(datadir)/locale
 endif
 
 # Where to install the locale charmap source files.
-ifndef nlsdir
-nlsdir = $(datadir)/nls
+ifndef i18ndir
+i18ndir = $(datadir)/i18n
 endif
 
 
@@ -202,6 +225,16 @@ ifndef localtime-file
 localtime-file = $(sysconfdir)/localtime
 endif
 
+# What to use for leap second specifications in compiling the default
+# timezone files.  Set this to `/dev/null' for no leap second handling as
+# 1003.1 requires, or to `leapseconds' for proper leap second handling.
+# Both zone flavors are always available as `posix/ZONE' and `right/ZONE'.
+# This variable determines the default: if it's `/dev/null',
+# ZONE==posix/ZONE; if it's `leapseconds', ZONE==right/ZONE.
+ifndef leapseconds
+leapseconds = /dev/null
+endif
+
 # What timezone's DST rules should be used when a POSIX-style TZ
 # environment variable doesn't specify any rules.  For 1003.1 compliance
 # this timezone must use rules that are as U.S. federal law defines DST.
@@ -254,7 +287,7 @@ endif
 
 # Default flags to pass the C compiler.
 ifndef default_cflags
-default_cflags := -g
+default_cflags := -g -O
 endif
 
 # Flags to pass the C compiler when assembling preprocessed assembly code
@@ -267,29 +300,75 @@ endif
 
 # Command for linking programs with the C library.
 ifndef +link
-+link = $(CC) -nostdlib -nostartfiles $(LDFLAGS) -o $@ \
-       $(addprefix $(csu-objpfx),start.o $(+preinit)) \
-       $(^:$(common-objpfx)libc.a=$(link-libc)) \
-       $(addprefix $(csu-objpfx),$(+postinit))
++link = $(CC) -nostdlib -nostartfiles -o $@ \
+             $(sysdep-LDFLAGS) $(config-LDFLAGS) $(LDFLAGS)  \
+             $(addprefix $(csu-objpfx),start.o) $(+preinit) \
+             $(filter-out $(addprefix $(csu-objpfx),start.o) $(+preinit) \
+               $(link-extra-libs) $(common-objpfx)libc% $(+postinit),$^) \
+             $(link-extra-libs) $(link-libc) $(+postinit)
+endif
+ifndef config-LDFLAGS
+ifeq (yes,$(build-shared))
+config-LDFLAGS = -Wl,-dynamic-linker=$(slibdir)/$(rtld-installed-name)
+endif
 endif
 ifndef link-libc
 ifeq (yes,$(build-shared))
-link-libc = -L$(common-objdir) -lc $(gnulib)
+# We need the versioned name of libc.so in the deps of $(others) et al
+# so that the symlink to libc.so is created before anything tries to
+# run the linked programs.
+link-libc = -Wl,-rpath-link=$(rpath-link) \
+           $(common-objpfx)libc.so$(libc.so-version) \
+           $(elfobjdir)/$(rtld-installed-name) \
+           $(common-objpfx)libc.a $(gnulib)
+# Choose the default search path for the dynamic linker based on
+# where we will install libraries.
+ifneq ($(libdir),$(slibdir))
+default-rpath = $(slibdir):$(libdir)
+else
+default-rpath = $(libdir)
+endif
+# This is how to find at build-time things that will be installed there.
+rpath-link = $(common-objdir):$(elfobjdir):$(nssobjdir)
+elfobjdir := $(patsubst ../$(subdir),.,$(common-objpfx)elf)
+nssobjdir := $(patsubst ../$(subdir),.,$(common-objpfx)nss)
 else
 link-libc = $(common-objpfx)libc.a $(gnulib) $(common-objpfx)libc.a
 endif
 endif
+ifndef link-extra-libs
+ifeq (yes,$(build-shared))
+link-extra-libs = $(foreach lib,$(LDLIBS-$(@F)),$(common-objpfx)$(lib).so$($(notdir $(lib)).so-version))
+else
+link-extra-libs = $(foreach lib,$(LDLIBS-$(@F)),$(common-objpfx)$(lib).a)
+endif
+endif
 ifndef gnulib
 gnulib := -lgcc
 endif
 ifeq ($(elf),yes)
-+preinit = crti.o
-+postinit = crtn.o
-endif
-ifdef objpfx
-csu-objpfx = $(objpfx)
++preinit = $(addprefix $(csu-objpfx),crti.o)
++postinit = $(addprefix $(csu-objpfx),crtn.o)
+endif
+csu-objpfx = $(common-objpfx)csu/
+elf-objpfx = $(common-objpfx)elf/
+db-objpfx = $(common-objpfx)db/
+
+# How to run a program we just linked with our library.
+# The program binary is assumed to be $(word 2,$^).
+built-program-file = $(dir $(word 2,$^))$(notdir $(word 2,$^))
+ifneq (yes,$(build-shared))
+built-program-cmd = $(built-program-file)
 else
-csu-objpfx = $(..)csu/
+comma = ,
+sysdep-library-path = \
+$(subst $(empty) ,:,$(strip $(patsubst -Wl$(comma)-rpath-link=%, %,\
+                                      $(filter -Wl$(comma)-rpath-link=%,\
+                                               $(sysdep-LDFLAGS)))))
+define built-program-cmd
+LD_LIBRARY_PATH=$(rpath-link)$(patsubst %,:%,$(sysdep-library-path)) \
+$(elf-objpfx)$(rtld-installed-name) $(built-program-file)
+endef
 endif
 
 ifndef LD
@@ -301,7 +380,7 @@ RANLIB = ranlib
 endif
 
 # Extra flags to pass to GCC.
-+gccwarn := -Wall -Wwrite-strings -Wno-parentheses -Winline
++gccwarn := -Wall -Wwrite-strings -Wno-parentheses -Winline -Wstrict-prototypes
 
 # This is the program that generates makefile
 # dependencies from C source files.
@@ -324,7 +403,7 @@ M4 = m4
 .NOEXPORT:
 
 # We want to echo the commands we're running without
-# umpteem zillion filenames along with it (we use `...' instead)
+# umpteen zillion filenames along with it (we use `...' instead)
 # but we don't want this echoing done when the user has said
 # he doesn't want to see commands echoed by using -s.
 ifneq  "$(findstring s,$(MAKEFLAGS))" ""       # if -s
@@ -342,18 +421,13 @@ ifdef             CFLAGS
 endif          # CFLAGS
 endif  # +cflags
 
-# If none of the above worked, default to "-g".
+# If none of the above worked, default to "-g -O".
 ifeq   "$(strip $(+cflags))" ""
 +cflags        := $(default_cflags)
 endif  # $(+cflags) == ""
 
-# If using gcc, add flags that only it will grok.
-ifneq  "$(findstring gcc,$(CC))" ""
 +cflags := $(+cflags) $(+gccwarn)
 +gcc-nowarn := -w
-else
-+gcc-nowarn :=
-endif  # gcc
 
 # Don't duplicate options if we inherited variables from the parent.
 +cflags        := $(sort $(+cflags))
@@ -363,14 +437,19 @@ endif     # gcc
 # files (including ones given in angle brackets) in the current directory
 # and in the parent library source directory.
 # `+sysdep-includes' will be defined by Makerules.
-+includes = -I. $(filter-out -I,-I$(patsubst %/,%,$(..))) \
++includes = -I. $(filter-out -I,-I$(patsubst %/,%,$(..))) $($(stdio)-include) \
            $(includes) $(+sysdep-includes) $(last-includes)
 
+# Since libio has several internal header files, we use a -I instead
+# of many little headers in the top level source directory.
+libio-include = -I$(..)libio
 
 # These are the variables that the implicit compilation rules use.
 CPPFLAGS = $(+includes) $(defines) -include $(..)libc-symbols.h \
-          $(sysdep-CPPFLAGS) $(CPPFLAGS-$(suffix $@))
-override CFLAGS        = $(+cflags) $(sysdep-CFLAGS) $(CFLAGS-$(suffix $@))
+          $(sysdep-CPPFLAGS) $(CPPFLAGS-$(suffix $@)) $(CPPFLAGS-$(<F)) \
+          $(CPPFLAGS-$(@F))
+override CFLAGS        = $(+cflags) $(sysdep-CFLAGS) $(CFLAGS-$(suffix $@)) \
+                 $(CFLAGS-$(<F)) $(CFLAGS-$(@F))
 
 
 # This is the macro that the implicit linking rules use.
@@ -391,14 +470,15 @@ ifeq (yes,$(build-shared))
 # The PIC object files are named foo.so.
 object-suffixes += .so
 CPPFLAGS-.so = -DPIC
-CFLAGS-.so = -fPIC
+CFLAGS-.so = -fPIC -fno-common
 libtype.so := lib%_pic.a
 endif
 ifeq (yes,$(build-profile))
 # Under --enable-profile, we will build a static library of profiled objects.
 # The profiled object files are named foo.po.
 object-suffixes += .po
-CFLAGS-.po = -p
+CPPFLAGS-.po = -DPROF
+CFLAGS-.po = -pg
 libtype.po = lib%_p.a
 endif
 ifeq (yes,$(build-omitfp))
@@ -408,18 +488,79 @@ ifeq (yes,$(build-omitfp))
 object-suffixes += .go
 CFLAGS-.go = -g
 CFLAGS-.o = -g0 -O99 -fomit-frame-pointer
-CFLAGS-.so += $(CFLAGS.o)
+CFLAGS-.so += $(CFLAGS-.o)
 libtype.go = lib%_g.a
 endif
 
 
 +gnu-stabs = $(shell echo>&2 '*** BARF ON ME')
 
+ifndef BUILD_CC
+BUILD_CC = $(CC)
+endif
+
 ifneq ($(BUILD_CC),$(CC))
 cross-compiling := yes
 else
 cross-compiling := no
 endif
+\f
+# Figure out the version numbers from version.h.
+
+$(common-objpfx)version.mk: $(..)version.h $(..)Makeconfig
+       sed -n -e 's/^.*RELEASE.*"\([^"]*\)".*$$/release=\1/p' \
+              -e 's/^.*VERSION.*"\([^"]*\)".*$$/version=\1/p' \
+           < $< > $@-new
+       mv -f $@-new $@
+
+ifeq (yes, $(build-shared))
+
+# Process the shlib-versions file, which tells us what shared library
+# version numbers to use when we install shared objects on this system.
+-include $(common-objpfx)soversions.mk
+$(common-objpfx)soversions.mk: $(..)shlib-versions $(..)Makeconfig \
+                              $(wildcard $(patsubst %, $(..)%/shlib-versions,\
+                                                       $(add-ons))) \
+                              $(common-objpfx)config.make
+       (file="$(wildcard $(patsubst %,$(..)%/shlib-versions,$(add-ons))) \
+              $(..)shlib-versions"; \
+        for f in $$file; do \
+          sed 's/#.*$$//' $$f | while read conf versions; do \
+            test -n "$$versions" && \
+            test `expr '$(config-machine)-$(config-vendor)-$(config-os)' \
+                       : "$$conf"` != 0 || continue; \
+            for v in $$versions; do \
+              lib=`echo $$v | sed 's/=.*$$//'`; \
+              if eval "test -z \"\$$vers_lib$$lib\""; then \
+                eval vers_lib$${lib}=yes; \
+                number=`echo $$v | sed "s/^.*=//"`; \
+                case $$number in \
+                  [0-9]*) echo "$$lib.so-version=.$$number"; \
+                          echo "all-sonames+=$$lib.so\$$($$lib.so-version)";;\
+                  *) echo "$$lib.so-version=$$number"; \
+                     echo "all-sonames+=\$$($$lib.so-version)";;  \
+                esac; \
+              fi; \
+            done; \
+          done; \
+        done;) > $@T; exit 0
+       mv -f $@T $@
+
+# Get $(version) defined with the release version number.
+-include $(common-objpfx)version.mk
+
+
+# The name under which the run-time dynamic linker is installed.
+# We are currently going for the convention that `/lib/ld.so.1'
+# names the SVR4/ELF ABI-compliant dynamic linker.
+ifndef rtld-installed-name
+ifdef ld.so-version
+rtld-installed-name = $(ld.so-version)
+else
+rtld-installed-name = ld.so.1
+endif
+endif
 
+endif # build-shared
 
 endif # Makeconfig not yet included