# Copyright (C) 1991-2018 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 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
# Lesser General Public License for more details.

# You should have received a copy of the GNU Lesser General Public
# License along with the GNU C Library; if not, see
# <http://www.gnu.org/licenses/>.

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

all: # Make this the default goal

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

+included-Makeconfig := yes

ifdef subdir
.. := ../
endif

# $(common-objdir) is the place to put objects and
# such that are not specific to a single subdir.
ifdef objdir
objpfx := $(patsubst %//,%/,$(objdir)/$(subdir)/)
common-objpfx = $(objdir)/
common-objdir = $(objdir)
else
objdir must be defined by the build-directory Makefile.
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

# What flags to give to sources which call user provided callbacks
uses-callbacks = -fexceptions

# What flags to give to tests which test stack alignment
stack-align-test-flags =

# Complete path to sysdep dirs.
# `configure' writes a definition of `config-sysdirs' in `config.make'.
sysdirs := $(foreach D,$(config-sysdirs),$(firstword $(filter /%,$D) $(..)$D))

+sysdep_dirs = $(sysdirs)
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
# 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 \
			     $(..)config.make.in $(..)config.h.in
	cd $(<D); $(SHELL) $(<F)

# 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,$(sysdirs),\
					 $(wildcard $(dir)/Implies) \
					 $(patsubst %.ac,%,\
						    $(firstword $(wildcard \
 $(addprefix $(dir)/,configure configure.ac))))) \
			       $(patsubst %.ac,%,\
 $(wildcard $(..)sysdeps/*/preconfigure $(..)sysdeps/*/preconfigure.ac))
	@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; \
	 echo Try \`configure --help\' for more details. >&2; \
	 exit 1; fi

# We don't want CPPFLAGS to be exported to the command running configure.
unexport CPPFLAGS

# Get the user's configuration parameters.
ifneq ($(wildcard $(..)configparms),)
include $(..)configparms
endif
ifneq ($(objpfx),)
ifneq ($(wildcard $(common-objpfx)configparms),)
include $(common-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.
ifeq ($(origin prefix),undefined) # ifndef would override explicit empty value.
prefix = /usr/local
endif

# Decide whether we shall build the programs or not.  We always do this
# unless the user tells us (in configparms) or we are building for a
# standalone target.
ifndef build-programs
ifneq ($(config-os),none)
build-programs=yes
else
build-programs=no
endif
endif

# Common prefix for machine-dependent installation directories.
ifeq ($(origin exec_prefix),undefined)
exec_prefix = $(prefix)
endif

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

# Where to install the shared library.
ifndef slibdir
slibdir = $(exec_prefix)/lib
endif
inst_slibdir = $(install_root)$(slibdir)

# Where to install the dynamic linker.
ifndef rtlddir
rtlddir = $(slibdir)
endif
inst_rtlddir = $(install_root)$(rtlddir)

# 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
# just prepended to the whole file name.
ifeq ($(origin libprefix),undefined)
libprefix =
endif

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

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

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

# Where to install the compiled binary locale archive and compiled
# binary locale files.
ifndef complocaledir
complocaledir = $(libdir)/locale
endif
inst_complocaledir = $(install_root)$(complocaledir)

# Where to install the message catalog data files (which are
# machine-independent).
ifndef localedir
localedir = $(datadir)/locale
endif
inst_localedir = $(install_root)$(localedir)

# Where to install the locale charmap source files.
ifndef i18ndir
i18ndir = $(datadir)/i18n
endif
inst_i18ndir = $(install_root)$(i18ndir)

# Where to install the shared object for charset transformation.
ifndef gconvdir
gconvdir = $(libdir)/gconv
endif
inst_gconvdir = $(install_root)$(gconvdir)

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

# Where to install internal programs.
ifndef libexecdir
libexecdir = $(exec_prefix)/libexec
endif
inst_libexecdir = $(install_root)$(libexecdir)

# Where to install administrative programs.
ifndef rootsbindir
rootsbindir = $(exec_prefix)/sbin
endif
inst_rootsbindir = $(install_root)$(rootsbindir)

ifndef sbindir
sbindir = $(exec_prefix)/sbin
endif
inst_sbindir = $(install_root)$(sbindir)

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

# Where to install audit libraries.
ifndef auditdir
auditdir = $(libdir)/audit
endif
inst_auditdir = $(install_root)$(auditdir)

# Where to install default configuration files.  These include the local
# timezone specification and network data base files.
ifndef sysconfdir
sysconfdir = $(prefix)/etc
endif
inst_sysconfdir = $(install_root)$(sysconfdir)

# Directory for the database files and Makefile for nss_db.
ifndef vardbdir
vardbdir = $(localstatedir)/db
endif
inst_vardbdir = $(install_root)$(vardbdir)

# 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 = $(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.
# 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.
# If you want POSIX.1 compatibility, use `America/New_York'.
ifndef posixrules
posixrules = America/New_York
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_SCRIPT
INSTALL_SCRIPT = $(INSTALL)
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

# The name of the C compiler to use for compilations of programs to run on
# the host that is building the library.  If you set CC to a
# cross-compiler, you must set this to the normal compiler.
ifndef BUILD_CC
BUILD_CC = $(CC)
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).
ifndef asm-CPPFLAGS
asm-CPPFLAGS =
endif

as-needed := -Wl,--as-needed
no-as-needed := -Wl,--no-as-needed

