# This file defines the shared library version numbers we will install.

# The following lines list filename patterns matching canonical configurations,
# and the associated versions to use for various libraries.  The entire
# list is processed, with earlier entries taking precedence over later
# entries.  So loose patterns at the end of the list can give defaults.

# This file can use cpp-style conditionals starting with % instead of #
# to test the symbols defined in config.h by configure.

# In the optional third column, there can one or more symbol set names
# listed, which must be in ascending version order reading left to right
# and must appear in this same order in the Versions.def file.  Each listed
# version subsumes all prior versions back to the previous listed version.
#
# An entry with DEFAULT in the second column gives a default third column
# to apply on matching configurations when the matching entry for a particular
# library has no third column.  The defaults must precede the entries they
# apply to.
#
# Configuration		DEFAULT			Earliest symbol set
# -------------		---------------		------------------------------

s390x-.*-linux.*        DEFAULT			GLIBC_2.2
powerpc64-.*-linux.*	DEFAULT			GLIBC_2.3
powerpc.*le-.*-linux.*	DEFAULT			GLIBC_2.17
.*-.*-gnu-gnu.*		DEFAULT			GLIBC_2.2.6

# Configuration		ABI			Identifier for ABI data files
# -------------		----------		-----------------------------
sparc64.*-.*-.*		ABI			sparc64-@OS@
sparc.*-.*-.*		ABI			sparc-@OS@

# Configuration		Library=version		Earliest symbol set (optional)
# -------------		---------------		------------------------------

# The interface to -lm depends mostly only on cpu, not on operating system.
sparc64.*-.*-linux.*	libm=6			GLIBC_2.2
sh.*-.*-linux.*		libm=6			GLIBC_2.2
.*-.*-linux.*		libm=6
.*-.*-gnu-gnu.*		libm=6

# We provide libc.so.6 for Linux kernel versions 2.0 and later.
sh.*-.*-linux.*		libc=6			GLIBC_2.2
sparc64.*-.*-linux.*	libc=6			GLIBC_2.2
.*-.*-linux.*		libc=6

# libmachuser.so.1 corresponds to mach/*.defs as of Utah's UK22 release.
.*-.*-gnu-gnu.*		libmachuser=1

# libhurduser.so.0.3 corresponds to hurd/*.defs as of 11 June 2002.
.*-.*-gnu-gnu.*		libhurduser=0.3

# libc.so.0.3 is the first Hurd libc using libio.
.*-.*-gnu-gnu.*		libc=0.3

# The dynamic loader also requires different names.
sparc64.*-.*-linux.*	ld=ld-linux.so.2	GLIBC_2.2
sparc.*-.*-linux.*	ld=ld-linux.so.2
sh.*-.*-linux.*		ld=ld-linux.so.2	GLIBC_2.2
# We use the ELF ABI standard name for the default.
.*-.*-.*		ld=ld.so.1

# The -ldl interface (see <dlfcn.h>) is the same on all platforms.
.*-.*-.*		libdl=2

# So far the -lutil interface is the same on all platforms, except for the
# `struct utmp' format, which depends on libc.
.*-.*-.*		libutil=1

# Version number 2 is used on other systems for the BIND 4.9.5 resolver
# interface.
.*-.*-.*		libresolv=2

# Interface revision of nss_* modules.  This must match NSS_SHLIB_REVISION
# in nss/nsswitch.h, which determines the library names used for service
# names given in /etc/nsswitch.conf.
.*-.*-.*		libnss_files=2
.*-.*-.*		libnss_dns=2
.*-.*-.*		libnss_compat=2
.*-.*-.*		libnss_nis=2
.*-.*-.*		libnss_nisplus=2
.*-.*-.*		libnss_ldap=2
.*-.*-.*		libnss_hesiod=2
.*-.*-.*		libnss_db=2
.*-.*-.*		libnss_borg=2
.*-.*-.*		libnss_cache=2

# Tests for NSS.  They must have the same NSS_SHLIB_REVISION number as
# the rest.
.*-.*-.*		libnss_test1=2

# Version for libnsl with YP and NIS+ functions.
.*-.*-.*		libnsl=1

# This defines the shared library version numbers we will install.
.*-.*-.*		libcrypt=1

# The gross patch for programs assuming broken locale implementations.
sh.*-.*-.*		libBrokenLocale=1	GLIBC_2.2
sparc64.*-.*-.*		libBrokenLocale=1	GLIBC_2.2
.*-.*-.*		libBrokenLocale=1

# The real-time library from POSIX.1b.
.*-.*-.*		librt=1

# The asynchronous name lookup library.
.*-.*-.*		libanl=1

# This defines the libgcc soname version this glibc is to load for
# asynchronous cancellation to work correctly.
.*-.*-.*		libgcc_s=1
