# Copyright (C) 1991, 1992, 1993 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.

# 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.

# 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.

#
#	Makefile configuration options for the GNU C library.
#
ifneq (,)
This makefile requires GNU Make.
endif

ifneq "$(origin +included-Makeconfig)" "file"

+included-Makeconfig := yes

ifdef subdir
.. := ../
endif

# If config.make exists, the source directory was configured,
# so don't try to be clever and find another directory to build in.
ifneq (,$(wildcard $(..)config.make))
ARCH =
machine =
else	# Not configured.
ifndef ARCH
ifdef machine
ARCH = $(machine)
endif # machine
endif # ARCH
endif # config.make

# Directory for object files and libc.a.  If this is not defined, the
# object files live in the subdirectories where their sources live, and
# libc.a lives in the parent directory (this probably doesn't work any
# more).
ifdef ARCH
ifeq ($(filter /%,$(ARCH)),)
objdir := $(..)$(ARCH)
else
objdir = $(ARCH)
endif
endif

# $(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)
common-objdir = $(objdir)
else
objpfx :=
ifdef ..
common-objpfx = $(..)
common-objdir = ..
else
# This is a kludge.  make wizards might grok.
common-objpfx = sysdeps/../
endif
endif

libc.a = $(common-objpfx)libc.a


# Get the values defined by options to `configure'.
include $(common-objpfx)config.make

# Force the user to configure before making.
$(common-objpfx)config.make:
	@echo The GNU C library has not been configured. >&2
	@echo Run \`configure\' to configure it before building. >&2
	@exit 1

# Get the user's configuration parameters.
ifneq ($(wildcard $(..)configparms),)
include $(..)configparms
endif
ifneq ($(objpfx),)
ifneq ($(wildcard $(objpfx)configparms),)
include $(objpfx)configparms
endif
endif

####
####	These are the configuration variables.  You can define values for
####	the variables below in the file `configparms'.
####	Do NOT edit this file.
####


# Common prefix for machine-independent installation directories.
ifndef prefix
prefix = /usr/local
endif

# Common prefix for machine-dependent installation directories.
ifndef exec_prefix
exec_prefix = $(prefix)
endif

# Where to install the library and object files.
ifndef libdir
libdir = $(exec_prefix)/lib
endif

# Where to install the header files.
ifndef includedir
includedir = $(exec_prefix)/include
endif

# Define if the library should install its own <stddef.h>.
# Do this unless you are using version 2.2 or later of GCC.
ifndef stddef.h
stddef.h = stddef.h
endif

# Define if the library should install its own <stdarg.h>.
# Do this unless you are using version 2.3 or later of GCC.
ifndef stdarg.h
stdarg.h := stdarg.h $(wildcard va-*.h)
endif

# Where to install machine-independent data files.
# These are the timezone database, and eventually the locale database.
ifndef datadir
datadir = $(prefix)/lib
endif

# Where to install the timezone data files (which are machine-independent).
ifndef zonedir
zonedir = $(datadir)/zoneinfo
endif

# Where to install programs.
ifndef bindir
bindir = $(exec_prefix)/bin
endif

# Where to install the Info files.
ifndef infodir
infodir = $(prefix)/info
endif

# What timezone should be the installed default (e.g., US/Eastern).
# Run `make -C time echo-zonenames' to see a list of available zone names.
# The local timezone can be changed with `zic -l TIMEZONE' at any time.
ifndef localtime
localtime = Factory
endif

# Where to install the "localtime" timezone file; this is the file whose
# contents $(localtime) specifies.  If this is a relative pathname, it is
# relative to $(zonedir).  It is a good idea to put this somewhere
# other than there, so the zoneinfo directory contains only universal data,
# localizing the configuration data elsewhere.
ifndef localtime-file
localtime-file = $(prefix)/etc/localtime
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.
# Run `make -C time echo-zonenames' to see a list of available zone names.
# This setting can be changed with `zic -p TIMEZONE' at any time.
ifndef posixrules
posixrules = US/Eastern
endif

# Where to install the "posixrules" timezone file; this is file
# whose contents $(posixrules) specifies.  If this is a relative
# pathname, it is relative to $(zonedir).
ifndef posixrules-file
posixrules-file = posixrules
endif


# Directory where your system's native header files live.
# This is used on Unix systems to generate some GNU libc header files.
ifndef sysincludedir
sysincludedir = /usr/include
endif