# Must be supported by the linker.
no-whole-archive = -Wl,--no-whole-archive
whole-archive = -Wl,--whole-archive

# Installed name of the startup code.
# The ELF convention is that the startfile is called crt1.o
start-installed-name = crt1.o
# On systems that do not need a special startfile for statically linked
# binaries, simply set it to the normal name.
ifndef static-start-installed-name
static-start-installed-name = $(start-installed-name)
endif

ifeq (yes,$(enable-static-pie))
# Link with rcrt1.o, instead of crt1.o, to call _dl_relocate_static_pie
# to relocate static PIE.
real-static-start-installed-name = r$(static-start-installed-name)
else
real-static-start-installed-name = $(static-start-installed-name)
endif

ifeq (yesyes,$(build-shared)$(have-z-combreloc))
combreloc-LDFLAGS = -Wl,-z,combreloc
LDFLAGS.so += $(combreloc-LDFLAGS)
LDFLAGS-rtld += $(combreloc-LDFLAGS)
endif

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

ifeq (yes,$(enable-static-pie))
pic-default = -DPIC
# Compile libc.a and libc_p.a with -fPIE/-fpie for static PIE.
pie-default = $(pie-ccflag)
ifeq (yes,$(have-static-pie))
default-pie-ldflag = -static-pie
else
# Static PIE can't have dynamic relocations in read-only segments since
# static PIE is mapped into memory by kernel.  --eh-frame-hdr is needed
# for PIE to support exception.
default-pie-ldflag = -Wl,-pie,--no-dynamic-linker,--eh-frame-hdr,-z,text
endif
endif

# If lazy relocations are disabled, add the -z now flag.  Use
# LDFLAGS-lib.so instead of LDFLAGS.so, to avoid adding the flag to
# test modules.
ifeq ($(bind-now),yes)
LDFLAGS-lib.so += -Wl,-z,now
endif

# Command to run after every final link (executable or shared object).
# This is invoked with $(call after-link,...), so it should operate on
# the file $1.  This can be set to do some sort of post-processing on
# binaries, or to perform some sort of static sanity check.
ifndef after-link
after-link =
endif

# Additional libraries to link into every test.
link-extra-libs-tests = $(libsupport)

# Command for linking PIE programs with the C library.
ifndef +link-pie
+link-pie-before-libc = $(CC) $(if $($(@F)-no-pie),$(no-pie-ldflag),-pie) \
	     -Wl,-O1 -nostdlib -nostartfiles -o $@ \
	     $(sysdep-LDFLAGS) $(LDFLAGS) $(LDFLAGS-$(@F)) \
	     $(combreloc-LDFLAGS) $(relro-LDFLAGS) $(hashstyle-LDFLAGS) \
	     $(firstword $(CRT-$(@F)) $(csu-objpfx)S$(start-installed-name)) \
	     $(+preinit) $(+prectorS) \
	     $(filter-out $(addprefix $(csu-objpfx),start.o \
						    S$(start-installed-name))\
			  $(+preinit) $(link-extra-libs) \
			  $(common-objpfx)libc% $(+postinit),$^) \
	     $(link-extra-libs)
+link-pie-after-libc = $(+postctorS) $(+postinit)
define +link-pie
$(+link-pie-before-libc) $(rtld-LDFLAGS) $(link-libc) $(+link-pie-after-libc)
$(call after-link,$@)
endef
define +link-pie-tests
$(+link-pie-before-libc) $(rtld-tests-LDFLAGS) $(link-libc-tests) \
			 $(+link-pie-after-libc)
$(call after-link,$@)
endef
define +link-pie-printers-tests
$(+link-pie-before-libc) $(built-rtld-LDFLAGS) $(link-libc-printers-tests) \
			 $(+link-pie-after-libc)
$(call after-link,$@)
endef
endif
# Command for statically linking programs with the C library.
ifndef +link-static
+link-static-before-libc = $(CC) -nostdlib -nostartfiles -static -o $@ \
	      $(if $($(@F)-no-pie),$(no-pie-ldflag),$(default-pie-ldflag)) \
	      $(sysdep-LDFLAGS) $(LDFLAGS) $(LDFLAGS-$(@F))  \
	      $(firstword $(CRT-$(@F)) $(csu-objpfx)$(real-static-start-installed-name)) \
	      $(+preinit) $(+prectorT) \
	      $(filter-out $(addprefix $(csu-objpfx),start.o \
						     $(start-installed-name))\
			   $(+preinit) $(link-extra-libs-static) \
			   $(common-objpfx)libc% $(+postinit),$^) \
	      $(link-extra-libs-static)
+link-static-after-libc = $(+postctorT) $(+postinit)
define +link-static
$(+link-static-before-libc) $(link-libc-static) $(+link-static-after-libc)
$(call after-link,$@)
endef
define +link-static-tests
$(+link-static-before-libc) $(link-libc-static-tests) $(+link-static-after-libc)
$(call after-link,$@)
endef
endif
# Commands for linking programs with the C library.
ifndef +link
ifeq (yes,$(build-shared))
ifeq (yes,$(cc-pie-default))
no-pie-ldflag = -no-pie
endif
ifeq (yes,$(build-pie-default))
+link = $(+link-pie)
+link-tests = $(+link-pie-tests)
+link-printers-tests = $(+link-pie-printers-tests)
else  # not build-pie-default
+link-before-libc = $(CC) -nostdlib -nostartfiles -o $@ \
	      $(sysdep-LDFLAGS) $(LDFLAGS) $(LDFLAGS-$(@F)) \
	      $(combreloc-LDFLAGS) $(relro-LDFLAGS) $(hashstyle-LDFLAGS) \
	      $(firstword $(CRT-$(@F)) $(csu-objpfx)$(start-installed-name)) \
	      $(+preinit) $(+prector) \
	      $(filter-out $(addprefix $(csu-objpfx),start.o \
						     $(start-installed-name))\
			   $(+preinit) $(link-extra-libs) \
			   $(common-objpfx)libc% $(+postinit),$^) \
	      $(link-extra-libs)
