# 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.
#
# An entry with WORDSIZE* in the second column gives an alternate
# configuration tuple whose macros will be conditionally defined in
# gnu/lib-names.h; @CPU@, @VENDOR@, @OS@ can be used in the third
# column to compose the alternate tuple matched against the patterns here.

# Configuration		DEFAULT			Earliest symbol set
# -------------		---------------		------------------------------

s390x-.*-linux.*        DEFAULT			GLIBC_2.2
cris-.*-linux.*		DEFAULT			GLIBC_2.2
x86_64-.*-linux.*       DEFAULT			GLIBC_2.2.5
x86_64-.*-ros.*       DEFAULT			GLIBC_2.2.5
powerpc64-.*-linux.*	DEFAULT			GLIBC_2.3
.*-.*-gnu-gnu.*		DEFAULT			GLIBC_2.2.6

# Configuration		WORDSIZE[32|64]		Alternate configuration
# -------------		----------		-----------------------
x86_64-.*-.*		WORDSIZE32		i686-@VENDOR@-@OS@
i.86-.*-.*		WORDSIZE64		x86_64-@VENDOR@-@OS@
s390x-.*-.*		WORDSIZE32		s390-@VENDOR@-@OS@
s390-.*-.*		WORDSIZE64		s390x-@VENDOR@-@OS@
powerpc64-.*-.*		WORDSIZE32		powerpc-@VENDOR@-@OS@
powerpc.*-.*-.*		WORDSIZE64		powerpc64-@VENDOR@-@OS@
sparc64.*-.*-.*		WORDSIZE32		sparc-@VENDOR@-@OS@
sparc.*-.*-.*		WORDSIZE64		sparc64-@VENDOR@-@OS@

# 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
alpha.*-.*-linux.*	libm=6.1
ia64-.*-linux.*		libm=6.1		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.
alpha.*-.*-linux.*	libc=6.1
ia64-.*-linux.*		libc=6.1		GLIBC_2.2
sh.*-.*-linux.*		libc=6			GLIBC_2.2
sparc64.*-.*-linux.*	libc=6			GLIBC_2.2
.*-.*-linux.*		libc=6
.*-.*-ros.*		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.
i.86-.*-linux.*		ld=ld-linux.so.2
sparc64.*-.*-linux.*	ld=ld-linux.so.2	GLIBC_2.2
sparc.*-.*-linux.*	ld=ld-linux.so.2
alpha.*-.*-linux.*	ld=ld-linux.so.2
sh.*-.*-linux.*		ld=ld-linux.so.2	GLIBC_2.2
ia64-.*-linux.*		ld=ld-linux-ia64.so.2	GLIBC_2.2
s390x-.*-linux.*	ld=ld64.so.1		GLIBC_2.2
powerpc64.*-.*-linux.*	ld=ld64.so.1		GLIBC_2.3
cris-.*-linux.*		ld=ld.so.1		GLIBC_2.2
x86_64-.*-linux.*	ld=ld-linux-x86-64.so.2	GLIBC_2.2.5
# 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.
alpha.*-.*-linux.*	libdl=2.1
.*-.*-.*		libdl=2

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

# Version number 2 is used on other systems for the BIND 4.9.5 resolver
# interface.
alpha.*-.*-linux.*	libresolv=2.1
.*-.*-.*		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

# 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.
#alpha.*-.*-linux.*	libnsl=1.1
.*-.*-.*		libnsl=1

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

# The gross patch for programs assuming broken locale implementations.
alpha.*-.*-linux.*	libBrokenLocale=1.1
ia64-.*-.*		libBrokenLocale=1	GLIBC_2.2
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
