# 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
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=NACL_SONAME_SUBST
.*-.*-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=NACL_SONAME_SUBST

# 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-nacl-x86-32.so.NACL_SONAME_SUBST
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-nacl-x86-64.so.NACL_SONAME_SUBST	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=NACL_SONAME_SUBST

# 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=NACL_SONAME_SUBST

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

# 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=NACL_SONAME_SUBST
.*-.*-.*		libnss_dns=NACL_SONAME_SUBST
.*-.*-.*		libnss_compat=NACL_SONAME_SUBST
.*-.*-.*		libnss_nis=NACL_SONAME_SUBST
.*-.*-.*		libnss_nisplus=NACL_SONAME_SUBST
.*-.*-.*		libnss_ldap=NACL_SONAME_SUBST
.*-.*-.*		libnss_hesiod=NACL_SONAME_SUBST

# Version for libnsl with YP and NIS+ functions.
alpha.*-.*-linux.*	libnsl=1.1
.*-.*-.*		libnsl=NACL_SONAME_SUBST

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

# 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=NACL_SONAME_SUBST

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

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