+link-after-libc = $(+postctor) $(+postinit)
define +link
$(+link-before-libc) $(rtld-LDFLAGS) $(link-libc) $(+link-after-libc)
$(call after-link,$@)
endef
define +link-tests
$(+link-before-libc) $(rtld-tests-LDFLAGS) $(link-libc-tests) \
		     $(+link-after-libc)
$(call after-link,$@)
endef
define +link-printers-tests
$(+link-before-libc) $(built-rtld-LDFLAGS) $(link-libc-printers-tests) \
		     $(+link-after-libc)
$(call after-link,$@)
endef
endif  # build-pie-default
else  # build-static
+link = $(+link-static)
+link-tests = $(+link-static-tests)
+link-printers-tests = $(+link-static-tests)
endif  # build-shared
endif  # +link

# The pretty printer test programs need to be compiled without optimizations
# so they won't confuse gdb.  We could use either the 'GCC optimize' pragma
# or the 'optimize' function attribute to achieve this; however, at least on
# ARM, gcc always produces different debugging symbols when invoked with
# a -O greater than 0 than when invoked with -O0, regardless of anything else
# we're using to suppress optimizations.  Therefore, we need to explicitly pass
# -O0 to it through CFLAGS.
# Additionally, the build system will try to -include $(common-objpfx)/config.h
# when compiling the tests, which will throw an error if some special macros
# (such as __OPTIMIZE__ and IS_IN_build) aren't defined.  To avoid this, we
# tell gcc to define IS_IN_build.
CFLAGS-printers-tests := -O0 -ggdb3 -DIS_IN_build

ifeq (yes,$(build-shared))
# These indicate whether to link using the built ld.so or the installed one.
ifeq ($(with-lld),no)
installed-rtld-LDFLAGS = -Wl,-dynamic-linker=$(rtlddir)/$(rtld-installed-name)
built-rtld-LDFLAGS = -Wl,-dynamic-linker=$(elf-objpfx)ld.so
else
installed-rtld-LDFLAGS = -Wl,-dynamic-linker,$(rtlddir)/$(rtld-installed-name)
built-rtld-LDFLAGS = -Wl,-dynamic-linker,$(elf-objpfx)ld.so
endif

ifndef rtld-LDFLAGS
rtld-LDFLAGS = $(installed-rtld-LDFLAGS)
endif

ifndef rtld-tests-LDFLAGS
ifeq (yes,$(build-hardcoded-path-in-tests))
rtld-tests-LDFLAGS = $(built-rtld-LDFLAGS)
else
rtld-tests-LDFLAGS = $(installed-rtld-LDFLAGS)
endif  # build-hardcoded-path-in-tests
endif  # rtld-tests-LDFLAGS

endif  # build-shared

ifndef link-libc
ifeq (yes,$(build-shared))
# 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-rpath = -Wl,-rpath=$(rpath-link)
link-libc-rpath-link = -Wl,-rpath-link=$(rpath-link)

ifeq (yes,$(build-hardcoded-path-in-tests))
link-libc-tests-rpath-link = $(link-libc-rpath)
else
link-libc-tests-rpath-link = $(link-libc-rpath-link)
endif  # build-hardcoded-path-in-tests

link-libc-before-gnulib = $(common-objpfx)libc.so$(libc.so-version) \
			  $(common-objpfx)$(patsubst %,$(libtype.oS),c) \
			  $(as-needed) $(elf-objpfx)ld.so \
			  $(no-as-needed)
link-libc = $(link-libc-rpath-link) $(link-libc-before-gnulib) $(gnulib)

link-libc-tests-after-rpath-link = $(link-libc-before-gnulib) $(gnulib-tests)
link-libc-tests = $(link-libc-tests-rpath-link) \
		  $(link-libc-tests-after-rpath-link)
# Pretty printer test programs always require rpath instead of rpath-link.
link-libc-printers-tests = $(link-libc-rpath) \
			   $(link-libc-tests-after-rpath-link)

# This is how to find at build-time things that will be installed there.
rpath-dirs = math elf dlfcn nss nis rt resolv crypt mathvec support
rpath-link = \
$(common-objdir):$(subst $(empty) ,:,$(patsubst ../$(subdir),.,$(rpath-dirs:%=$(common-objpfx)%)))
else  # build-static
link-libc = $(common-objpfx)libc.a $(otherlibs) $(gnulib) $(common-objpfx)libc.a $(gnulib)
link-libc-tests = $(common-objpfx)libc.a $(otherlibs) $(gnulib-tests) $(common-objpfx)libc.a $(gnulib-tests)
endif  # build-shared
endif  # link-libc

