]> sourceware.org Git - glibc.git/blobdiff - Makeconfig
Declare __pthread_unwind. Define __do_cancel to use it. Declare old cleanup handler...
[glibc.git] / Makeconfig
index 3a5bf3eb4185fca84186a02e35e80c18e50483a7..60d351946f8ebb2968cfb6115d59eadbf7847d6a 100644 (file)
@@ -1,20 +1,20 @@
-# Copyright (C) 1991-1999,2000 Free Software Foundation, Inc.
+# Copyright (C) 1991-2000,01,02, 03 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
-# modify it under the terms of the GNU Library General Public License as
-# published by the Free Software Foundation; either version 2 of the
-# License, or (at your option) any later version.
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
 
 # The GNU C Library is distributed in the hope that it will be useful,
 # but WITHOUT ANY WARRANTY; without even the implied warranty of
 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Library General Public License for more details.
+# Lesser 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., 59 Temple Place - Suite 330,
-# Boston, MA 02111-1307, USA.
+# You should have received a copy of the GNU Lesser General Public
+# License along with the GNU C Library; 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.
@@ -139,12 +139,6 @@ endif
 ####
 
 
-# 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
@@ -188,7 +182,7 @@ endif
 
 # Where to install the header files.
 ifndef includedir
-includedir = $(exec_prefix)/include
+includedir = $(prefix)/include
 endif
 inst_includedir = $(install_root)$(includedir)
 
@@ -322,6 +316,9 @@ endif
 ifndef INSTALL_DATA
 INSTALL_DATA = $(INSTALL) -m 644
 endif
+ifndef INSTALL_SCRIPT
+INSTALL_SCRIPT = $(INSTALL)
+endif
 ifndef INSTALL_PROGRAM
 INSTALL_PROGRAM = $(INSTALL)
 endif
@@ -345,8 +342,12 @@ endif
 
 # Default flags to pass the C compiler.
 ifndef default_cflags
+ifeq ($(release),stable)
+default_cflags := -g -O2
+else
 default_cflags := -g -O
 endif
+endif
 
 # Flags to pass the C compiler when assembling preprocessed assembly code
 # (`.S' files).  On some systems the assembler doesn't understand the `#' line
@@ -376,10 +377,17 @@ ifndef static-start-installed-name
 static-start-installed-name = $(start-installed-name)
 endif
 
