# 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
x86_64-.*-akaros.*      DEFAULT			GLIBC_2.2.5
.*-.*-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
.*-.*-akaros.*		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

# 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