# Differences in the linkers on the various platforms.
LDFLAGS-rpath-ORIGIN = -Wl,-rpath,'$$ORIGIN'
LDFLAGS-soname-fname = -Wl,-soname,$(@F)
LDFLAGS-rdynamic = -rdynamic
LDFLAGS-Bsymbolic = -Bsymbolic

# 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

ifndef link-extra-libs
link-extra-libs = $(LDLIBS-$(@F))
link-extra-libs-static = $(link-extra-libs)
endif

# The static libraries.
link-libc-static = -Wl,--start-group $(common-objpfx)libc.a $(static-gnulib) -Wl,--end-group
link-libc-static-tests = -Wl,--start-group $(common-objpfx)libc.a $(static-gnulib-tests) -Wl,--end-group

# How to link against libgcc.  Some libgcc functions, such as those
# for "long long" arithmetic or software floating point, can always be
# built without use of C library headers and do not have any global
# state so can safely be linked statically into any executable or
# shared library requiring them; these functions are in libgcc.a.
# Other functions, relating to exception handling, may require C
# library headers to build and it may not be safe to have more than
# one copy of them in a process; these functions are only in
# libgcc_s.so and libgcc_eh.a.
#
# To avoid circular dependencies when bootstrapping, it is desirable
# to avoid use of libgcc_s and libgcc_eh in building glibc.  Where any
# glibc functionality (in particular, thread cancellation) requires
# exception handling, this is implemented through dlopen of libgcc_s
# to avoid unnecessary dependencies on libgcc_s by programs not using
# that functionality; executables built with glibc do not use
# exception handling other than through thread cancellation.
#
# Undefined references to functions from libgcc_eh or libgcc_s may
# arise for code built with -fexceptions.  In the case of statically
# linked programs installed by glibc, unwinding will never actually
# occur at runtime and the use of elf/static-stubs.c to resolve these
# references is safe.  In the case of statically linked test programs
# and test programs built with -fexceptions, unwinding may occur in
# some cases and it is preferable to link with libgcc_eh or libgcc_s
# so that the testing is as similar as possible to how programs will
# be built with the installed glibc.
#
# Some architectures have architecture-specific systems for exception
# handling that may involve undefined references to
# architecture-specific functions.  On those architectures,
# gnulib-arch and static-gnulib-arch may be defined in sysdeps
# makefiles to use additional libraries for linking executables and
# shared libraries built by glibc.
ifndef gnulib
ifneq ($(have-cc-with-libunwind),yes)
  libunwind =
else
  libunwind = -lunwind
endif
libgcc_eh := -Wl,--as-needed -lgcc_s $(libunwind) -Wl,--no-as-needed
gnulib-arch =
gnulib = -lgcc $(gnulib-arch)
gnulib-tests := -lgcc $(libgcc_eh)
static-gnulib-arch =
# By default, elf/static-stubs.o, instead of -lgcc_eh, is used to
# statically link programs.  When --disable-shared is used, we use
# -lgcc_eh since elf/static-stubs.o isn't sufficient.
ifeq (yes,$(build-shared))
static-gnulib = -lgcc $(static-gnulib-arch)
else
static-gnulib = -lgcc -lgcc_eh $(static-gnulib-arch)
endif
static-gnulib-tests := -lgcc -lgcc_eh $(libunwind)
libc.so-gnulib := -lgcc
endif
+preinit = $(addprefix $(csu-objpfx),crti.o)
+postinit = $(addprefix $(csu-objpfx),crtn.o)
ifeq ($(with-clang),yes)
# With clang, use the clang_rt.crt*.o files from the compiler-rt package
# in a LLVM_ENABLE_RUNTIMES build.
+prector = `$(CC) $(sysdep-LDFLAGS) --print-file-name=clang_rt.crtbegin.o`
+postctor = `$(CC) $(sysdep-LDFLAGS) --print-file-name=clang_rt.crtend.o`
else
+prector = `$(CC) $(sysdep-LDFLAGS) --print-file-name=crtbegin.o`
+postctor = `$(CC) $(sysdep-LDFLAGS) --print-file-name=crtend.o`
endif
# Variants of the two previous definitions for linking PIE programs.
ifeq ($(with-clang),yes)
# compiler-rt crt*.o also works for PIE.
+prectorS = $(+prector)
+postctorS = $(+postctor)
else
+prectorS = `$(CC) $(sysdep-LDFLAGS) --print-file-name=crtbeginS.o`
+postctorS = `$(CC) $(sysdep-LDFLAGS) --print-file-name=crtendS.o`
endif
# Variants of the two previous definitions for statically linking programs.
ifeq (yes,$(enable-static-pie))
# Static PIE must use PIE variants.
+prectorT = $(+prectorS)
+postctorT = $(+postctorS)
else
ifeq ($(with-clang),yes)
# compiler-rt crt*.o also works for static PIE.
+prectorT = $(+prector)
+postctorT = $(+postctor)
else
+prectorT = `$(CC) $(sysdep-LDFLAGS) --print-file-name=crtbeginT.o`
+postctorT = `$(CC) $(sysdep-LDFLAGS) --print-file-name=crtend.o`
endif
endif
csu-objpfx = $(common-objpfx)csu/
elf-objpfx = $(common-objpfx)elf/