+ifeq (yesyesyes,$(build-shared)$(elf)$(have-z-combreloc))
+combreloc-LDFLAGS = -Wl,-z,combreloc
+LDFLAGS.so += $(combreloc-LDFLAGS)
+LDFLAGS-rtld += $(combreloc-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) \
              $(addprefix $(csu-objpfx),$(start-installed-name)) \
              $(+preinit) $(+prector) \
              $(filter-out $(addprefix $(csu-objpfx),start.o \
@@ -413,12 +421,13 @@ ifndef +link-bounded
              $(link-extra-libs-bounded) $(link-libc-bounded) $(+postctor) $(+postinit)
 endif
 ifndef config-LDFLAGS
-ifeq (yes,$(build-shared))
+ifeq (yesyes,$(build-shared)$(elf))
 config-LDFLAGS = -Wl,-dynamic-linker=$(slibdir)/$(rtld-installed-name)
 endif
 endif
 ifndef link-libc
 ifeq (yes,$(build-shared))
+ifeq ($(elf),yes)
 # 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.
@@ -427,6 +436,13 @@ link-libc = -Wl,-rpath-link=$(rpath-link) \
            $(common-objpfx)$(patsubst %,$(libtype.oS),c) $(gnulib)
 # This is how to find at build-time things that will be installed there.
 rpath-dirs = math elf dlfcn nss nis rt resolv crypt
+else
+ifneq (,$(filter aix aix%,$(config-os)))
+link-libc = $(common-objpfx)libc.a \
+           $(common-objpfx)$(patsubst %,$(libtype.oS),c) $(gnulib)
+rpath-dirs = math dlfcn nss nis rt resolv crypt
+endif
+endif
 rpath-link = \
 $(common-objdir):$(subst $(empty) ,:,$(patsubst ../$(subdir),.,$(rpath-dirs:%=$(common-objpfx)%)))
 elfobjdir := $(patsubst ../$(subdir),.,$(common-objpfx)elf)
@@ -437,6 +453,21 @@ link-libc = $(common-objpfx)libc.a $(otherlibs) $(gnulib) $(common-objpfx)libc.a
 endif
 endif
 
+# Differences in the linkers on the various platforms.
+ifeq ($(elf),yes)
+LDFLAGS-rpath-ORIGIN = -Wl,-rpath,'$$ORIGIN'
+LDFLAGS-soname-fname = -Wl,-soname,$(@F)
+LDFLAGS-rdynamic = -rdynamic
+LDFLAGS-Bsymbolic = -Bsymbolic
+else
+ifneq (,$(filter aix aix%,$(config-os)))
+LDFLAGS-rpath-ORIGIN =
+LDFLAGS-soname-fname =
+LDFLAGS-rdynamic = -Wl,-bdynamic
+LDFLAGS-Bsymbolic = -Wl,-bsymbolic
+endif
+endif
+
 # Choose the default search path for the dynamic linker based on
 # where we will install libraries.
 ifneq ($(libdir),$(slibdir))
@@ -489,18 +520,16 @@ elf-objpfx = $(common-objpfx)elf/
 # 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,$^))
-ifeq (yes,$(build-shared))
+ifeq (yesyes,$(build-shared)$(elf))
 comma = ,
 sysdep-library-path = \
 $(subst $(empty) ,:,$(strip $(patsubst -Wl$(comma)-rpath-link=%, %,\
                                       $(filter -Wl$(comma)-rpath-link=%,\
                                                $(sysdep-LDFLAGS)))))
-ifeq (,$(findstring $(notdir $(built-program-file)), $(tests-static)))
-run-program-prefix = $(elf-objpfx)$(rtld-installed-name) \
-                    --library-path $(rpath-link)$(patsubst %,:%,$(sysdep-library-path))
-else
-run-program-prefix =
-endif
+run-program-prefix = $(if $(filter $(notdir $(built-program-file)),\
+                                  $(tests-static)),, \
+                         $(elf-objpfx)$(rtld-installed-name) \
+                         --library-path $(rpath-link)$(patsubst %,:%,$(sysdep-library-path)))
 else
 run-program-prefix =
 endif
@@ -518,12 +547,17 @@ RANLIB = ranlib
 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
+else
 +gccwarn := -Wall -Wwrite-strings -Winline -Wstrict-prototypes
+endif
 
-# This is the program that generates makefile
-# dependencies from C source files.
+# 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
+# targets for headers so that removed headers don't break the build.
 ifndef +mkdep
-+mkdep = $(CC) -M
++mkdep = $(CC) -M -MP
 endif
 
 # The program that makes Emacs-style TAGS files.
@@ -586,18 +620,25 @@ endif     # $(+cflags) == ""
 # `+sysdep-includes' will be defined by Makerules.
 +includes = -I$(..)include -I. \
            $(patsubst %/,-I%,$(objpfx)) $(patsubst %/,-I%,$(..)) \
-           $($(stdio)-include) $(includes) \
-           $(+sysdep-includes) $(last-includes) $(sysincludes)
+           $(libio-include) $(includes) \
+           $(+sysdep-includes) $(sysincludes)
 
 # Since libio has several internal header files, we use a -I instead
 # of many little headers in the include directory.
 libio-include = -I$(..)libio
 
 # These are the variables that the implicit compilation rules use.
+# Note that we can't use -std=* in CPPFLAGS, because it overrides
+# the implicit -lang-asm and breaks cpp behavior for .S files--notably
+# it causes cpp to stop predefining __ASSEMBLER__.
 CPPFLAGS = $($(subdir)-CPPFLAGS) $(+includes) $(defines) \
           -include $(..)include/libc-symbols.h $(sysdep-CPPFLAGS) \
-          $(CPPFLAGS-$(suffix $@)) $(CPPFLAGS-$(<F)) $(CPPFLAGS-$(@F))
-override CFLAGS        = $(filter-out %frame-pointer,$(+cflags)) $(sysdep-CFLAGS) \
+          $(CPPFLAGS-$(suffix $@)) \
+          $(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))
 
 # If everything is compiled with -fPIC (implicitly) we must tell this by
@@ -671,10 +712,16 @@ object-suffixes-for-libc += .oS
 # shared objects.  We don't want to use CFLAGS-os because users may, for
 # example, make that processor-specific.
 CFLAGS-.oS = $(CFLAGS-.o) $(pic-ccflag)
-CPPFLAGS-.oS = $(CPPFLAGS-.o) -DPIC
+CPPFLAGS-.oS = $(CPPFLAGS-.o) -DPIC -DLIBC_NONSHARED=1
 libtype.oS = lib%_nonshared.a
 endif
 
+# The assembler can generate debug information too.
+ifndef ASFLAGS
+ifeq ($(have-cpp-asm-debuginfo),yes)
+ASFLAGS := $(filter -g%,$(CFLAGS))
+endif
+endif
 
 +gnu-stabs = $(shell echo>&2 '*** BARF ON ME')
 
@@ -693,15 +740,23 @@ endif
 
 ifeq (yes, $(build-shared))
 
-# Commands to put in a pipeline to preprocess a file with # comments
-# %ifdef et al based on config.h settings or other %include'd files.
-define preprocess-versions
-sed 's/#.*$$//;s/^[    ]*%/#/' \
-| $(CC) -E -undef -I$(common-objdir) -I$(..)include \
-                 -include $(common-objpfx)config.h \
-                 -x c - \
-| sed 's/#.*$$//;/^[   ]*$$/d'
-endef
+# This is a pair of implicit rules to preprocess a file with # comments,
+# %ifdef et al, based on config.h settings or other %include'd files.
+# We use chained rules instead of a pipeline here so that we can properly
+# check the exit status of cpp rather than using its bad output when there
+# is a preprocessing error.  Another rule should depend on the output file
+# `FOO.v', and along with that `FOO.v.i' should be given dependencies
+# listing both its input files, and any header files that it may reference
+# (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 - \
+                  > $@T
+       mv -f $@T $@
+%.v: %.v.i
+       sed '/^[        ]*#/d;/^[       ]*$$/d' $< > $@T
+       mv -f $@T $@
 
 # Process the shlib-versions file, which tells us what shared library
 # version numbers to use when we install shared objects on this system.
@@ -709,24 +764,28 @@ endef
 ifeq ($(sysd-sorted-done),t)
 -include $(common-objpfx)soversions.mk
 ifndef avoid-generated
-$(common-objpfx)soversions.i: $(..)shlib-versions $(..)Makeconfig \
-                             $(wildcard $(patsubst %, $(..)%/shlib-versions,\
-                                                      $(add-ons) \
-                                                      $(subdirs))) \
-                             $(common-objpfx)config.make
-       cat $(filter-out $(..)Makeconfig $(common-objpfx)config.make,$^) \
-       | $(preprocess-versions) \
-       | while read conf version setname; do \
-           test -n "$$version" && \
-           test `expr '$(config-machine)-$(config-vendor)-$(config-os)' \
-                      : "$$conf"` != 0 || continue; \
+$(common-objpfx)shlib-versions.v.i: \
+       $(..)shlib-versions $(wildcard $(patsubst %, $(..)%/shlib-versions,\
+                                                    $(add-ons) \
+                                                    $(subdirs)))
+$(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; \
+             echo $$lib $$number $${setname:-$${default_setname}}; \
            fi; \
-         done > $@T; exit 0
+         fi; \
+       done < $< > $@T; exit 0
        mv -f $@T $@
 $(common-objpfx)soversions.mk: $(common-objpfx)soversions.i
        (while read lib number setname; do \
@@ -742,13 +801,21 @@ $(common-objpfx)soversions.mk: $(common-objpfx)soversions.i
 endif
 endif
 
-postclean-generated += soversions.mk
+postclean-generated += soversions.mk soversions.i \
+                      shlib-versions.v shlib-versions.v.i
 
 # Generate the header containing the names of all shared libraries.
 # We use a stamp file to avoid uncessary recompilations.
 before-compile += $(common-objpfx)gnu/lib-names.h
 ifeq ($(soversions.mk-done),t)
 $(common-objpfx)gnu/lib-names.h: $(common-objpfx)gnu/lib-names.stmp; @:
+ifneq (,$(findstring aix,$(config-os)))
+$(common-objpfx)gnu/lib-names.stmp: $(..)sysdeps/unix/sysv/aix/gnu/lib-names.h
+       $(make-target-directory)
+       @rm -f ${@:stmp=T} $@
+       @cp $(..)sysdeps/unix/sysv/aix/gnu/lib-names.h $(common-objpfx)gnu
+       touch $@
+else
 $(common-objpfx)gnu/lib-names.stmp: $(common-objpfx)soversions.mk
        $(make-target-directory)
        @rm -f ${@:stmp=T} $@
@@ -777,6 +844,7 @@ $(common-objpfx)gnu/lib-names.stmp: $(common-objpfx)soversions.mk
        $(move-if-change) ${@:stmp=T} ${@:stmp=h}
        touch $@
 endif
+endif
 
 common-generated += gnu/lib-names.h gnu/lib-names.stmp
 
@@ -797,13 +865,6 @@ endif
 
 endif # build-shared
 
-ifneq (,$(findstring linuxthreads,$(add-ons)))
-shared-thread-library = $(common-objpfx)linuxthreads/libpthread.so
-static-thread-library = $(common-objpfx)linuxthreads/libpthread.a
-bounded-thread-library = $(common-objpfx)linuxthreads/libpthread_b.a
-have-thread-library = yes
-rpath-dirs += linuxthreads
-endif
 
 ifeq ($(elf),yes)
 dlfcn = dlfcn
@@ -813,17 +874,28 @@ else
 libdl = $(common-objpfx)dlfcn/libdl.a
 endif
 else
-# No ELF - no libdl, at least for now.
+ifneq (,$(findstring aix,$(config-os)))
+ifeq ($(build-shared),yes)
+dlfcn = dlfcn
+libdl = $(common-objpfx)dlfcn/libdl.so$(libdl.so-version)
+else
+# No libdl without shared libs on AIX
+dlfcn =
+libdl =
+endif
+else
+# No ELF, no AIX - no libdl, at least for now.
 dlfcn =
 libdl =
 endif
+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.
 all-subdirs = csu assert ctype locale intl catgets math setjmp signal      \
-             stdlib stdio-common $(stdio) 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     \
@@ -870,4 +942,17 @@ $(common-objpfx)sysd-sorted: $(..)scripts/gen-sorted.awk $(all-Depend-files) \
        mv -f $@-tmp $@
 endif
 
+# Let sysdeps/ subdirs contain a Makeconfig fragment for us to include here.
+sysdep-makeconfigs := $(wildcard $(patsubst %,$(..)%/Makeconfig,\
+                                           $(config-sysdirs) $(add-ons)))
+
+ifneq (,$(sysdep-makeconfigs))
+include $(sysdep-makeconfigs)
+endif
+
+
 endif # Makeconfig not yet included
+
+# Local Variables:
+# mode: makefile
+# End:
This page took 0.03707 seconds and 5 git commands to generate.