# Commands to install files.
ifndef INSTALL_DATA
INSTALL_DATA = $(INSTALL) -m 644
endif
ifndef INSTALL_PROGRAM
INSTALL_PROGRAM = $(INSTALL)
endif
ifndef INSTALL
INSTALL = install
endif


# The name of the C compiler.
# If you've got GCC, and it works, use it.
ifeq ($(origin CC),default)
CC := gcc
endif

# These are preprocessor macros we want to predefine.  Define HAVE_GNU_LD
# if using GNU ld (which you should do if possible).  If you do this, you
# may need the GNU assembler as well.  If you don't do this, your library
# won't work as well (and won't be strictly compliant with the ANSI C
# and POSIX.1 standards).
+defines = $(config-defines) $(defines)

# Default flags to pass the C compiler.
ifndef default_cflags
default_cflags := -g
endif

# Flags to pass the C compiler when assembling preprocessed assembly code
# (`.S' files).  On some systems the assembler doesn't understand the `#' line
# directives the preprocessor produces.  If you have troubling compiling
# assembly code, try using -P here to suppress these directives.
ifndef asm-CPPFLAGS
asm-CPPFLAGS =
endif

# Command for linking programs with the C library.
ifndef +link
+link = $(CC) -nostdlib $(LDFLAGS) -o $@ \
	$(common-objpfx)start.o $(^:lib=$(libc.a)) $(gnulib) $(libc.a)
endif
ifndef gnulib
gnulib := -lgcc
endif

ifndef LD
LD := ld -X
endif

ifndef	RANLIB
RANLIB = ranlib
endif

# Define non-empty if the C compiler understands -v (print version).
+cc_version = $(filter gcc,$(notdir $(firstword $(CC)))) # if using gcc

# Extra flags to pass to GCC.
+gccwarn := -Wall -Wwrite-strings
+gccopt := -fstrength-reduce

# This is the program that generates makefile
# dependencies from C source files.
ifndef +mkdep
+mkdep = $(CC) -M
endif

# The program that makes Emacs-style TAGS files.
ETAGS	:= etags -T

# The `m4' macro processor; this is used by sysdeps/sparc/Makefile (and
# perhaps others) to preprocess assembly code in some cases.
M4 = m4

####
#### End of configuration variables.
####

# This tells some versions of GNU make before 3.63 not to export all variables.
.NOEXPORT:

# We want to echo the commands we're running without
# umpteem 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
+cmdecho	:= echo >/dev/null
else						# not -s
+cmdecho	:= echo
endif	   					# -s

# These are the flags given to the compiler to tell
# it what sort of optimization and/or debugging output to do.
ifndef	+cflags
# If `CFLAGS' was defined, use that.
ifdef		CFLAGS
+cflags	:= $(filter-out -I%,$(CFLAGS))
endif		# CFLAGS
endif	# +cflags

# If none of the above worked, default to "-g".
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)
ifneq	"$(filter -O,$(+cflags))" ""
+cflags := $(+cflags) $(+gccopt)
+gcc-nowarn := -w
endif
else
+gcc-nowarn :=
endif	# gcc

# Don't duplicate options if we inherited variables from the parent.
+cflags	:= $(sort $(+cflags))


ifneq	"$(findstring v,$(MAKEFLAGS))" ""	# if -v
ifneq	"$(strip $(+cc_version))" ""
# If Make is telling us version info, tell the compiler to do so as well.
CC	:= $(CC) -v
endif	# +cc_version
endif						# -v

# 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
# and in the parent library source directory.
ifneq "$(..)" ""
+includes	= -I. -I$(patsubst %/,%,$(..)) $(includes)
else
+includes	= -I. $(includes)
endif


# These are the variables that the implicit compilation rules use.
CPPFLAGS = $(+includes) $(+defines) -D_LIBC
override CFLAGS	= $(+cflags)


# This is the macro that the implicit linking rules use.
ifneq "$(filter -g,$(+cflags))" "" # -g is in $(+cflags)
LDFLAGS	:= -g
endif


ifneq "$(filter -DHAVE_GNU_LD,$(CPPFLAGS))" ""
+gnu-stabs := yes
endif

ifneq "$(filter -DHAVE_GNU_AS,$(CPPFLAGS))" ""
gnu-as := yes
endif


endif # Makeconfig not yet included