# A command that, prepended to the name and arguments of a program,
# and run on the build system, causes that program with those
# arguments to be run on the host for which the library is built.
ifndef test-wrapper
test-wrapper =
endif
# Likewise, but the name of the program is preceded by
# <variable>=<value> assignments for environment variables.
ifndef test-wrapper-env
test-wrapper-env = $(test-wrapper) env
endif
# Likewise, but the program's environment will be empty except for any
# explicit <variable>=<value> assignments preceding the program name.
ifndef test-wrapper-env-only
test-wrapper-env-only = $(test-wrapper) env -i
endif

# Whether to run test programs built for the library's host system.
ifndef run-built-tests
ifeq (yes|,$(cross-compiling)|$(test-wrapper))
run-built-tests = no
else
run-built-tests = yes
endif
endif

# Whether to stop immediately when a test fails.  Nonempty means to
# stop, empty means not to stop.
ifndef stop-on-test-failure
stop-on-test-failure =
endif

# 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,$^))
rtld-prefix = $(elf-objpfx)$(rtld-installed-name)			      \
	      --library-path						      \
	      $(rpath-link)$(patsubst %,:%,$(sysdep-library-path))
ifeq (yes,$(build-shared))
comma = ,
sysdep-library-path = \
$(subst $(empty) ,:,$(strip $(patsubst -Wl$(comma)-rpath-link=%, %,\
				       $(filter -Wl$(comma)-rpath-link=%,\
						$(sysdep-LDFLAGS)))))
# $(run-via-rtld-prefix) is a command that, when prepended to the name
# of a program built with the newly built library, produces a command
# that, executed on the host for which the library is built, runs that
# program.  For tests listed in tests-static or xtests-static, it is
# empty.
run-via-rtld-prefix =							      \
  $(if $(strip $(filter $(notdir $(built-program-file)),		      \
			$(tests-static) $(xtests-static))),, $(rtld-prefix))
else
run-via-rtld-prefix =
endif
# $(run-program-env) is the default environment variable settings to
# use when running a program built with the newly built library.
run-program-env = GCONV_PATH=$(common-objpfx)iconvdata \
		  LOCPATH=$(common-objpfx)localedata LC_ALL=C
# $(run-program-prefix) is a command that, when prepended to the name
# of a program built with the newly built library, produces a command
# that, executed on the build system on which "make" is run, runs that
# program.  $(run-program-prefix-before-env) and
# $(run-program-prefix-after-env) are similar, but separate parts
# before and after a list of environment variables.
run-program-prefix-before-env = $(test-wrapper-env)
run-program-prefix-after-env = $(run-via-rtld-prefix)
run-program-prefix = $(run-program-prefix-before-env) $(run-program-env) \
		     $(run-program-prefix-after-env)
# $(built-program-cmd) is a command that, executed on the build system
# on which "make" is run, runs the newly built program that is the
# second dependency of the makefile target in which
# $(built-program-cmd) is used.  $(built-program-cmd-before-env) and
# $(built-program-cmd-after-env) are similar, before and after a list
# of environment variables.
built-program-cmd-before-env = $(test-wrapper-env)
built-program-cmd-after-env = $(run-via-rtld-prefix) $(built-program-file)
built-program-cmd = $(built-program-cmd-before-env) $(run-program-env) \
		    $(built-program-cmd-after-env)
# $(host-built-program-cmd) is a command that, executed on the host
# for which the library is built, runs the newly built program that is
# the second dependency of the makefile target in which
# $(host-built-program-cmd) is used.
host-built-program-cmd = $(run-via-rtld-prefix) $(built-program-file)

ifndef LD
LD := ld -X
endif

# $(test-via-rtld-prefix) is a command that, when prepended to the name
# of a test program built with the newly built library, produces a command
# that, executed on the host for which the library is built, runs that
# program.  For tests listed in tests-static or xtests-static as well
# as when test programs are hardcoded to the newly built libraries, it
# is empty.

# $(test-program-prefix) is a command that, when prepended to the name
# of a test program built with the newly built library, produces a command
# that, executed on the build system on which "make" is run, runs that
# test program.  $(test-program-prefix-before-env) and
# $(test-program-prefix-after-env) are similar, before and after a
# list of environment variables.

# $(test-program-cmd) is a command that, executed on the build system
# on which "make" is run, runs the newly built test program that is the
# second dependency of the makefile target in which
# $(test-program-cmd) is used.  $(test-program-cmd-before-env) and
# $(test-program-cmd-after-env) are similar, before and after a list
# of environment variables.

# $(host-test-program-cmd) is a command that, executed on the host
# for which the library is built, runs the newly built test program that
# is the second dependency of the makefile target in which
# $(host-test-program-cmd) is used.

ifeq (yes,$(build-hardcoded-path-in-tests))
test-via-rtld-prefix =
test-program-prefix-before-env = $(test-wrapper-env)
test-program-prefix-after-env =
test-program-prefix = $(test-program-prefix-before-env) $(run-program-env) \
		      $(test-program-prefix-after-env)
test-program-cmd-before-env = $(test-wrapper-env)
test-program-cmd-after-env = $(built-program-file)
test-program-cmd = $(test-program-cmd-before-env) $(run-program-env) \
		   $(test-program-cmd-after-env)
host-test-program-cmd = $(built-program-file)
else
test-via-rtld-prefix = $(run-via-rtld-prefix)
test-program-prefix-before-env = $(run-program-prefix-before-env)
test-program-prefix-after-env = $(run-program-prefix-after-env)
test-program-prefix = $(run-program-prefix)
test-program-cmd-before-env = $(built-program-cmd-before-env)
test-program-cmd-after-env = $(built-program-cmd-after-env)
test-program-cmd = $(built-program-cmd)
host-test-program-cmd = $(host-built-program-cmd)
endif

# Extra flags to pass to GCC.
ifeq ($(all-warnings),yes)
+gccwarn := -Wall -Wwrite-strings -Wcast-qual -Wbad-function-cast -Wmissing-noreturn -Wmissing-prototypes -Wmissing-declarations -Wcomment -Wcomments -Wtrigraphs -Wsign-compare -Wfloat-equal -Wmultichar
else
+gccwarn := -Wall -Wwrite-strings
endif
+gccwarn += -Wundef
ifeq ($(enable-werror),yes)
+gccwarn += -Werror
endif
+gccwarn-c = -Wstrict-prototypes -Wold-style-definition

# 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

# We have to assume that glibc functions are called in any rounding
# mode and also change the rounding mode in a few functions. So,
# disable any optimization that assume default rounding mode.
ifeq ($(with-clang),no)
+math-flags = -frounding-math
endif

# We might want to compile with some stack-protection flag.
ifneq ($(stack-protector),)
+stack-protector=$(stack-protector)
endif

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

# To force installation of files even if they are older than the
# installed files.  This variable is included in the dependency list
# of all installation targets.
ifeq ($(force-install),yes)
+force = force-install
else
+force =
endif

####
#### 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
# 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
+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 -O".
ifeq	"$(strip $(+cflags))" ""
+cflags	:= $(default_cflags)
endif	# $(+cflags) == ""

# For now, manually add known-needed clang flags here.
ifeq ($(with-clang),yes)
+cflags += -fheinous-gnu-extensions
# Don't complain about __sigsetjmp.
+cflags += -Wno-builtin-requires-header
+cflags += -Wno-incomplete-setjmp-declaration
# clang takes gnu89 as requiring a warning about duplicates, gcc does not
+cflags += -Wno-duplicate-decl-specifier
# Non-string format arguments come from debugging prints in ld.so.
+cflags += -Wno-format-security

ifeq ($(with-lld),yes)
LDFLAGS.so += -fuse-ld=lld
LDFLAGS-rtld += -fuse-ld=lld
LDFLAGS += -fuse-ld=lld
endif

endif	# with-clang == yes

+cflags += $(cflags-cpu) $(+gccwarn) $(+merge-constants) $(+math-flags) \
	   $(+stack-protector)
+gcc-nowarn := -w

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

# Each sysdeps directory can contain header files that both will be
# used to compile and will be installed.  Each can also contain an
# include/ subdirectory, whose header files will be used to compile
# but will not be installed, and will take precedence over the
# installed files.  This mirrors the top-level include/ subdirectory.
+sysdep-includes := $(foreach dir,$(+sysdep_dirs),\
			      $(addprefix -I,$(wildcard $(dir)/include) $(dir)))

# 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.
+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.
libio-include = -I$(..)libio

# List of non-library modules that we build.
built-modules = iconvprogs iconvdata ldconfig lddlibc4 libmemusage \
		libSegFault libpcprofile librpcsvc locale-programs \
		memusagestat nonlib nscd extramodules libnldbl libsupport \
		testsuite

in-module = $(subst -,_,$(firstword $(libof-$(basename $(@F))) \
				    $(libof-$(<F)) \
				    $(libof-$(@F)) \
				    libc))

# Build ld.so, libc.so and libpthread.so with -ftls-model=initial-exec
tls-model = $(if $(filter libpthread rtld \
			  libc,$(in-module)),-ftls-model=initial-exec,)

module-cppflags-real = -include $(common-objpfx)libc-modules.h \
		       -DMODULE_NAME=$(in-module)

# We don't need libc-modules.h and the MODULE_NAME definition for .v.i
# files.  These targets don't (and will likely never need to) use the IS_IN
# facility.  In fact, shlib-versions should not use it because that will
# create a circular dependency as libc-modules.h is generated from
# shlib-versions.
module-cppflags = $(if $(filter %.v.i,$(@F)),,$(module-cppflags-real))

# 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 = $(config-extra-cppflags) $(CPPUNDEFS) $(CPPFLAGS-config) \
	   $($(subdir)-CPPFLAGS) \
	   $(+includes) $(defines) $(module-cppflags) \
	   -include $(..)include/libc-symbols.h $(sysdep-CPPFLAGS) \
	   $(CPPFLAGS-$(suffix $@)) \
	   $(foreach lib,$(libof-$(basename $(@F))) \
			 $(libof-$(<F)) $(libof-$(@F)),$(CPPFLAGS-$(lib))) \
	   $(CPPFLAGS-$(<F)) $(CPPFLAGS-$(@F)) $(CPPFLAGS-$(basename $(@F)))

ifneq (no,$(have-tunables))
CPPFLAGS += -DTOP_NAMESPACE=glibc
endif

override CFLAGS	= -std=gnu11 -fgnu89-inline $(config-extra-cflags) \
		  $(filter-out %frame-pointer,$(+cflags)) $(+gccwarn-c) \
		  $(sysdep-CFLAGS) $(CFLAGS-$(suffix $@)) $(CFLAGS-$(<F)) \
		  $(CFLAGS-$(@F)) $(tls-model) \
		  $(foreach lib,$(libof-$(basename $(@F))) \
				$(libof-$(<F)) $(libof-$(@F)),$(CFLAGS-$(lib)))
# Use our copies of cstdlib and cmath.
override CXXFLAGS = -I$(common-objpfx) $(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.
ifeq (yes,$(build-pic-default))
pic-default = -DPIC
endif

# Enable object files for different versions of the library.
# Various things use $(object-suffixes) to know what all to make.
# The compilation rules use $(CPPFLAGS-${SUFFIX}) and $(CFLAGS-${SUFFIX})
# to pass different flags for each flavor.
libtypes = $(foreach o,$(object-suffixes-for-libc),$(libtype$o))
# .op may be added to all-object-suffixes below.
all-object-suffixes := .o .os .oS
object-suffixes :=
CPPFLAGS-.o = $(pic-default)
# libc.a must be compiled with -fPIE/-fpie for static PIE.
CFLAGS-.o = $(filter %frame-pointer,$(+cflags)) $(pie-default)
libtype.o := lib%.a
object-suffixes += .o
ifeq (yes,$(build-shared))
# Under --enable-shared, we will build a shared library of PIC objects.
# The PIC object files are named foo.os.
object-suffixes += .os
CPPFLAGS-.os = -DPIC -DSHARED
CFLAGS-.os = $(filter %frame-pointer,$(+cflags)) $(pic-ccflag)
libtype.os := lib%_pic.a
# This can be changed by a sysdep makefile
pic-ccflag = -fPIC
# This one should always stay like this unless there is a very good reason.
PIC-ccflag = -fPIC
endif
# This can be changed by a sysdep makefile
pie-ccflag = -fpie
# This one should always stay like this unless there is a very good reason.
PIE-ccflag = -fPIE
ifeq (yes,$(build-profile))
# Under --enable-profile, we will build a static library of profiled objects.
# The profiled object files are named foo.op.
all-object-suffixes += .op
object-suffixes += .op
CPPFLAGS-.op = -DPROF $(pic-default)
# libc_p.a must be compiled with -fPIE/-fpie for static PIE.
CFLAGS-.op = -pg $(pie-default)
libtype.op = lib%_p.a
endif

# Convenience variable for when we want to treat shared-library cases
# differently from the rest.
object-suffixes-noshared := $(filter-out .os,$(object-suffixes))

object-suffixes-for-libc := $(object-suffixes)

ifeq (yes,$(build-shared))
# Build special library that contains the static-only routines for libc.
object-suffixes-for-libc += .oS

# Must build the routines as PIC, though, because they can end up in (users')
# 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 -DLIBC_NONSHARED=1
libtype.oS = lib%_nonshared.a
endif

# The assembler can generate debug information too.
ifndef ASFLAGS
ASFLAGS := $(filter -g% -fdebug-prefix-map=%,$(CFLAGS))
endif
ASFLAGS += -Werror=undef $(ASFLAGS-config) $(asflags-cpu)

ifndef BUILD_CC
BUILD_CC = $(CC)
endif

move-if-change = $(SHELL) $(..)scripts/move-if-change

-include $(common-objpfx)sysd-sorted
subdirs = $(sorted-subdirs)
subdir-srcdirs = $(foreach dir,$(subdirs),\
			   $(firstword $($(dir)-srcdir) $(..)$(dir)))

# 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 $(..)Makeconfig
	sed '/^[ 	]*%/!s/#.*$$//;/^[ 	]*$$/d;s/^[ 	]*%/#/' \
	    $(filter-out FORCE %.h $(..)Makeconfig,$^) \
	| $(CC) -E -undef $(CPPFLAGS) -x assembler-with-cpp - \
		   > $@T
	mv -f $@T $@
%.v: %.v.i
	sed '/^[ 	]*#/d;/^[ 	]*$$/d' $< > $@T
	mv -f $@T $@

ifeq (yes, $(build-shared))

# To generate a header to support more than one ABI for different
# architecture variants, the CPU/Makefile defines abi-variants to be a
# list of names for those variants (e.g. 32 64), and, for each variant,
# defines abi-$(variant)-condition to be the condition for those options
# to use in a C #if condition.  abi-includes may be defined to a list of
# headers to include in the generated header, if the default does not
# suffice.  default-abi is defined to be the ABI for the current glibc
# build.

ifndef abi-includes
abi-includes := bits/wordsize.h
endif

# Process the shlib-versions file, which tells us what shared library
# version numbers to use when we install shared objects on this system.
# We need to wait until $(subdirs) is complete.
ifeq ($(sysd-sorted-done),t)
-include $(common-objpfx)soversions.mk
ifndef avoid-generated
$(common-objpfx)shlib-versions.v.i: \
	$(wildcard $(+sysdep_dirs:=/shlib-versions) \
		   $(subdir-srcdirs:=/shlib-versions)) \
	$(..)shlib-versions

$(common-objpfx)soversions.i: $(..)scripts/soversions.awk \
			      $(common-objpfx)shlib-versions.v
	$(AWK) -f $^ > $@T
	mv -f $@T $@
$(common-objpfx)soversions.mk: $(common-objpfx)soversions.i $(..)Makeconfig
	(while read which lib number setname; do \
	   eval seen_$$which=1; \
	   test x"$$which" = xDEFAULT || continue; \
	   case $$number in \
	     [0-9]*) echo "$$lib.so-version=.$$number"; \
		     echo "all-sonames+=$$lib=$$lib.so\$$($$lib.so-version)";;\
	     *)	     echo "$$lib.so-version=$$number"; \
		     echo "all-sonames+=$$lib=\$$($$lib.so-version)";;\
	   esac; \
	 done; \
	 echo soversions.mk-done = t;) < $< > $@T; exit 0
	mv -f $@T $@
endif
endif

postclean-generated += soversions.mk soversions.i \
		       shlib-versions.v shlib-versions.v.i

before-compile += $(common-objpfx)libc-modules.h
common-generated += libc-modules.h libc-modules.stmp
ifeq ($(soversions.mk-done),t)
# Generate a header with macro definitions for use with the IS_IN macro.
# These are the possible values for the MODULE_NAME macro defined when building
# sources, to identify which module the translation unit is going to be built
# into.
$(common-objpfx)libc-modules.h: $(common-objpfx)libc-modules.stmp; @:
$(common-objpfx)libc-modules.stmp: $(..)scripts/gen-libc-modules.awk \
				   $(common-objpfx)soversions.i
	$(AWK) -v buildlist="$(subst -,_,$(built-modules))" -f $^ > ${@:stmp=T}
	$(move-if-change) ${@:stmp=T} ${@:stmp=h}
	touch $@

endif

# Build the tunables list header early since it could be used by any module in
# glibc.
ifneq (no,$(have-tunables))
before-compile += $(common-objpfx)dl-tunable-list.h
common-generated += dl-tunable-list.h dl-tunable-list.stmp

$(common-objpfx)dl-tunable-list.h: $(common-objpfx)dl-tunable-list.stmp; @:
$(common-objpfx)dl-tunable-list.stmp: \
		$(..)scripts/gen-tunables.awk \
		$(..)elf/dl-tunables.list \
		$(wildcard $(subdirs:%=$(..)%/dl-tunables.list)) \
		$(wildcard $(sysdirs:%=%/dl-tunables.list))
	$(AWK) -f $^ > ${@:stmp=T}
	$(move-if-change) ${@:stmp=T} ${@:stmp=h}
	touch $@
endif

# 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

ifndef rtld-version-installed-name
rtld-version-installed-name = ld-$(version).so
endif

endif # build-shared


ifeq ($(build-shared),yes)
libdl = $(common-objpfx)dlfcn/libdl.so$(libdl.so-version)
else
libdl = $(common-objpfx)dlfcn/libdl.a
endif

ifeq ($(build-shared),yes)
libm = $(common-objpfx)math/libm.so$(libm.so-version)
libmvec = $(common-objpfx)mathvec/libmvec.so$(libmvec.so-version)
else
libm = $(common-objpfx)math/libm.a
libmvec = $(common-objpfx)mathvec/libmvec.a
endif

ifeq ($(build-shared),yes)
libsupport = $(common-objpfx)support/libsupport_nonshared.a
else
libsupport = $(common-objpfx)support/libsupport.a
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.
all-subdirs = csu assert ctype locale intl catgets math setjmp signal	    \
	      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 gshadow po argp   \
	      crypt localedata timezone rt conform debug mathvec support    \
	      dlfcn elf google-nsl-stub

ifndef avoid-generated
# sysd-sorted itself will contain rules making the sysd-sorted target
# depend on Depend files.  But if you just added a Depend file to an
# existing directory not in all-subdirs, then sysd-sorted needs to
# be regenerated, so it depends on existing $(sorted-subdirs:=/Depend) files.
all-Depend-files := $(wildcard $(sort \
			$(foreach dir,$(all-subdirs),\
				  $(firstword $($(dir)-srcdir) \
				  $(..)$(dir))/Depend) \
			$(sorted-subdirs:=/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

# 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-%:rtld-% rtld-%:% m_%:s_%

# Let sysdeps/ subdirs contain a Makeconfig fragment for us to include here.
sysdep-makeconfigs := $(wildcard $(+sysdep_dirs:=/Makeconfig))
ifneq (,$(sysdep-makeconfigs))
include $(sysdep-makeconfigs)
endif

# Compute just the target patterns.  Makeconfig has set sysd-rules-patterns.
sysd-rules-targets := $(sort $(foreach p,$(sysd-rules-patterns),\
					 $(firstword $(subst :, ,$p))))

# A sysdeps Makeconfig fragment may set libc-reentrant to yes.
ifeq (yes,$(libc-reentrant))
defines += -D_LIBC_REENTRANT

libio-mtsafe = -D_IO_MTSAFE_IO
endif

# The name to give to a test in test results summaries.
test-name = $(strip $(patsubst %.out, %, $(patsubst $(common-objpfx)%, %, $@)))

# Likewise, in XFAIL variable names.
test-xfail-name = $(strip $(patsubst %.out, %, $(patsubst $(objpfx)%, %, $@)))

# Command to output a test status line (such as PASS: test-name).  If
# test-xfail-$(test-xfail-name) has a nonempty value, the status will be
# XPASS or XFAIL rather than PASS or FAIL.
evaluate-test = $(..)scripts/evaluate-test.sh $(test-name) $$? \
		  $(if $(test-xfail-$(test-xfail-name)),true,false) \
		  $(if $(stop-on-test-failure),true,false) \
		  > $(common-objpfx)$(test-name).test-result

endif # Makeconfig not yet included

# Local Variables:
# mode: makefile
# End:
