tenace-0.13/ 0000775 0004016 0004016 00000000000 12225341155 007673 5 0000000 0000000 tenace-0.13/autogen.sh 0000775 0004016 0004016 00000000427 11736647205 011632 0000000 0000000 #!/bin/sh
# Run this to generate all the initial makefiles, etc.
set -ex
test -d lib || mkdir lib
gnulib-tool --update
intltoolize --copy --force --automake
libtoolize --force --copy
aclocal -I m4
autoheader
automake --add-missing --copy --foreign
autoreconf
./configure "$@"
tenace-0.13/lib/ 0000775 0004016 0004016 00000000000 12225341155 010441 5 0000000 0000000 tenace-0.13/lib/physmem.c 0000644 0004016 0004016 00000016664 12215417300 012215 0000000 0000000 /* Calculate the size of physical memory.
Copyright (C) 2000-2001, 2003, 2005-2006, 2009-2013 Free Software
Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
This program 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 General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see . */
/* Written by Paul Eggert. */
#include
#include "physmem.h"
#include
#if HAVE_SYS_PSTAT_H
# include
#endif
#if HAVE_SYS_SYSMP_H
# include
#endif
#if HAVE_SYS_SYSINFO_H && HAVE_MACHINE_HAL_SYSINFO_H
# include
# include
#endif
#if HAVE_SYS_TABLE_H
# include
#endif
#include
#if HAVE_SYS_PARAM_H
# include
#endif
#if HAVE_SYS_SYSCTL_H
# include
#endif
#if HAVE_SYS_SYSTEMCFG_H
# include
#endif
#ifdef _WIN32
# define WIN32_LEAN_AND_MEAN
# include
/* MEMORYSTATUSEX is missing from older windows headers, so define
a local replacement. */
typedef struct
{
DWORD dwLength;
DWORD dwMemoryLoad;
DWORDLONG ullTotalPhys;
DWORDLONG ullAvailPhys;
DWORDLONG ullTotalPageFile;
DWORDLONG ullAvailPageFile;
DWORDLONG ullTotalVirtual;
DWORDLONG ullAvailVirtual;
DWORDLONG ullAvailExtendedVirtual;
} lMEMORYSTATUSEX;
typedef WINBOOL (WINAPI *PFN_MS_EX) (lMEMORYSTATUSEX*);
#endif
#define ARRAY_SIZE(a) (sizeof (a) / sizeof ((a)[0]))
/* Return the total amount of physical memory. */
double
physmem_total (void)
{
#if defined _SC_PHYS_PAGES && defined _SC_PAGESIZE
{ /* This works on linux-gnu, solaris2 and cygwin. */
double pages = sysconf (_SC_PHYS_PAGES);
double pagesize = sysconf (_SC_PAGESIZE);
if (0 <= pages && 0 <= pagesize)
return pages * pagesize;
}
#endif
#if HAVE_PSTAT_GETSTATIC
{ /* This works on hpux11. */
struct pst_static pss;
if (0 <= pstat_getstatic (&pss, sizeof pss, 1, 0))
{
double pages = pss.physical_memory;
double pagesize = pss.page_size;
if (0 <= pages && 0 <= pagesize)
return pages * pagesize;
}
}
#endif
#if HAVE_SYSMP && defined MP_SAGET && defined MPSA_RMINFO && defined _SC_PAGESIZE
{ /* This works on irix6. */
struct rminfo realmem;
if (sysmp (MP_SAGET, MPSA_RMINFO, &realmem, sizeof realmem) == 0)
{
double pagesize = sysconf (_SC_PAGESIZE);
double pages = realmem.physmem;
if (0 <= pages && 0 <= pagesize)
return pages * pagesize;
}
}
#endif
#if HAVE_GETSYSINFO && defined GSI_PHYSMEM
{ /* This works on Tru64 UNIX V4/5. */
int physmem;
if (getsysinfo (GSI_PHYSMEM, (caddr_t) &physmem, sizeof (physmem),
NULL, NULL, NULL) == 1)
{
double kbytes = physmem;
if (0 <= kbytes)
return kbytes * 1024.0;
}
}
#endif
#if HAVE_SYSCTL && defined HW_PHYSMEM
{ /* This works on *bsd and darwin. */
unsigned int physmem;
size_t len = sizeof physmem;
static int mib[2] = { CTL_HW, HW_PHYSMEM };
if (sysctl (mib, ARRAY_SIZE (mib), &physmem, &len, NULL, 0) == 0
&& len == sizeof (physmem))
return (double) physmem;
}
#endif
#if HAVE__SYSTEM_CONFIGURATION
/* This works on AIX. */
return _system_configuration.physmem;
#endif
#if defined _WIN32
{ /* this works on windows */
PFN_MS_EX pfnex;
HMODULE h = GetModuleHandle ("kernel32.dll");
if (!h)
return 0.0;
/* Use GlobalMemoryStatusEx if available. */
if ((pfnex = (PFN_MS_EX) GetProcAddress (h, "GlobalMemoryStatusEx")))
{
lMEMORYSTATUSEX lms_ex;
lms_ex.dwLength = sizeof lms_ex;
if (!pfnex (&lms_ex))
return 0.0;
return (double) lms_ex.ullTotalPhys;
}
/* Fall back to GlobalMemoryStatus which is always available.
but returns wrong results for physical memory > 4GB. */
else
{
MEMORYSTATUS ms;
GlobalMemoryStatus (&ms);
return (double) ms.dwTotalPhys;
}
}
#endif
/* Guess 64 MB. It's probably an older host, so guess small. */
return 64 * 1024 * 1024;
}
/* Return the amount of physical memory available. */
double
physmem_available (void)
{
#if defined _SC_AVPHYS_PAGES && defined _SC_PAGESIZE
{ /* This works on linux-gnu, solaris2 and cygwin. */
double pages = sysconf (_SC_AVPHYS_PAGES);
double pagesize = sysconf (_SC_PAGESIZE);
if (0 <= pages && 0 <= pagesize)
return pages * pagesize;
}
#endif
#if HAVE_PSTAT_GETSTATIC && HAVE_PSTAT_GETDYNAMIC
{ /* This works on hpux11. */
struct pst_static pss;
struct pst_dynamic psd;
if (0 <= pstat_getstatic (&pss, sizeof pss, 1, 0)
&& 0 <= pstat_getdynamic (&psd, sizeof psd, 1, 0))
{
double pages = psd.psd_free;
double pagesize = pss.page_size;
if (0 <= pages && 0 <= pagesize)
return pages * pagesize;
}
}
#endif
#if HAVE_SYSMP && defined MP_SAGET && defined MPSA_RMINFO && defined _SC_PAGESIZE
{ /* This works on irix6. */
struct rminfo realmem;
if (sysmp (MP_SAGET, MPSA_RMINFO, &realmem, sizeof realmem) == 0)
{
double pagesize = sysconf (_SC_PAGESIZE);
double pages = realmem.availrmem;
if (0 <= pages && 0 <= pagesize)
return pages * pagesize;
}
}
#endif
#if HAVE_TABLE && defined TBL_VMSTATS
{ /* This works on Tru64 UNIX V4/5. */
struct tbl_vmstats vmstats;
if (table (TBL_VMSTATS, 0, &vmstats, 1, sizeof (vmstats)) == 1)
{
double pages = vmstats.free_count;
double pagesize = vmstats.pagesize;
if (0 <= pages && 0 <= pagesize)
return pages * pagesize;
}
}
#endif
#if HAVE_SYSCTL && defined HW_USERMEM
{ /* This works on *bsd and darwin. */
unsigned int usermem;
size_t len = sizeof usermem;
static int mib[2] = { CTL_HW, HW_USERMEM };
if (sysctl (mib, ARRAY_SIZE (mib), &usermem, &len, NULL, 0) == 0
&& len == sizeof (usermem))
return (double) usermem;
}
#endif
#if defined _WIN32
{ /* this works on windows */
PFN_MS_EX pfnex;
HMODULE h = GetModuleHandle ("kernel32.dll");
if (!h)
return 0.0;
/* Use GlobalMemoryStatusEx if available. */
if ((pfnex = (PFN_MS_EX) GetProcAddress (h, "GlobalMemoryStatusEx")))
{
lMEMORYSTATUSEX lms_ex;
lms_ex.dwLength = sizeof lms_ex;
if (!pfnex (&lms_ex))
return 0.0;
return (double) lms_ex.ullAvailPhys;
}
/* Fall back to GlobalMemoryStatus which is always available.
but returns wrong results for physical memory > 4GB */
else
{
MEMORYSTATUS ms;
GlobalMemoryStatus (&ms);
return (double) ms.dwAvailPhys;
}
}
#endif
/* Guess 25% of physical memory. */
return physmem_total () / 4;
}
#if DEBUG
# include
# include
int
main (void)
{
printf ("%12.f %12.f\n", physmem_total (), physmem_available ());
exit (0);
}
#endif /* DEBUG */
/*
Local Variables:
compile-command: "gcc -DDEBUG -g -O -Wall -W physmem.c"
End:
*/
tenace-0.13/lib/unistd.in.h 0000644 0004016 0004016 00000145350 12215417300 012446 0000000 0000000 /* Substitute for and wrapper around .
Copyright (C) 2003-2013 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3, or (at your option)
any later version.
This program 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 General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, see . */
#ifndef _@GUARD_PREFIX@_UNISTD_H
#if __GNUC__ >= 3
@PRAGMA_SYSTEM_HEADER@
#endif
@PRAGMA_COLUMNS@
/* The include_next requires a split double-inclusion guard. */
#if @HAVE_UNISTD_H@
# @INCLUDE_NEXT@ @NEXT_UNISTD_H@
#endif
/* Get all possible declarations of gethostname(). */
#if @GNULIB_GETHOSTNAME@ && @UNISTD_H_HAVE_WINSOCK2_H@ \
&& !defined _GL_INCLUDING_WINSOCK2_H
# define _GL_INCLUDING_WINSOCK2_H
# include
# undef _GL_INCLUDING_WINSOCK2_H
#endif
#if !defined _@GUARD_PREFIX@_UNISTD_H && !defined _GL_INCLUDING_WINSOCK2_H
#define _@GUARD_PREFIX@_UNISTD_H
/* NetBSD 5.0 mis-defines NULL. Also get size_t. */
#include
/* mingw doesn't define the SEEK_* or *_FILENO macros in . */
/* Cygwin 1.7.1 declares symlinkat in , not in . */
/* But avoid namespace pollution on glibc systems. */
#if (!(defined SEEK_CUR && defined SEEK_END && defined SEEK_SET) \
|| ((@GNULIB_SYMLINKAT@ || defined GNULIB_POSIXCHECK) \
&& defined __CYGWIN__)) \
&& ! defined __GLIBC__
# include
#endif
/* Cygwin 1.7.1 declares unlinkat in , not in . */
/* But avoid namespace pollution on glibc systems. */
#if (@GNULIB_UNLINKAT@ || defined GNULIB_POSIXCHECK) && defined __CYGWIN__ \
&& ! defined __GLIBC__
# include
#endif
/* mingw fails to declare _exit in . */
/* mingw, MSVC, BeOS, Haiku declare environ in , not in
. */
/* Solaris declares getcwd not only in but also in . */
/* OSF Tru64 Unix cannot see gnulib rpl_strtod when system is
included here. */
/* But avoid namespace pollution on glibc systems. */
#if !defined __GLIBC__ && !defined __osf__
# define __need_system_stdlib_h
# include
# undef __need_system_stdlib_h
#endif
/* Native Windows platforms declare chdir, getcwd, rmdir in
and/or , not in .
They also declare access(), chmod(), close(), dup(), dup2(), isatty(),
lseek(), read(), unlink(), write() in . */
#if ((@GNULIB_CHDIR@ || @GNULIB_GETCWD@ || @GNULIB_RMDIR@ \
|| defined GNULIB_POSIXCHECK) \
&& ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__))
# include /* mingw32, mingw64 */
# include /* mingw64, MSVC 9 */
#elif (@GNULIB_CLOSE@ || @GNULIB_DUP@ || @GNULIB_DUP2@ || @GNULIB_ISATTY@ \
|| @GNULIB_LSEEK@ || @GNULIB_READ@ || @GNULIB_UNLINK@ || @GNULIB_WRITE@ \
|| defined GNULIB_POSIXCHECK) \
&& ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__)
# include
#endif
/* AIX and OSF/1 5.1 declare getdomainname in , not in .
NonStop Kernel declares gethostname in , not in . */
/* But avoid namespace pollution on glibc systems. */
#if ((@GNULIB_GETDOMAINNAME@ && (defined _AIX || defined __osf__)) \
|| (@GNULIB_GETHOSTNAME@ && defined __TANDEM)) \
&& !defined __GLIBC__
# include
#endif
/* MSVC defines off_t in .
May also define off_t to a 64-bit type on native Windows. */
#if !@HAVE_UNISTD_H@ || @WINDOWS_64_BIT_OFF_T@
/* Get off_t. */
# include
#endif
#if (@GNULIB_READ@ || @GNULIB_WRITE@ \
|| @GNULIB_READLINK@ || @GNULIB_READLINKAT@ \
|| @GNULIB_PREAD@ || @GNULIB_PWRITE@ || defined GNULIB_POSIXCHECK)
/* Get ssize_t. */
# include
#endif
/* Get getopt(), optarg, optind, opterr, optopt.
But avoid namespace pollution on glibc systems. */
#if @GNULIB_UNISTD_H_GETOPT@ && !defined __GLIBC__ && !defined _GL_SYSTEM_GETOPT
# define __need_getopt
# include
#endif
_GL_INLINE_HEADER_BEGIN
#ifndef _GL_UNISTD_INLINE
# define _GL_UNISTD_INLINE _GL_INLINE
#endif
/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */
/* The definition of _GL_ARG_NONNULL is copied here. */
/* The definition of _GL_WARN_ON_USE is copied here. */
/* Hide some function declarations from . */
#if @GNULIB_GETHOSTNAME@ && @UNISTD_H_HAVE_WINSOCK2_H@
# if !defined _@GUARD_PREFIX@_SYS_SOCKET_H
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
# undef socket
# define socket socket_used_without_including_sys_socket_h
# undef connect
# define connect connect_used_without_including_sys_socket_h
# undef accept
# define accept accept_used_without_including_sys_socket_h
# undef bind
# define bind bind_used_without_including_sys_socket_h
# undef getpeername
# define getpeername getpeername_used_without_including_sys_socket_h
# undef getsockname
# define getsockname getsockname_used_without_including_sys_socket_h
# undef getsockopt
# define getsockopt getsockopt_used_without_including_sys_socket_h
# undef listen
# define listen listen_used_without_including_sys_socket_h
# undef recv
# define recv recv_used_without_including_sys_socket_h
# undef send
# define send send_used_without_including_sys_socket_h
# undef recvfrom
# define recvfrom recvfrom_used_without_including_sys_socket_h
# undef sendto
# define sendto sendto_used_without_including_sys_socket_h
# undef setsockopt
# define setsockopt setsockopt_used_without_including_sys_socket_h
# undef shutdown
# define shutdown shutdown_used_without_including_sys_socket_h
# else
_GL_WARN_ON_USE (socket,
"socket() used without including ");
_GL_WARN_ON_USE (connect,
"connect() used without including ");
_GL_WARN_ON_USE (accept,
"accept() used without including ");
_GL_WARN_ON_USE (bind,
"bind() used without including ");
_GL_WARN_ON_USE (getpeername,
"getpeername() used without including ");
_GL_WARN_ON_USE (getsockname,
"getsockname() used without including ");
_GL_WARN_ON_USE (getsockopt,
"getsockopt() used without including ");
_GL_WARN_ON_USE (listen,
"listen() used without including ");
_GL_WARN_ON_USE (recv,
"recv() used without including ");
_GL_WARN_ON_USE (send,
"send() used without including ");
_GL_WARN_ON_USE (recvfrom,
"recvfrom() used without including ");
_GL_WARN_ON_USE (sendto,
"sendto() used without including ");
_GL_WARN_ON_USE (setsockopt,
"setsockopt() used without including ");
_GL_WARN_ON_USE (shutdown,
"shutdown() used without including ");
# endif
# endif
# if !defined _@GUARD_PREFIX@_SYS_SELECT_H
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
# undef select
# define select select_used_without_including_sys_select_h
# else
_GL_WARN_ON_USE (select,
"select() used without including ");
# endif
# endif
#endif
/* OS/2 EMX lacks these macros. */
#ifndef STDIN_FILENO
# define STDIN_FILENO 0
#endif
#ifndef STDOUT_FILENO
# define STDOUT_FILENO 1
#endif
#ifndef STDERR_FILENO
# define STDERR_FILENO 2
#endif
/* Ensure *_OK macros exist. */
#ifndef F_OK
# define F_OK 0
# define X_OK 1
# define W_OK 2
# define R_OK 4
#endif
/* Declare overridden functions. */
#if defined GNULIB_POSIXCHECK
/* The access() function is a security risk. */
_GL_WARN_ON_USE (access, "the access function is a security risk - "
"use the gnulib module faccessat instead");
#endif
#if @GNULIB_CHDIR@
_GL_CXXALIAS_SYS (chdir, int, (const char *file) _GL_ARG_NONNULL ((1)));
_GL_CXXALIASWARN (chdir);
#elif defined GNULIB_POSIXCHECK
# undef chdir
# if HAVE_RAW_DECL_CHDIR
_GL_WARN_ON_USE (chown, "chdir is not always in - "
"use gnulib module chdir for portability");
# endif
#endif
#if @GNULIB_CHOWN@
/* Change the owner of FILE to UID (if UID is not -1) and the group of FILE
to GID (if GID is not -1). Follow symbolic links.
Return 0 if successful, otherwise -1 and errno set.
See the POSIX:2008 specification
. */
# if @REPLACE_DUP2@
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
# define dup2 rpl_dup2
# endif
_GL_FUNCDECL_RPL (dup2, int, (int oldfd, int newfd));
_GL_CXXALIAS_RPL (dup2, int, (int oldfd, int newfd));
# else
# if !@HAVE_DUP2@
_GL_FUNCDECL_SYS (dup2, int, (int oldfd, int newfd));
# endif
_GL_CXXALIAS_SYS (dup2, int, (int oldfd, int newfd));
# endif
_GL_CXXALIASWARN (dup2);
#elif defined GNULIB_POSIXCHECK
# undef dup2
# if HAVE_RAW_DECL_DUP2
_GL_WARN_ON_USE (dup2, "dup2 is unportable - "
"use gnulib module dup2 for portability");
# endif
#endif
#if @GNULIB_DUP3@
/* Copy the file descriptor OLDFD into file descriptor NEWFD, with the
specified flags.
The flags are a bitmask, possibly including O_CLOEXEC (defined in )
and O_TEXT, O_BINARY (defined in "binary-io.h").
Close NEWFD first if it is open.
Return newfd if successful, otherwise -1 and errno set.
See the Linux man page at
. */
# if @HAVE_DUP3@
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
# define dup3 rpl_dup3
# endif
_GL_FUNCDECL_RPL (dup3, int, (int oldfd, int newfd, int flags));
_GL_CXXALIAS_RPL (dup3, int, (int oldfd, int newfd, int flags));
# else
_GL_FUNCDECL_SYS (dup3, int, (int oldfd, int newfd, int flags));
_GL_CXXALIAS_SYS (dup3, int, (int oldfd, int newfd, int flags));
# endif
_GL_CXXALIASWARN (dup3);
#elif defined GNULIB_POSIXCHECK
# undef dup3
# if HAVE_RAW_DECL_DUP3
_GL_WARN_ON_USE (dup3, "dup3 is unportable - "
"use gnulib module dup3 for portability");
# endif
#endif
#if @GNULIB_ENVIRON@
# if !@HAVE_DECL_ENVIRON@
/* Set of environment variables and values. An array of strings of the form
"VARIABLE=VALUE", terminated with a NULL. */
# if defined __APPLE__ && defined __MACH__
# include
# define environ (*_NSGetEnviron ())
# else
# ifdef __cplusplus
extern "C" {
# endif
extern char **environ;
# ifdef __cplusplus
}
# endif
# endif
# endif
#elif defined GNULIB_POSIXCHECK
# if HAVE_RAW_DECL_ENVIRON
_GL_UNISTD_INLINE char ***
rpl_environ (void)
{
return &environ;
}
_GL_WARN_ON_USE (rpl_environ, "environ is unportable - "
"use gnulib module environ for portability");
# undef environ
# define environ (*rpl_environ ())
# endif
#endif
#if @GNULIB_EUIDACCESS@
/* Like access(), except that it uses the effective user id and group id of
the current process. */
# if !@HAVE_EUIDACCESS@
_GL_FUNCDECL_SYS (euidaccess, int, (const char *filename, int mode)
_GL_ARG_NONNULL ((1)));
# endif
_GL_CXXALIAS_SYS (euidaccess, int, (const char *filename, int mode));
_GL_CXXALIASWARN (euidaccess);
# if defined GNULIB_POSIXCHECK
/* Like access(), this function is a security risk. */
_GL_WARN_ON_USE (euidaccess, "the euidaccess function is a security risk - "
"use the gnulib module faccessat instead");
# endif
#elif defined GNULIB_POSIXCHECK
# undef euidaccess
# if HAVE_RAW_DECL_EUIDACCESS
_GL_WARN_ON_USE (euidaccess, "euidaccess is unportable - "
"use gnulib module euidaccess for portability");
# endif
#endif
#if @GNULIB_FACCESSAT@
# if !@HAVE_FACCESSAT@
_GL_FUNCDECL_SYS (faccessat, int,
(int fd, char const *file, int mode, int flag)
_GL_ARG_NONNULL ((2)));
# endif
_GL_CXXALIAS_SYS (faccessat, int,
(int fd, char const *file, int mode, int flag));
_GL_CXXALIASWARN (faccessat);
#elif defined GNULIB_POSIXCHECK
# undef faccessat
# if HAVE_RAW_DECL_FACCESSAT
_GL_WARN_ON_USE (faccessat, "faccessat is not portable - "
"use gnulib module faccessat for portability");
# endif
#endif
#if @GNULIB_FCHDIR@
/* Change the process' current working directory to the directory on which
the given file descriptor is open.
Return 0 if successful, otherwise -1 and errno set.
See the POSIX:2008 specification
. */
# if ! @HAVE_FCHDIR@
_GL_FUNCDECL_SYS (fchdir, int, (int /*fd*/));
/* Gnulib internal hooks needed to maintain the fchdir metadata. */
_GL_EXTERN_C int _gl_register_fd (int fd, const char *filename)
_GL_ARG_NONNULL ((2));
_GL_EXTERN_C void _gl_unregister_fd (int fd);
_GL_EXTERN_C int _gl_register_dup (int oldfd, int newfd);
_GL_EXTERN_C const char *_gl_directory_name (int fd);
# else
# if !@HAVE_DECL_FCHDIR@
_GL_FUNCDECL_SYS (fchdir, int, (int /*fd*/));
# endif
# endif
_GL_CXXALIAS_SYS (fchdir, int, (int /*fd*/));
_GL_CXXALIASWARN (fchdir);
#elif defined GNULIB_POSIXCHECK
# undef fchdir
# if HAVE_RAW_DECL_FCHDIR
_GL_WARN_ON_USE (fchdir, "fchdir is unportable - "
"use gnulib module fchdir for portability");
# endif
#endif
#if @GNULIB_FCHOWNAT@
# if @REPLACE_FCHOWNAT@
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
# undef fchownat
# define fchownat rpl_fchownat
# endif
_GL_FUNCDECL_RPL (fchownat, int, (int fd, char const *file,
uid_t owner, gid_t group, int flag)
_GL_ARG_NONNULL ((2)));
_GL_CXXALIAS_RPL (fchownat, int, (int fd, char const *file,
uid_t owner, gid_t group, int flag));
# else
# if !@HAVE_FCHOWNAT@
_GL_FUNCDECL_SYS (fchownat, int, (int fd, char const *file,
uid_t owner, gid_t group, int flag)
_GL_ARG_NONNULL ((2)));
# endif
_GL_CXXALIAS_SYS (fchownat, int, (int fd, char const *file,
uid_t owner, gid_t group, int flag));
# endif
_GL_CXXALIASWARN (fchownat);
#elif defined GNULIB_POSIXCHECK
# undef fchownat
# if HAVE_RAW_DECL_FCHOWNAT
_GL_WARN_ON_USE (fchownat, "fchownat is not portable - "
"use gnulib module openat for portability");
# endif
#endif
#if @GNULIB_FDATASYNC@
/* Synchronize changes to a file.
Return 0 if successful, otherwise -1 and errno set.
See POSIX:2008 specification
. */
# if !@HAVE_FDATASYNC@ || !@HAVE_DECL_FDATASYNC@
_GL_FUNCDECL_SYS (fdatasync, int, (int fd));
# endif
_GL_CXXALIAS_SYS (fdatasync, int, (int fd));
_GL_CXXALIASWARN (fdatasync);
#elif defined GNULIB_POSIXCHECK
# undef fdatasync
# if HAVE_RAW_DECL_FDATASYNC
_GL_WARN_ON_USE (fdatasync, "fdatasync is unportable - "
"use gnulib module fdatasync for portability");
# endif
#endif
#if @GNULIB_FSYNC@
/* Synchronize changes, including metadata, to a file.
Return 0 if successful, otherwise -1 and errno set.
See POSIX:2008 specification
. */
# if !@HAVE_FSYNC@
_GL_FUNCDECL_SYS (fsync, int, (int fd));
# endif
_GL_CXXALIAS_SYS (fsync, int, (int fd));
_GL_CXXALIASWARN (fsync);
#elif defined GNULIB_POSIXCHECK
# undef fsync
# if HAVE_RAW_DECL_FSYNC
_GL_WARN_ON_USE (fsync, "fsync is unportable - "
"use gnulib module fsync for portability");
# endif
#endif
#if @GNULIB_FTRUNCATE@
/* Change the size of the file to which FD is opened to become equal to LENGTH.
Return 0 if successful, otherwise -1 and errno set.
See the POSIX:2008 specification
. */
# if @REPLACE_FTRUNCATE@
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
# undef ftruncate
# define ftruncate rpl_ftruncate
# endif
_GL_FUNCDECL_RPL (ftruncate, int, (int fd, off_t length));
_GL_CXXALIAS_RPL (ftruncate, int, (int fd, off_t length));
# else
# if !@HAVE_FTRUNCATE@
_GL_FUNCDECL_SYS (ftruncate, int, (int fd, off_t length));
# endif
_GL_CXXALIAS_SYS (ftruncate, int, (int fd, off_t length));
# endif
_GL_CXXALIASWARN (ftruncate);
#elif defined GNULIB_POSIXCHECK
# undef ftruncate
# if HAVE_RAW_DECL_FTRUNCATE
_GL_WARN_ON_USE (ftruncate, "ftruncate is unportable - "
"use gnulib module ftruncate for portability");
# endif
#endif
#if @GNULIB_GETCWD@
/* Get the name of the current working directory, and put it in SIZE bytes
of BUF.
Return BUF if successful, or NULL if the directory couldn't be determined
or SIZE was too small.
See the POSIX:2008 specification
.
Additionally, the gnulib module 'getcwd' guarantees the following GNU
extension: If BUF is NULL, an array is allocated with 'malloc'; the array
is SIZE bytes long, unless SIZE == 0, in which case it is as big as
necessary. */
# if @REPLACE_GETCWD@
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
# define getcwd rpl_getcwd
# endif
_GL_FUNCDECL_RPL (getcwd, char *, (char *buf, size_t size));
_GL_CXXALIAS_RPL (getcwd, char *, (char *buf, size_t size));
# else
/* Need to cast, because on mingw, the second parameter is
int size. */
_GL_CXXALIAS_SYS_CAST (getcwd, char *, (char *buf, size_t size));
# endif
_GL_CXXALIASWARN (getcwd);
#elif defined GNULIB_POSIXCHECK
# undef getcwd
# if HAVE_RAW_DECL_GETCWD
_GL_WARN_ON_USE (getcwd, "getcwd is unportable - "
"use gnulib module getcwd for portability");
# endif
#endif
#if @GNULIB_GETDOMAINNAME@
/* Return the NIS domain name of the machine.
WARNING! The NIS domain name is unrelated to the fully qualified host name
of the machine. It is also unrelated to email addresses.
WARNING! The NIS domain name is usually the empty string or "(none)" when
not using NIS.
Put up to LEN bytes of the NIS domain name into NAME.
Null terminate it if the name is shorter than LEN.
If the NIS domain name is longer than LEN, set errno = EINVAL and return -1.
Return 0 if successful, otherwise set errno and return -1. */
# if @REPLACE_GETDOMAINNAME@
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
# undef getdomainname
# define getdomainname rpl_getdomainname
# endif
_GL_FUNCDECL_RPL (getdomainname, int, (char *name, size_t len)
_GL_ARG_NONNULL ((1)));
_GL_CXXALIAS_RPL (getdomainname, int, (char *name, size_t len));
# else
# if !@HAVE_DECL_GETDOMAINNAME@
_GL_FUNCDECL_SYS (getdomainname, int, (char *name, size_t len)
_GL_ARG_NONNULL ((1)));
# endif
_GL_CXXALIAS_SYS (getdomainname, int, (char *name, size_t len));
# endif
_GL_CXXALIASWARN (getdomainname);
#elif defined GNULIB_POSIXCHECK
# undef getdomainname
# if HAVE_RAW_DECL_GETDOMAINNAME
_GL_WARN_ON_USE (getdomainname, "getdomainname is unportable - "
"use gnulib module getdomainname for portability");
# endif
#endif
#if @GNULIB_GETDTABLESIZE@
/* Return the maximum number of file descriptors in the current process.
In POSIX, this is same as sysconf (_SC_OPEN_MAX). */
# if !@HAVE_GETDTABLESIZE@
_GL_FUNCDECL_SYS (getdtablesize, int, (void));
# endif
_GL_CXXALIAS_SYS (getdtablesize, int, (void));
_GL_CXXALIASWARN (getdtablesize);
#elif defined GNULIB_POSIXCHECK
# undef getdtablesize
# if HAVE_RAW_DECL_GETDTABLESIZE
_GL_WARN_ON_USE (getdtablesize, "getdtablesize is unportable - "
"use gnulib module getdtablesize for portability");
# endif
#endif
#if @GNULIB_GETGROUPS@
/* Return the supplemental groups that the current process belongs to.
It is unspecified whether the effective group id is in the list.
If N is 0, return the group count; otherwise, N describes how many
entries are available in GROUPS. Return -1 and set errno if N is
not 0 and not large enough. Fails with ENOSYS on some systems. */
# if @REPLACE_GETGROUPS@
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
# undef getgroups
# define getgroups rpl_getgroups
# endif
_GL_FUNCDECL_RPL (getgroups, int, (int n, gid_t *groups));
_GL_CXXALIAS_RPL (getgroups, int, (int n, gid_t *groups));
# else
# if !@HAVE_GETGROUPS@
_GL_FUNCDECL_SYS (getgroups, int, (int n, gid_t *groups));
# endif
_GL_CXXALIAS_SYS (getgroups, int, (int n, gid_t *groups));
# endif
_GL_CXXALIASWARN (getgroups);
#elif defined GNULIB_POSIXCHECK
# undef getgroups
# if HAVE_RAW_DECL_GETGROUPS
_GL_WARN_ON_USE (getgroups, "getgroups is unportable - "
"use gnulib module getgroups for portability");
# endif
#endif
#if @GNULIB_GETHOSTNAME@
/* Return the standard host name of the machine.
WARNING! The host name may or may not be fully qualified.
Put up to LEN bytes of the host name into NAME.
Null terminate it if the name is shorter than LEN.
If the host name is longer than LEN, set errno = EINVAL and return -1.
Return 0 if successful, otherwise set errno and return -1. */
# if @UNISTD_H_HAVE_WINSOCK2_H@
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
# undef gethostname
# define gethostname rpl_gethostname
# endif
_GL_FUNCDECL_RPL (gethostname, int, (char *name, size_t len)
_GL_ARG_NONNULL ((1)));
_GL_CXXALIAS_RPL (gethostname, int, (char *name, size_t len));
# else
# if !@HAVE_GETHOSTNAME@
_GL_FUNCDECL_SYS (gethostname, int, (char *name, size_t len)
_GL_ARG_NONNULL ((1)));
# endif
/* Need to cast, because on Solaris 10 and OSF/1 5.1 systems, the second
parameter is
int len. */
_GL_CXXALIAS_SYS_CAST (gethostname, int, (char *name, size_t len));
# endif
_GL_CXXALIASWARN (gethostname);
#elif @UNISTD_H_HAVE_WINSOCK2_H@
# undef gethostname
# define gethostname gethostname_used_without_requesting_gnulib_module_gethostname
#elif defined GNULIB_POSIXCHECK
# undef gethostname
# if HAVE_RAW_DECL_GETHOSTNAME
_GL_WARN_ON_USE (gethostname, "gethostname is unportable - "
"use gnulib module gethostname for portability");
# endif
#endif
#if @GNULIB_GETLOGIN@
/* Returns the user's login name, or NULL if it cannot be found. Upon error,
returns NULL with errno set.
See .
Most programs don't need to use this function, because the information is
available through environment variables:
${LOGNAME-$USER} on Unix platforms,
$USERNAME on native Windows platforms.
*/
# if !@HAVE_GETLOGIN@
_GL_FUNCDECL_SYS (getlogin, char *, (void));
# endif
_GL_CXXALIAS_SYS (getlogin, char *, (void));
_GL_CXXALIASWARN (getlogin);
#elif defined GNULIB_POSIXCHECK
# undef getlogin
# if HAVE_RAW_DECL_GETLOGIN
_GL_WARN_ON_USE (getlogin, "getlogin is unportable - "
"use gnulib module getlogin for portability");
# endif
#endif
#if @GNULIB_GETLOGIN_R@
/* Copies the user's login name to NAME.
The array pointed to by NAME has room for SIZE bytes.
Returns 0 if successful. Upon error, an error number is returned, or -1 in
the case that the login name cannot be found but no specific error is
provided (this case is hopefully rare but is left open by the POSIX spec).
See .
Most programs don't need to use this function, because the information is
available through environment variables:
${LOGNAME-$USER} on Unix platforms,
$USERNAME on native Windows platforms.
*/
# if @REPLACE_GETLOGIN_R@
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
# define getlogin_r rpl_getlogin_r
# endif
_GL_FUNCDECL_RPL (getlogin_r, int, (char *name, size_t size)
_GL_ARG_NONNULL ((1)));
_GL_CXXALIAS_RPL (getlogin_r, int, (char *name, size_t size));
# else
# if !@HAVE_DECL_GETLOGIN_R@
_GL_FUNCDECL_SYS (getlogin_r, int, (char *name, size_t size)
_GL_ARG_NONNULL ((1)));
# endif
/* Need to cast, because on Solaris 10 systems, the second argument is
int size. */
_GL_CXXALIAS_SYS_CAST (getlogin_r, int, (char *name, size_t size));
# endif
_GL_CXXALIASWARN (getlogin_r);
#elif defined GNULIB_POSIXCHECK
# undef getlogin_r
# if HAVE_RAW_DECL_GETLOGIN_R
_GL_WARN_ON_USE (getlogin_r, "getlogin_r is unportable - "
"use gnulib module getlogin_r for portability");
# endif
#endif
#if @GNULIB_GETPAGESIZE@
# if @REPLACE_GETPAGESIZE@
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
# define getpagesize rpl_getpagesize
# endif
_GL_FUNCDECL_RPL (getpagesize, int, (void));
_GL_CXXALIAS_RPL (getpagesize, int, (void));
# else
# if !@HAVE_GETPAGESIZE@
# if !defined getpagesize
/* This is for POSIX systems. */
# if !defined _gl_getpagesize && defined _SC_PAGESIZE
# if ! (defined __VMS && __VMS_VER < 70000000)
# define _gl_getpagesize() sysconf (_SC_PAGESIZE)
# endif
# endif
/* This is for older VMS. */
# if !defined _gl_getpagesize && defined __VMS
# ifdef __ALPHA
# define _gl_getpagesize() 8192
# else
# define _gl_getpagesize() 512
# endif
# endif
/* This is for BeOS. */
# if !defined _gl_getpagesize && @HAVE_OS_H@
# include
# if defined B_PAGE_SIZE
# define _gl_getpagesize() B_PAGE_SIZE
# endif
# endif
/* This is for AmigaOS4.0. */
# if !defined _gl_getpagesize && defined __amigaos4__
# define _gl_getpagesize() 2048
# endif
/* This is for older Unix systems. */
# if !defined _gl_getpagesize && @HAVE_SYS_PARAM_H@
# include
# ifdef EXEC_PAGESIZE
# define _gl_getpagesize() EXEC_PAGESIZE
# else
# ifdef NBPG
# ifndef CLSIZE
# define CLSIZE 1
# endif
# define _gl_getpagesize() (NBPG * CLSIZE)
# else
# ifdef NBPC
# define _gl_getpagesize() NBPC
# endif
# endif
# endif
# endif
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
# define getpagesize() _gl_getpagesize ()
# else
# if !GNULIB_defined_getpagesize_function
_GL_UNISTD_INLINE int
getpagesize ()
{
return _gl_getpagesize ();
}
# define GNULIB_defined_getpagesize_function 1
# endif
# endif
# endif
# endif
/* Need to cast, because on Cygwin 1.5.x systems, the return type is size_t. */
_GL_CXXALIAS_SYS_CAST (getpagesize, int, (void));
# endif
# if @HAVE_DECL_GETPAGESIZE@
_GL_CXXALIASWARN (getpagesize);
# endif
#elif defined GNULIB_POSIXCHECK
# undef getpagesize
# if HAVE_RAW_DECL_GETPAGESIZE
_GL_WARN_ON_USE (getpagesize, "getpagesize is unportable - "
"use gnulib module getpagesize for portability");
# endif
#endif
#if @GNULIB_GETUSERSHELL@
/* Return the next valid login shell on the system, or NULL when the end of
the list has been reached. */
# if !@HAVE_DECL_GETUSERSHELL@
_GL_FUNCDECL_SYS (getusershell, char *, (void));
# endif
_GL_CXXALIAS_SYS (getusershell, char *, (void));
_GL_CXXALIASWARN (getusershell);
#elif defined GNULIB_POSIXCHECK
# undef getusershell
# if HAVE_RAW_DECL_GETUSERSHELL
_GL_WARN_ON_USE (getusershell, "getusershell is unportable - "
"use gnulib module getusershell for portability");
# endif
#endif
#if @GNULIB_GETUSERSHELL@
/* Rewind to pointer that is advanced at each getusershell() call. */
# if !@HAVE_DECL_GETUSERSHELL@
_GL_FUNCDECL_SYS (setusershell, void, (void));
# endif
_GL_CXXALIAS_SYS (setusershell, void, (void));
_GL_CXXALIASWARN (setusershell);
#elif defined GNULIB_POSIXCHECK
# undef setusershell
# if HAVE_RAW_DECL_SETUSERSHELL
_GL_WARN_ON_USE (setusershell, "setusershell is unportable - "
"use gnulib module getusershell for portability");
# endif
#endif
#if @GNULIB_GETUSERSHELL@
/* Free the pointer that is advanced at each getusershell() call and
associated resources. */
# if !@HAVE_DECL_GETUSERSHELL@
_GL_FUNCDECL_SYS (endusershell, void, (void));
# endif
_GL_CXXALIAS_SYS (endusershell, void, (void));
_GL_CXXALIASWARN (endusershell);
#elif defined GNULIB_POSIXCHECK
# undef endusershell
# if HAVE_RAW_DECL_ENDUSERSHELL
_GL_WARN_ON_USE (endusershell, "endusershell is unportable - "
"use gnulib module getusershell for portability");
# endif
#endif
#if @GNULIB_GROUP_MEMBER@
/* Determine whether group id is in calling user's group list. */
# if !@HAVE_GROUP_MEMBER@
_GL_FUNCDECL_SYS (group_member, int, (gid_t gid));
# endif
_GL_CXXALIAS_SYS (group_member, int, (gid_t gid));
_GL_CXXALIASWARN (group_member);
#elif defined GNULIB_POSIXCHECK
# undef group_member
# if HAVE_RAW_DECL_GROUP_MEMBER
_GL_WARN_ON_USE (group_member, "group_member is unportable - "
"use gnulib module group-member for portability");
# endif
#endif
#if @GNULIB_ISATTY@
# if @REPLACE_ISATTY@
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
# undef isatty
# define isatty rpl_isatty
# endif
_GL_FUNCDECL_RPL (isatty, int, (int fd));
_GL_CXXALIAS_RPL (isatty, int, (int fd));
# else
_GL_CXXALIAS_SYS (isatty, int, (int fd));
# endif
_GL_CXXALIASWARN (isatty);
#elif defined GNULIB_POSIXCHECK
# undef isatty
# if HAVE_RAW_DECL_ISATTY
_GL_WARN_ON_USE (isatty, "isatty has portability problems on native Windows - "
"use gnulib module isatty for portability");
# endif
#endif
#if @GNULIB_LCHOWN@
/* Change the owner of FILE to UID (if UID is not -1) and the group of FILE
to GID (if GID is not -1). Do not follow symbolic links.
Return 0 if successful, otherwise -1 and errno set.
See the POSIX:2008 specification
. */
# if @REPLACE_LCHOWN@
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
# undef lchown
# define lchown rpl_lchown
# endif
_GL_FUNCDECL_RPL (lchown, int, (char const *file, uid_t owner, gid_t group)
_GL_ARG_NONNULL ((1)));
_GL_CXXALIAS_RPL (lchown, int, (char const *file, uid_t owner, gid_t group));
# else
# if !@HAVE_LCHOWN@
_GL_FUNCDECL_SYS (lchown, int, (char const *file, uid_t owner, gid_t group)
_GL_ARG_NONNULL ((1)));
# endif
_GL_CXXALIAS_SYS (lchown, int, (char const *file, uid_t owner, gid_t group));
# endif
_GL_CXXALIASWARN (lchown);
#elif defined GNULIB_POSIXCHECK
# undef lchown
# if HAVE_RAW_DECL_LCHOWN
_GL_WARN_ON_USE (lchown, "lchown is unportable to pre-POSIX.1-2001 systems - "
"use gnulib module lchown for portability");
# endif
#endif
#if @GNULIB_LINK@
/* Create a new hard link for an existing file.
Return 0 if successful, otherwise -1 and errno set.
See POSIX:2008 specification
. */
# if @REPLACE_LINK@
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
# define link rpl_link
# endif
_GL_FUNCDECL_RPL (link, int, (const char *path1, const char *path2)
_GL_ARG_NONNULL ((1, 2)));
_GL_CXXALIAS_RPL (link, int, (const char *path1, const char *path2));
# else
# if !@HAVE_LINK@
_GL_FUNCDECL_SYS (link, int, (const char *path1, const char *path2)
_GL_ARG_NONNULL ((1, 2)));
# endif
_GL_CXXALIAS_SYS (link, int, (const char *path1, const char *path2));
# endif
_GL_CXXALIASWARN (link);
#elif defined GNULIB_POSIXCHECK
# undef link
# if HAVE_RAW_DECL_LINK
_GL_WARN_ON_USE (link, "link is unportable - "
"use gnulib module link for portability");
# endif
#endif
#if @GNULIB_LINKAT@
/* Create a new hard link for an existing file, relative to two
directories. FLAG controls whether symlinks are followed.
Return 0 if successful, otherwise -1 and errno set. */
# if @REPLACE_LINKAT@
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
# undef linkat
# define linkat rpl_linkat
# endif
_GL_FUNCDECL_RPL (linkat, int,
(int fd1, const char *path1, int fd2, const char *path2,
int flag)
_GL_ARG_NONNULL ((2, 4)));
_GL_CXXALIAS_RPL (linkat, int,
(int fd1, const char *path1, int fd2, const char *path2,
int flag));
# else
# if !@HAVE_LINKAT@
_GL_FUNCDECL_SYS (linkat, int,
(int fd1, const char *path1, int fd2, const char *path2,
int flag)
_GL_ARG_NONNULL ((2, 4)));
# endif
_GL_CXXALIAS_SYS (linkat, int,
(int fd1, const char *path1, int fd2, const char *path2,
int flag));
# endif
_GL_CXXALIASWARN (linkat);
#elif defined GNULIB_POSIXCHECK
# undef linkat
# if HAVE_RAW_DECL_LINKAT
_GL_WARN_ON_USE (linkat, "linkat is unportable - "
"use gnulib module linkat for portability");
# endif
#endif
#if @GNULIB_LSEEK@
/* Set the offset of FD relative to SEEK_SET, SEEK_CUR, or SEEK_END.
Return the new offset if successful, otherwise -1 and errno set.
See the POSIX:2008 specification
. */
# if @REPLACE_LSEEK@
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
# define lseek rpl_lseek
# endif
_GL_FUNCDECL_RPL (lseek, off_t, (int fd, off_t offset, int whence));
_GL_CXXALIAS_RPL (lseek, off_t, (int fd, off_t offset, int whence));
# else
_GL_CXXALIAS_SYS (lseek, off_t, (int fd, off_t offset, int whence));
# endif
_GL_CXXALIASWARN (lseek);
#elif defined GNULIB_POSIXCHECK
# undef lseek
# if HAVE_RAW_DECL_LSEEK
_GL_WARN_ON_USE (lseek, "lseek does not fail with ESPIPE on pipes on some "
"systems - use gnulib module lseek for portability");
# endif
#endif
#if @GNULIB_PIPE@
/* Create a pipe, defaulting to O_BINARY mode.
Store the read-end as fd[0] and the write-end as fd[1].
Return 0 upon success, or -1 with errno set upon failure. */
# if !@HAVE_PIPE@
_GL_FUNCDECL_SYS (pipe, int, (int fd[2]) _GL_ARG_NONNULL ((1)));
# endif
_GL_CXXALIAS_SYS (pipe, int, (int fd[2]));
_GL_CXXALIASWARN (pipe);
#elif defined GNULIB_POSIXCHECK
# undef pipe
# if HAVE_RAW_DECL_PIPE
_GL_WARN_ON_USE (pipe, "pipe is unportable - "
"use gnulib module pipe-posix for portability");
# endif
#endif
#if @GNULIB_PIPE2@
/* Create a pipe, applying the given flags when opening the read-end of the
pipe and the write-end of the pipe.
The flags are a bitmask, possibly including O_CLOEXEC (defined in )
and O_TEXT, O_BINARY (defined in "binary-io.h").
Store the read-end as fd[0] and the write-end as fd[1].
Return 0 upon success, or -1 with errno set upon failure.
See also the Linux man page at
. */
# if @HAVE_PIPE2@
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
# define pipe2 rpl_pipe2
# endif
_GL_FUNCDECL_RPL (pipe2, int, (int fd[2], int flags) _GL_ARG_NONNULL ((1)));
_GL_CXXALIAS_RPL (pipe2, int, (int fd[2], int flags));
# else
_GL_FUNCDECL_SYS (pipe2, int, (int fd[2], int flags) _GL_ARG_NONNULL ((1)));
_GL_CXXALIAS_SYS (pipe2, int, (int fd[2], int flags));
# endif
_GL_CXXALIASWARN (pipe2);
#elif defined GNULIB_POSIXCHECK
# undef pipe2
# if HAVE_RAW_DECL_PIPE2
_GL_WARN_ON_USE (pipe2, "pipe2 is unportable - "
"use gnulib module pipe2 for portability");
# endif
#endif
#if @GNULIB_PREAD@
/* Read at most BUFSIZE bytes from FD into BUF, starting at OFFSET.
Return the number of bytes placed into BUF if successful, otherwise
set errno and return -1. 0 indicates EOF.
See the POSIX:2008 specification
. */
# if @REPLACE_PREAD@
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
# undef pread
# define pread rpl_pread
# endif
_GL_FUNCDECL_RPL (pread, ssize_t,
(int fd, void *buf, size_t bufsize, off_t offset)
_GL_ARG_NONNULL ((2)));
_GL_CXXALIAS_RPL (pread, ssize_t,
(int fd, void *buf, size_t bufsize, off_t offset));
# else
# if !@HAVE_PREAD@
_GL_FUNCDECL_SYS (pread, ssize_t,
(int fd, void *buf, size_t bufsize, off_t offset)
_GL_ARG_NONNULL ((2)));
# endif
_GL_CXXALIAS_SYS (pread, ssize_t,
(int fd, void *buf, size_t bufsize, off_t offset));
# endif
_GL_CXXALIASWARN (pread);
#elif defined GNULIB_POSIXCHECK
# undef pread
# if HAVE_RAW_DECL_PREAD
_GL_WARN_ON_USE (pread, "pread is unportable - "
"use gnulib module pread for portability");
# endif
#endif
#if @GNULIB_PWRITE@
/* Write at most BUFSIZE bytes from BUF into FD, starting at OFFSET.
Return the number of bytes written if successful, otherwise
set errno and return -1. 0 indicates nothing written. See the
POSIX:2008 specification
. */
# if @REPLACE_PWRITE@
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
# undef pwrite
# define pwrite rpl_pwrite
# endif
_GL_FUNCDECL_RPL (pwrite, ssize_t,
(int fd, const void *buf, size_t bufsize, off_t offset)
_GL_ARG_NONNULL ((2)));
_GL_CXXALIAS_RPL (pwrite, ssize_t,
(int fd, const void *buf, size_t bufsize, off_t offset));
# else
# if !@HAVE_PWRITE@
_GL_FUNCDECL_SYS (pwrite, ssize_t,
(int fd, const void *buf, size_t bufsize, off_t offset)
_GL_ARG_NONNULL ((2)));
# endif
_GL_CXXALIAS_SYS (pwrite, ssize_t,
(int fd, const void *buf, size_t bufsize, off_t offset));
# endif
_GL_CXXALIASWARN (pwrite);
#elif defined GNULIB_POSIXCHECK
# undef pwrite
# if HAVE_RAW_DECL_PWRITE
_GL_WARN_ON_USE (pwrite, "pwrite is unportable - "
"use gnulib module pwrite for portability");
# endif
#endif
#if @GNULIB_READ@
/* Read up to COUNT bytes from file descriptor FD into the buffer starting
at BUF. See the POSIX:2008 specification
. */
# if @REPLACE_READ@
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
# undef read
# define read rpl_read
# endif
_GL_FUNCDECL_RPL (read, ssize_t, (int fd, void *buf, size_t count)
_GL_ARG_NONNULL ((2)));
_GL_CXXALIAS_RPL (read, ssize_t, (int fd, void *buf, size_t count));
# else
/* Need to cast, because on mingw, the third parameter is
unsigned int count
and the return type is 'int'. */
_GL_CXXALIAS_SYS_CAST (read, ssize_t, (int fd, void *buf, size_t count));
# endif
_GL_CXXALIASWARN (read);
#endif
#if @GNULIB_READLINK@
/* Read the contents of the symbolic link FILE and place the first BUFSIZE
bytes of it into BUF. Return the number of bytes placed into BUF if
successful, otherwise -1 and errno set.
See the POSIX:2008 specification
. */
# if @REPLACE_READLINK@
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
# define readlink rpl_readlink
# endif
_GL_FUNCDECL_RPL (readlink, ssize_t,
(const char *file, char *buf, size_t bufsize)
_GL_ARG_NONNULL ((1, 2)));
_GL_CXXALIAS_RPL (readlink, ssize_t,
(const char *file, char *buf, size_t bufsize));
# else
# if !@HAVE_READLINK@
_GL_FUNCDECL_SYS (readlink, ssize_t,
(const char *file, char *buf, size_t bufsize)
_GL_ARG_NONNULL ((1, 2)));
# endif
_GL_CXXALIAS_SYS (readlink, ssize_t,
(const char *file, char *buf, size_t bufsize));
# endif
_GL_CXXALIASWARN (readlink);
#elif defined GNULIB_POSIXCHECK
# undef readlink
# if HAVE_RAW_DECL_READLINK
_GL_WARN_ON_USE (readlink, "readlink is unportable - "
"use gnulib module readlink for portability");
# endif
#endif
#if @GNULIB_READLINKAT@
# if !@HAVE_READLINKAT@
_GL_FUNCDECL_SYS (readlinkat, ssize_t,
(int fd, char const *file, char *buf, size_t len)
_GL_ARG_NONNULL ((2, 3)));
# endif
_GL_CXXALIAS_SYS (readlinkat, ssize_t,
(int fd, char const *file, char *buf, size_t len));
_GL_CXXALIASWARN (readlinkat);
#elif defined GNULIB_POSIXCHECK
# undef readlinkat
# if HAVE_RAW_DECL_READLINKAT
_GL_WARN_ON_USE (readlinkat, "readlinkat is not portable - "
"use gnulib module readlinkat for portability");
# endif
#endif
#if @GNULIB_RMDIR@
/* Remove the directory DIR. */
# if @REPLACE_RMDIR@
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
# define rmdir rpl_rmdir
# endif
_GL_FUNCDECL_RPL (rmdir, int, (char const *name) _GL_ARG_NONNULL ((1)));
_GL_CXXALIAS_RPL (rmdir, int, (char const *name));
# else
_GL_CXXALIAS_SYS (rmdir, int, (char const *name));
# endif
_GL_CXXALIASWARN (rmdir);
#elif defined GNULIB_POSIXCHECK
# undef rmdir
# if HAVE_RAW_DECL_RMDIR
_GL_WARN_ON_USE (rmdir, "rmdir is unportable - "
"use gnulib module rmdir for portability");
# endif
#endif
#if @GNULIB_SETHOSTNAME@
/* Set the host name of the machine.
The host name may or may not be fully qualified.
Put LEN bytes of NAME into the host name.
Return 0 if successful, otherwise, set errno and return -1.
Platforms with no ability to set the hostname return -1 and set
errno = ENOSYS. */
# if !@HAVE_SETHOSTNAME@ || !@HAVE_DECL_SETHOSTNAME@
_GL_FUNCDECL_SYS (sethostname, int, (const char *name, size_t len)
_GL_ARG_NONNULL ((1)));
# endif
/* Need to cast, because on Solaris 11 2011-10, Mac OS X 10.5, IRIX 6.5
and FreeBSD 6.4 the second parameter is int. On Solaris 11
2011-10, the first parameter is not const. */
_GL_CXXALIAS_SYS_CAST (sethostname, int, (const char *name, size_t len));
_GL_CXXALIASWARN (sethostname);
#elif defined GNULIB_POSIXCHECK
# undef sethostname
# if HAVE_RAW_DECL_SETHOSTNAME
_GL_WARN_ON_USE (sethostname, "sethostname is unportable - "
"use gnulib module sethostname for portability");
# endif
#endif
#if @GNULIB_SLEEP@
/* Pause the execution of the current thread for N seconds.
Returns the number of seconds left to sleep.
See the POSIX:2008 specification
. */
# if @REPLACE_SLEEP@
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
# undef sleep
# define sleep rpl_sleep
# endif
_GL_FUNCDECL_RPL (sleep, unsigned int, (unsigned int n));
_GL_CXXALIAS_RPL (sleep, unsigned int, (unsigned int n));
# else
# if !@HAVE_SLEEP@
_GL_FUNCDECL_SYS (sleep, unsigned int, (unsigned int n));
# endif
_GL_CXXALIAS_SYS (sleep, unsigned int, (unsigned int n));
# endif
_GL_CXXALIASWARN (sleep);
#elif defined GNULIB_POSIXCHECK
# undef sleep
# if HAVE_RAW_DECL_SLEEP
_GL_WARN_ON_USE (sleep, "sleep is unportable - "
"use gnulib module sleep for portability");
# endif
#endif
#if @GNULIB_SYMLINK@
# if @REPLACE_SYMLINK@
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
# undef symlink
# define symlink rpl_symlink
# endif
_GL_FUNCDECL_RPL (symlink, int, (char const *contents, char const *file)
_GL_ARG_NONNULL ((1, 2)));
_GL_CXXALIAS_RPL (symlink, int, (char const *contents, char const *file));
# else
# if !@HAVE_SYMLINK@
_GL_FUNCDECL_SYS (symlink, int, (char const *contents, char const *file)
_GL_ARG_NONNULL ((1, 2)));
# endif
_GL_CXXALIAS_SYS (symlink, int, (char const *contents, char const *file));
# endif
_GL_CXXALIASWARN (symlink);
#elif defined GNULIB_POSIXCHECK
# undef symlink
# if HAVE_RAW_DECL_SYMLINK
_GL_WARN_ON_USE (symlink, "symlink is not portable - "
"use gnulib module symlink for portability");
# endif
#endif
#if @GNULIB_SYMLINKAT@
# if !@HAVE_SYMLINKAT@
_GL_FUNCDECL_SYS (symlinkat, int,
(char const *contents, int fd, char const *file)
_GL_ARG_NONNULL ((1, 3)));
# endif
_GL_CXXALIAS_SYS (symlinkat, int,
(char const *contents, int fd, char const *file));
_GL_CXXALIASWARN (symlinkat);
#elif defined GNULIB_POSIXCHECK
# undef symlinkat
# if HAVE_RAW_DECL_SYMLINKAT
_GL_WARN_ON_USE (symlinkat, "symlinkat is not portable - "
"use gnulib module symlinkat for portability");
# endif
#endif
#if @GNULIB_TTYNAME_R@
/* Store at most BUFLEN characters of the pathname of the terminal FD is
open on in BUF. Return 0 on success, otherwise an error number. */
# if @REPLACE_TTYNAME_R@
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
# undef ttyname_r
# define ttyname_r rpl_ttyname_r
# endif
_GL_FUNCDECL_RPL (ttyname_r, int,
(int fd, char *buf, size_t buflen) _GL_ARG_NONNULL ((2)));
_GL_CXXALIAS_RPL (ttyname_r, int,
(int fd, char *buf, size_t buflen));
# else
# if !@HAVE_DECL_TTYNAME_R@
_GL_FUNCDECL_SYS (ttyname_r, int,
(int fd, char *buf, size_t buflen) _GL_ARG_NONNULL ((2)));
# endif
_GL_CXXALIAS_SYS (ttyname_r, int,
(int fd, char *buf, size_t buflen));
# endif
_GL_CXXALIASWARN (ttyname_r);
#elif defined GNULIB_POSIXCHECK
# undef ttyname_r
# if HAVE_RAW_DECL_TTYNAME_R
_GL_WARN_ON_USE (ttyname_r, "ttyname_r is not portable - "
"use gnulib module ttyname_r for portability");
# endif
#endif
#if @GNULIB_UNLINK@
# if @REPLACE_UNLINK@
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
# undef unlink
# define unlink rpl_unlink
# endif
_GL_FUNCDECL_RPL (unlink, int, (char const *file) _GL_ARG_NONNULL ((1)));
_GL_CXXALIAS_RPL (unlink, int, (char const *file));
# else
_GL_CXXALIAS_SYS (unlink, int, (char const *file));
# endif
_GL_CXXALIASWARN (unlink);
#elif defined GNULIB_POSIXCHECK
# undef unlink
# if HAVE_RAW_DECL_UNLINK
_GL_WARN_ON_USE (unlink, "unlink is not portable - "
"use gnulib module unlink for portability");
# endif
#endif
#if @GNULIB_UNLINKAT@
# if @REPLACE_UNLINKAT@
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
# undef unlinkat
# define unlinkat rpl_unlinkat
# endif
_GL_FUNCDECL_RPL (unlinkat, int, (int fd, char const *file, int flag)
_GL_ARG_NONNULL ((2)));
_GL_CXXALIAS_RPL (unlinkat, int, (int fd, char const *file, int flag));
# else
# if !@HAVE_UNLINKAT@
_GL_FUNCDECL_SYS (unlinkat, int, (int fd, char const *file, int flag)
_GL_ARG_NONNULL ((2)));
# endif
_GL_CXXALIAS_SYS (unlinkat, int, (int fd, char const *file, int flag));
# endif
_GL_CXXALIASWARN (unlinkat);
#elif defined GNULIB_POSIXCHECK
# undef unlinkat
# if HAVE_RAW_DECL_UNLINKAT
_GL_WARN_ON_USE (unlinkat, "unlinkat is not portable - "
"use gnulib module openat for portability");
# endif
#endif
#if @GNULIB_USLEEP@
/* Pause the execution of the current thread for N microseconds.
Returns 0 on completion, or -1 on range error.
See the POSIX:2001 specification
. */
# if @REPLACE_USLEEP@
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
# undef usleep
# define usleep rpl_usleep
# endif
_GL_FUNCDECL_RPL (usleep, int, (useconds_t n));
_GL_CXXALIAS_RPL (usleep, int, (useconds_t n));
# else
# if !@HAVE_USLEEP@
_GL_FUNCDECL_SYS (usleep, int, (useconds_t n));
# endif
_GL_CXXALIAS_SYS (usleep, int, (useconds_t n));
# endif
_GL_CXXALIASWARN (usleep);
#elif defined GNULIB_POSIXCHECK
# undef usleep
# if HAVE_RAW_DECL_USLEEP
_GL_WARN_ON_USE (usleep, "usleep is unportable - "
"use gnulib module usleep for portability");
# endif
#endif
#if @GNULIB_WRITE@
/* Write up to COUNT bytes starting at BUF to file descriptor FD.
See the POSIX:2008 specification
. */
# if @REPLACE_WRITE@
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
# undef write
# define write rpl_write
# endif
_GL_FUNCDECL_RPL (write, ssize_t, (int fd, const void *buf, size_t count)
_GL_ARG_NONNULL ((2)));
_GL_CXXALIAS_RPL (write, ssize_t, (int fd, const void *buf, size_t count));
# else
/* Need to cast, because on mingw, the third parameter is
unsigned int count
and the return type is 'int'. */
_GL_CXXALIAS_SYS_CAST (write, ssize_t, (int fd, const void *buf, size_t count));
# endif
_GL_CXXALIASWARN (write);
#endif
_GL_INLINE_HEADER_END
#endif /* _@GUARD_PREFIX@_UNISTD_H */
#endif /* _@GUARD_PREFIX@_UNISTD_H */
tenace-0.13/lib/nproc.h 0000644 0004016 0004016 00000003310 12215417300 011641 0000000 0000000 /* Detect the number of processors.
Copyright (C) 2009-2013 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3, or (at your option)
any later version.
This program 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 General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, see . */
/* Written by Glen Lenker and Bruno Haible. */
/* Allow the use in C++ code. */
#ifdef __cplusplus
extern "C" {
#endif
/* A "processor" in this context means a thread execution unit, that is either
- an execution core in a (possibly multi-core) chip, in a (possibly multi-
chip) module, in a single computer, or
- a thread execution unit inside a core
(hyper-threading, see ).
Which of the two definitions is used, is unspecified. */
enum nproc_query
{
NPROC_ALL, /* total number of processors */
NPROC_CURRENT, /* processors available to the current process */
NPROC_CURRENT_OVERRIDABLE /* likewise, but overridable through the
OMP_NUM_THREADS environment variable */
};
/* Return the total number of processors. The result is guaranteed to
be at least 1. */
extern unsigned long int num_processors (enum nproc_query query);
#ifdef __cplusplus
}
#endif /* C++ */
tenace-0.13/lib/unistd.c 0000644 0004016 0004016 00000000124 12215417300 012021 0000000 0000000 #include
#define _GL_UNISTD_INLINE _GL_EXTERN_INLINE
#include "unistd.h"
tenace-0.13/lib/physmem.h 0000644 0004016 0004016 00000001632 12215417300 012207 0000000 0000000 /* Calculate the size of physical memory.
Copyright (C) 2000, 2003, 2009-2013 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
This program 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 General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see . */
/* Written by Paul Eggert. */
#ifndef PHYSMEM_H_
# define PHYSMEM_H_ 1
double physmem_total (void);
double physmem_available (void);
#endif /* PHYSMEM_H_ */
tenace-0.13/lib/stddef.in.h 0000644 0004016 0004016 00000005232 12215417300 012403 0000000 0000000 /* A substitute for POSIX 2008 , for platforms that have issues.
Copyright (C) 2009-2013 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3, or (at your option)
any later version.
This program 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 General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, see . */
/* Written by Eric Blake. */
/*
* POSIX 2008 for platforms that have issues.
*
*/
#if __GNUC__ >= 3
@PRAGMA_SYSTEM_HEADER@
#endif
@PRAGMA_COLUMNS@
#if defined __need_wchar_t || defined __need_size_t \
|| defined __need_ptrdiff_t || defined __need_NULL \
|| defined __need_wint_t
/* Special invocation convention inside gcc header files. In
particular, gcc provides a version of that blindly
redefines NULL even when __need_wint_t was defined, even though
wint_t is not normally provided by . Hence, we must
remember if special invocation has ever been used to obtain wint_t,
in which case we need to clean up NULL yet again. */
# if !(defined _@GUARD_PREFIX@_STDDEF_H && defined _GL_STDDEF_WINT_T)
# ifdef __need_wint_t
# undef _@GUARD_PREFIX@_STDDEF_H
# define _GL_STDDEF_WINT_T
# endif
# @INCLUDE_NEXT@ @NEXT_STDDEF_H@
# endif
#else
/* Normal invocation convention. */
# ifndef _@GUARD_PREFIX@_STDDEF_H
/* The include_next requires a split double-inclusion guard. */
# @INCLUDE_NEXT@ @NEXT_STDDEF_H@
# ifndef _@GUARD_PREFIX@_STDDEF_H
# define _@GUARD_PREFIX@_STDDEF_H
/* On NetBSD 5.0, the definition of NULL lacks proper parentheses. */
#if @REPLACE_NULL@
# undef NULL
# ifdef __cplusplus
/* ISO C++ says that the macro NULL must expand to an integer constant
expression, hence '((void *) 0)' is not allowed in C++. */
# if __GNUG__ >= 3
/* GNU C++ has a __null macro that behaves like an integer ('int' or
'long') but has the same size as a pointer. Use that, to avoid
warnings. */
# define NULL __null
# else
# define NULL 0L
# endif
# else
# define NULL ((void *) 0)
# endif
#endif
/* Some platforms lack wchar_t. */
#if !@HAVE_WCHAR_T@
# define wchar_t int
#endif
# endif /* _@GUARD_PREFIX@_STDDEF_H */
# endif /* _@GUARD_PREFIX@_STDDEF_H */
#endif /* __need_XXX */
tenace-0.13/lib/stdbool.in.h 0000644 0004016 0004016 00000011772 12215417300 012606 0000000 0000000 /* Copyright (C) 2001-2003, 2006-2013 Free Software Foundation, Inc.
Written by Bruno Haible , 2001.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3, or (at your option)
any later version.
This program 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 General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, see . */
#ifndef _GL_STDBOOL_H
#define _GL_STDBOOL_H
/* ISO C 99 for platforms that lack it. */
/* Usage suggestions:
Programs that use should be aware of some limitations
and standards compliance issues.
Standards compliance:
- must be #included before 'bool', 'false', 'true'
can be used.
- You cannot assume that sizeof (bool) == 1.
- Programs should not undefine the macros bool, true, and false,
as C99 lists that as an "obsolescent feature".
Limitations of this substitute, when used in a C89 environment:
- must be #included before the '_Bool' type can be used.
- You cannot assume that _Bool is a typedef; it might be a macro.
- Bit-fields of type 'bool' are not supported. Portable code
should use 'unsigned int foo : 1;' rather than 'bool foo : 1;'.
- In C99, casts and automatic conversions to '_Bool' or 'bool' are
performed in such a way that every nonzero value gets converted
to 'true', and zero gets converted to 'false'. This doesn't work
with this substitute. With this substitute, only the values 0 and 1
give the expected result when converted to _Bool' or 'bool'.
- C99 allows the use of (_Bool)0.0 in constant expressions, but
this substitute cannot always provide this property.
Also, it is suggested that programs use 'bool' rather than '_Bool';
this isn't required, but 'bool' is more common. */
/* 7.16. Boolean type and values */
/* BeOS already #defines false 0, true 1. We use the same
definitions below, but temporarily we have to #undef them. */
#if defined __BEOS__ && !defined __HAIKU__
# include /* defines bool but not _Bool */
# undef false
# undef true
#endif
#ifdef __cplusplus
# define _Bool bool
# define bool bool
#else
# if defined __BEOS__ && !defined __HAIKU__
/* A compiler known to have 'bool'. */
/* If the compiler already has both 'bool' and '_Bool', we can assume they
are the same types. */
# if !@HAVE__BOOL@
typedef bool _Bool;
# endif
# else
# if !defined __GNUC__
/* If @HAVE__BOOL@:
Some HP-UX cc and AIX IBM C compiler versions have compiler bugs when
the built-in _Bool type is used. See
http://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html
http://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html
http://lists.gnu.org/archive/html/bug-coreutils/2005-10/msg00086.html
Similar bugs are likely with other compilers as well; this file
wouldn't be used if was working.
So we override the _Bool type.
If !@HAVE__BOOL@:
Need to define _Bool ourselves. As 'signed char' or as an enum type?
Use of a typedef, with SunPRO C, leads to a stupid
"warning: _Bool is a keyword in ISO C99".
Use of an enum type, with IRIX cc, leads to a stupid
"warning(1185): enumerated type mixed with another type".
Even the existence of an enum type, without a typedef,
"Invalid enumerator. (badenum)" with HP-UX cc on Tru64.
The only benefit of the enum, debuggability, is not important
with these compilers. So use 'signed char' and no enum. */
# define _Bool signed char
# else
/* With this compiler, trust the _Bool type if the compiler has it. */
# if !@HAVE__BOOL@
/* For the sake of symbolic names in gdb, define true and false as
enum constants, not only as macros.
It is tempting to write
typedef enum { false = 0, true = 1 } _Bool;
so that gdb prints values of type 'bool' symbolically. But then
values of type '_Bool' might promote to 'int' or 'unsigned int'
(see ISO C 99 6.7.2.2.(4)); however, '_Bool' must promote to 'int'
(see ISO C 99 6.3.1.1.(2)). So add a negative value to the
enum; this ensures that '_Bool' promotes to 'int'. */
typedef enum { _Bool_must_promote_to_int = -1, false = 0, true = 1 } _Bool;
# endif
# endif
# endif
# define bool _Bool
#endif
/* The other macros must be usable in preprocessor directives. */
#ifdef __cplusplus
# define false false
# define true true
#else
# define false 0
# define true 1
#endif
#define __bool_true_false_are_defined 1
#endif /* _GL_STDBOOL_H */
tenace-0.13/lib/c-ctype.c 0000644 0004016 0004016 00000025341 12215417300 012067 0000000 0000000 /* Character handling in C locale.
Copyright 2000-2003, 2006, 2009-2013 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
This program 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 General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, see . */
#include
/* Specification. */
#define NO_C_CTYPE_MACROS
#include "c-ctype.h"
/* The function isascii is not locale dependent. Its use in EBCDIC is
questionable. */
bool
c_isascii (int c)
{
return (c >= 0x00 && c <= 0x7f);
}
bool
c_isalnum (int c)
{
#if C_CTYPE_CONSECUTIVE_DIGITS \
&& C_CTYPE_CONSECUTIVE_UPPERCASE && C_CTYPE_CONSECUTIVE_LOWERCASE
#if C_CTYPE_ASCII
return ((c >= '0' && c <= '9')
|| ((c & ~0x20) >= 'A' && (c & ~0x20) <= 'Z'));
#else
return ((c >= '0' && c <= '9')
|| (c >= 'A' && c <= 'Z')
|| (c >= 'a' && c <= 'z'));
#endif
#else
switch (c)
{
case '0': case '1': case '2': case '3': case '4': case '5':
case '6': case '7': case '8': case '9':
case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
case 'G': case 'H': case 'I': case 'J': case 'K': case 'L':
case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R':
case 'S': case 'T': case 'U': case 'V': case 'W': case 'X':
case 'Y': case 'Z':
case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
case 'g': case 'h': case 'i': case 'j': case 'k': case 'l':
case 'm': case 'n': case 'o': case 'p': case 'q': case 'r':
case 's': case 't': case 'u': case 'v': case 'w': case 'x':
case 'y': case 'z':
return 1;
default:
return 0;
}
#endif
}
bool
c_isalpha (int c)
{
#if C_CTYPE_CONSECUTIVE_UPPERCASE && C_CTYPE_CONSECUTIVE_LOWERCASE
#if C_CTYPE_ASCII
return ((c & ~0x20) >= 'A' && (c & ~0x20) <= 'Z');
#else
return ((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z'));
#endif
#else
switch (c)
{
case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
case 'G': case 'H': case 'I': case 'J': case 'K': case 'L':
case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R':
case 'S': case 'T': case 'U': case 'V': case 'W': case 'X':
case 'Y': case 'Z':
case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
case 'g': case 'h': case 'i': case 'j': case 'k': case 'l':
case 'm': case 'n': case 'o': case 'p': case 'q': case 'r':
case 's': case 't': case 'u': case 'v': case 'w': case 'x':
case 'y': case 'z':
return 1;
default:
return 0;
}
#endif
}
bool
c_isblank (int c)
{
return (c == ' ' || c == '\t');
}
bool
c_iscntrl (int c)
{
#if C_CTYPE_ASCII
return ((c & ~0x1f) == 0 || c == 0x7f);
#else
switch (c)
{
case ' ': case '!': case '"': case '#': case '$': case '%':
case '&': case '\'': case '(': case ')': case '*': case '+':
case ',': case '-': case '.': case '/':
case '0': case '1': case '2': case '3': case '4': case '5':
case '6': case '7': case '8': case '9':
case ':': case ';': case '<': case '=': case '>': case '?':
case '@':
case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
case 'G': case 'H': case 'I': case 'J': case 'K': case 'L':
case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R':
case 'S': case 'T': case 'U': case 'V': case 'W': case 'X':
case 'Y': case 'Z':
case '[': case '\\': case ']': case '^': case '_': case '`':
case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
case 'g': case 'h': case 'i': case 'j': case 'k': case 'l':
case 'm': case 'n': case 'o': case 'p': case 'q': case 'r':
case 's': case 't': case 'u': case 'v': case 'w': case 'x':
case 'y': case 'z':
case '{': case '|': case '}': case '~':
return 0;
default:
return 1;
}
#endif
}
bool
c_isdigit (int c)
{
#if C_CTYPE_CONSECUTIVE_DIGITS
return (c >= '0' && c <= '9');
#else
switch (c)
{
case '0': case '1': case '2': case '3': case '4': case '5':
case '6': case '7': case '8': case '9':
return 1;
default:
return 0;
}
#endif
}
bool
c_islower (int c)
{
#if C_CTYPE_CONSECUTIVE_LOWERCASE
return (c >= 'a' && c <= 'z');
#else
switch (c)
{
case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
case 'g': case 'h': case 'i': case 'j': case 'k': case 'l':
case 'm': case 'n': case 'o': case 'p': case 'q': case 'r':
case 's': case 't': case 'u': case 'v': case 'w': case 'x':
case 'y': case 'z':
return 1;
default:
return 0;
}
#endif
}
bool
c_isgraph (int c)
{
#if C_CTYPE_ASCII
return (c >= '!' && c <= '~');
#else
switch (c)
{
case '!': case '"': case '#': case '$': case '%': case '&':
case '\'': case '(': case ')': case '*': case '+': case ',':
case '-': case '.': case '/':
case '0': case '1': case '2': case '3': case '4': case '5':
case '6': case '7': case '8': case '9':
case ':': case ';': case '<': case '=': case '>': case '?':
case '@':
case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
case 'G': case 'H': case 'I': case 'J': case 'K': case 'L':
case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R':
case 'S': case 'T': case 'U': case 'V': case 'W': case 'X':
case 'Y': case 'Z':
case '[': case '\\': case ']': case '^': case '_': case '`':
case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
case 'g': case 'h': case 'i': case 'j': case 'k': case 'l':
case 'm': case 'n': case 'o': case 'p': case 'q': case 'r':
case 's': case 't': case 'u': case 'v': case 'w': case 'x':
case 'y': case 'z':
case '{': case '|': case '}': case '~':
return 1;
default:
return 0;
}
#endif
}
bool
c_isprint (int c)
{
#if C_CTYPE_ASCII
return (c >= ' ' && c <= '~');
#else
switch (c)
{
case ' ': case '!': case '"': case '#': case '$': case '%':
case '&': case '\'': case '(': case ')': case '*': case '+':
case ',': case '-': case '.': case '/':
case '0': case '1': case '2': case '3': case '4': case '5':
case '6': case '7': case '8': case '9':
case ':': case ';': case '<': case '=': case '>': case '?':
case '@':
case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
case 'G': case 'H': case 'I': case 'J': case 'K': case 'L':
case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R':
case 'S': case 'T': case 'U': case 'V': case 'W': case 'X':
case 'Y': case 'Z':
case '[': case '\\': case ']': case '^': case '_': case '`':
case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
case 'g': case 'h': case 'i': case 'j': case 'k': case 'l':
case 'm': case 'n': case 'o': case 'p': case 'q': case 'r':
case 's': case 't': case 'u': case 'v': case 'w': case 'x':
case 'y': case 'z':
case '{': case '|': case '}': case '~':
return 1;
default:
return 0;
}
#endif
}
bool
c_ispunct (int c)
{
#if C_CTYPE_ASCII
return ((c >= '!' && c <= '~')
&& !((c >= '0' && c <= '9')
|| ((c & ~0x20) >= 'A' && (c & ~0x20) <= 'Z')));
#else
switch (c)
{
case '!': case '"': case '#': case '$': case '%': case '&':
case '\'': case '(': case ')': case '*': case '+': case ',':
case '-': case '.': case '/':
case ':': case ';': case '<': case '=': case '>': case '?':
case '@':
case '[': case '\\': case ']': case '^': case '_': case '`':
case '{': case '|': case '}': case '~':
return 1;
default:
return 0;
}
#endif
}
bool
c_isspace (int c)
{
return (c == ' ' || c == '\t'
|| c == '\n' || c == '\v' || c == '\f' || c == '\r');
}
bool
c_isupper (int c)
{
#if C_CTYPE_CONSECUTIVE_UPPERCASE
return (c >= 'A' && c <= 'Z');
#else
switch (c)
{
case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
case 'G': case 'H': case 'I': case 'J': case 'K': case 'L':
case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R':
case 'S': case 'T': case 'U': case 'V': case 'W': case 'X':
case 'Y': case 'Z':
return 1;
default:
return 0;
}
#endif
}
bool
c_isxdigit (int c)
{
#if C_CTYPE_CONSECUTIVE_DIGITS \
&& C_CTYPE_CONSECUTIVE_UPPERCASE && C_CTYPE_CONSECUTIVE_LOWERCASE
#if C_CTYPE_ASCII
return ((c >= '0' && c <= '9')
|| ((c & ~0x20) >= 'A' && (c & ~0x20) <= 'F'));
#else
return ((c >= '0' && c <= '9')
|| (c >= 'A' && c <= 'F')
|| (c >= 'a' && c <= 'f'));
#endif
#else
switch (c)
{
case '0': case '1': case '2': case '3': case '4': case '5':
case '6': case '7': case '8': case '9':
case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
return 1;
default:
return 0;
}
#endif
}
int
c_tolower (int c)
{
#if C_CTYPE_CONSECUTIVE_UPPERCASE && C_CTYPE_CONSECUTIVE_LOWERCASE
return (c >= 'A' && c <= 'Z' ? c - 'A' + 'a' : c);
#else
switch (c)
{
case 'A': return 'a';
case 'B': return 'b';
case 'C': return 'c';
case 'D': return 'd';
case 'E': return 'e';
case 'F': return 'f';
case 'G': return 'g';
case 'H': return 'h';
case 'I': return 'i';
case 'J': return 'j';
case 'K': return 'k';
case 'L': return 'l';
case 'M': return 'm';
case 'N': return 'n';
case 'O': return 'o';
case 'P': return 'p';
case 'Q': return 'q';
case 'R': return 'r';
case 'S': return 's';
case 'T': return 't';
case 'U': return 'u';
case 'V': return 'v';
case 'W': return 'w';
case 'X': return 'x';
case 'Y': return 'y';
case 'Z': return 'z';
default: return c;
}
#endif
}
int
c_toupper (int c)
{
#if C_CTYPE_CONSECUTIVE_UPPERCASE && C_CTYPE_CONSECUTIVE_LOWERCASE
return (c >= 'a' && c <= 'z' ? c - 'a' + 'A' : c);
#else
switch (c)
{
case 'a': return 'A';
case 'b': return 'B';
case 'c': return 'C';
case 'd': return 'D';
case 'e': return 'E';
case 'f': return 'F';
case 'g': return 'G';
case 'h': return 'H';
case 'i': return 'I';
case 'j': return 'J';
case 'k': return 'K';
case 'l': return 'L';
case 'm': return 'M';
case 'n': return 'N';
case 'o': return 'O';
case 'p': return 'P';
case 'q': return 'Q';
case 'r': return 'R';
case 's': return 'S';
case 't': return 'T';
case 'u': return 'U';
case 'v': return 'V';
case 'w': return 'W';
case 'x': return 'X';
case 'y': return 'Y';
case 'z': return 'Z';
default: return c;
}
#endif
}
tenace-0.13/lib/Makefile.am 0000664 0004016 0004016 00000035706 12215417304 012427 0000000 0000000 ## DO NOT EDIT! GENERATED AUTOMATICALLY!
## Process this file with automake to produce Makefile.in.
# Copyright (C) 2002-2013 Free Software Foundation, Inc.
#
# This file is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# This file 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 General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this file. If not, see .
#
# As a special exception to the GNU General Public License,
# this file may be distributed as part of a program that
# contains a configuration script generated by Autoconf, under
# the same distribution terms as the rest of that program.
#
# Generated by gnulib-tool.
# Reproduce by: gnulib-tool --import --dir=. --lib=libgnu --source-base=lib --m4-base=m4 --doc-base=doc --tests-base=tests --aux-dir=config --no-conditional-dependencies --libtool --macro-prefix=gl nproc physmem
AUTOMAKE_OPTIONS = 1.9.6 gnits
SUBDIRS =
noinst_HEADERS =
noinst_LIBRARIES =
noinst_LTLIBRARIES =
EXTRA_DIST =
BUILT_SOURCES =
SUFFIXES =
MOSTLYCLEANFILES = core *.stackdump
MOSTLYCLEANDIRS =
CLEANFILES =
DISTCLEANFILES =
MAINTAINERCLEANFILES =
AM_CPPFLAGS =
AM_CFLAGS =
noinst_LTLIBRARIES += libgnu.la
libgnu_la_SOURCES =
libgnu_la_LIBADD = $(gl_LTLIBOBJS)
libgnu_la_DEPENDENCIES = $(gl_LTLIBOBJS)
EXTRA_libgnu_la_SOURCES =
libgnu_la_LDFLAGS = $(AM_LDFLAGS)
libgnu_la_LDFLAGS += -no-undefined
## begin gnulib module c-ctype
libgnu_la_SOURCES += c-ctype.h c-ctype.c
## end gnulib module c-ctype
## begin gnulib module nproc
libgnu_la_SOURCES += nproc.c
EXTRA_DIST += nproc.h
## end gnulib module nproc
## begin gnulib module physmem
libgnu_la_SOURCES += physmem.c
EXTRA_DIST += physmem.h
## end gnulib module physmem
## begin gnulib module snippet/arg-nonnull
# The BUILT_SOURCES created by this Makefile snippet are not used via #include
# statements but through direct file reference. Therefore this snippet must be
# present in all Makefile.am that need it. This is ensured by the applicability
# 'all' defined above.
BUILT_SOURCES += arg-nonnull.h
# The arg-nonnull.h that gets inserted into generated .h files is the same as
# build-aux/snippet/arg-nonnull.h, except that it has the copyright header cut
# off.
arg-nonnull.h: $(top_srcdir)/config/snippet/arg-nonnull.h
$(AM_V_GEN)rm -f $@-t $@ && \
sed -n -e '/GL_ARG_NONNULL/,$$p' \
< $(top_srcdir)/config/snippet/arg-nonnull.h \
> $@-t && \
mv $@-t $@
MOSTLYCLEANFILES += arg-nonnull.h arg-nonnull.h-t
ARG_NONNULL_H=arg-nonnull.h
EXTRA_DIST += $(top_srcdir)/config/snippet/arg-nonnull.h
## end gnulib module snippet/arg-nonnull
## begin gnulib module snippet/c++defs
# The BUILT_SOURCES created by this Makefile snippet are not used via #include
# statements but through direct file reference. Therefore this snippet must be
# present in all Makefile.am that need it. This is ensured by the applicability
# 'all' defined above.
BUILT_SOURCES += c++defs.h
# The c++defs.h that gets inserted into generated .h files is the same as
# build-aux/snippet/c++defs.h, except that it has the copyright header cut off.
c++defs.h: $(top_srcdir)/config/snippet/c++defs.h
$(AM_V_GEN)rm -f $@-t $@ && \
sed -n -e '/_GL_CXXDEFS/,$$p' \
< $(top_srcdir)/config/snippet/c++defs.h \
> $@-t && \
mv $@-t $@
MOSTLYCLEANFILES += c++defs.h c++defs.h-t
CXXDEFS_H=c++defs.h
EXTRA_DIST += $(top_srcdir)/config/snippet/c++defs.h
## end gnulib module snippet/c++defs
## begin gnulib module snippet/warn-on-use
BUILT_SOURCES += warn-on-use.h
# The warn-on-use.h that gets inserted into generated .h files is the same as
# build-aux/snippet/warn-on-use.h, except that it has the copyright header cut
# off.
warn-on-use.h: $(top_srcdir)/config/snippet/warn-on-use.h
$(AM_V_GEN)rm -f $@-t $@ && \
sed -n -e '/^.ifndef/,$$p' \
< $(top_srcdir)/config/snippet/warn-on-use.h \
> $@-t && \
mv $@-t $@
MOSTLYCLEANFILES += warn-on-use.h warn-on-use.h-t
WARN_ON_USE_H=warn-on-use.h
EXTRA_DIST += $(top_srcdir)/config/snippet/warn-on-use.h
## end gnulib module snippet/warn-on-use
## begin gnulib module stdbool
BUILT_SOURCES += $(STDBOOL_H)
# We need the following in order to create when the system
# doesn't have one that works.
if GL_GENERATE_STDBOOL_H
stdbool.h: stdbool.in.h $(top_builddir)/config.status
$(AM_V_GEN)rm -f $@-t $@ && \
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
sed -e 's/@''HAVE__BOOL''@/$(HAVE__BOOL)/g' < $(srcdir)/stdbool.in.h; \
} > $@-t && \
mv $@-t $@
else
stdbool.h: $(top_builddir)/config.status
rm -f $@
endif
MOSTLYCLEANFILES += stdbool.h stdbool.h-t
EXTRA_DIST += stdbool.in.h
## end gnulib module stdbool
## begin gnulib module stddef
BUILT_SOURCES += $(STDDEF_H)
# We need the following in order to create when the system
# doesn't have one that works with the given compiler.
if GL_GENERATE_STDDEF_H
stddef.h: stddef.in.h $(top_builddir)/config.status
$(AM_V_GEN)rm -f $@-t $@ && \
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
sed -e 's|@''GUARD_PREFIX''@|GL|g' \
-e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
-e 's|@''NEXT_STDDEF_H''@|$(NEXT_STDDEF_H)|g' \
-e 's|@''HAVE_WCHAR_T''@|$(HAVE_WCHAR_T)|g' \
-e 's|@''REPLACE_NULL''@|$(REPLACE_NULL)|g' \
< $(srcdir)/stddef.in.h; \
} > $@-t && \
mv $@-t $@
else
stddef.h: $(top_builddir)/config.status
rm -f $@
endif
MOSTLYCLEANFILES += stddef.h stddef.h-t
EXTRA_DIST += stddef.in.h
## end gnulib module stddef
## begin gnulib module sys_types
BUILT_SOURCES += sys/types.h
# We need the following in order to create when the system
# doesn't have one that works with the given compiler.
sys/types.h: sys_types.in.h $(top_builddir)/config.status
$(AM_V_at)$(MKDIR_P) sys
$(AM_V_GEN)rm -f $@-t $@ && \
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
sed -e 's|@''GUARD_PREFIX''@|GL|g' \
-e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
-e 's|@''NEXT_SYS_TYPES_H''@|$(NEXT_SYS_TYPES_H)|g' \
-e 's|@''WINDOWS_64_BIT_OFF_T''@|$(WINDOWS_64_BIT_OFF_T)|g' \
< $(srcdir)/sys_types.in.h; \
} > $@-t && \
mv $@-t $@
MOSTLYCLEANFILES += sys/types.h sys/types.h-t
EXTRA_DIST += sys_types.in.h
## end gnulib module sys_types
## begin gnulib module unistd
BUILT_SOURCES += unistd.h
libgnu_la_SOURCES += unistd.c
# We need the following in order to create an empty placeholder for
# when the system doesn't have one.
unistd.h: unistd.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
$(AM_V_GEN)rm -f $@-t $@ && \
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
sed -e 's|@''GUARD_PREFIX''@|GL|g' \
-e 's|@''HAVE_UNISTD_H''@|$(HAVE_UNISTD_H)|g' \
-e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
-e 's|@''NEXT_UNISTD_H''@|$(NEXT_UNISTD_H)|g' \
-e 's|@''WINDOWS_64_BIT_OFF_T''@|$(WINDOWS_64_BIT_OFF_T)|g' \
-e 's/@''GNULIB_CHDIR''@/$(GNULIB_CHDIR)/g' \
-e 's/@''GNULIB_CHOWN''@/$(GNULIB_CHOWN)/g' \
-e 's/@''GNULIB_CLOSE''@/$(GNULIB_CLOSE)/g' \
-e 's/@''GNULIB_DUP''@/$(GNULIB_DUP)/g' \
-e 's/@''GNULIB_DUP2''@/$(GNULIB_DUP2)/g' \
-e 's/@''GNULIB_DUP3''@/$(GNULIB_DUP3)/g' \
-e 's/@''GNULIB_ENVIRON''@/$(GNULIB_ENVIRON)/g' \
-e 's/@''GNULIB_EUIDACCESS''@/$(GNULIB_EUIDACCESS)/g' \
-e 's/@''GNULIB_FACCESSAT''@/$(GNULIB_FACCESSAT)/g' \
-e 's/@''GNULIB_FCHDIR''@/$(GNULIB_FCHDIR)/g' \
-e 's/@''GNULIB_FCHOWNAT''@/$(GNULIB_FCHOWNAT)/g' \
-e 's/@''GNULIB_FDATASYNC''@/$(GNULIB_FDATASYNC)/g' \
-e 's/@''GNULIB_FSYNC''@/$(GNULIB_FSYNC)/g' \
-e 's/@''GNULIB_FTRUNCATE''@/$(GNULIB_FTRUNCATE)/g' \
-e 's/@''GNULIB_GETCWD''@/$(GNULIB_GETCWD)/g' \
-e 's/@''GNULIB_GETDOMAINNAME''@/$(GNULIB_GETDOMAINNAME)/g' \
-e 's/@''GNULIB_GETDTABLESIZE''@/$(GNULIB_GETDTABLESIZE)/g' \
-e 's/@''GNULIB_GETGROUPS''@/$(GNULIB_GETGROUPS)/g' \
-e 's/@''GNULIB_GETHOSTNAME''@/$(GNULIB_GETHOSTNAME)/g' \
-e 's/@''GNULIB_GETLOGIN''@/$(GNULIB_GETLOGIN)/g' \
-e 's/@''GNULIB_GETLOGIN_R''@/$(GNULIB_GETLOGIN_R)/g' \
-e 's/@''GNULIB_GETPAGESIZE''@/$(GNULIB_GETPAGESIZE)/g' \
-e 's/@''GNULIB_GETUSERSHELL''@/$(GNULIB_GETUSERSHELL)/g' \
-e 's/@''GNULIB_GROUP_MEMBER''@/$(GNULIB_GROUP_MEMBER)/g' \
-e 's/@''GNULIB_ISATTY''@/$(GNULIB_ISATTY)/g' \
-e 's/@''GNULIB_LCHOWN''@/$(GNULIB_LCHOWN)/g' \
-e 's/@''GNULIB_LINK''@/$(GNULIB_LINK)/g' \
-e 's/@''GNULIB_LINKAT''@/$(GNULIB_LINKAT)/g' \
-e 's/@''GNULIB_LSEEK''@/$(GNULIB_LSEEK)/g' \
-e 's/@''GNULIB_PIPE''@/$(GNULIB_PIPE)/g' \
-e 's/@''GNULIB_PIPE2''@/$(GNULIB_PIPE2)/g' \
-e 's/@''GNULIB_PREAD''@/$(GNULIB_PREAD)/g' \
-e 's/@''GNULIB_PWRITE''@/$(GNULIB_PWRITE)/g' \
-e 's/@''GNULIB_READ''@/$(GNULIB_READ)/g' \
-e 's/@''GNULIB_READLINK''@/$(GNULIB_READLINK)/g' \
-e 's/@''GNULIB_READLINKAT''@/$(GNULIB_READLINKAT)/g' \
-e 's/@''GNULIB_RMDIR''@/$(GNULIB_RMDIR)/g' \
-e 's/@''GNULIB_SETHOSTNAME''@/$(GNULIB_SETHOSTNAME)/g' \
-e 's/@''GNULIB_SLEEP''@/$(GNULIB_SLEEP)/g' \
-e 's/@''GNULIB_SYMLINK''@/$(GNULIB_SYMLINK)/g' \
-e 's/@''GNULIB_SYMLINKAT''@/$(GNULIB_SYMLINKAT)/g' \
-e 's/@''GNULIB_TTYNAME_R''@/$(GNULIB_TTYNAME_R)/g' \
-e 's/@''GNULIB_UNISTD_H_GETOPT''@/0$(GNULIB_GL_UNISTD_H_GETOPT)/g' \
-e 's/@''GNULIB_UNISTD_H_NONBLOCKING''@/$(GNULIB_UNISTD_H_NONBLOCKING)/g' \
-e 's/@''GNULIB_UNISTD_H_SIGPIPE''@/$(GNULIB_UNISTD_H_SIGPIPE)/g' \
-e 's/@''GNULIB_UNLINK''@/$(GNULIB_UNLINK)/g' \
-e 's/@''GNULIB_UNLINKAT''@/$(GNULIB_UNLINKAT)/g' \
-e 's/@''GNULIB_USLEEP''@/$(GNULIB_USLEEP)/g' \
-e 's/@''GNULIB_WRITE''@/$(GNULIB_WRITE)/g' \
< $(srcdir)/unistd.in.h | \
sed -e 's|@''HAVE_CHOWN''@|$(HAVE_CHOWN)|g' \
-e 's|@''HAVE_DUP2''@|$(HAVE_DUP2)|g' \
-e 's|@''HAVE_DUP3''@|$(HAVE_DUP3)|g' \
-e 's|@''HAVE_EUIDACCESS''@|$(HAVE_EUIDACCESS)|g' \
-e 's|@''HAVE_FACCESSAT''@|$(HAVE_FACCESSAT)|g' \
-e 's|@''HAVE_FCHDIR''@|$(HAVE_FCHDIR)|g' \
-e 's|@''HAVE_FCHOWNAT''@|$(HAVE_FCHOWNAT)|g' \
-e 's|@''HAVE_FDATASYNC''@|$(HAVE_FDATASYNC)|g' \
-e 's|@''HAVE_FSYNC''@|$(HAVE_FSYNC)|g' \
-e 's|@''HAVE_FTRUNCATE''@|$(HAVE_FTRUNCATE)|g' \
-e 's|@''HAVE_GETDTABLESIZE''@|$(HAVE_GETDTABLESIZE)|g' \
-e 's|@''HAVE_GETGROUPS''@|$(HAVE_GETGROUPS)|g' \
-e 's|@''HAVE_GETHOSTNAME''@|$(HAVE_GETHOSTNAME)|g' \
-e 's|@''HAVE_GETLOGIN''@|$(HAVE_GETLOGIN)|g' \
-e 's|@''HAVE_GETPAGESIZE''@|$(HAVE_GETPAGESIZE)|g' \
-e 's|@''HAVE_GROUP_MEMBER''@|$(HAVE_GROUP_MEMBER)|g' \
-e 's|@''HAVE_LCHOWN''@|$(HAVE_LCHOWN)|g' \
-e 's|@''HAVE_LINK''@|$(HAVE_LINK)|g' \
-e 's|@''HAVE_LINKAT''@|$(HAVE_LINKAT)|g' \
-e 's|@''HAVE_PIPE''@|$(HAVE_PIPE)|g' \
-e 's|@''HAVE_PIPE2''@|$(HAVE_PIPE2)|g' \
-e 's|@''HAVE_PREAD''@|$(HAVE_PREAD)|g' \
-e 's|@''HAVE_PWRITE''@|$(HAVE_PWRITE)|g' \
-e 's|@''HAVE_READLINK''@|$(HAVE_READLINK)|g' \
-e 's|@''HAVE_READLINKAT''@|$(HAVE_READLINKAT)|g' \
-e 's|@''HAVE_SETHOSTNAME''@|$(HAVE_SETHOSTNAME)|g' \
-e 's|@''HAVE_SLEEP''@|$(HAVE_SLEEP)|g' \
-e 's|@''HAVE_SYMLINK''@|$(HAVE_SYMLINK)|g' \
-e 's|@''HAVE_SYMLINKAT''@|$(HAVE_SYMLINKAT)|g' \
-e 's|@''HAVE_UNLINKAT''@|$(HAVE_UNLINKAT)|g' \
-e 's|@''HAVE_USLEEP''@|$(HAVE_USLEEP)|g' \
-e 's|@''HAVE_DECL_ENVIRON''@|$(HAVE_DECL_ENVIRON)|g' \
-e 's|@''HAVE_DECL_FCHDIR''@|$(HAVE_DECL_FCHDIR)|g' \
-e 's|@''HAVE_DECL_FDATASYNC''@|$(HAVE_DECL_FDATASYNC)|g' \
-e 's|@''HAVE_DECL_GETDOMAINNAME''@|$(HAVE_DECL_GETDOMAINNAME)|g' \
-e 's|@''HAVE_DECL_GETLOGIN_R''@|$(HAVE_DECL_GETLOGIN_R)|g' \
-e 's|@''HAVE_DECL_GETPAGESIZE''@|$(HAVE_DECL_GETPAGESIZE)|g' \
-e 's|@''HAVE_DECL_GETUSERSHELL''@|$(HAVE_DECL_GETUSERSHELL)|g' \
-e 's|@''HAVE_DECL_SETHOSTNAME''@|$(HAVE_DECL_SETHOSTNAME)|g' \
-e 's|@''HAVE_DECL_TTYNAME_R''@|$(HAVE_DECL_TTYNAME_R)|g' \
-e 's|@''HAVE_OS_H''@|$(HAVE_OS_H)|g' \
-e 's|@''HAVE_SYS_PARAM_H''@|$(HAVE_SYS_PARAM_H)|g' \
| \
sed -e 's|@''REPLACE_CHOWN''@|$(REPLACE_CHOWN)|g' \
-e 's|@''REPLACE_CLOSE''@|$(REPLACE_CLOSE)|g' \
-e 's|@''REPLACE_DUP''@|$(REPLACE_DUP)|g' \
-e 's|@''REPLACE_DUP2''@|$(REPLACE_DUP2)|g' \
-e 's|@''REPLACE_FCHOWNAT''@|$(REPLACE_FCHOWNAT)|g' \
-e 's|@''REPLACE_FTRUNCATE''@|$(REPLACE_FTRUNCATE)|g' \
-e 's|@''REPLACE_GETCWD''@|$(REPLACE_GETCWD)|g' \
-e 's|@''REPLACE_GETDOMAINNAME''@|$(REPLACE_GETDOMAINNAME)|g' \
-e 's|@''REPLACE_GETLOGIN_R''@|$(REPLACE_GETLOGIN_R)|g' \
-e 's|@''REPLACE_GETGROUPS''@|$(REPLACE_GETGROUPS)|g' \
-e 's|@''REPLACE_GETPAGESIZE''@|$(REPLACE_GETPAGESIZE)|g' \
-e 's|@''REPLACE_ISATTY''@|$(REPLACE_ISATTY)|g' \
-e 's|@''REPLACE_LCHOWN''@|$(REPLACE_LCHOWN)|g' \
-e 's|@''REPLACE_LINK''@|$(REPLACE_LINK)|g' \
-e 's|@''REPLACE_LINKAT''@|$(REPLACE_LINKAT)|g' \
-e 's|@''REPLACE_LSEEK''@|$(REPLACE_LSEEK)|g' \
-e 's|@''REPLACE_PREAD''@|$(REPLACE_PREAD)|g' \
-e 's|@''REPLACE_PWRITE''@|$(REPLACE_PWRITE)|g' \
-e 's|@''REPLACE_READ''@|$(REPLACE_READ)|g' \
-e 's|@''REPLACE_READLINK''@|$(REPLACE_READLINK)|g' \
-e 's|@''REPLACE_RMDIR''@|$(REPLACE_RMDIR)|g' \
-e 's|@''REPLACE_SLEEP''@|$(REPLACE_SLEEP)|g' \
-e 's|@''REPLACE_SYMLINK''@|$(REPLACE_SYMLINK)|g' \
-e 's|@''REPLACE_TTYNAME_R''@|$(REPLACE_TTYNAME_R)|g' \
-e 's|@''REPLACE_UNLINK''@|$(REPLACE_UNLINK)|g' \
-e 's|@''REPLACE_UNLINKAT''@|$(REPLACE_UNLINKAT)|g' \
-e 's|@''REPLACE_USLEEP''@|$(REPLACE_USLEEP)|g' \
-e 's|@''REPLACE_WRITE''@|$(REPLACE_WRITE)|g' \
-e 's|@''UNISTD_H_HAVE_WINSOCK2_H''@|$(UNISTD_H_HAVE_WINSOCK2_H)|g' \
-e 's|@''UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS''@|$(UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS)|g' \
-e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
-e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
-e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \
} > $@-t && \
mv $@-t $@
MOSTLYCLEANFILES += unistd.h unistd.h-t
EXTRA_DIST += unistd.in.h
## end gnulib module unistd
mostlyclean-local: mostlyclean-generic
@for dir in '' $(MOSTLYCLEANDIRS); do \
if test -n "$$dir" && test -d $$dir; then \
echo "rmdir $$dir"; rmdir $$dir; \
fi; \
done; \
:
tenace-0.13/lib/Makefile.in 0000664 0004016 0004016 00000125765 12225337320 012445 0000000 0000000 # Makefile.in generated by automake 1.13.3 from Makefile.am.
# @configure_input@
# Copyright (C) 1994-2013 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
@SET_MAKE@
# Copyright (C) 2002-2013 Free Software Foundation, Inc.
#
# This file is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# This file 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 General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this file. If not, see .
#
# As a special exception to the GNU General Public License,
# this file may be distributed as part of a program that
# contains a configuration script generated by Autoconf, under
# the same distribution terms as the rest of that program.
#
# Generated by gnulib-tool.
# Reproduce by: gnulib-tool --import --dir=. --lib=libgnu --source-base=lib --m4-base=m4 --doc-base=doc --tests-base=tests --aux-dir=config --no-conditional-dependencies --libtool --macro-prefix=gl nproc physmem
VPATH = @srcdir@
am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
am__make_running_with_option = \
case $${target_option-} in \
?) ;; \
*) echo "am__make_running_with_option: internal error: invalid" \
"target option '$${target_option-}' specified" >&2; \
exit 1;; \
esac; \
has_opt=no; \
sane_makeflags=$$MAKEFLAGS; \
if $(am__is_gnu_make); then \
sane_makeflags=$$MFLAGS; \
else \
case $$MAKEFLAGS in \
*\\[\ \ ]*) \
bs=\\; \
sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
| sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
esac; \
fi; \
skip_next=no; \
strip_trailopt () \
{ \
flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
}; \
for flg in $$sane_makeflags; do \
test $$skip_next = yes && { skip_next=no; continue; }; \
case $$flg in \
*=*|--*) continue;; \
-*I) strip_trailopt 'I'; skip_next=yes;; \
-*I?*) strip_trailopt 'I';; \
-*O) strip_trailopt 'O'; skip_next=yes;; \
-*O?*) strip_trailopt 'O';; \
-*l) strip_trailopt 'l'; skip_next=yes;; \
-*l?*) strip_trailopt 'l';; \
-[dEDm]) skip_next=yes;; \
-[JT]) skip_next=yes;; \
esac; \
case $$flg in \
*$$target_option*) has_opt=yes; break;; \
esac; \
done; \
test $$has_opt = yes
am__make_dryrun = (target_option=n; $(am__make_running_with_option))
am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
pkgdatadir = $(datadir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkglibexecdir = $(libexecdir)/@PACKAGE@
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_HEADER = $(INSTALL_DATA)
transform = $(program_transform_name)
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
subdir = lib
DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
$(top_srcdir)/config/depcomp $(noinst_HEADERS)
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \
$(top_srcdir)/m4/extensions.m4 \
$(top_srcdir)/m4/extern-inline.m4 \
$(top_srcdir)/m4/gnulib-common.m4 \
$(top_srcdir)/m4/gnulib-comp.m4 \
$(top_srcdir)/m4/include_next.m4 $(top_srcdir)/m4/intltool.m4 \
$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nproc.m4 \
$(top_srcdir)/m4/off_t.m4 $(top_srcdir)/m4/onceonly.m4 \
$(top_srcdir)/m4/physmem.m4 $(top_srcdir)/m4/ssize_t.m4 \
$(top_srcdir)/m4/stdbool.m4 $(top_srcdir)/m4/stddef_h.m4 \
$(top_srcdir)/m4/sys_types_h.m4 $(top_srcdir)/m4/unistd_h.m4 \
$(top_srcdir)/m4/warn-on-use.m4 $(top_srcdir)/m4/wchar_t.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
LIBRARIES = $(noinst_LIBRARIES)
LTLIBRARIES = $(noinst_LTLIBRARIES)
am__DEPENDENCIES_1 =
am_libgnu_la_OBJECTS = c-ctype.lo nproc.lo physmem.lo unistd.lo
libgnu_la_OBJECTS = $(am_libgnu_la_OBJECTS)
AM_V_lt = $(am__v_lt_@AM_V@)
am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
am__v_lt_0 = --silent
am__v_lt_1 =
libgnu_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
$(libgnu_la_LDFLAGS) $(LDFLAGS) -o $@
AM_V_P = $(am__v_P_@AM_V@)
am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
am__v_P_0 = false
am__v_P_1 = :
AM_V_GEN = $(am__v_GEN_@AM_V@)
am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
am__v_GEN_0 = @echo " GEN " $@;
am__v_GEN_1 =
AM_V_at = $(am__v_at_@AM_V@)
am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
am__v_at_0 = @
am__v_at_1 =
DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
depcomp = $(SHELL) $(top_srcdir)/config/depcomp
am__depfiles_maybe = depfiles
am__mv = mv -f
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
$(AM_CFLAGS) $(CFLAGS)
AM_V_CC = $(am__v_CC_@AM_V@)
am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
am__v_CC_0 = @echo " CC " $@;
am__v_CC_1 =
CCLD = $(CC)
LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
$(AM_LDFLAGS) $(LDFLAGS) -o $@
AM_V_CCLD = $(am__v_CCLD_@AM_V@)
am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
am__v_CCLD_0 = @echo " CCLD " $@;
am__v_CCLD_1 =
SOURCES = $(libgnu_la_SOURCES) $(EXTRA_libgnu_la_SOURCES)
DIST_SOURCES = $(libgnu_la_SOURCES) $(EXTRA_libgnu_la_SOURCES)
RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
ctags-recursive dvi-recursive html-recursive info-recursive \
install-data-recursive install-dvi-recursive \
install-exec-recursive install-html-recursive \
install-info-recursive install-pdf-recursive \
install-ps-recursive install-recursive installcheck-recursive \
installdirs-recursive pdf-recursive ps-recursive \
tags-recursive uninstall-recursive
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
*) (install-info --version) >/dev/null 2>&1;; \
esac
HEADERS = $(noinst_HEADERS)
RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
distclean-recursive maintainer-clean-recursive
am__recursive_targets = \
$(RECURSIVE_TARGETS) \
$(RECURSIVE_CLEAN_TARGETS) \
$(am__extra_recursive_targets)
AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
distdir
am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
# Read a list of newline-separated strings from the standard input,
# and print each of them once, without duplicates. Input order is
# *not* preserved.
am__uniquify_input = $(AWK) '\
BEGIN { nonempty = 0; } \
{ items[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in items) print i; }; } \
'
# Make sure the list of sources is unique. This is necessary because,
# e.g., the same source file might be shared among _SOURCES variables
# for different programs/libraries.
am__define_uniq_tagged_files = \
list='$(am__tagged_files)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | $(am__uniquify_input)`
ETAGS = etags
CTAGS = ctags
DIST_SUBDIRS = $(SUBDIRS)
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
am__relativize = \
dir0=`pwd`; \
sed_first='s,^\([^/]*\)/.*$$,\1,'; \
sed_rest='s,^[^/]*/*,,'; \
sed_last='s,^.*/\([^/]*\)$$,\1,'; \
sed_butlast='s,/*[^/]*$$,,'; \
while test -n "$$dir1"; do \
first=`echo "$$dir1" | sed -e "$$sed_first"`; \
if test "$$first" != "."; then \
if test "$$first" = ".."; then \
dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
else \
first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
if test "$$first2" = "$$first"; then \
dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
else \
dir2="../$$dir2"; \
fi; \
dir0="$$dir0"/"$$first"; \
fi; \
fi; \
dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
done; \
reldir="$$dir2"
ACLOCAL = @ACLOCAL@
ALL_LINGUAS = @ALL_LINGUAS@
AMTAR = @AMTAR@
AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
AR = @AR@
ARFLAGS = @ARFLAGS@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
CATALOGS = @CATALOGS@
CATOBJEXT = @CATOBJEXT@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CYGPATH_W = @CYGPATH_W@
DATADIRNAME = @DATADIRNAME@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
FGREP = @FGREP@
GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
GMOFILES = @GMOFILES@
GMSGFMT = @GMSGFMT@
GNULIB_CHDIR = @GNULIB_CHDIR@
GNULIB_CHOWN = @GNULIB_CHOWN@
GNULIB_CLOSE = @GNULIB_CLOSE@
GNULIB_DUP = @GNULIB_DUP@
GNULIB_DUP2 = @GNULIB_DUP2@
GNULIB_DUP3 = @GNULIB_DUP3@
GNULIB_ENVIRON = @GNULIB_ENVIRON@
GNULIB_EUIDACCESS = @GNULIB_EUIDACCESS@
GNULIB_FACCESSAT = @GNULIB_FACCESSAT@
GNULIB_FCHDIR = @GNULIB_FCHDIR@
GNULIB_FCHOWNAT = @GNULIB_FCHOWNAT@
GNULIB_FDATASYNC = @GNULIB_FDATASYNC@
GNULIB_FSYNC = @GNULIB_FSYNC@
GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@
GNULIB_GETCWD = @GNULIB_GETCWD@
GNULIB_GETDOMAINNAME = @GNULIB_GETDOMAINNAME@
GNULIB_GETDTABLESIZE = @GNULIB_GETDTABLESIZE@
GNULIB_GETGROUPS = @GNULIB_GETGROUPS@
GNULIB_GETHOSTNAME = @GNULIB_GETHOSTNAME@
GNULIB_GETLOGIN = @GNULIB_GETLOGIN@
GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@
GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@
GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@
GNULIB_GROUP_MEMBER = @GNULIB_GROUP_MEMBER@
GNULIB_ISATTY = @GNULIB_ISATTY@
GNULIB_LCHOWN = @GNULIB_LCHOWN@
GNULIB_LINK = @GNULIB_LINK@
GNULIB_LINKAT = @GNULIB_LINKAT@
GNULIB_LSEEK = @GNULIB_LSEEK@
GNULIB_PIPE = @GNULIB_PIPE@
GNULIB_PIPE2 = @GNULIB_PIPE2@
GNULIB_PREAD = @GNULIB_PREAD@
GNULIB_PWRITE = @GNULIB_PWRITE@
GNULIB_READ = @GNULIB_READ@
GNULIB_READLINK = @GNULIB_READLINK@
GNULIB_READLINKAT = @GNULIB_READLINKAT@
GNULIB_RMDIR = @GNULIB_RMDIR@
GNULIB_SETHOSTNAME = @GNULIB_SETHOSTNAME@
GNULIB_SLEEP = @GNULIB_SLEEP@
GNULIB_SYMLINK = @GNULIB_SYMLINK@
GNULIB_SYMLINKAT = @GNULIB_SYMLINKAT@
GNULIB_TTYNAME_R = @GNULIB_TTYNAME_R@
GNULIB_UNISTD_H_NONBLOCKING = @GNULIB_UNISTD_H_NONBLOCKING@
GNULIB_UNISTD_H_SIGPIPE = @GNULIB_UNISTD_H_SIGPIPE@
GNULIB_UNLINK = @GNULIB_UNLINK@
GNULIB_UNLINKAT = @GNULIB_UNLINKAT@
GNULIB_USLEEP = @GNULIB_USLEEP@
GNULIB_WRITE = @GNULIB_WRITE@
GREP = @GREP@
HAVE_CHOWN = @HAVE_CHOWN@
HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@
HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@
HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@
HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@
HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@
HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@
HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@
HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@
HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@
HAVE_DUP2 = @HAVE_DUP2@
HAVE_DUP3 = @HAVE_DUP3@
HAVE_EUIDACCESS = @HAVE_EUIDACCESS@
HAVE_FACCESSAT = @HAVE_FACCESSAT@
HAVE_FCHDIR = @HAVE_FCHDIR@
HAVE_FCHOWNAT = @HAVE_FCHOWNAT@
HAVE_FDATASYNC = @HAVE_FDATASYNC@
HAVE_FSYNC = @HAVE_FSYNC@
HAVE_FTRUNCATE = @HAVE_FTRUNCATE@
HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@
HAVE_GETGROUPS = @HAVE_GETGROUPS@
HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@
HAVE_GETLOGIN = @HAVE_GETLOGIN@
HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@
HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@
HAVE_LCHOWN = @HAVE_LCHOWN@
HAVE_LINK = @HAVE_LINK@
HAVE_LINKAT = @HAVE_LINKAT@
HAVE_OS_H = @HAVE_OS_H@
HAVE_PIPE = @HAVE_PIPE@
HAVE_PIPE2 = @HAVE_PIPE2@
HAVE_PREAD = @HAVE_PREAD@
HAVE_PWRITE = @HAVE_PWRITE@
HAVE_READLINK = @HAVE_READLINK@
HAVE_READLINKAT = @HAVE_READLINKAT@
HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@
HAVE_SLEEP = @HAVE_SLEEP@
HAVE_SYMLINK = @HAVE_SYMLINK@
HAVE_SYMLINKAT = @HAVE_SYMLINKAT@
HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@
HAVE_UNISTD_H = @HAVE_UNISTD_H@
HAVE_UNLINKAT = @HAVE_UNLINKAT@
HAVE_USLEEP = @HAVE_USLEEP@
HAVE_WCHAR_T = @HAVE_WCHAR_T@
HAVE__BOOL = @HAVE__BOOL@
INCLUDE_NEXT = @INCLUDE_NEXT@
INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
INSTOBJEXT = @INSTOBJEXT@
INTLLIBS = @INTLLIBS@
INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
INTLTOOL_MERGE = @INTLTOOL_MERGE@
INTLTOOL_PERL = @INTLTOOL_PERL@
INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@
INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@
INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@
INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
MAINT = @MAINT@
MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MKINSTALLDIRS = @MKINSTALLDIRS@
MSGFMT = @MSGFMT@
MSGFMT_OPTS = @MSGFMT_OPTS@
MSGMERGE = @MSGMERGE@
NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@
NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@
NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@
NEXT_STDDEF_H = @NEXT_STDDEF_H@
NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@
NEXT_UNISTD_H = @NEXT_UNISTD_H@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
OBJEXT = @OBJEXT@
OTOOL = @OTOOL@
OTOOL64 = @OTOOL64@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_CFLAGS = @PACKAGE_CFLAGS@
PACKAGE_LIBS = @PACKAGE_LIBS@
PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
POFILES = @POFILES@
POSUB = @POSUB@
PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
PRAGMA_COLUMNS = @PRAGMA_COLUMNS@
PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@
RANLIB = @RANLIB@
REPLACE_CHOWN = @REPLACE_CHOWN@
REPLACE_CLOSE = @REPLACE_CLOSE@
REPLACE_DUP = @REPLACE_DUP@
REPLACE_DUP2 = @REPLACE_DUP2@
REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@
REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@
REPLACE_GETCWD = @REPLACE_GETCWD@
REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@
REPLACE_GETGROUPS = @REPLACE_GETGROUPS@
REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@
REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@
REPLACE_ISATTY = @REPLACE_ISATTY@
REPLACE_LCHOWN = @REPLACE_LCHOWN@
REPLACE_LINK = @REPLACE_LINK@
REPLACE_LINKAT = @REPLACE_LINKAT@
REPLACE_LSEEK = @REPLACE_LSEEK@
REPLACE_NULL = @REPLACE_NULL@
REPLACE_PREAD = @REPLACE_PREAD@
REPLACE_PWRITE = @REPLACE_PWRITE@
REPLACE_READ = @REPLACE_READ@
REPLACE_READLINK = @REPLACE_READLINK@
REPLACE_RMDIR = @REPLACE_RMDIR@
REPLACE_SLEEP = @REPLACE_SLEEP@
REPLACE_SYMLINK = @REPLACE_SYMLINK@
REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@
REPLACE_UNLINK = @REPLACE_UNLINK@
REPLACE_UNLINKAT = @REPLACE_UNLINKAT@
REPLACE_USLEEP = @REPLACE_USLEEP@
REPLACE_WRITE = @REPLACE_WRITE@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STDBOOL_H = @STDBOOL_H@
STDDEF_H = @STDDEF_H@
STRIP = @STRIP@
UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@
UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@
USE_NLS = @USE_NLS@
VERSION = @VERSION@
WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@
XGETTEXT = @XGETTEXT@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
ac_ct_AR = @ac_ct_AR@
ac_ct_CC = @ac_ct_CC@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
builddir = @builddir@
datadir = @datadir@
datarootdir = @datarootdir@
docdir = @docdir@
dvidir = @dvidir@
exec_prefix = @exec_prefix@
gl_LIBOBJS = @gl_LIBOBJS@
gl_LTLIBOBJS = @gl_LTLIBOBJS@
gltests_LIBOBJS = @gltests_LIBOBJS@
gltests_LTLIBOBJS = @gltests_LTLIBOBJS@
gltests_WITNESS = @gltests_WITNESS@
host = @host@
host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
intltool__v_merge_options_ = @intltool__v_merge_options_@
intltool__v_merge_options_0 = @intltool__v_merge_options_0@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
AUTOMAKE_OPTIONS = 1.9.6 gnits
SUBDIRS =
noinst_HEADERS =
noinst_LIBRARIES =
noinst_LTLIBRARIES = libgnu.la
EXTRA_DIST = nproc.h physmem.h \
$(top_srcdir)/config/snippet/arg-nonnull.h \
$(top_srcdir)/config/snippet/c++defs.h \
$(top_srcdir)/config/snippet/warn-on-use.h stdbool.in.h \
stddef.in.h sys_types.in.h unistd.in.h
# The BUILT_SOURCES created by this Makefile snippet are not used via #include
# statements but through direct file reference. Therefore this snippet must be
# present in all Makefile.am that need it. This is ensured by the applicability
# 'all' defined above.
# The BUILT_SOURCES created by this Makefile snippet are not used via #include
# statements but through direct file reference. Therefore this snippet must be
# present in all Makefile.am that need it. This is ensured by the applicability
# 'all' defined above.
BUILT_SOURCES = arg-nonnull.h c++defs.h warn-on-use.h $(STDBOOL_H) \
$(STDDEF_H) sys/types.h unistd.h
SUFFIXES =
MOSTLYCLEANFILES = core *.stackdump arg-nonnull.h arg-nonnull.h-t \
c++defs.h c++defs.h-t warn-on-use.h warn-on-use.h-t stdbool.h \
stdbool.h-t stddef.h stddef.h-t sys/types.h sys/types.h-t \
unistd.h unistd.h-t
MOSTLYCLEANDIRS =
CLEANFILES =
DISTCLEANFILES =
MAINTAINERCLEANFILES =
AM_CPPFLAGS =
AM_CFLAGS =
libgnu_la_SOURCES = c-ctype.h c-ctype.c nproc.c physmem.c unistd.c
libgnu_la_LIBADD = $(gl_LTLIBOBJS)
libgnu_la_DEPENDENCIES = $(gl_LTLIBOBJS)
EXTRA_libgnu_la_SOURCES =
libgnu_la_LDFLAGS = $(AM_LDFLAGS) -no-undefined
ARG_NONNULL_H = arg-nonnull.h
CXXDEFS_H = c++defs.h
WARN_ON_USE_H = warn-on-use.h
all: $(BUILT_SOURCES)
$(MAKE) $(AM_MAKEFLAGS) all-recursive
.SUFFIXES:
.SUFFIXES: .c .lo .o .obj
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
&& { if test -f $@; then exit 0; else break; fi; }; \
exit 1;; \
esac; \
done; \
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnits lib/Makefile'; \
$(am__cd) $(top_srcdir) && \
$(AUTOMAKE) --gnits lib/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
*) \
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
esac;
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):
clean-noinstLIBRARIES:
-test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES)
clean-noinstLTLIBRARIES:
-test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
@list='$(noinst_LTLIBRARIES)'; \
locs=`for p in $$list; do echo $$p; done | \
sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
sort -u`; \
test -z "$$locs" || { \
echo rm -f $${locs}; \
rm -f $${locs}; \
}
libgnu.la: $(libgnu_la_OBJECTS) $(libgnu_la_DEPENDENCIES) $(EXTRA_libgnu_la_DEPENDENCIES)
$(AM_V_CCLD)$(libgnu_la_LINK) $(libgnu_la_OBJECTS) $(libgnu_la_LIBADD) $(LIBS)
mostlyclean-compile:
-rm -f *.$(OBJEXT)
distclean-compile:
-rm -f *.tab.c
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/c-ctype.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nproc.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/physmem.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unistd.Plo@am__quote@
.c.o:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c $<
.c.obj:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'`
.c.lo:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
mostlyclean-libtool:
-rm -f *.lo
clean-libtool:
-rm -rf .libs _libs
# This directory's subdirectories are mostly independent; you can cd
# into them and run 'make' without going through this Makefile.
# To change the values of 'make' variables: instead of editing Makefiles,
# (1) if the variable is set in 'config.status', edit 'config.status'
# (which will cause the Makefiles to be regenerated when you run 'make');
# (2) otherwise, pass the desired values on the 'make' command line.
$(am__recursive_targets):
@fail=; \
if $(am__make_keepgoing); then \
failcom='fail=yes'; \
else \
failcom='exit 1'; \
fi; \
dot_seen=no; \
target=`echo $@ | sed s/-recursive//`; \
case "$@" in \
distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
*) list='$(SUBDIRS)' ;; \
esac; \
for subdir in $$list; do \
echo "Making $$target in $$subdir"; \
if test "$$subdir" = "."; then \
dot_seen=yes; \
local_target="$$target-am"; \
else \
local_target="$$target"; \
fi; \
($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|| eval $$failcom; \
done; \
if test "$$dot_seen" = "no"; then \
$(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
fi; test -z "$$fail"
ID: $(am__tagged_files)
$(am__define_uniq_tagged_files); mkid -fID $$unique
tags: tags-recursive
TAGS: tags
tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
set x; \
here=`pwd`; \
if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
include_option=--etags-include; \
empty_fix=.; \
else \
include_option=--include; \
empty_fix=; \
fi; \
list='$(SUBDIRS)'; for subdir in $$list; do \
if test "$$subdir" = .; then :; else \
test ! -f $$subdir/TAGS || \
set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
fi; \
done; \
$(am__define_uniq_tagged_files); \
shift; \
if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
test -n "$$unique" || unique=$$empty_fix; \
if test $$# -gt 0; then \
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
"$$@" $$unique; \
else \
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
$$unique; \
fi; \
fi
ctags: ctags-recursive
CTAGS: ctags
ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
$(am__define_uniq_tagged_files); \
test -z "$(CTAGS_ARGS)$$unique" \
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
$$unique
GTAGS:
here=`$(am__cd) $(top_builddir) && pwd` \
&& $(am__cd) $(top_srcdir) \
&& gtags -i $(GTAGS_ARGS) "$$here"
cscopelist: cscopelist-recursive
cscopelist-am: $(am__tagged_files)
list='$(am__tagged_files)'; \
case "$(srcdir)" in \
[\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
*) sdir=$(subdir)/$(srcdir) ;; \
esac; \
for i in $$list; do \
if test -f "$$i"; then \
echo "$(subdir)/$$i"; \
else \
echo "$$sdir/$$i"; \
fi; \
done >> $(top_builddir)/cscope.files
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
distdir: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
list='$(DISTFILES)'; \
dist_files=`for file in $$list; do echo $$file; done | \
sed -e "s|^$$srcdirstrip/||;t" \
-e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
case $$dist_files in \
*/*) $(MKDIR_P) `echo "$$dist_files" | \
sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
sort -u` ;; \
esac; \
for file in $$dist_files; do \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
if test -d $$d/$$file; then \
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
if test -d "$(distdir)/$$file"; then \
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \
cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
else \
test -f "$(distdir)/$$file" \
|| cp -p $$d/$$file "$(distdir)/$$file" \
|| exit 1; \
fi; \
done
@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
if test "$$subdir" = .; then :; else \
$(am__make_dryrun) \
|| test -d "$(distdir)/$$subdir" \
|| $(MKDIR_P) "$(distdir)/$$subdir" \
|| exit 1; \
dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
$(am__relativize); \
new_distdir=$$reldir; \
dir1=$$subdir; dir2="$(top_distdir)"; \
$(am__relativize); \
new_top_distdir=$$reldir; \
echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
($(am__cd) $$subdir && \
$(MAKE) $(AM_MAKEFLAGS) \
top_distdir="$$new_top_distdir" \
distdir="$$new_distdir" \
am__remove_distdir=: \
am__skip_length_check=: \
am__skip_mode_fix=: \
distdir) \
|| exit 1; \
fi; \
done
check-am: all-am
check: $(BUILT_SOURCES)
$(MAKE) $(AM_MAKEFLAGS) check-recursive
all-am: Makefile $(LIBRARIES) $(LTLIBRARIES) $(HEADERS)
installdirs: installdirs-recursive
installdirs-am:
install: $(BUILT_SOURCES)
$(MAKE) $(AM_MAKEFLAGS) install-recursive
install-exec: install-exec-recursive
install-data: install-data-recursive
uninstall: uninstall-recursive
install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
installcheck: installcheck-recursive
install-strip:
if test -z '$(STRIP)'; then \
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
install; \
else \
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
"INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
fi
mostlyclean-generic:
-test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES)
clean-generic:
-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
-test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
clean: clean-recursive
clean-am: clean-generic clean-libtool clean-noinstLIBRARIES \
clean-noinstLTLIBRARIES mostlyclean-am
distclean: distclean-recursive
-rm -rf ./$(DEPDIR)
-rm -f Makefile
distclean-am: clean-am distclean-compile distclean-generic \
distclean-tags
dvi: dvi-recursive
dvi-am:
html: html-recursive
html-am:
info: info-recursive
info-am:
install-data-am:
install-dvi: install-dvi-recursive
install-dvi-am:
install-exec-am:
install-html: install-html-recursive
install-html-am:
install-info: install-info-recursive
install-info-am:
install-man:
install-pdf: install-pdf-recursive
install-pdf-am:
install-ps: install-ps-recursive
install-ps-am:
installcheck-am:
maintainer-clean: maintainer-clean-recursive
-rm -rf ./$(DEPDIR)
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
mostlyclean: mostlyclean-recursive
mostlyclean-am: mostlyclean-compile mostlyclean-generic \
mostlyclean-libtool mostlyclean-local
pdf: pdf-recursive
pdf-am:
ps: ps-recursive
ps-am:
uninstall-am:
.MAKE: $(am__recursive_targets) all check install install-am \
install-strip
.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \
check-am clean clean-generic clean-libtool \
clean-noinstLIBRARIES clean-noinstLTLIBRARIES cscopelist-am \
ctags ctags-am distclean distclean-compile distclean-generic \
distclean-libtool distclean-tags distdir dvi dvi-am html \
html-am info info-am install install-am install-data \
install-data-am install-dvi install-dvi-am install-exec \
install-exec-am install-html install-html-am install-info \
install-info-am install-man install-pdf install-pdf-am \
install-ps install-ps-am install-strip installcheck \
installcheck-am installdirs installdirs-am maintainer-clean \
maintainer-clean-generic mostlyclean mostlyclean-compile \
mostlyclean-generic mostlyclean-libtool mostlyclean-local pdf \
pdf-am ps ps-am tags tags-am uninstall uninstall-am
# The arg-nonnull.h that gets inserted into generated .h files is the same as
# build-aux/snippet/arg-nonnull.h, except that it has the copyright header cut
# off.
arg-nonnull.h: $(top_srcdir)/config/snippet/arg-nonnull.h
$(AM_V_GEN)rm -f $@-t $@ && \
sed -n -e '/GL_ARG_NONNULL/,$$p' \
< $(top_srcdir)/config/snippet/arg-nonnull.h \
> $@-t && \
mv $@-t $@
# The c++defs.h that gets inserted into generated .h files is the same as
# build-aux/snippet/c++defs.h, except that it has the copyright header cut off.
c++defs.h: $(top_srcdir)/config/snippet/c++defs.h
$(AM_V_GEN)rm -f $@-t $@ && \
sed -n -e '/_GL_CXXDEFS/,$$p' \
< $(top_srcdir)/config/snippet/c++defs.h \
> $@-t && \
mv $@-t $@
# The warn-on-use.h that gets inserted into generated .h files is the same as
# build-aux/snippet/warn-on-use.h, except that it has the copyright header cut
# off.
warn-on-use.h: $(top_srcdir)/config/snippet/warn-on-use.h
$(AM_V_GEN)rm -f $@-t $@ && \
sed -n -e '/^.ifndef/,$$p' \
< $(top_srcdir)/config/snippet/warn-on-use.h \
> $@-t && \
mv $@-t $@
# We need the following in order to create when the system
# doesn't have one that works.
@GL_GENERATE_STDBOOL_H_TRUE@stdbool.h: stdbool.in.h $(top_builddir)/config.status
@GL_GENERATE_STDBOOL_H_TRUE@ $(AM_V_GEN)rm -f $@-t $@ && \
@GL_GENERATE_STDBOOL_H_TRUE@ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
@GL_GENERATE_STDBOOL_H_TRUE@ sed -e 's/@''HAVE__BOOL''@/$(HAVE__BOOL)/g' < $(srcdir)/stdbool.in.h; \
@GL_GENERATE_STDBOOL_H_TRUE@ } > $@-t && \
@GL_GENERATE_STDBOOL_H_TRUE@ mv $@-t $@
@GL_GENERATE_STDBOOL_H_FALSE@stdbool.h: $(top_builddir)/config.status
@GL_GENERATE_STDBOOL_H_FALSE@ rm -f $@
# We need the following in order to create when the system
# doesn't have one that works with the given compiler.
@GL_GENERATE_STDDEF_H_TRUE@stddef.h: stddef.in.h $(top_builddir)/config.status
@GL_GENERATE_STDDEF_H_TRUE@ $(AM_V_GEN)rm -f $@-t $@ && \
@GL_GENERATE_STDDEF_H_TRUE@ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
@GL_GENERATE_STDDEF_H_TRUE@ sed -e 's|@''GUARD_PREFIX''@|GL|g' \
@GL_GENERATE_STDDEF_H_TRUE@ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
@GL_GENERATE_STDDEF_H_TRUE@ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
@GL_GENERATE_STDDEF_H_TRUE@ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
@GL_GENERATE_STDDEF_H_TRUE@ -e 's|@''NEXT_STDDEF_H''@|$(NEXT_STDDEF_H)|g' \
@GL_GENERATE_STDDEF_H_TRUE@ -e 's|@''HAVE_WCHAR_T''@|$(HAVE_WCHAR_T)|g' \
@GL_GENERATE_STDDEF_H_TRUE@ -e 's|@''REPLACE_NULL''@|$(REPLACE_NULL)|g' \
@GL_GENERATE_STDDEF_H_TRUE@ < $(srcdir)/stddef.in.h; \
@GL_GENERATE_STDDEF_H_TRUE@ } > $@-t && \
@GL_GENERATE_STDDEF_H_TRUE@ mv $@-t $@
@GL_GENERATE_STDDEF_H_FALSE@stddef.h: $(top_builddir)/config.status
@GL_GENERATE_STDDEF_H_FALSE@ rm -f $@
# We need the following in order to create when the system
# doesn't have one that works with the given compiler.
sys/types.h: sys_types.in.h $(top_builddir)/config.status
$(AM_V_at)$(MKDIR_P) sys
$(AM_V_GEN)rm -f $@-t $@ && \
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
sed -e 's|@''GUARD_PREFIX''@|GL|g' \
-e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
-e 's|@''NEXT_SYS_TYPES_H''@|$(NEXT_SYS_TYPES_H)|g' \
-e 's|@''WINDOWS_64_BIT_OFF_T''@|$(WINDOWS_64_BIT_OFF_T)|g' \
< $(srcdir)/sys_types.in.h; \
} > $@-t && \
mv $@-t $@
# We need the following in order to create an empty placeholder for
# when the system doesn't have one.
unistd.h: unistd.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
$(AM_V_GEN)rm -f $@-t $@ && \
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
sed -e 's|@''GUARD_PREFIX''@|GL|g' \
-e 's|@''HAVE_UNISTD_H''@|$(HAVE_UNISTD_H)|g' \
-e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
-e 's|@''NEXT_UNISTD_H''@|$(NEXT_UNISTD_H)|g' \
-e 's|@''WINDOWS_64_BIT_OFF_T''@|$(WINDOWS_64_BIT_OFF_T)|g' \
-e 's/@''GNULIB_CHDIR''@/$(GNULIB_CHDIR)/g' \
-e 's/@''GNULIB_CHOWN''@/$(GNULIB_CHOWN)/g' \
-e 's/@''GNULIB_CLOSE''@/$(GNULIB_CLOSE)/g' \
-e 's/@''GNULIB_DUP''@/$(GNULIB_DUP)/g' \
-e 's/@''GNULIB_DUP2''@/$(GNULIB_DUP2)/g' \
-e 's/@''GNULIB_DUP3''@/$(GNULIB_DUP3)/g' \
-e 's/@''GNULIB_ENVIRON''@/$(GNULIB_ENVIRON)/g' \
-e 's/@''GNULIB_EUIDACCESS''@/$(GNULIB_EUIDACCESS)/g' \
-e 's/@''GNULIB_FACCESSAT''@/$(GNULIB_FACCESSAT)/g' \
-e 's/@''GNULIB_FCHDIR''@/$(GNULIB_FCHDIR)/g' \
-e 's/@''GNULIB_FCHOWNAT''@/$(GNULIB_FCHOWNAT)/g' \
-e 's/@''GNULIB_FDATASYNC''@/$(GNULIB_FDATASYNC)/g' \
-e 's/@''GNULIB_FSYNC''@/$(GNULIB_FSYNC)/g' \
-e 's/@''GNULIB_FTRUNCATE''@/$(GNULIB_FTRUNCATE)/g' \
-e 's/@''GNULIB_GETCWD''@/$(GNULIB_GETCWD)/g' \
-e 's/@''GNULIB_GETDOMAINNAME''@/$(GNULIB_GETDOMAINNAME)/g' \
-e 's/@''GNULIB_GETDTABLESIZE''@/$(GNULIB_GETDTABLESIZE)/g' \
-e 's/@''GNULIB_GETGROUPS''@/$(GNULIB_GETGROUPS)/g' \
-e 's/@''GNULIB_GETHOSTNAME''@/$(GNULIB_GETHOSTNAME)/g' \
-e 's/@''GNULIB_GETLOGIN''@/$(GNULIB_GETLOGIN)/g' \
-e 's/@''GNULIB_GETLOGIN_R''@/$(GNULIB_GETLOGIN_R)/g' \
-e 's/@''GNULIB_GETPAGESIZE''@/$(GNULIB_GETPAGESIZE)/g' \
-e 's/@''GNULIB_GETUSERSHELL''@/$(GNULIB_GETUSERSHELL)/g' \
-e 's/@''GNULIB_GROUP_MEMBER''@/$(GNULIB_GROUP_MEMBER)/g' \
-e 's/@''GNULIB_ISATTY''@/$(GNULIB_ISATTY)/g' \
-e 's/@''GNULIB_LCHOWN''@/$(GNULIB_LCHOWN)/g' \
-e 's/@''GNULIB_LINK''@/$(GNULIB_LINK)/g' \
-e 's/@''GNULIB_LINKAT''@/$(GNULIB_LINKAT)/g' \
-e 's/@''GNULIB_LSEEK''@/$(GNULIB_LSEEK)/g' \
-e 's/@''GNULIB_PIPE''@/$(GNULIB_PIPE)/g' \
-e 's/@''GNULIB_PIPE2''@/$(GNULIB_PIPE2)/g' \
-e 's/@''GNULIB_PREAD''@/$(GNULIB_PREAD)/g' \
-e 's/@''GNULIB_PWRITE''@/$(GNULIB_PWRITE)/g' \
-e 's/@''GNULIB_READ''@/$(GNULIB_READ)/g' \
-e 's/@''GNULIB_READLINK''@/$(GNULIB_READLINK)/g' \
-e 's/@''GNULIB_READLINKAT''@/$(GNULIB_READLINKAT)/g' \
-e 's/@''GNULIB_RMDIR''@/$(GNULIB_RMDIR)/g' \
-e 's/@''GNULIB_SETHOSTNAME''@/$(GNULIB_SETHOSTNAME)/g' \
-e 's/@''GNULIB_SLEEP''@/$(GNULIB_SLEEP)/g' \
-e 's/@''GNULIB_SYMLINK''@/$(GNULIB_SYMLINK)/g' \
-e 's/@''GNULIB_SYMLINKAT''@/$(GNULIB_SYMLINKAT)/g' \
-e 's/@''GNULIB_TTYNAME_R''@/$(GNULIB_TTYNAME_R)/g' \
-e 's/@''GNULIB_UNISTD_H_GETOPT''@/0$(GNULIB_GL_UNISTD_H_GETOPT)/g' \
-e 's/@''GNULIB_UNISTD_H_NONBLOCKING''@/$(GNULIB_UNISTD_H_NONBLOCKING)/g' \
-e 's/@''GNULIB_UNISTD_H_SIGPIPE''@/$(GNULIB_UNISTD_H_SIGPIPE)/g' \
-e 's/@''GNULIB_UNLINK''@/$(GNULIB_UNLINK)/g' \
-e 's/@''GNULIB_UNLINKAT''@/$(GNULIB_UNLINKAT)/g' \
-e 's/@''GNULIB_USLEEP''@/$(GNULIB_USLEEP)/g' \
-e 's/@''GNULIB_WRITE''@/$(GNULIB_WRITE)/g' \
< $(srcdir)/unistd.in.h | \
sed -e 's|@''HAVE_CHOWN''@|$(HAVE_CHOWN)|g' \
-e 's|@''HAVE_DUP2''@|$(HAVE_DUP2)|g' \
-e 's|@''HAVE_DUP3''@|$(HAVE_DUP3)|g' \
-e 's|@''HAVE_EUIDACCESS''@|$(HAVE_EUIDACCESS)|g' \
-e 's|@''HAVE_FACCESSAT''@|$(HAVE_FACCESSAT)|g' \
-e 's|@''HAVE_FCHDIR''@|$(HAVE_FCHDIR)|g' \
-e 's|@''HAVE_FCHOWNAT''@|$(HAVE_FCHOWNAT)|g' \
-e 's|@''HAVE_FDATASYNC''@|$(HAVE_FDATASYNC)|g' \
-e 's|@''HAVE_FSYNC''@|$(HAVE_FSYNC)|g' \
-e 's|@''HAVE_FTRUNCATE''@|$(HAVE_FTRUNCATE)|g' \
-e 's|@''HAVE_GETDTABLESIZE''@|$(HAVE_GETDTABLESIZE)|g' \
-e 's|@''HAVE_GETGROUPS''@|$(HAVE_GETGROUPS)|g' \
-e 's|@''HAVE_GETHOSTNAME''@|$(HAVE_GETHOSTNAME)|g' \
-e 's|@''HAVE_GETLOGIN''@|$(HAVE_GETLOGIN)|g' \
-e 's|@''HAVE_GETPAGESIZE''@|$(HAVE_GETPAGESIZE)|g' \
-e 's|@''HAVE_GROUP_MEMBER''@|$(HAVE_GROUP_MEMBER)|g' \
-e 's|@''HAVE_LCHOWN''@|$(HAVE_LCHOWN)|g' \
-e 's|@''HAVE_LINK''@|$(HAVE_LINK)|g' \
-e 's|@''HAVE_LINKAT''@|$(HAVE_LINKAT)|g' \
-e 's|@''HAVE_PIPE''@|$(HAVE_PIPE)|g' \
-e 's|@''HAVE_PIPE2''@|$(HAVE_PIPE2)|g' \
-e 's|@''HAVE_PREAD''@|$(HAVE_PREAD)|g' \
-e 's|@''HAVE_PWRITE''@|$(HAVE_PWRITE)|g' \
-e 's|@''HAVE_READLINK''@|$(HAVE_READLINK)|g' \
-e 's|@''HAVE_READLINKAT''@|$(HAVE_READLINKAT)|g' \
-e 's|@''HAVE_SETHOSTNAME''@|$(HAVE_SETHOSTNAME)|g' \
-e 's|@''HAVE_SLEEP''@|$(HAVE_SLEEP)|g' \
-e 's|@''HAVE_SYMLINK''@|$(HAVE_SYMLINK)|g' \
-e 's|@''HAVE_SYMLINKAT''@|$(HAVE_SYMLINKAT)|g' \
-e 's|@''HAVE_UNLINKAT''@|$(HAVE_UNLINKAT)|g' \
-e 's|@''HAVE_USLEEP''@|$(HAVE_USLEEP)|g' \
-e 's|@''HAVE_DECL_ENVIRON''@|$(HAVE_DECL_ENVIRON)|g' \
-e 's|@''HAVE_DECL_FCHDIR''@|$(HAVE_DECL_FCHDIR)|g' \
-e 's|@''HAVE_DECL_FDATASYNC''@|$(HAVE_DECL_FDATASYNC)|g' \
-e 's|@''HAVE_DECL_GETDOMAINNAME''@|$(HAVE_DECL_GETDOMAINNAME)|g' \
-e 's|@''HAVE_DECL_GETLOGIN_R''@|$(HAVE_DECL_GETLOGIN_R)|g' \
-e 's|@''HAVE_DECL_GETPAGESIZE''@|$(HAVE_DECL_GETPAGESIZE)|g' \
-e 's|@''HAVE_DECL_GETUSERSHELL''@|$(HAVE_DECL_GETUSERSHELL)|g' \
-e 's|@''HAVE_DECL_SETHOSTNAME''@|$(HAVE_DECL_SETHOSTNAME)|g' \
-e 's|@''HAVE_DECL_TTYNAME_R''@|$(HAVE_DECL_TTYNAME_R)|g' \
-e 's|@''HAVE_OS_H''@|$(HAVE_OS_H)|g' \
-e 's|@''HAVE_SYS_PARAM_H''@|$(HAVE_SYS_PARAM_H)|g' \
| \
sed -e 's|@''REPLACE_CHOWN''@|$(REPLACE_CHOWN)|g' \
-e 's|@''REPLACE_CLOSE''@|$(REPLACE_CLOSE)|g' \
-e 's|@''REPLACE_DUP''@|$(REPLACE_DUP)|g' \
-e 's|@''REPLACE_DUP2''@|$(REPLACE_DUP2)|g' \
-e 's|@''REPLACE_FCHOWNAT''@|$(REPLACE_FCHOWNAT)|g' \
-e 's|@''REPLACE_FTRUNCATE''@|$(REPLACE_FTRUNCATE)|g' \
-e 's|@''REPLACE_GETCWD''@|$(REPLACE_GETCWD)|g' \
-e 's|@''REPLACE_GETDOMAINNAME''@|$(REPLACE_GETDOMAINNAME)|g' \
-e 's|@''REPLACE_GETLOGIN_R''@|$(REPLACE_GETLOGIN_R)|g' \
-e 's|@''REPLACE_GETGROUPS''@|$(REPLACE_GETGROUPS)|g' \
-e 's|@''REPLACE_GETPAGESIZE''@|$(REPLACE_GETPAGESIZE)|g' \
-e 's|@''REPLACE_ISATTY''@|$(REPLACE_ISATTY)|g' \
-e 's|@''REPLACE_LCHOWN''@|$(REPLACE_LCHOWN)|g' \
-e 's|@''REPLACE_LINK''@|$(REPLACE_LINK)|g' \
-e 's|@''REPLACE_LINKAT''@|$(REPLACE_LINKAT)|g' \
-e 's|@''REPLACE_LSEEK''@|$(REPLACE_LSEEK)|g' \
-e 's|@''REPLACE_PREAD''@|$(REPLACE_PREAD)|g' \
-e 's|@''REPLACE_PWRITE''@|$(REPLACE_PWRITE)|g' \
-e 's|@''REPLACE_READ''@|$(REPLACE_READ)|g' \
-e 's|@''REPLACE_READLINK''@|$(REPLACE_READLINK)|g' \
-e 's|@''REPLACE_RMDIR''@|$(REPLACE_RMDIR)|g' \
-e 's|@''REPLACE_SLEEP''@|$(REPLACE_SLEEP)|g' \
-e 's|@''REPLACE_SYMLINK''@|$(REPLACE_SYMLINK)|g' \
-e 's|@''REPLACE_TTYNAME_R''@|$(REPLACE_TTYNAME_R)|g' \
-e 's|@''REPLACE_UNLINK''@|$(REPLACE_UNLINK)|g' \
-e 's|@''REPLACE_UNLINKAT''@|$(REPLACE_UNLINKAT)|g' \
-e 's|@''REPLACE_USLEEP''@|$(REPLACE_USLEEP)|g' \
-e 's|@''REPLACE_WRITE''@|$(REPLACE_WRITE)|g' \
-e 's|@''UNISTD_H_HAVE_WINSOCK2_H''@|$(UNISTD_H_HAVE_WINSOCK2_H)|g' \
-e 's|@''UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS''@|$(UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS)|g' \
-e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
-e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
-e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \
} > $@-t && \
mv $@-t $@
mostlyclean-local: mostlyclean-generic
@for dir in '' $(MOSTLYCLEANDIRS); do \
if test -n "$$dir" && test -d $$dir; then \
echo "rmdir $$dir"; rmdir $$dir; \
fi; \
done; \
:
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:
tenace-0.13/lib/sys_types.in.h 0000644 0004016 0004016 00000003175 12215417300 013200 0000000 0000000 /* Provide a more complete sys/types.h.
Copyright (C) 2011-2013 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3, or (at your option)
any later version.
This program 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 General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, see . */
#if __GNUC__ >= 3
@PRAGMA_SYSTEM_HEADER@
#endif
@PRAGMA_COLUMNS@
#ifndef _@GUARD_PREFIX@_SYS_TYPES_H
/* The include_next requires a split double-inclusion guard. */
#@INCLUDE_NEXT@ @NEXT_SYS_TYPES_H@
#ifndef _@GUARD_PREFIX@_SYS_TYPES_H
#define _@GUARD_PREFIX@_SYS_TYPES_H
/* Override off_t if Large File Support is requested on native Windows. */
#if @WINDOWS_64_BIT_OFF_T@
/* Same as int64_t in . */
# if defined _MSC_VER
# define off_t __int64
# else
# define off_t long long int
# endif
/* Indicator, for gnulib internal purposes. */
# define _GL_WINDOWS_64_BIT_OFF_T 1
#endif
/* MSVC 9 defines size_t in , not in . */
/* But avoid namespace pollution on glibc systems. */
#if ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__) \
&& ! defined __GLIBC__
# include
#endif
#endif /* _@GUARD_PREFIX@_SYS_TYPES_H */
#endif /* _@GUARD_PREFIX@_SYS_TYPES_H */
tenace-0.13/lib/c-ctype.h 0000644 0004016 0004016 00000022073 12215417300 012073 0000000 0000000 /* Character handling in C locale.
These functions work like the corresponding functions in ,
except that they have the C (POSIX) locale hardwired, whereas the
functions' behaviour depends on the current locale set via
setlocale.
Copyright (C) 2000-2003, 2006, 2008-2013 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
This program 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 General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, see . */
#ifndef C_CTYPE_H
#define C_CTYPE_H
#include
#ifdef __cplusplus
extern "C" {
#endif
/* The functions defined in this file assume the "C" locale and a character
set without diacritics (ASCII-US or EBCDIC-US or something like that).
Even if the "C" locale on a particular system is an extension of the ASCII
character set (like on BeOS, where it is UTF-8, or on AmigaOS, where it
is ISO-8859-1), the functions in this file recognize only the ASCII
characters. */
/* Check whether the ASCII optimizations apply. */
/* ANSI C89 (and ISO C99 5.2.1.3 too) already guarantees that
'0', '1', ..., '9' have consecutive integer values. */
#define C_CTYPE_CONSECUTIVE_DIGITS 1
#if ('A' <= 'Z') \
&& ('A' + 1 == 'B') && ('B' + 1 == 'C') && ('C' + 1 == 'D') \
&& ('D' + 1 == 'E') && ('E' + 1 == 'F') && ('F' + 1 == 'G') \
&& ('G' + 1 == 'H') && ('H' + 1 == 'I') && ('I' + 1 == 'J') \
&& ('J' + 1 == 'K') && ('K' + 1 == 'L') && ('L' + 1 == 'M') \
&& ('M' + 1 == 'N') && ('N' + 1 == 'O') && ('O' + 1 == 'P') \
&& ('P' + 1 == 'Q') && ('Q' + 1 == 'R') && ('R' + 1 == 'S') \
&& ('S' + 1 == 'T') && ('T' + 1 == 'U') && ('U' + 1 == 'V') \
&& ('V' + 1 == 'W') && ('W' + 1 == 'X') && ('X' + 1 == 'Y') \
&& ('Y' + 1 == 'Z')
#define C_CTYPE_CONSECUTIVE_UPPERCASE 1
#endif
#if ('a' <= 'z') \
&& ('a' + 1 == 'b') && ('b' + 1 == 'c') && ('c' + 1 == 'd') \
&& ('d' + 1 == 'e') && ('e' + 1 == 'f') && ('f' + 1 == 'g') \
&& ('g' + 1 == 'h') && ('h' + 1 == 'i') && ('i' + 1 == 'j') \
&& ('j' + 1 == 'k') && ('k' + 1 == 'l') && ('l' + 1 == 'm') \
&& ('m' + 1 == 'n') && ('n' + 1 == 'o') && ('o' + 1 == 'p') \
&& ('p' + 1 == 'q') && ('q' + 1 == 'r') && ('r' + 1 == 's') \
&& ('s' + 1 == 't') && ('t' + 1 == 'u') && ('u' + 1 == 'v') \
&& ('v' + 1 == 'w') && ('w' + 1 == 'x') && ('x' + 1 == 'y') \
&& ('y' + 1 == 'z')
#define C_CTYPE_CONSECUTIVE_LOWERCASE 1
#endif
#if (' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \
&& ('%' == 37) && ('&' == 38) && ('\'' == 39) && ('(' == 40) \
&& (')' == 41) && ('*' == 42) && ('+' == 43) && (',' == 44) \
&& ('-' == 45) && ('.' == 46) && ('/' == 47) && ('0' == 48) \
&& ('1' == 49) && ('2' == 50) && ('3' == 51) && ('4' == 52) \
&& ('5' == 53) && ('6' == 54) && ('7' == 55) && ('8' == 56) \
&& ('9' == 57) && (':' == 58) && (';' == 59) && ('<' == 60) \
&& ('=' == 61) && ('>' == 62) && ('?' == 63) && ('A' == 65) \
&& ('B' == 66) && ('C' == 67) && ('D' == 68) && ('E' == 69) \
&& ('F' == 70) && ('G' == 71) && ('H' == 72) && ('I' == 73) \
&& ('J' == 74) && ('K' == 75) && ('L' == 76) && ('M' == 77) \
&& ('N' == 78) && ('O' == 79) && ('P' == 80) && ('Q' == 81) \
&& ('R' == 82) && ('S' == 83) && ('T' == 84) && ('U' == 85) \
&& ('V' == 86) && ('W' == 87) && ('X' == 88) && ('Y' == 89) \
&& ('Z' == 90) && ('[' == 91) && ('\\' == 92) && (']' == 93) \
&& ('^' == 94) && ('_' == 95) && ('a' == 97) && ('b' == 98) \
&& ('c' == 99) && ('d' == 100) && ('e' == 101) && ('f' == 102) \
&& ('g' == 103) && ('h' == 104) && ('i' == 105) && ('j' == 106) \
&& ('k' == 107) && ('l' == 108) && ('m' == 109) && ('n' == 110) \
&& ('o' == 111) && ('p' == 112) && ('q' == 113) && ('r' == 114) \
&& ('s' == 115) && ('t' == 116) && ('u' == 117) && ('v' == 118) \
&& ('w' == 119) && ('x' == 120) && ('y' == 121) && ('z' == 122) \
&& ('{' == 123) && ('|' == 124) && ('}' == 125) && ('~' == 126)
/* The character set is ASCII or one of its variants or extensions, not EBCDIC.
Testing the value of '\n' and '\r' is not relevant. */
#define C_CTYPE_ASCII 1
#endif
/* Function declarations. */
/* Unlike the functions in , which require an argument in the range
of the 'unsigned char' type, the functions here operate on values that are
in the 'unsigned char' range or in the 'char' range. In other words,
when you have a 'char' value, you need to cast it before using it as
argument to a function:
const char *s = ...;
if (isalpha ((unsigned char) *s)) ...
but you don't need to cast it for the functions defined in this file:
const char *s = ...;
if (c_isalpha (*s)) ...
*/
extern bool c_isascii (int c) _GL_ATTRIBUTE_CONST; /* not locale dependent */
extern bool c_isalnum (int c) _GL_ATTRIBUTE_CONST;
extern bool c_isalpha (int c) _GL_ATTRIBUTE_CONST;
extern bool c_isblank (int c) _GL_ATTRIBUTE_CONST;
extern bool c_iscntrl (int c) _GL_ATTRIBUTE_CONST;
extern bool c_isdigit (int c) _GL_ATTRIBUTE_CONST;
extern bool c_islower (int c) _GL_ATTRIBUTE_CONST;
extern bool c_isgraph (int c) _GL_ATTRIBUTE_CONST;
extern bool c_isprint (int c) _GL_ATTRIBUTE_CONST;
extern bool c_ispunct (int c) _GL_ATTRIBUTE_CONST;
extern bool c_isspace (int c) _GL_ATTRIBUTE_CONST;
extern bool c_isupper (int c) _GL_ATTRIBUTE_CONST;
extern bool c_isxdigit (int c) _GL_ATTRIBUTE_CONST;
extern int c_tolower (int c) _GL_ATTRIBUTE_CONST;
extern int c_toupper (int c) _GL_ATTRIBUTE_CONST;
#if (defined __GNUC__ && !defined __STRICT_ANSI__ && defined __OPTIMIZE__ \
&& !defined __OPTIMIZE_SIZE__ && !defined NO_C_CTYPE_MACROS)
/* ASCII optimizations. */
#undef c_isascii
#define c_isascii(c) \
({ int __c = (c); \
(__c >= 0x00 && __c <= 0x7f); \
})
#if C_CTYPE_CONSECUTIVE_DIGITS \
&& C_CTYPE_CONSECUTIVE_UPPERCASE && C_CTYPE_CONSECUTIVE_LOWERCASE
#if C_CTYPE_ASCII
#undef c_isalnum
#define c_isalnum(c) \
({ int __c = (c); \
((__c >= '0' && __c <= '9') \
|| ((__c & ~0x20) >= 'A' && (__c & ~0x20) <= 'Z')); \
})
#else
#undef c_isalnum
#define c_isalnum(c) \
({ int __c = (c); \
((__c >= '0' && __c <= '9') \
|| (__c >= 'A' && __c <= 'Z') \
|| (__c >= 'a' && __c <= 'z')); \
})
#endif
#endif
#if C_CTYPE_CONSECUTIVE_UPPERCASE && C_CTYPE_CONSECUTIVE_LOWERCASE
#if C_CTYPE_ASCII
#undef c_isalpha
#define c_isalpha(c) \
({ int __c = (c); \
((__c & ~0x20) >= 'A' && (__c & ~0x20) <= 'Z'); \
})
#else
#undef c_isalpha
#define c_isalpha(c) \
({ int __c = (c); \
((__c >= 'A' && __c <= 'Z') || (__c >= 'a' && __c <= 'z')); \
})
#endif
#endif
#undef c_isblank
#define c_isblank(c) \
({ int __c = (c); \
(__c == ' ' || __c == '\t'); \
})
#if C_CTYPE_ASCII
#undef c_iscntrl
#define c_iscntrl(c) \
({ int __c = (c); \
((__c & ~0x1f) == 0 || __c == 0x7f); \
})
#endif
#if C_CTYPE_CONSECUTIVE_DIGITS
#undef c_isdigit
#define c_isdigit(c) \
({ int __c = (c); \
(__c >= '0' && __c <= '9'); \
})
#endif
#if C_CTYPE_CONSECUTIVE_LOWERCASE
#undef c_islower
#define c_islower(c) \
({ int __c = (c); \
(__c >= 'a' && __c <= 'z'); \
})
#endif
#if C_CTYPE_ASCII
#undef c_isgraph
#define c_isgraph(c) \
({ int __c = (c); \
(__c >= '!' && __c <= '~'); \
})
#endif
#if C_CTYPE_ASCII
#undef c_isprint
#define c_isprint(c) \
({ int __c = (c); \
(__c >= ' ' && __c <= '~'); \
})
#endif
#if C_CTYPE_ASCII
#undef c_ispunct
#define c_ispunct(c) \
({ int _c = (c); \
(c_isgraph (_c) && ! c_isalnum (_c)); \
})
#endif
#undef c_isspace
#define c_isspace(c) \
({ int __c = (c); \
(__c == ' ' || __c == '\t' \
|| __c == '\n' || __c == '\v' || __c == '\f' || __c == '\r'); \
})
#if C_CTYPE_CONSECUTIVE_UPPERCASE
#undef c_isupper
#define c_isupper(c) \
({ int __c = (c); \
(__c >= 'A' && __c <= 'Z'); \
})
#endif
#if C_CTYPE_CONSECUTIVE_DIGITS \
&& C_CTYPE_CONSECUTIVE_UPPERCASE && C_CTYPE_CONSECUTIVE_LOWERCASE
#if C_CTYPE_ASCII
#undef c_isxdigit
#define c_isxdigit(c) \
({ int __c = (c); \
((__c >= '0' && __c <= '9') \
|| ((__c & ~0x20) >= 'A' && (__c & ~0x20) <= 'F')); \
})
#else
#undef c_isxdigit
#define c_isxdigit(c) \
({ int __c = (c); \
((__c >= '0' && __c <= '9') \
|| (__c >= 'A' && __c <= 'F') \
|| (__c >= 'a' && __c <= 'f')); \
})
#endif
#endif
#if C_CTYPE_CONSECUTIVE_UPPERCASE && C_CTYPE_CONSECUTIVE_LOWERCASE
#undef c_tolower
#define c_tolower(c) \
({ int __c = (c); \
(__c >= 'A' && __c <= 'Z' ? __c - 'A' + 'a' : __c); \
})
#undef c_toupper
#define c_toupper(c) \
({ int __c = (c); \
(__c >= 'a' && __c <= 'z' ? __c - 'a' + 'A' : __c); \
})
#endif
#endif /* optimizing for speed */
#ifdef __cplusplus
}
#endif
#endif /* C_CTYPE_H */
tenace-0.13/lib/nproc.c 0000644 0004016 0004016 00000023356 12215417300 011650 0000000 0000000 /* Detect the number of processors.
Copyright (C) 2009-2013 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3, or (at your option)
any later version.
This program 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 General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, see . */
/* Written by Glen Lenker and Bruno Haible. */
#include
#include "nproc.h"
#include
#include
#if HAVE_PTHREAD_GETAFFINITY_NP && 0
# include
# include
#endif
#if HAVE_SCHED_GETAFFINITY_LIKE_GLIBC || HAVE_SCHED_GETAFFINITY_NP
# include
#endif
#include
#if HAVE_SYS_PSTAT_H
# include
#endif
#if HAVE_SYS_SYSMP_H
# include
#endif
#if HAVE_SYS_PARAM_H
# include
#endif
#if HAVE_SYS_SYSCTL_H
# include
#endif
#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
# define WIN32_LEAN_AND_MEAN
# include
#endif
#include "c-ctype.h"
#define ARRAY_SIZE(a) (sizeof (a) / sizeof ((a)[0]))
/* Return the number of processors available to the current process, based
on a modern system call that returns the "affinity" between the current
process and each CPU. Return 0 if unknown or if such a system call does
not exist. */
static unsigned long
num_processors_via_affinity_mask (void)
{
/* glibc >= 2.3.3 with NPTL and NetBSD 5 have pthread_getaffinity_np,
but with different APIs. Also it requires linking with -lpthread.
Therefore this code is not enabled.
glibc >= 2.3.4 has sched_getaffinity whereas NetBSD 5 has
sched_getaffinity_np. */
#if HAVE_PTHREAD_GETAFFINITY_NP && defined __GLIBC__ && 0
{
cpu_set_t set;
if (pthread_getaffinity_np (pthread_self (), sizeof (set), &set) == 0)
{
unsigned long count;
# ifdef CPU_COUNT
/* glibc >= 2.6 has the CPU_COUNT macro. */
count = CPU_COUNT (&set);
# else
size_t i;
count = 0;
for (i = 0; i < CPU_SETSIZE; i++)
if (CPU_ISSET (i, &set))
count++;
# endif
if (count > 0)
return count;
}
}
#elif HAVE_PTHREAD_GETAFFINITY_NP && defined __NetBSD__ && 0
{
cpuset_t *set;
set = cpuset_create ();
if (set != NULL)
{
unsigned long count = 0;
if (pthread_getaffinity_np (pthread_self (), cpuset_size (set), set)
== 0)
{
cpuid_t i;
for (i = 0;; i++)
{
int ret = cpuset_isset (i, set);
if (ret < 0)
break;
if (ret > 0)
count++;
}
}
cpuset_destroy (set);
if (count > 0)
return count;
}
}
#elif HAVE_SCHED_GETAFFINITY_LIKE_GLIBC /* glibc >= 2.3.4 */
{
cpu_set_t set;
if (sched_getaffinity (0, sizeof (set), &set) == 0)
{
unsigned long count;
# ifdef CPU_COUNT
/* glibc >= 2.6 has the CPU_COUNT macro. */
count = CPU_COUNT (&set);
# else
size_t i;
count = 0;
for (i = 0; i < CPU_SETSIZE; i++)
if (CPU_ISSET (i, &set))
count++;
# endif
if (count > 0)
return count;
}
}
#elif HAVE_SCHED_GETAFFINITY_NP /* NetBSD >= 5 */
{
cpuset_t *set;
set = cpuset_create ();
if (set != NULL)
{
unsigned long count = 0;
if (sched_getaffinity_np (getpid (), cpuset_size (set), set) == 0)
{
cpuid_t i;
for (i = 0;; i++)
{
int ret = cpuset_isset (i, set);
if (ret < 0)
break;
if (ret > 0)
count++;
}
}
cpuset_destroy (set);
if (count > 0)
return count;
}
}
#endif
#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
{ /* This works on native Windows platforms. */
DWORD_PTR process_mask;
DWORD_PTR system_mask;
if (GetProcessAffinityMask (GetCurrentProcess (),
&process_mask, &system_mask))
{
DWORD_PTR mask = process_mask;
unsigned long count = 0;
for (; mask != 0; mask = mask >> 1)
if (mask & 1)
count++;
if (count > 0)
return count;
}
}
#endif
return 0;
}
unsigned long int
num_processors (enum nproc_query query)
{
if (query == NPROC_CURRENT_OVERRIDABLE)
{
/* Test the environment variable OMP_NUM_THREADS, recognized also by all
programs that are based on OpenMP. The OpenMP spec says that the
value assigned to the environment variable "may have leading and
trailing white space". */
const char *envvalue = getenv ("OMP_NUM_THREADS");
if (envvalue != NULL)
{
while (*envvalue != '\0' && c_isspace (*envvalue))
envvalue++;
/* Convert it from decimal to 'unsigned long'. */
if (c_isdigit (*envvalue))
{
char *endptr = NULL;
unsigned long int value = strtoul (envvalue, &endptr, 10);
if (endptr != NULL)
{
while (*endptr != '\0' && c_isspace (*endptr))
endptr++;
if (*endptr == '\0')
return (value > 0 ? value : 1);
}
}
}
query = NPROC_CURRENT;
}
/* Here query is one of NPROC_ALL, NPROC_CURRENT. */
/* On systems with a modern affinity mask system call, we have
sysconf (_SC_NPROCESSORS_CONF)
>= sysconf (_SC_NPROCESSORS_ONLN)
>= num_processors_via_affinity_mask ()
The first number is the number of CPUs configured in the system.
The second number is the number of CPUs available to the scheduler.
The third number is the number of CPUs available to the current process.
Note! On Linux systems with glibc, the first and second number come from
the /sys and /proc file systems (see
glibc/sysdeps/unix/sysv/linux/getsysstats.c).
In some situations these file systems are not mounted, and the sysconf
call returns 1, which does not reflect the reality. */
if (query == NPROC_CURRENT)
{
/* Try the modern affinity mask system call. */
{
unsigned long nprocs = num_processors_via_affinity_mask ();
if (nprocs > 0)
return nprocs;
}
#if defined _SC_NPROCESSORS_ONLN
{ /* This works on glibc, Mac OS X 10.5, FreeBSD, AIX, OSF/1, Solaris,
Cygwin, Haiku. */
long int nprocs = sysconf (_SC_NPROCESSORS_ONLN);
if (nprocs > 0)
return nprocs;
}
#endif
}
else /* query == NPROC_ALL */
{
#if defined _SC_NPROCESSORS_CONF
{ /* This works on glibc, Mac OS X 10.5, FreeBSD, AIX, OSF/1, Solaris,
Cygwin, Haiku. */
long int nprocs = sysconf (_SC_NPROCESSORS_CONF);
# if __GLIBC__ >= 2 && defined __linux__
/* On Linux systems with glibc, this information comes from the /sys and
/proc file systems (see glibc/sysdeps/unix/sysv/linux/getsysstats.c).
In some situations these file systems are not mounted, and the
sysconf call returns 1. But we wish to guarantee that
num_processors (NPROC_ALL) >= num_processors (NPROC_CURRENT). */
if (nprocs == 1)
{
unsigned long nprocs_current = num_processors_via_affinity_mask ();
if (nprocs_current > 0)
nprocs = nprocs_current;
}
# endif
if (nprocs > 0)
return nprocs;
}
#endif
}
#if HAVE_PSTAT_GETDYNAMIC
{ /* This works on HP-UX. */
struct pst_dynamic psd;
if (pstat_getdynamic (&psd, sizeof psd, 1, 0) >= 0)
{
/* The field psd_proc_cnt contains the number of active processors.
In newer releases of HP-UX 11, the field psd_max_proc_cnt includes
deactivated processors. */
if (query == NPROC_CURRENT)
{
if (psd.psd_proc_cnt > 0)
return psd.psd_proc_cnt;
}
else
{
if (psd.psd_max_proc_cnt > 0)
return psd.psd_max_proc_cnt;
}
}
}
#endif
#if HAVE_SYSMP && defined MP_NAPROCS && defined MP_NPROCS
{ /* This works on IRIX. */
/* MP_NPROCS yields the number of installed processors.
MP_NAPROCS yields the number of processors available to unprivileged
processes. */
int nprocs =
sysmp (query == NPROC_CURRENT && getpid () != 0
? MP_NAPROCS
: MP_NPROCS);
if (nprocs > 0)
return nprocs;
}
#endif
/* Finally, as fallback, use the APIs that don't distinguish between
NPROC_CURRENT and NPROC_ALL. */
#if HAVE_SYSCTL && defined HW_NCPU
{ /* This works on Mac OS X, FreeBSD, NetBSD, OpenBSD. */
int nprocs;
size_t len = sizeof (nprocs);
static int mib[2] = { CTL_HW, HW_NCPU };
if (sysctl (mib, ARRAY_SIZE (mib), &nprocs, &len, NULL, 0) == 0
&& len == sizeof (nprocs)
&& 0 < nprocs)
return nprocs;
}
#endif
#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
{ /* This works on native Windows platforms. */
SYSTEM_INFO system_info;
GetSystemInfo (&system_info);
if (0 < system_info.dwNumberOfProcessors)
return system_info.dwNumberOfProcessors;
}
#endif
return 1;
}
tenace-0.13/AUTHORS 0000664 0004016 0004016 00000000035 11500771612 010661 0000000 0000000 Christoph Berg
tenace-0.13/dds/ 0000775 0004016 0004016 00000000000 12225341154 010444 5 0000000 0000000 tenace-0.13/dds/release_notes.txt 0000664 0004016 0004016 00000025237 11524603602 013766 0000000 0000000 Release Notes DDS 1.0.1
-----------------------
Includes support for reuse of the transposition table
contents for a subsequent search. (This idea was brought forward
independently by Alex Martelli and Flip Cronje.)
When setting the SolveBoard solutions to 2, the transposition
table contents will be reused when searching for alternative cards,
giving a slightly decreased search time in most cases, in a few cases
the decrease is substantial.
Earlier the contents of the transposition table was always emptied
between searches.
The way to control whether or not to empty the transposition table
is to properly set the parameter mtd in the InitSearch function:
mtd=FALSE means that the transposition table is emptied, mtd=TRUE
that it is not emptied.
Release Notes DDS 1.0.2
-----------------------
Includes a bug fix for the case when the SolveBoard parameter
"solutions" is set to 3. SolveBoard did not handle correctly the case
when the scores of the alternative cards were a mix of zero and
non-zero. This is now fixed in 1.0.2.
Release Notes DDS 1.0.3
-----------------------
Includes:
a) An improvement of the move ordering algorithm. When LHO ruffs,
this is now given a low weight if the highest rank of RHO beats both
the rank of the leading card and the highest rank of the leading suit
at the partner of the leading hand, assuming that the partner of the
leading hand is not void in the suit of the leading card.
If these conditions do not hold, the weight for the LHO ruffing card is
high.
b) For the SolveBoard parameter solutions=3, reuse of the transposition
table contents between card searches have been added.
a) and b) together give on the average an improvement performance.
Release Notes DDS 1.0.4
-----------------------
When introducing the possibility of reusing the transposition table
between subsequent searches in 1.0.1, unfortunately a bug was introduced
as well. It occassionally gives wrong scores when evaluating the last hand
of the trick using solutions=2 or 3.
This bug is fixed in 1.0.4.
Release Notes DDS 1.0.5
--------------------------
1) About 25% speed improvement due to a search algorithm improvement:
For moves generated in the search tree, only one "small" card move per hand
and suit is generated. By "small" card is meant a card with a rank that is
not winning due to its rank value.
Earlier all "small" cards generated their own moves.
This improvement comes from a tip by Hans Kuijf.
2) The size of the transposition table has been increased by 25%. This was
done after realizing that for some extreme deals, rarely occuring, when
solutions=2 and 3 the transposition table could get completely filled up,
making the search time extremely long for those cases.
The increased transposition table size should still fit well inside a 256 MB
machine.
3) Parameter mode=2 indicates that the transposition table is reused from an
earlier SolveBoard call. It is restricted to the case where the same conditions
apply for the 2 calls, except that the leading hand in the second call is the
partner to the leading hand in the first call.
I.e. same deal incl same trump suit, same target (not equal to -1), solutions=1.
Release Notes DDS 1.0.6
--------------------------
1) A bug has been fixed in the DDS start up code.
The bug did not affect the accuracy of the solver.
Thanks to Fabien Bradmetz for spotting this!
2) About 10% increased speed due to improvements in Quick Tricks.
3) An error code has been added for checking the input of of cards earlier played
in the trick.
4) A document (mode2.txt) describes source code examples how to call
SolveBoard using the parameter mode set to 2.
Release Notes DDS 1.1.0
---------------------------
1) Performance improvement giving a speed of about twice that of 1.0.6.
2) Redesign of the transposition table solution, see algorithm description.
3) Improvements in the Quicktricks algorithm, see algorithm description.
4) Dump in text file of SolveBoard parameters if SolveBoard returns with
error code.
Release Notes DDS 1.1.1
---------------------------
1) For target=-1 and solutions=1/2/3, the transposition table contents is now
reused also when SolveBoard is called with a new target value.
2) Slight improvement of the QuickTricks algorithm.
3) Moderate speed improvement compared to 1.1.1.
Release Notes DDS 1.1.2
---------------------------
1) Increased performance (about 15%) due to improved
algorithm for move ordering. For more information, look in the
algorithm description.
Release Notes DDS 1.1.3
---------------------------
1) Compiles with Visual C++ 2005 Express edition
2) Some improvements in move ordering, quick tricks
and the new later tricks algorithms.
3) Total improvement about 20% including the faster
code generated by Visual C++ and the algorithm
improvements.
Release Notes DDS 1.1.4
---------------------------
Improvements at usage of the SolveBoard parameter
mode set to 2.
The mode parameter can now be set to 2 for SolveBoard
calls with parameter target set to -1 or a value 0-13,
and solutions set to 1, 2 or 3.
Following the first SolveBoard call with mode=1, mode
can be set to 2 for any further SolveBoard call for
the same deal, also when an opponent hand leads the trick.
If scores are to be calculated for all 4 possible leading hands
of the deal, 1 SolveBoard call can be made with mode=1, and the
other 3 SolveBoard calls for the other 3 leading hands can be
made with mode=2.
Compared to dds 1.1.3, the better support of mode=2 means improved
calculation speed.
Compared to using only mode=1 at calling Solveboard 4 times, each
time for each alternative leading hand, the calculation time is
roughly halfed using mode=2 as described above.
Release Notes DDS 1.1.5
---------------------------
A correction has been made removing a risk of DD value miscalculation.
The fault has not however yet showed up as far as I know.
A survival mechanism has been added to handle the situation if the
transposition table gets full:
The transposition table is emptied.
Before this, a full transposition table would in practise lock up the program.
Therefore the present size of the transposition table is quite large (393 MB)
to handle the most difficult deals.
This could lead to extensive memory swapping with the hard drive if the
PC RAM size is 256 MB or less, slowing down the program.
With the new survival mechanism, the program will not lockup at a full
transposition table. The calculation time will increase because of the extra time
to build up stored positions in the table, but the increase will be reasonable.
This means that DDS should be possible to run with such small PC RAM sizes
as 64 MB (this has not been tested though).
Release Notes DDS 1.1.6
---------------------------
A bug has been fixed. It could show up (but haven't as far as I know)
after the transposition table got full.
Only a minor part of the maximum transposition table, about 30 MB, is
now allocated at initialization, if more is needed it is dynamically
added as need arises. Each incremental addition is about 2 MB.
This continues until the maximum allowed space is reached, for 512 MB
PC about 400 MB. Then the incrementally added transposition table pieces
are wiped out and the initially allocated table is cleared.
Release Notes DDS 1.1.7
---------------------------
A bug fix and recoding of the dynamic transposition table implementation.
Release Notes DDS 1.1.8
---------------------------
The transposition table solution has been redesigned.
Each "winning ranks node" now contains all ranks for one suit.
When a new transposition table entry is created, it is now
positioned at the front of the alternative "winning ranks node"
list rather than at the end as before.
Each leading hand has now own root pointers pointing to
the "suit lengths combination" tree.
Some changes in QuickTricks.
Release Notes DDS 1.1.9
-----------------------
Speed increase 10-15% compared to 1.1.8.
Main improvements from 1) and 2) below.
1) Much faster initialization of variable rel
(struct type relRanksType).
Implementation done by Thomas Andrews.
2) Move generation:
If the hand-to-play is trick leading hand, the first
positions in the move list now come each from a different suit.
In 1.1.8, the first positions were groups of 2 cards from
each suit.
3) DismissX renamed to NextMove. A bug was corrected
in NextMove, increasing performance. (The bug did not give
incorrect result.)
The bug was found by Joël Bradmetz.
4) The function CountOnes replaced by a table look up.
Implementation by Thomas Andrews.
5) The handStore variable replaced by a macro. Based on
an implementation by Thomas Andrews.
6) The WinAdapt function replaced by a table look up.
7) A new table highestRank gives the highest rank from a
bitmap of ranks. Makes functions UpdateWinner, UpdateSecondBest
and QuickTricks slightly faster.
Release Notes DDS 2.0.0
-----------------------
A bug was fixed.
SolveBoard is now thread-safe.
The SolveBoard parameter "mode" no longer needs to be set to 2.
DDS automatically detect situations when the transposition
table contents can be reused.
Used with a single thread, DDS 2.0.0 has about the same speed as DDS 1.1.9.
Used with 2 parallel threads, DDS 2.0.0 is twice as fast as the single
thread case.
A new function, CalcDDtable, has been added.
CalcDDtable calls SolveBoard using parallel threads. The number of
parallel threads is the same as the number of processor cores.
CalcDDtable calculates the double dummy values of the initial 52 cards
for all the 20 trump suit/leading hand combinations.
Release Notes DDS 2.0.1
-----------------------
In 2.0.0, the contents of the transposition table could be erronously
be reused when the previous position contained a different number of
cards. This was caused by an erroneous implementation of the
deal similarity test. This bug was fixed by removing the similarity test.
The DDS version number is defined by a #define statement in dll.h.
Release Notes DDS 2.1.0
-----------------------
Added OpenMP as multi-thread support for CalcDDtable when compiling with
gcc 4.4.0 or later.
Added a similarity deals test function for reuse of the transposition
table contents when the current deal is similar to the previous deal.
Release Notes DDS 2.1.1
-----------------------
The maximum number of threads is configurable depending on the size of the
physical memory. The configuration is either done automatically by reading
out the physical memory size by the operating system, or by supplying
parameter values in InitStart.
tenace-0.13/dds/readme.txt 0000664 0004016 0004016 00000013577 11524603602 012377 0000000 0000000 DDS 2.1.1, Bo Haglund 2010-08-02
For Win32, DDS compiles with Visual C++ 2005 Express edition
and the Mingw port of gcc.
When using Visual C++, the statement
#include "stdafx.h" at the beginning of dds.cpp must be uncommented.
When not using Visual C++, the compilation of DDS includes function CalcDDtable
implemented using GCC/MingW OpenMP. When OpenMP is compiled with MingW and Windows,
then for the program using dds.dll, the file phreadGC2.dll must be placed in
the same folder as dds.dll.
Linking with an application using DDS
-------------------------------------
The InitStart() function of DDS should be called from inside the
application. Then SolveBoard in DDS can be called multiple times
without the overhead of InitStart() at each call.
For this purpose, the application code must have an include
statement for the dll.h file in DDS.
Maximum number of threads
-------------------------
The maximum number of simultaneous threads depends on the PC physical memory size:
1 GB or less, max 4 threads.
2, 3 or 4 GB, max 8 threads.
More than 4 GB, max 16 threads.
For Windows, allocating memory for the maximum number of simultaneous threads can
be done by reading out the physical memory size from Windows. This is done in the DDS.DLL.
Another alternative is to provide the physical memory size as a parameter (gb_ram) in the
InitStart call. This alternative needs to be used when the operating system is not Windows.
Setting the number of simultaneous threads when calling CalcDDtable.
--------------------------------------------------------------------
For Windows, this can be done either by reading out the number of processor cores from
Windows and using this for setting the number of threads, or by supplying the number of
threads (ncores) in InitStart. This latter alternative needs to be used when the operating
system is not Windows.
Options at DDS compilation
--------------------------
There are 3 compiling options:
1) Compilation without definitions of STAT or TTDEBUG.
This is the default case given in the distributed source
where definitions of STAT and TTDEBUG are commented away.
This compilation alternative gives the best performance.
2) Compilation with definition STAT.
Uncomment the definition of STAT.
This gives deal search statistics information for each call
to SolveBoard, logged in stat.txt. Set target to a number of
tricks to be won by player's side and solutions=1
(avoid to set target to -1 and solutions different than 1,
because then the statistics output will be mixed for the
different repeated searches).
"score statistics" provides information on which depth the search
terminated and some termination information as described below.
(Only a few searches terminate at the last trick.)
s1 = number of TRUE score values found
s0 = number of FALSE score values found
c1 = number of cutoffs because won tricks by player side >= target
c2 = number of cutoffs because won tricks by player side plus
tricks left to play < target
c3 = as for c1 but with quick tricks evaluation
c4 = as for c2 but with quick tricks evaluation
c5 = number of transposition table cutoffs for player's (MAX) side
c6 = number of transposition table cutoffs for opponent's (MIN) side
c7 = number of terminations at the last trick (i.e. when depth is 0)
c8 = number of cases when a new transposition table entry was added
3) Compilation with definition TTDEBUG.
Uncomment the definition of TTDEBUG.
Note that setting this option will make the double dummy solver very
slow!
This is indended for debugging of the transposition table logic.
Without this support, it can be extremely hard to find the reason for
a transposition table erroneous behaviour.
Set target to a number of tricks to be won by player's side and
solutions=1 (not using target -1 and solutions different than 1).
Information of a number of transposition table hits will then be
recorded in the file rectt.txt. The number of recorded hits is defined
by SEARCHSIZE. Also, hit information will be stored in a structure
ttStore.
All transposition table entries generated during the time when transposition
table hits are recorded, are logged in the file storett.txt.
After SolveBoard terminates, the following code snippet
(or something similar) is called:
int k, m, val, h, s, iniDepth;
int lastTTstore, suppressTTlog;
struct moveType startMoves[3];
struct ttStoreType *ttStore;
struct nodeCardsType * cardsP;
struct pos thisPos;
FILE *fp;
fp=fopen("recpos.txt", "w");
suppressTTlog=TRUE;
for (k=0; k<=lastTTstore-1; k++) {
for (m=0; m<=2; m++) {
startMoves[m].suit=-1;
startMoves[m].rank=-1;
}
for (h=0; h<=3; h++)
for (s=0; s<=3; s++)
thisPos.rankInSuit[h][s]=ttStore[k].suit[h][s];
thisPos.handRelFirst=0;
iniDepth=4 * ttStore[k].tricksLeft-4;
thisPos.first[iniDepth-1]=ttStore[k].first;
InitSearch(&thisPos, iniDepth, startMoves, ttStore[k].first, 0);
val=ABsearch(&thisPos, ttStore[k].target, iniDepth);
if (val==tt[k].scoreFlag)
fprintf(fp, "No %d is OK\n", k);
else {
fprintf(fp, "No %d is not OK\n", k);
fprintf(fp, "cardsP=%d\n",
ttStore[k].cardsP);
}
}
fclose(fp);
suppressTTlog=FALSE;
A "not OK" row number in file recpos.txt corresponds to an
entry with the same number for lastTTstore in the file rectt.txt.
rectt.txt contain the cards and other information related to
the position getting the transposition table hit. It also contains
the pointer to the SOP (Subsets Of Positions) node, cardsP.
The SOP pointer cardsP value can be found in the storett.txt file, where
also the winning cards and other information of the transposition
table entry can be found.
By now comparing the information in rectt.txt with the information
in storett.txt for the same SOP node pointer, it is usually not too
difficult to deduce what caused the problem.
tenace-0.13/dds/dll.h 0000664 0004016 0004016 00000032412 11524611555 011320 0000000 0000000 /* portability-macros header prefix */
/* Windows requires a __declspec(dllexport) tag, etc */
#if defined(_WIN32)
# define DLLEXPORT __declspec(dllexport)
# define STDCALL __stdcall
#else
# define DLLEXPORT
# define STDCALL
# define INT8 char
#endif
#ifdef __cplusplus
# define EXTERN_C extern "C"
#else
# define EXTERN_C
#endif
#if defined(_WIN32)
# include
# include
#endif
#if defined(_MSC_VER)
# include
#else
# include
#endif
/* end of portability-macros section */
#define DDS_VERSION 20101 /* Version 2.1.1. Allowing for 2 digit
minor versions */
/*#define BENCH*/
#include
/*#define _CRTDBG_MAP_ALLOC */ /* MEMORY LEAK? */
#include
/*#include */ /* MEMORY LEAK? */
#include
#include
#include
#include
typedef long long __int64;
/*#define STAT*/ /* Define STAT to generate a statistics log, stat.txt */
/*#define TTDEBUG*/ /* Define TTDEBUG to generate transposition table debug information.
Only for a single thread! */
#ifdef TTDEBUG
#define SEARCHSIZE 20000
#else
#define SEARCHSIZE 1
#endif
#define CANCELCHECK 200000
#if defined(INFINITY)
# undef INFINITY
#endif
#define INFINITY 32000
#define MAXNOOFTHREADS 16
#define MAXNODE 1
#define MINNODE 0
#define TRUE 1
#define FALSE 0
#define MOVESVALID 1
#define MOVESLOCKED 2
#define NSIZE 100000
#define WSIZE 100000
#define LSIZE 20000
#define NINIT 250000/*400000*/
#define WINIT 700000/*1000000*/
#define LINIT 50000
#define SIMILARDEALLIMIT 5
#define SIMILARMAXWINNODES 700000
#define MAXNOOFBOARDS 20
#define Max(x, y) (((x) >= (y)) ? (x) : (y))
#define Min(x, y) (((x) <= (y)) ? (x) : (y))
/* "hand" is leading hand, "relative" is hand relative leading
hand.
The handId macro implementation follows a solution
by Thomas Andrews.
All hand identities are given as
0=NORTH, 1=EAST, 2=SOUTH, 3=WEST. */
#define handId(hand, relative) (hand + relative) & 3
struct gameInfo { /* All info of a particular deal */
/*int vulnerable;*/
int declarer;
/*int contract;*/
int leadHand;
int leadSuit;
int leadRank;
int first;
int noOfCards;
unsigned short int suit[4][4];
/* 1st index is hand id, 2nd index is suit id */
};
struct moveType {
unsigned char suit;
unsigned char rank;
unsigned short int sequence; /* Whether or not this move is
the first in a sequence */
short int weight; /* Weight used at sorting */
};
struct movePlyType {
struct moveType move[14];
int current;
int last;
};
struct highCardType {
int rank;
int hand;
};
struct futureTricks {
int nodes;
#ifdef BENCH
int totalNodes;
#endif
int cards;
int suit[13];
int rank[13];
int equals[13];
int score[13];
};
struct deal {
int trump;
int first;
int currentTrickSuit[3];
int currentTrickRank[3];
unsigned int remainCards[4][4];
};
struct pos {
unsigned short int rankInSuit[4][4]; /* 1st index is hand, 2nd index is
suit id */
int orderSet[4];
int winOrderSet[4];
int winMask[4];
int leastWin[4];
unsigned short int removedRanks[4]; /* Ranks removed from board,
index is suit */
unsigned short int winRanks[50][4]; /* Cards that win by rank,
indices are depth and suit */
unsigned char length[4][4];
char ubound;
char lbound;
char bestMoveSuit;
char bestMoveRank;
int first[50]; /* Hand that leads the trick for each ply*/
int high[50]; /* Hand that is presently winning the trick */
struct moveType move[50]; /* Presently winning move */
int handRelFirst; /* The current hand, relative first hand */
int tricksMAX; /* Aggregated tricks won by MAX */
struct highCardType winner[4]; /* Winning rank of the trick,
index is suit id. */
struct highCardType secondBest[4]; /* Second best rank, index is suit id. */
};
struct posSearchType {
struct winCardType * posSearchPoint;
__int64 suitLengths;
struct posSearchType * left;
struct posSearchType * right;
};
struct nodeCardsType {
char ubound; /* ubound and
lbound for the N-S side */
char lbound;
char bestMoveSuit;
char bestMoveRank;
char leastWin[4];
};
struct winCardType {
int orderSet;
int winMask;
struct nodeCardsType * first;
struct winCardType * prevWin;
struct winCardType * nextWin;
struct winCardType * next;
};
struct evalType {
int tricks;
unsigned short int winRanks[4];
};
struct relRanksType {
int aggrRanks[4];
int winMask[4];
};
struct adaptWinRanksType {
unsigned short int winRanks[14];
};
struct ttStoreType {
struct nodeCardsType * cardsP;
char tricksLeft;
char target;
char ubound;
char lbound;
unsigned char first;
unsigned short int suit[4][4];
};
struct card {
int suit;
int rank;
};
struct boards {
int noOfBoards;
struct deal deals[MAXNOOFBOARDS];
int target[MAXNOOFBOARDS];
int solutions[MAXNOOFBOARDS];
int mode[MAXNOOFBOARDS];
};
struct solvedBoards {
int noOfBoards;
int timeOut;
struct futureTricks solvedBoard[MAXNOOFBOARDS];
};
struct paramType {
int noOfBoards;
struct boards *bop;
struct solvedBoards *solvedp;
int tstart;
int timeSupervision;
int remainTime;
};
struct ddTableDeal {
unsigned int cards[4][4];
};
struct ddTableResults {
int resTable[5][4];
};
struct localVarType {
int nodeTypeStore[4];
int trump;
unsigned short int lowestWin[50][4];
int nodes;
int trickNodes;
int no[50];
int iniDepth;
int handToPlay;
int payOff;
int val;
struct pos iniPosition;
struct pos lookAheadPos; /* Is initialized for starting
alpha-beta search */
struct moveType forbiddenMoves[14];
struct moveType initialMoves[4];
struct moveType cd;
struct movePlyType movePly[50];
int tricksTarget;
struct gameInfo game;
int newDeal;
int newTrump;
int similarDeal;
unsigned short int diffDeal;
unsigned short int aggDeal;
int estTricks[4];
FILE *fp2;
FILE *fp7;
FILE *fp11;
/*FILE *fdp */
struct moveType bestMove[50];
struct moveType bestMoveTT[50];
struct winCardType temp_win[5];
int hiwinSetSize;
int hinodeSetSize;
int hilenSetSize;
int MaxnodeSetSize;
int MaxwinSetSize;
int MaxlenSetSize;
int nodeSetSizeLimit;
int winSetSizeLimit;
int lenSetSizeLimit;
__int64 maxmem; /* bytes */
__int64 allocmem;
__int64 summem;
int wmem;
int nmem;
int lmem;
int maxIndex;
int wcount;
int ncount;
int lcount;
int clearTTflag;
int windex;
/*int ttCollect;
int suppressTTlog;*/
struct relRanksType * rel;
struct adaptWinRanksType * adaptWins;
__int64 suitLengths;
struct posSearchType *rootnp[14][4];
struct winCardType **pw;
struct nodeCardsType **pn;
struct posSearchType **pl;
struct nodeCardsType * nodeCards;
struct winCardType * winCards;
struct posSearchType * posSearch;
/*struct ttStoreType * ttStore;
int lastTTstore;*/
unsigned short int iniRemovedRanks[4];
int nodeSetSize; /* Index with range 0 to nodeSetSizeLimit */
int winSetSize; /* Index with range 0 to winSetSizeLimit */
int lenSetSize; /* Index with range 0 to lenSetSizeLimit */
};
#if defined(_WIN32)
extern CRITICAL_SECTION solv_crit;
#endif
extern int noOfThreads;
extern int noOfCores;
extern struct localVarType localVar[MAXNOOFTHREADS];
extern struct gameInfo game;
extern int newDeal;
extern struct gameInfo * gameStore;
extern struct pos position, iniPosition, lookAheadPos;
extern struct moveType move[13];
extern struct movePlyType movePly[50];
extern struct searchType searchData;
extern struct moveType forbiddenMoves[14]; /* Initial depth moves that will be
excluded from the search */
extern struct moveType initialMoves[4];
extern struct moveType highMove;
extern struct moveType * bestMove;
extern struct winCardType **pw;
extern struct nodeCardsType **pn;
extern struct posSearchType **pl;
extern int * highestRank;
extern int * counttable;
extern struct adaptWinRanksType * adaptWins;
extern struct winCardType * temp_win;
extern unsigned short int bitMapRank[16];
extern unsigned short int relRankInSuit[4][4];
extern int sum;
extern int score1Counts[50], score0Counts[50];
extern int c1[50], c2[50], c3[50], c4[50], c5[50], c6[50], c7[50],
c8[50], c9[50];
extern int nodeTypeStore[4]; /* Look-up table for determining if
node is MAXNODE or MINNODE */
extern int lho[4], rho[4], partner[4];
extern int trumpContract;
extern int trump;
extern int nodes; /* Number of nodes searched */
extern int no[50]; /* Number of nodes searched on each
depth level */
extern int payOff;
extern int iniDepth;
extern int treeDepth;
extern int tricksTarget; /* No of tricks for MAX in order to
meet the game goal, e.g. to make the
contract */
extern int tricksTargetOpp; /* Target no of tricks for MAX
opponent */
extern int targetNS;
extern int targetEW;
extern int handToPlay;
extern int searchTraceFlag;
extern int countMax;
extern int depthCount;
extern int highHand;
extern int nodeSetSizeLimit;
extern int winSetSizeLimit;
extern int lenSetSizeLimit;
extern int estTricks[4];
extern int recInd;
extern int suppressTTlog;
extern unsigned char suitChar[4];
extern unsigned char rankChar[15];
extern unsigned char handChar[4];
extern int cancelOrdered;
extern int cancelStarted;
extern int threshold;
extern unsigned char cardRank[15], cardSuit[5], cardHand[4];
extern unsigned char cardSuitSds[5];
extern struct handStateType handState;
extern int totalNodes;
extern struct futureTricks fut, ft;
extern struct futureTricks *futp;
extern char stri[128];
extern FILE *fp, /**fp2, *fp7, *fp11,*/ *fpx;
/* Pointers to logs */
extern struct ttStoreType * ttStore;
extern int lastTTstore;
extern int ttCollect;
extern int suppressTTlog;
EXTERN_C DLLEXPORT int STDCALL SolveBoard(struct deal dl,
int target, int solutions, int mode, struct futureTricks *futp, int threadIndex);
EXTERN_C DLLEXPORT int STDCALL CalcDDtable(struct ddTableDeal tableDeal,
struct ddTableResults * tablep);
EXTERN_C void InitStart(int gb_ram, int ncores);
void InitGame(int gameNo, int moveTreeFlag, int first, int handRelFirst, int thrId);
void InitSearch(struct pos * posPoint, int depth,
struct moveType startMoves[], int first, int mtd, int thrId);
int ABsearch(struct pos * posPoint, int target, int depth, int thrId);
void Make(struct pos * posPoint, unsigned short int trickCards[4],
int depth, int thrId);
int MoveGen(struct pos * posPoint, int depth, int thrId);
void InsertSort(int n, int depth, int thrId);
void UpdateWinner(struct pos * posPoint, int suit);
void UpdateSecondBest(struct pos * posPoint, int suit);
int WinningMove(struct moveType * mvp1, struct moveType * mvp2, int thrId);
int AdjustMoveList(int thrId);
int QuickTricks(struct pos * posPoint, int hand,
int depth, int target, int *result, int thrId);
int LaterTricksMIN(struct pos *posPoint, int hand, int depth, int target, int thrId);
int LaterTricksMAX(struct pos *posPoint, int hand, int depth, int target, int thrId);
struct nodeCardsType * CheckSOP(struct pos * posPoint, struct nodeCardsType
* nodep, int target, int tricks, int * result, int *value, int thrId);
struct nodeCardsType * UpdateSOP(struct pos * posPoint, struct nodeCardsType
* nodep);
struct nodeCardsType * FindSOP(struct pos * posPoint,
struct winCardType * nodeP, int firstHand,
int target, int tricks, int * valp, int thrId);
struct nodeCardsType * BuildPath(struct pos * posPoint,
struct posSearchType *nodep, int * result, int thrId);
void BuildSOP(struct pos * posPoint, int tricks, int firstHand, int target,
int depth, int scoreFlag, int score, int thrId);
struct posSearchType * SearchLenAndInsert(struct posSearchType
* rootp, __int64 key, int insertNode, int *result, int thrId);
void Undo(struct pos * posPoint, int depth, int thrId);
int CheckDeal(struct moveType * cardp, int thrId);
int InvBitMapRank(unsigned short bitMap);
int InvWinMask(int mask);
void ReceiveTTstore(struct pos *posPoint, struct nodeCardsType * cardsP, int target,
int depth, int thrId);
int NextMove(struct pos *posPoint, int depth, int thrId);
int DumpInput(int errCode, struct deal dl, int target, int solutions, int mode);
void Wipe(int thrId);
void AddNodeSet(int thrId);
void AddLenSet(int thrId);
void AddWinSet(int thrId);
void PrintDeal(FILE *fp, unsigned short ranks[4][4]);
int SolveAllBoards4(struct boards *bop, struct solvedBoards *solvedp,
int timeSupervision, int remainTime);
tenace-0.13/dds/GPL.txt 0000664 0004016 0004016 00000043106 11524603576 011565 0000000 0000000 GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Lesser General Public License instead.) You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.
To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have. You must make sure that they, too, receive or can get the
source code. And you must show them these terms so they know their
rights.
We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.
Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.
Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary. To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and
modification follow.
GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License. The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language. (Hereinafter, translation is included without limitation in
the term "modification".) Each licensee is addressed as "you".
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.
1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.
You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.
2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
a) You must cause the modified files to carry prominent notices
stating that you changed the files and the date of any change.
b) You must cause any work that you distribute or publish, that in
whole or in part contains or is derived from the Program or any
part thereof, to be licensed as a whole at no charge to all third
parties under the terms of this License.
c) If the modified program normally reads commands interactively
when run, you must cause it, when started running for such
interactive use in the most ordinary way, to print or display an
announcement including an appropriate copyright notice and a
notice that there is no warranty (or else, saying that you provide
a warranty) and that users may redistribute the program under
these conditions, and telling the user how to view a copy of this
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.
In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:
a) Accompany it with the complete corresponding machine-readable
source code, which must be distributed under the terms of Sections
1 and 2 above on a medium customarily used for software interchange; or,
b) Accompany it with a written offer, valid for at least three
years, to give any third party, for a charge no more than your
cost of physically performing source distribution, a complete
machine-readable copy of the corresponding source code, to be
distributed under the terms of Sections 1 and 2 above on a medium
customarily used for software interchange; or,
c) Accompany it with the information you received as to the offer
to distribute corresponding source code. (This alternative is
allowed only for noncommercial distribution and only if you
received the program in object code or executable form with such
an offer, in accord with Subsection b above.)
The source code for a work means the preferred form of the work for
making modifications to it. For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable. However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.
If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.
5. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Program or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.
6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.
7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all. For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.
If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded. In such case, this License incorporates
the limitation as if written in the body of this License.
9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation. If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.
10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission. For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.
NO WARRANTY
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
Copyright (C)
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program 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 General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Also add information on how to contact you by electronic and paper mail.
If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:
Gnomovision version 69, Copyright (C) year name of author
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, the commands you use may
be called something other than `show w' and `show c'; they could even be
mouse-clicks or menu items--whatever suits your program.
You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
`Gnomovision' (which makes passes at compilers) written by James Hacker.
, 1 April 1989
Ty Coon, President of Vice
This General Public License does not permit incorporating your program into
proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License.
tenace-0.13/dds/dds.cpp 0000664 0004016 0004016 00000513350 11524611552 011654 0000000 0000000
/* DDS 2.1.1 A bridge double dummy solver. */
/* Copyright (C) 2006-2010 by Bo Haglund */
/* Cleanups and porting to Linux and MacOSX (C) 2006 by Alex Martelli */
/* */
/* This program is free software; you can redistribute it and/or */
/* modify it under the terms of the GNU General Public License */
/* as published by the Free software Foundation; either version 2 */
/* of the License, or (at your option) any later version. */
/* */
/* This program 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 General Public License for more details. */
/* */
/* You should have received a copy of the GNU General Public License */
/* along with this program; if not, write to the Free Software */
/* Foundation, Inc, 51 Franklin Street, 5th Floor, Boston MA 02110-1301, USA. */
/*#include "stdafx.h"*/ /* Needed by Visual C++ */
#include "dll.h"
struct localVarType localVar[MAXNOOFTHREADS];
int * counttable;
int * highestRank;
int lho[4];
int rho[4];
int partner[4];
unsigned short int bitMapRank[16];
unsigned char cardRank[15];
unsigned char cardSuit[5];
unsigned char cardHand[4];
struct ttStoreType * ttStore;
int lastTTstore;
int ttCollect;
int suppressTTlog;
int noOfThreads=MAXNOOFTHREADS; /* The number of entries to the transposition tables. There is
one entry per thread. */
int noOfCores; /* The number of processor cores, however cannot be higher than noOfThreads. */
#if defined(_MSC_VER)
CRITICAL_SECTION solv_crit;
#endif
#ifdef _MANAGED
#pragma managed(push, off)
#endif
#if 0
extern "C" BOOL APIENTRY DllMain(HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved) {
int k;
if (ul_reason_for_call==DLL_PROCESS_ATTACH) {
InitStart(0, 0);
#if defined(_MSC_VER)
InitializeCriticalSection(&solv_crit);
#endif
}
else if (ul_reason_for_call==DLL_PROCESS_DETACH) {
#if defined(_MSC_VER)
DeleteCriticalSection(&solv_crit);
#endif
for (k=0; k=noOfThreads)) {
DumpInput(-15, dl, target, solutions, mode);
return -15;
}
if (target<-1) {
DumpInput(-5, dl, target, solutions, mode);
return -5;
}
if (target>13) {
DumpInput(-7, dl, target, solutions, mode);
return -7;
}
if (solutions<1) {
DumpInput(-8, dl, target, solutions, mode);
return -8;
}
if (solutions>3) {
DumpInput(-9, dl, target, solutions, mode);
return -9;
}
for (k=0; k<=3; k++)
noOfCardsPerHand[handId(dl.first, k)]=0;
for (k=0; k<=2; k++) {
if (dl.currentTrickRank[k]!=0) {
noOfCardsPerHand[handId(dl.first, k)]=1;
aggrRemain=0;
for (h=0; h<=3; h++)
aggrRemain|=(dl.remainCards[h][dl.currentTrickSuit[k]]>>2);
if ((aggrRemain & bitMapRank[dl.currentTrickRank[k]])!=0) {
DumpInput(-13, dl, target, solutions, mode);
return -13;
}
}
}
if (target==-1)
localVar[thrId].tricksTarget=99;
else
localVar[thrId].tricksTarget=target;
localVar[thrId].newDeal=FALSE; localVar[thrId].newTrump=FALSE;
localVar[thrId].diffDeal=0; localVar[thrId].aggDeal=0;
cardCount=0;
for (i=0; i<=3; i++) {
for (j=0; j<=3; j++) {
cardCount+=counttable[dl.remainCards[i][j]>>2];
localVar[thrId].diffDeal+=((dl.remainCards[i][j]>>2)^
(localVar[thrId].game.suit[i][j]));
localVar[thrId].aggDeal+=(dl.remainCards[i][j]>>2);
if (localVar[thrId].game.suit[i][j]!=dl.remainCards[i][j]>>2) {
localVar[thrId].game.suit[i][j]=dl.remainCards[i][j]>>2;
localVar[thrId].newDeal=TRUE;
}
}
}
if (localVar[thrId].newDeal) {
if (localVar[thrId].diffDeal==0)
localVar[thrId].similarDeal=TRUE;
else if ((localVar[thrId].aggDeal/localVar[thrId].diffDeal)
> SIMILARDEALLIMIT)
localVar[thrId].similarDeal=TRUE;
else
localVar[thrId].similarDeal=FALSE;
}
else
localVar[thrId].similarDeal=FALSE;
if (dl.trump!=localVar[thrId].trump)
localVar[thrId].newTrump=TRUE;
for (i=0; i<=3; i++)
for (j=0; j<=3; j++)
noOfCardsPerHand[i]+=counttable[localVar[thrId].game.suit[i][j]];
for (i=1; i<=3; i++) {
if (noOfCardsPerHand[i]!=noOfCardsPerHand[0]) {
DumpInput(-14, dl, target, solutions, mode);
return -14;
}
}
if (dl.currentTrickRank[2]) {
if ((dl.currentTrickRank[2]<2)||(dl.currentTrickRank[2]>14)
||(dl.currentTrickSuit[2]<0)||(dl.currentTrickSuit[2]>3)) {
DumpInput(-12, dl, target, solutions, mode);
return -12;
}
localVar[thrId].handToPlay=handId(dl.first, 3);
handRelFirst=3;
noStartMoves=3;
if (cardCount<=4) {
for (k=0; k<=3; k++) {
if (localVar[thrId].game.suit[localVar[thrId].handToPlay][k]!=0) {
latestTrickSuit[localVar[thrId].handToPlay]=k;
latestTrickRank[localVar[thrId].handToPlay]=
InvBitMapRank(localVar[thrId].game.suit[localVar[thrId].handToPlay][k]);
break;
}
}
latestTrickSuit[handId(dl.first, 2)]=dl.currentTrickSuit[2];
latestTrickRank[handId(dl.first, 2)]=dl.currentTrickRank[2];
latestTrickSuit[handId(dl.first, 1)]=dl.currentTrickSuit[1];
latestTrickRank[handId(dl.first, 1)]=dl.currentTrickRank[1];
latestTrickSuit[dl.first]=dl.currentTrickSuit[0];
latestTrickRank[dl.first]=dl.currentTrickRank[0];
}
}
else if (dl.currentTrickRank[1]) {
if ((dl.currentTrickRank[1]<2)||(dl.currentTrickRank[1]>14)
||(dl.currentTrickSuit[1]<0)||(dl.currentTrickSuit[1]>3)) {
DumpInput(-12, dl, target, solutions, mode);
return -12;
}
localVar[thrId].handToPlay=handId(dl.first, 2);
handRelFirst=2;
noStartMoves=2;
if (cardCount<=4) {
for (k=0; k<=3; k++) {
if (localVar[thrId].game.suit[localVar[thrId].handToPlay][k]!=0) {
latestTrickSuit[localVar[thrId].handToPlay]=k;
latestTrickRank[localVar[thrId].handToPlay]=
InvBitMapRank(localVar[thrId].game.suit[localVar[thrId].handToPlay][k]);
break;
}
}
for (k=0; k<=3; k++) {
if (localVar[thrId].game.suit[handId(dl.first, 3)][k]!=0) {
latestTrickSuit[handId(dl.first, 3)]=k;
latestTrickRank[handId(dl.first, 3)]=
InvBitMapRank(localVar[thrId].game.suit[handId(dl.first, 3)][k]);
break;
}
}
latestTrickSuit[handId(dl.first, 1)]=dl.currentTrickSuit[1];
latestTrickRank[handId(dl.first, 1)]=dl.currentTrickRank[1];
latestTrickSuit[dl.first]=dl.currentTrickSuit[0];
latestTrickRank[dl.first]=dl.currentTrickRank[0];
}
}
else if (dl.currentTrickRank[0]) {
if ((dl.currentTrickRank[0]<2)||(dl.currentTrickRank[0]>14)
||(dl.currentTrickSuit[0]<0)||(dl.currentTrickSuit[0]>3)) {
DumpInput(-12, dl, target, solutions, mode);
return -12;
}
localVar[thrId].handToPlay=handId(dl.first,1);
handRelFirst=1;
noStartMoves=1;
if (cardCount<=4) {
for (k=0; k<=3; k++) {
if (localVar[thrId].game.suit[localVar[thrId].handToPlay][k]!=0) {
latestTrickSuit[localVar[thrId].handToPlay]=k;
latestTrickRank[localVar[thrId].handToPlay]=
InvBitMapRank(localVar[thrId].game.suit[localVar[thrId].handToPlay][k]);
break;
}
}
for (k=0; k<=3; k++) {
if (localVar[thrId].game.suit[handId(dl.first, 3)][k]!=0) {
latestTrickSuit[handId(dl.first, 3)]=k;
latestTrickRank[handId(dl.first, 3)]=
InvBitMapRank(localVar[thrId].game.suit[handId(dl.first, 3)][k]);
break;
}
}
for (k=0; k<=3; k++) {
if (localVar[thrId].game.suit[handId(dl.first, 2)][k]!=0) {
latestTrickSuit[handId(dl.first, 2)]=k;
latestTrickRank[handId(dl.first, 2)]=
InvBitMapRank(localVar[thrId].game.suit[handId(dl.first, 2)][k]);
break;
}
}
latestTrickSuit[dl.first]=dl.currentTrickSuit[0];
latestTrickRank[dl.first]=dl.currentTrickRank[0];
}
}
else {
localVar[thrId].handToPlay=dl.first;
handRelFirst=0;
noStartMoves=0;
if (cardCount<=4) {
for (k=0; k<=3; k++) {
if (localVar[thrId].game.suit[localVar[thrId].handToPlay][k]!=0) {
latestTrickSuit[localVar[thrId].handToPlay]=k;
latestTrickRank[localVar[thrId].handToPlay]=
InvBitMapRank(localVar[thrId].game.suit[localVar[thrId].handToPlay][k]);
break;
}
}
for (k=0; k<=3; k++) {
if (localVar[thrId].game.suit[handId(dl.first, 3)][k]!=0) {
latestTrickSuit[handId(dl.first, 3)]=k;
latestTrickRank[handId(dl.first, 3)]=
InvBitMapRank(localVar[thrId].game.suit[handId(dl.first, 3)][k]);
break;
}
}
for (k=0; k<=3; k++) {
if (localVar[thrId].game.suit[handId(dl.first, 2)][k]!=0) {
latestTrickSuit[handId(dl.first, 2)]=k;
latestTrickRank[handId(dl.first, 2)]=
InvBitMapRank(localVar[thrId].game.suit[handId(dl.first, 2)][k]);
break;
}
}
for (k=0; k<=3; k++) {
if (localVar[thrId].game.suit[handId(dl.first, 1)][k]!=0) {
latestTrickSuit[handId(dl.first, 1)]=k;
latestTrickRank[handId(dl.first, 1)]=
InvBitMapRank(localVar[thrId].game.suit[handId(dl.first, 1)][k]);
break;
}
}
}
}
localVar[thrId].trump=dl.trump;
localVar[thrId].game.first=dl.first;
first=dl.first;
localVar[thrId].game.noOfCards=cardCount;
if (dl.currentTrickRank[0]!=0) {
localVar[thrId].game.leadHand=dl.first;
localVar[thrId].game.leadSuit=dl.currentTrickSuit[0];
localVar[thrId].game.leadRank=dl.currentTrickRank[0];
}
else {
localVar[thrId].game.leadHand=0;
localVar[thrId].game.leadSuit=0;
localVar[thrId].game.leadRank=0;
}
for (k=0; k<=2; k++) {
localVar[thrId].initialMoves[k].suit=255;
localVar[thrId].initialMoves[k].rank=255;
}
for (k=0; k>2)+2;
else
totalTricks=((cardCount-4)>>2)+1;
checkRes=CheckDeal(&localVar[thrId].cd, thrId);
if (localVar[thrId].game.noOfCards<=0) {
DumpInput(-2, dl, target, solutions, mode);
return -2;
}
if (localVar[thrId].game.noOfCards>52) {
DumpInput(-10, dl, target, solutions, mode);
return -10;
}
if (totalTricksmaxRank)) {
maxRank=latestTrickRank[k];
maxSuit=dl.trump;
maxHand=k;
}
}
}
/* Highest card in leading suit */
if (maxRank==0) {
for (k=0; k<=3; k++) {
if (k==dl.first) {
maxSuit=latestTrickSuit[dl.first];
maxHand=dl.first;
maxRank=latestTrickRank[dl.first];
break;
}
}
for (k=0; k<=3; k++) {
if ((k!=dl.first)&&(latestTrickSuit[k]==maxSuit)&&
(latestTrickRank[k]>maxRank)) {
maxHand=k;
maxRank=latestTrickRank[k];
}
}
}
futp->nodes=0;
#ifdef BENCH
futp->totalNodes=0;
#endif
futp->cards=1;
futp->suit[0]=latestTrickSuit[localVar[thrId].handToPlay];
futp->rank[0]=latestTrickRank[localVar[thrId].handToPlay];
futp->equals[0]=0;
if ((target==0)&&(solutions<3))
futp->score[0]=0;
else if ((localVar[thrId].handToPlay==maxHand)||
(partner[localVar[thrId].handToPlay]==maxHand))
futp->score[0]=1;
else
futp->score[0]=0;
/*_CrtDumpMemoryLeaks();*/ /* MEMORY LEAK? */
return 1;
}
if ((mode!=2)&&
(((localVar[thrId].newDeal)&&(!localVar[thrId].similarDeal))
|| localVar[thrId].newTrump ||
(localVar[thrId].winSetSize > SIMILARMAXWINNODES))) {
Wipe(thrId);
localVar[thrId].winSetSizeLimit=WINIT;
localVar[thrId].nodeSetSizeLimit=NINIT;
localVar[thrId].lenSetSizeLimit=LINIT;
localVar[thrId].allocmem=(WINIT+1)*sizeof(struct winCardType);
localVar[thrId].allocmem+=(NINIT+1)*sizeof(struct nodeCardsType);
localVar[thrId].allocmem+=(LINIT+1)*sizeof(struct posSearchType);
localVar[thrId].winCards=localVar[thrId].pw[0];
localVar[thrId].nodeCards=localVar[thrId].pn[0];
localVar[thrId].posSearch=localVar[thrId].pl[0];
localVar[thrId].wcount=0; localVar[thrId].ncount=0; localVar[thrId].lcount=0;
InitGame(0, FALSE, first, handRelFirst, thrId);
}
else {
InitGame(0, TRUE, first, handRelFirst, thrId);
/*localVar[thrId].fp2=fopen("dyn.txt", "a");
fprintf(localVar[thrId].fp2, "wcount=%d, ncount=%d, lcount=%d\n",
wcount, ncount, lcount);
fprintf(localVar[thrId].fp2, "winSetSize=%d, nodeSetSize=%d, lenSetSize=%d\n",
winSetSize, nodeSetSize, lenSetSize);
fclose(localVar[thrId].fp2);*/
}
localVar[thrId].nodes=0; localVar[thrId].trickNodes=0;
localVar[thrId].iniDepth=cardCount-4;
localVar[thrId].hiwinSetSize=0;
localVar[thrId].hinodeSetSize=0;
if (mode==0) {
MoveGen(&localVar[thrId].lookAheadPos, localVar[thrId].iniDepth, thrId);
if (localVar[thrId].movePly[localVar[thrId].iniDepth].last==0) {
futp->nodes=0;
#ifdef BENCH
futp->totalNodes=0;
#endif
futp->cards=1;
futp->suit[0]=localVar[thrId].movePly[localVar[thrId].iniDepth].move[0].suit;
futp->rank[0]=localVar[thrId].movePly[localVar[thrId].iniDepth].move[0].rank;
futp->equals[0]=
localVar[thrId].movePly[localVar[thrId].iniDepth].move[0].sequence<<2;
futp->score[0]=-2;
/*_CrtDumpMemoryLeaks();*/ /* MEMORY LEAK? */
return 1;
}
}
if ((target==0)&&(solutions<3)) {
MoveGen(&localVar[thrId].lookAheadPos, localVar[thrId].iniDepth, thrId);
futp->nodes=0;
#ifdef BENCH
futp->totalNodes=0;
#endif
for (k=0; k<=localVar[thrId].movePly[localVar[thrId].iniDepth].last; k++) {
futp->suit[k]=localVar[thrId].movePly[localVar[thrId].iniDepth].move[k].suit;
futp->rank[k]=localVar[thrId].movePly[localVar[thrId].iniDepth].move[k].rank;
futp->equals[k]=
localVar[thrId].movePly[localVar[thrId].iniDepth].move[k].sequence<<2;
futp->score[k]=0;
}
if (solutions==1)
futp->cards=1;
else
futp->cards=localVar[thrId].movePly[localVar[thrId].iniDepth].last+1;
/*_CrtDumpMemoryLeaks(); */ /* MEMORY LEAK? */
return 1;
}
if ((target!=-1)&&(solutions!=3)) {
localVar[thrId].val=ABsearch(&localVar[thrId].lookAheadPos,
localVar[thrId].tricksTarget, localVar[thrId].iniDepth, thrId);
temp=localVar[thrId].movePly[localVar[thrId].iniDepth];
last=localVar[thrId].movePly[localVar[thrId].iniDepth].last;
noMoves=last+1;
localVar[thrId].hiwinSetSize=localVar[thrId].winSetSize;
localVar[thrId].hinodeSetSize=localVar[thrId].nodeSetSize;
localVar[thrId].hilenSetSize=localVar[thrId].lenSetSize;
if (localVar[thrId].nodeSetSize>localVar[thrId].MaxnodeSetSize)
localVar[thrId].MaxnodeSetSize=localVar[thrId].nodeSetSize;
if (localVar[thrId].winSetSize>localVar[thrId].MaxwinSetSize)
localVar[thrId].MaxwinSetSize=localVar[thrId].winSetSize;
if (localVar[thrId].lenSetSize>localVar[thrId].MaxlenSetSize)
localVar[thrId].MaxlenSetSize=localVar[thrId].lenSetSize;
if (localVar[thrId].val==1)
localVar[thrId].payOff=localVar[thrId].tricksTarget;
else
localVar[thrId].payOff=0;
futp->cards=1;
ind=2;
if (localVar[thrId].payOff<=0) {
futp->suit[0]=localVar[thrId].movePly[localVar[thrId].game.noOfCards-4].move[0].suit;
futp->rank[0]=localVar[thrId].movePly[localVar[thrId].game.noOfCards-4].move[0].rank;
futp->equals[0]=(localVar[thrId].movePly[localVar[thrId].game.noOfCards-4].move[0].sequence)<<2;
if (localVar[thrId].tricksTarget>1)
futp->score[0]=-1;
else
futp->score[0]=0;
}
else {
futp->suit[0]=localVar[thrId].bestMove[localVar[thrId].game.noOfCards-4].suit;
futp->rank[0]=localVar[thrId].bestMove[localVar[thrId].game.noOfCards-4].rank;
futp->equals[0]=(localVar[thrId].bestMove[localVar[thrId].game.noOfCards-4].sequence)<<2;
futp->score[0]=localVar[thrId].payOff;
}
}
else {
g=localVar[thrId].estTricks[localVar[thrId].handToPlay];
upperbound=13;
lowerbound=0;
do {
if (g==lowerbound)
tricks=g+1;
else
tricks=g;
assert((localVar[thrId].lookAheadPos.handRelFirst>=0)&&
(localVar[thrId].lookAheadPos.handRelFirst<=3));
localVar[thrId].val=ABsearch(&localVar[thrId].lookAheadPos, tricks,
localVar[thrId].iniDepth, thrId);
if (localVar[thrId].val==TRUE)
mv=localVar[thrId].bestMove[localVar[thrId].game.noOfCards-4];
localVar[thrId].hiwinSetSize=Max(localVar[thrId].hiwinSetSize, localVar[thrId].winSetSize);
localVar[thrId].hinodeSetSize=Max(localVar[thrId].hinodeSetSize, localVar[thrId].nodeSetSize);
localVar[thrId].hilenSetSize=Max(localVar[thrId].hilenSetSize, localVar[thrId].lenSetSize);
if (localVar[thrId].nodeSetSize>localVar[thrId].MaxnodeSetSize)
localVar[thrId].MaxnodeSetSize=localVar[thrId].nodeSetSize;
if (localVar[thrId].winSetSize>localVar[thrId].MaxwinSetSize)
localVar[thrId].MaxwinSetSize=localVar[thrId].winSetSize;
if (localVar[thrId].lenSetSize>localVar[thrId].MaxlenSetSize)
localVar[thrId].MaxlenSetSize=localVar[thrId].lenSetSize;
if (localVar[thrId].val==FALSE) {
upperbound=tricks-1;
g=upperbound;
}
else {
lowerbound=tricks;
g=lowerbound;
}
InitSearch(&localVar[thrId].iniPosition, localVar[thrId].game.noOfCards-4,
localVar[thrId].initialMoves, first, TRUE, thrId);
}
while (lowerboundcards=1;
if (localVar[thrId].payOff<=0) {
futp->score[0]=0;
futp->suit[0]=localVar[thrId].movePly[localVar[thrId].game.noOfCards-4].move[0].suit;
futp->rank[0]=localVar[thrId].movePly[localVar[thrId].game.noOfCards-4].move[0].rank;
futp->equals[0]=(localVar[thrId].movePly[localVar[thrId].game.noOfCards-4].move[0].sequence)<<2;
}
else {
futp->score[0]=localVar[thrId].payOff;
futp->suit[0]=localVar[thrId].bestMove[localVar[thrId].game.noOfCards-4].suit;
futp->rank[0]=localVar[thrId].bestMove[localVar[thrId].game.noOfCards-4].rank;
futp->equals[0]=(localVar[thrId].bestMove[localVar[thrId].game.noOfCards-4].sequence)<<2;
}
localVar[thrId].tricksTarget=localVar[thrId].payOff;
}
if ((solutions==2)&&(localVar[thrId].payOff>0)) {
forb=1;
ind=forb;
while ((localVar[thrId].payOff==localVar[thrId].tricksTarget)&&(ind<(temp.last+1))) {
localVar[thrId].forbiddenMoves[forb].suit=localVar[thrId].bestMove[localVar[thrId].game.noOfCards-4].suit;
localVar[thrId].forbiddenMoves[forb].rank=localVar[thrId].bestMove[localVar[thrId].game.noOfCards-4].rank;
forb++; ind++;
/* All moves before bestMove in the move list shall be
moved to the forbidden moves list, since none of them reached
the target */
mcurr=localVar[thrId].movePly[localVar[thrId].iniDepth].current;
for (k=0; k<=localVar[thrId].movePly[localVar[thrId].iniDepth].last; k++)
if ((localVar[thrId].bestMove[localVar[thrId].iniDepth].suit==
localVar[thrId].movePly[localVar[thrId].iniDepth].move[k].suit)
&&(localVar[thrId].bestMove[localVar[thrId].iniDepth].rank==
localVar[thrId].movePly[localVar[thrId].iniDepth].move[k].rank))
break;
for (i=0; ilocalVar[thrId].MaxnodeSetSize)
localVar[thrId].MaxnodeSetSize=localVar[thrId].nodeSetSize;
if (localVar[thrId].winSetSize>localVar[thrId].MaxwinSetSize)
localVar[thrId].MaxwinSetSize=localVar[thrId].winSetSize;
if (localVar[thrId].lenSetSize>localVar[thrId].MaxlenSetSize)
localVar[thrId].MaxlenSetSize=localVar[thrId].lenSetSize;
if (localVar[thrId].val==TRUE) {
localVar[thrId].payOff=localVar[thrId].tricksTarget;
futp->cards=ind;
futp->suit[ind-1]=localVar[thrId].bestMove[localVar[thrId].game.noOfCards-4].suit;
futp->rank[ind-1]=localVar[thrId].bestMove[localVar[thrId].game.noOfCards-4].rank;
futp->equals[ind-1]=(localVar[thrId].bestMove[localVar[thrId].game.noOfCards-4].sequence)<<2;
futp->score[ind-1]=localVar[thrId].payOff;
}
else
localVar[thrId].payOff=0;
}
}
else if ((solutions==2)&&(localVar[thrId].payOff==0)&&
((target==-1)||(localVar[thrId].tricksTarget==1))) {
futp->cards=noMoves;
/* Find the cards that were in the initial move list
but have not been listed in the current result */
n=0;
for (i=0; isuit[0])&&
(temp.move[i].rank==futp->rank[0])) {
found=TRUE;
}
if (!found) {
futp->suit[1+n]=temp.move[i].suit;
futp->rank[1+n]=temp.move[i].rank;
futp->equals[1+n]=(temp.move[i].sequence)<<2;
futp->score[1+n]=0;
n++;
}
}
}
if ((solutions==3)&&(localVar[thrId].payOff>0)) {
forb=1;
ind=forb;
for (i=0; iSIMILARMAXWINNODES)*/)
InitSearch(&localVar[thrId].iniPosition, localVar[thrId].game.noOfCards-4,
localVar[thrId].initialMoves, first, FALSE, thrId);
else
InitSearch(&localVar[thrId].iniPosition, localVar[thrId].game.noOfCards-4,
localVar[thrId].initialMoves, first, TRUE, thrId);
do {
if (g==lowerbound)
tricks=g+1;
else
tricks=g;
assert((localVar[thrId].lookAheadPos.handRelFirst>=0)&&
(localVar[thrId].lookAheadPos.handRelFirst<=3));
localVar[thrId].val=ABsearch(&localVar[thrId].lookAheadPos, tricks,
localVar[thrId].iniDepth, thrId);
if (localVar[thrId].val==TRUE)
mv=localVar[thrId].bestMove[localVar[thrId].game.noOfCards-4];
localVar[thrId].hiwinSetSize=Max(localVar[thrId].hiwinSetSize, localVar[thrId].winSetSize);
localVar[thrId].hinodeSetSize=Max(localVar[thrId].hinodeSetSize, localVar[thrId].nodeSetSize);
localVar[thrId].hilenSetSize=Max(localVar[thrId].hilenSetSize, localVar[thrId].lenSetSize);
if (localVar[thrId].nodeSetSize>localVar[thrId].MaxnodeSetSize)
localVar[thrId].MaxnodeSetSize=localVar[thrId].nodeSetSize;
if (localVar[thrId].winSetSize>localVar[thrId].MaxwinSetSize)
localVar[thrId].MaxwinSetSize=localVar[thrId].winSetSize;
if (localVar[thrId].lenSetSize>localVar[thrId].MaxlenSetSize)
localVar[thrId].MaxlenSetSize=localVar[thrId].lenSetSize;
if (localVar[thrId].val==FALSE) {
upperbound=tricks-1;
g=upperbound;
}
else {
lowerbound=tricks;
g=lowerbound;
}
if (0/*(localVar[thrId].winSetSize>SIMILARMAXWINNODES)*/)
InitSearch(&localVar[thrId].iniPosition, localVar[thrId].game.noOfCards-4,
localVar[thrId].initialMoves, first, FALSE, thrId);
else
InitSearch(&localVar[thrId].iniPosition, localVar[thrId].game.noOfCards-4,
localVar[thrId].initialMoves, first, TRUE, thrId);
}
while (lowerboundcards=temp.last+1;
for (j=0; j<=last; j++) {
futp->suit[ind-1+j]=localVar[thrId].movePly[localVar[thrId].game.noOfCards-4].move[j].suit;
futp->rank[ind-1+j]=localVar[thrId].movePly[localVar[thrId].game.noOfCards-4].move[j].rank;
futp->equals[ind-1+j]=(localVar[thrId].movePly[localVar[thrId].game.noOfCards-4].move[j].sequence)<<2;
futp->score[ind-1+j]=localVar[thrId].payOff;
}
break;
}
else {
localVar[thrId].bestMove[localVar[thrId].game.noOfCards-4]=mv;
futp->cards=ind;
futp->suit[ind-1]=localVar[thrId].bestMove[localVar[thrId].game.noOfCards-4].suit;
futp->rank[ind-1]=localVar[thrId].bestMove[localVar[thrId].game.noOfCards-4].rank;
futp->equals[ind-1]=(localVar[thrId].bestMove[localVar[thrId].game.noOfCards-4].sequence)<<2;
futp->score[ind-1]=localVar[thrId].payOff;
}
}
}
else if ((solutions==3)&&(localVar[thrId].payOff==0)) {
futp->cards=noMoves;
/* Find the cards that were in the initial move list
but have not been listed in the current result */
n=0;
for (i=0; isuit[0])&&
(temp.move[i].rank==futp->rank[0])) {
found=TRUE;
}
if (!found) {
futp->suit[1+n]=temp.move[i].suit;
futp->rank[1+n]=temp.move[i].rank;
futp->equals[1+n]=(temp.move[i].sequence)<<2;
futp->score[1+n]=0;
n++;
}
}
}
for (k=0; k<=13; k++) {
localVar[thrId].forbiddenMoves[k].suit=0;
localVar[thrId].forbiddenMoves[k].rank=0;
}
futp->nodes=localVar[thrId].trickNodes;
#ifdef BENCH
futp->totalNodes=localVar[thrId].nodes;
#endif
/*if ((wcount>0)||(ncount>0)||(lcount>0)) {
localVar[thrId].fp2=fopen("dyn.txt", "a");
fprintf(localVar[thrId].fp2, "wcount=%d, ncount=%d, lcount=%d\n",
wcount, ncount, lcount);
fprintf(localVar[thrId].fp2, "winSetSize=%d, nodeSetSize=%d, lenSetSize=%d\n",
winSetSize, nodeSetSize, lenSetSize);
fprintf(localVar[thrId].fp2, "\n");
fclose(localVar[thrId].fp2);
}*/
/*_CrtDumpMemoryLeaks();*/ /* MEMORY LEAK? */
return 1;
}
int _initialized=0;
void InitStart(int gb_ram, int ncores) {
int k, r, i, j, m;
unsigned short int res;
long double pcmem; /* kbytes */
if (_initialized)
return;
_initialized = 1;
ttCollect=FALSE;
suppressTTlog=FALSE;
lastTTstore=0;
ttStore = (struct ttStoreType *)calloc(SEARCHSIZE, sizeof(struct ttStoreType));
if (ttStore==NULL)
exit(1);
if ((gb_ram==0)||(ncores==0)) { /* Autoconfig */
#if defined(_WIN32)
SYSTEM_INFO temp;
MEMORYSTATUS stat;
GlobalMemoryStatus (&stat);
pcmem=stat.dwTotalPhys/1024;
if (pcmem < 1500000.0)
noOfThreads=Min(MAXNOOFTHREADS, 4);
else if (pcmem < 4500000.0)
noOfThreads=Min(MAXNOOFTHREADS, 8);
else
noOfThreads=Min(MAXNOOFTHREADS, 16);
GetSystemInfo(&temp);
noOfCores=Min(noOfThreads, (int)temp.dwNumberOfProcessors);
#else
fprintf (stderr, "libdds autoconfig not supported.\n");
exit (1);
#endif
}
else {
if (gb_ram < 2)
noOfThreads=Min(MAXNOOFTHREADS, 4);
else if (gb_ram < 5)
noOfThreads=Min(MAXNOOFTHREADS, 8);
else
noOfThreads=Min(MAXNOOFTHREADS, 16);
noOfCores=Min(noOfThreads, ncores);
pcmem=(long double)(1000000 * gb_ram);
}
/*printf("noOfThreads: %d noOfCores: %d\n", noOfThreads, noOfCores);*/
for (k=0; k=2; r--) {
if ((k & bitMapRank[r])!=0) {
highestRank[k]=r;
break;
}
}
}
/* The use of the counttable to give the number of bits set to
one in an integer follows an implementation by Thomas Andrews. */
counttable = (int *)calloc(8192, sizeof(int));
if (counttable==NULL)
exit(1);
for (i=0; i<8192; i++) {
counttable[i]=0;
for (j=0; j<13; j++) {
if (i & (1<=2; r--) {
if ((i & bitMapRank[r])!=0) {
if (k <= j) {
res|=bitMapRank[r];
k++;
}
else
break;
}
}
for (m=0; m=(topBitRank+topBitRank)) {
/* Next top bit */
topBitRank <<=1;
}
localVar[thrId].rel[ind]=localVar[thrId].rel[ind ^ topBitRank];
for (s=0; s<4; s++) {
for (h=0; h<4; h++) {
if (localVar[thrId].game.suit[h][s] & topBitRank) {
localVar[thrId].rel[ind].aggrRanks[s]=
(localVar[thrId].rel[ind].aggrRanks[s]>>2)|(h<<24);
localVar[thrId].rel[ind].winMask[s]=
(localVar[thrId].rel[ind].winMask[s]>>2)|(3<<24);
break;
}
}
}
}
}
localVar[thrId].iniPosition.first[localVar[thrId].game.noOfCards-4]=first;
localVar[thrId].iniPosition.handRelFirst=handRelFirst;
localVar[thrId].lookAheadPos=localVar[thrId].iniPosition;
localVar[thrId].estTricks[1]=6;
localVar[thrId].estTricks[3]=6;
localVar[thrId].estTricks[0]=7;
localVar[thrId].estTricks[2]=7;
#ifdef STAT
fprintf(localVar[thrId].fp2, "Estimated tricks for hand to play:\n");
fprintf(localVar[thrId].fp2, "hand=%d est tricks=%d\n",
localVar[thrId].handToPlay, localVar[thrId].estTricks[localVar[thrId].handToPlay]);
#endif
InitSearch(&localVar[thrId].lookAheadPos, localVar[thrId].game.noOfCards-4,
localVar[thrId].initialMoves, first, moveTreeFlag, thrId);
return;
}
void InitSearch(struct pos * posPoint, int depth, struct moveType startMoves[],
int first, int mtd, int thrId) {
int s, d, h, handRelFirst, maxAgg, maxHand=0;
int k, noOfStartMoves; /* Number of start moves in the 1st trick */
int hand[3], suit[3], rank[3];
struct moveType move;
unsigned short int startMovesBitMap[4][4]; /* Indices are hand and suit */
unsigned short int aggHand[4][4];
for (h=0; h<=3; h++)
for (s=0; s<=3; s++)
startMovesBitMap[h][s]=0;
handRelFirst=posPoint->handRelFirst;
noOfStartMoves=handRelFirst;
for (k=0; k<=2; k++) {
hand[k]=handId(first, k);
suit[k]=startMoves[k].suit;
rank[k]=startMoves[k].rank;
if (kfirst[depth]=first;
posPoint->handRelFirst=k;
assert((posPoint->handRelFirst>=0)&&(posPoint->handRelFirst<=3));
posPoint->tricksMAX=0;
if (k>0) {
posPoint->move[depth+k]=startMoves[k-1];
move=startMoves[k-1];
}
posPoint->high[depth+k]=first;
while (k>0) {
localVar[thrId].movePly[depth+k].current=0;
localVar[thrId].movePly[depth+k].last=0;
localVar[thrId].movePly[depth+k].move[0].suit=startMoves[k-1].suit;
localVar[thrId].movePly[depth+k].move[0].rank=startMoves[k-1].rank;
if (kmove[depth+k].suit=startMoves[k-1].suit;
posPoint->move[depth+k].rank=startMoves[k-1].rank;
posPoint->high[depth+k]=handId(first, noOfStartMoves-k);
move=posPoint->move[depth+k];
}
else {
posPoint->move[depth+k]=posPoint->move[depth+k+1];
posPoint->high[depth+k]=posPoint->high[depth+k+1];
}
}
k--;
}
for (s=0; s<=3; s++)
posPoint->removedRanks[s]=0;
for (s=0; s<=3; s++) /* Suit */
for (h=0; h<=3; h++) /* Hand */
posPoint->removedRanks[s]|=
posPoint->rankInSuit[h][s];
for (s=0; s<=3; s++)
posPoint->removedRanks[s]=~(posPoint->removedRanks[s]);
for (s=0; s<=3; s++) /* Suit */
for (h=0; h<=3; h++) /* Hand */
posPoint->removedRanks[s]&=
(~startMovesBitMap[h][s]);
for (s=0; s<=3; s++)
localVar[thrId].iniRemovedRanks[s]=posPoint->removedRanks[s];
/*for (d=0; d<=49; d++) {
for (s=0; s<=3; s++)
posPoint->winRanks[d][s]=0;
}*/
/* Initialize winning and second best ranks */
for (s=0; s<=3; s++) {
maxAgg=0;
for (h=0; h<=3; h++) {
aggHand[h][s]=startMovesBitMap[h][s] | localVar[thrId].game.suit[h][s];
if (aggHand[h][s]>maxAgg) {
maxAgg=aggHand[h][s];
maxHand=h;
}
}
if (maxAgg!=0) {
posPoint->winner[s].hand=maxHand;
k=highestRank[aggHand[maxHand][s]];
posPoint->winner[s].rank=k;
maxAgg=0;
for (h=0; h<=3; h++) {
aggHand[h][s]&=(~bitMapRank[k]);
if (aggHand[h][s]>maxAgg) {
maxAgg=aggHand[h][s];
maxHand=h;
}
}
if (maxAgg>0) {
posPoint->secondBest[s].hand=maxHand;
posPoint->secondBest[s].rank=highestRank[aggHand[maxHand][s]];
}
else {
posPoint->secondBest[s].hand=-1;
posPoint->secondBest[s].rank=0;
}
}
else {
posPoint->winner[s].hand=-1;
posPoint->winner[s].rank=0;
posPoint->secondBest[s].hand=-1;
posPoint->secondBest[s].rank=0;
}
}
for (s=0; s<=3; s++)
for (h=0; h<=3; h++)
posPoint->length[h][s]=
(unsigned char)counttable[posPoint->rankInSuit[h][s]];
#ifdef STAT
for (d=0; d<=49; d++) {
score1Counts[d]=0;
score0Counts[d]=0;
c1[d]=0; c2[d]=0; c3[d]=0; c4[d]=0; c5[d]=0; c6[d]=0; c7[d]=0;
c8[d]=0;
localVar[thrId].no[d]=0;
}
#endif
if (!mtd) {
localVar[thrId].lenSetSize=0;
for (k=0; k<=13; k++) {
for (h=0; h<=3; h++) {
localVar[thrId].rootnp[k][h]=&localVar[thrId].posSearch[localVar[thrId].lenSetSize];
localVar[thrId].posSearch[localVar[thrId].lenSetSize].suitLengths=0;
localVar[thrId].posSearch[localVar[thrId].lenSetSize].posSearchPoint=NULL;
localVar[thrId].posSearch[localVar[thrId].lenSetSize].left=NULL;
localVar[thrId].posSearch[localVar[thrId].lenSetSize].right=NULL;
localVar[thrId].lenSetSize++;
}
}
localVar[thrId].nodeSetSize=0;
localVar[thrId].winSetSize=0;
}
#ifdef TTDEBUG
if (!suppressTTlog)
lastTTstore=0;
#endif
return;
}
#ifdef STAT
int score1Counts[50], score0Counts[50];
int sumScore1Counts, sumScore0Counts, dd, suit, rank, order;
int c1[50], c2[50], c3[50], c4[50], c5[50], c6[50], c7[50], c8[50], c9[50];
int sumc1, sumc2, sumc3, sumc4, sumc5, sumc6, sumc7, sumc8, sumc9;
#endif
int ABsearch(struct pos * posPoint, int target, int depth, int thrId) {
/* posPoint points to the current look-ahead position,
target is number of tricks to take for the player,
depth is the remaining search length, must be positive,
the value of the subtree is returned. */
int moveExists, mexists, value, hand, scoreFlag, found;
int ready, hfirst, hh, ss, rr, mcurrent, qtricks, tricks, res, k;
unsigned short int makeWinRank[4];
struct nodeCardsType * cardsP;
struct evalType evalData;
struct winCardType * np;
struct posSearchType * pp;
/*struct nodeCardsType * sopP;*/
struct nodeCardsType * tempP;
unsigned short int aggr[4];
unsigned short int ranks;
struct evalType Evaluate(struct pos * posPoint, int thrId);
void Make(struct pos * posPoint, unsigned short int trickCards[4],
int depth, int thrId);
void Undo(struct pos * posPoint, int depth, int thrId);
/*cardsP=NULL;*/
assert((posPoint->handRelFirst>=0)&&(posPoint->handRelFirst<=3));
hand=handId(posPoint->first[depth], posPoint->handRelFirst);
localVar[thrId].nodes++;
if (posPoint->handRelFirst==0) {
localVar[thrId].trickNodes++;
if (posPoint->tricksMAX>=target) {
for (ss=0; ss<=3; ss++)
posPoint->winRanks[depth][ss]=0;
#ifdef STAT
c1[depth]++;
score1Counts[depth]++;
if (depth==localVar[thrId].iniDepth) {
fprintf(localVar[thrId].fp2, "score statistics:\n");
for (dd=localVar[thrId].iniDepth; dd>=0; dd--) {
fprintf(localVar[thrId].fp2, "d=%d s1=%d s0=%d c1=%d c2=%d c3=%d c4=%d", dd,
score1Counts[dd], score0Counts[dd], c1[dd], c2[dd],
c3[dd], c4[dd]);
fprintf(localVar[thrId].fp2, " c5=%d c6=%d c7=%d c8=%d\n", c5[dd],
c6[dd], c7[dd], c8[dd]);
}
}
#endif
return TRUE;
}
if (((posPoint->tricksMAX+(depth>>2)+1)0)*/) {
for (ss=0; ss<=3; ss++)
posPoint->winRanks[depth][ss]=0;
#ifdef STAT
c2[depth]++;
score0Counts[depth]++;
if (depth==localVar[thrId].iniDepth) {
fprintf(localVar[thrId].fp2, "score statistics:\n");
for (dd=localVar[thrId].iniDepth; dd>=0; dd--) {
fprintf(localVar[thrId].fp2, "d=%d s1=%d s0=%d c1=%d c2=%d c3=%d c4=%d", dd,
score1Counts[dd], score0Counts[dd], c1[dd], c2[dd],
c3[dd], c4[dd]);
fprintf(localVar[thrId].fp2, " c5=%d c6=%d c7=%d c8=%d\n", c5[dd],
c6[dd], c7[dd], c8[dd]);
}
}
#endif
return FALSE;
}
if (localVar[thrId].nodeTypeStore[hand]==MAXNODE) {
qtricks=QuickTricks(posPoint, hand, depth, target, &res, thrId);
if (res) {
if (qtricks==0)
return FALSE;
else
return TRUE;
#ifdef STAT
c3[depth]++;
score1Counts[depth]++;
if (depth==localVar[thrId].iniDepth) {
fprintf(localVar[thrId].fp2, "score statistics:\n");
for (dd=localVar[thrId].iniDepth; dd>=0; dd--) {
fprintf(localVar[thrId].fp2, "d=%d s1=%d s0=%d c1=%d c2=%d c3=%d c4=%d", dd,
score1Counts[dd], score0Counts[dd], c1[dd], c2[dd],
c3[dd], c4[dd]);
fprintf(localVar[thrId].fp2, " c5=%d c6=%d c7=%d c8=%d\n", c5[dd],
c6[dd], c7[dd], c8[dd]);
}
}
#endif
}
if (!LaterTricksMIN(posPoint,hand,depth,target, thrId))
return FALSE;
}
else {
qtricks=QuickTricks(posPoint, hand, depth, target, &res, thrId);
if (res) {
if (qtricks==0)
return TRUE;
else
return FALSE;
#ifdef STAT
c4[depth]++;
score0Counts[depth]++;
if (depth==localVar[thrId].iniDepth) {
fprintf(localVar[thrId].fp2, "score statistics:\n");
for (dd=localVar[thrId].iniDepth; dd>=0; dd--) {
fprintf(localVar[thrId].fp2, "d=%d s1=%d s0=%d c1=%d c2=%d c3=%d c4=%d", dd,
score1Counts[dd], score0Counts[dd], c1[dd], c2[dd],
c3[dd], c4[dd]);
fprintf(localVar[thrId].fp2, " c5=%d c6=%d c7=%d c8=%d\n", c5[dd],
c6[dd], c7[dd], c8[dd]);
}
}
#endif
}
if (LaterTricksMAX(posPoint,hand,depth,target,thrId))
return TRUE;
}
}
else if (posPoint->handRelFirst==1) {
ss=posPoint->move[depth+1].suit;
ranks=posPoint->rankInSuit[hand][ss] |
posPoint->rankInSuit[partner[hand]][ss];
found=FALSE; rr=0; qtricks=0;
if ( ranks >(bitMapRank[posPoint->move[depth+1].rank] |
posPoint->rankInSuit[lho[hand]][ss])) {
/* Own side has highest card in suit */
if ((localVar[thrId].trump==4) || ((ss==localVar[thrId].trump)||
(posPoint->rankInSuit[lho[hand]][localVar[thrId].trump]==0)
|| (posPoint->rankInSuit[lho[hand]][ss]!=0))) {
rr=highestRank[ranks];
if (rr!=0) {
found=TRUE;
qtricks=1;
}
else
found=FALSE;
}
}
else if ((localVar[thrId].trump!=4) && (ss!=localVar[thrId].trump) &&
(((posPoint->rankInSuit[hand][ss]==0)
&& (posPoint->rankInSuit[hand][localVar[thrId].trump]!=0))||
((posPoint->rankInSuit[partner[hand]][ss]==0)
&& (posPoint->rankInSuit[partner[hand]][localVar[thrId].trump]!=0)))) {
/* Own side can ruff */
if ((posPoint->rankInSuit[lho[hand]][ss]!=0)||
(posPoint->rankInSuit[lho[hand]][localVar[thrId].trump]==0)) {
found=TRUE;
qtricks=1;
}
}
if (localVar[thrId].nodeTypeStore[hand]==MAXNODE) {
if ((posPoint->tricksMAX+qtricks>=target)&&(found)&&
(depth!=localVar[thrId].iniDepth)) {
for (k=0; k<=3; k++)
posPoint->winRanks[depth][k]=0;
if (rr!=0)
posPoint->winRanks[depth][ss]=
posPoint->winRanks[depth][ss] | bitMapRank[rr];
return TRUE;
}
}
else {
if (((posPoint->tricksMAX+((depth)>>2)+3-qtricks)<=target)&&
(found)&&(depth!=localVar[thrId].iniDepth)) {
for (k=0; k<=3; k++)
posPoint->winRanks[depth][k]=0;
if (rr!=0)
posPoint->winRanks[depth][ss]=
posPoint->winRanks[depth][ss] | bitMapRank[rr];
return FALSE;
}
}
}
if ((posPoint->handRelFirst==0)&&
(depth!=localVar[thrId].iniDepth)) {
for (ss=0; ss<=3; ss++) {
aggr[ss]=0;
for (hh=0; hh<=3; hh++)
aggr[ss]=aggr[ss] | posPoint->rankInSuit[hh][ss];
/* New algo */
posPoint->orderSet[ss]=localVar[thrId].rel[aggr[ss]].aggrRanks[ss];
}
tricks=depth>>2;
localVar[thrId].suitLengths=0;
for (ss=0; ss<=2; ss++)
for (hh=0; hh<=3; hh++) {
localVar[thrId].suitLengths=localVar[thrId].suitLengths<<4;
localVar[thrId].suitLengths|=posPoint->length[hh][ss];
}
pp=SearchLenAndInsert(localVar[thrId].rootnp[tricks][hand],
localVar[thrId].suitLengths, FALSE, &res, thrId);
/* Find node that fits the suit lengths */
if (pp!=NULL) {
np=pp->posSearchPoint;
if (np==NULL)
cardsP=NULL;
else
cardsP=FindSOP(posPoint, np, hand, target, tricks, &scoreFlag, thrId);
if (cardsP!=NULL) {
if (scoreFlag==1) {
for (ss=0; ss<=3; ss++)
posPoint->winRanks[depth][ss]=
localVar[thrId].adaptWins[aggr[ss]].winRanks[(int)cardsP->leastWin[ss]];
if (cardsP->bestMoveRank!=0) {
localVar[thrId].bestMoveTT[depth].suit=cardsP->bestMoveSuit;
localVar[thrId].bestMoveTT[depth].rank=cardsP->bestMoveRank;
}
#ifdef STAT
c5[depth]++;
if (scoreFlag==1)
score1Counts[depth]++;
else
score0Counts[depth]++;
if (depth==localVar[thrId].iniDepth) {
fprintf(localVar[thrId].fp2, "score statistics:\n");
for (dd=localVar[thrId].iniDepth; dd>=0; dd--) {
fprintf(localVar[thrId].fp2, "d=%d s1=%d s0=%d c1=%d c2=%d c3=%d c4=%d", dd,
score1Counts[dd], score0Counts[dd], c1[dd], c2[dd],c3[dd], c4[dd]);
fprintf(localVar[thrId].fp2, " c5=%d c6=%d c7=%d c8=%d\n", c5[dd],
c6[dd], c7[dd], c8[dd]);
}
}
#endif
#ifdef TTDEBUG
if (!suppressTTlog) {
if (lastTTstorewinRanks[depth][ss]=
localVar[thrId].adaptWins[aggr[ss]].winRanks[(int)cardsP->leastWin[ss]];
if (cardsP->bestMoveRank!=0) {
localVar[thrId].bestMoveTT[depth].suit=cardsP->bestMoveSuit;
localVar[thrId].bestMoveTT[depth].rank=cardsP->bestMoveRank;
}
#ifdef STAT
c6[depth]++;
if (scoreFlag==1)
score1Counts[depth]++;
else
score0Counts[depth]++;
if (depth==localVar[thrId].iniDepth) {
fprintf(localVar[thrId].fp2, "score statistics:\n");
for (dd=localVar[thrId].iniDepth; dd>=0; dd--) {
fprintf(localVar[thrId].fp2, "d=%d s1=%d s0=%d c1=%d c2=%d c3=%d c4=%d", dd,
score1Counts[dd], score0Counts[dd], c1[dd], c2[dd], c3[dd],
c4[dd]);
fprintf(localVar[thrId].fp2, " c5=%d c6=%d c7=%d c8=%d\n", c5[dd],
c6[dd], c7[dd], c8[dd]);
}
}
#endif
#ifdef TTDEBUG
if (!suppressTTlog) {
if (lastTTstore=target)
value=TRUE;
else
value=FALSE;
for (ss=0; ss<=3; ss++) {
posPoint->winRanks[depth][ss]=evalData.winRanks[ss];
#ifdef STAT
c7[depth]++;
if (value==1)
score1Counts[depth]++;
else
score0Counts[depth]++;
if (depth==localVar[thrId].iniDepth) {
fprintf(localVar[thrId].fp2, "score statistics:\n");
for (dd=localVar[thrId].iniDepth; dd>=0; dd--) {
fprintf(localVar[thrId].fp2, "d=%d s1=%d s0=%d c1=%d c2=%d c3=%d c4=%d", dd,
score1Counts[dd], score0Counts[dd], c1[dd], c2[dd], c3[dd],
c4[dd]);
fprintf(localVar[thrId].fp2, " c5=%d c6=%d c7=%d c8=%d\n", c5[dd],
c6[dd], c7[dd], c8[dd]);
}
}
#endif
}
return value;
}
else {
moveExists=MoveGen(posPoint, depth, thrId);
/*#if 0*/
if ((posPoint->handRelFirst==3)&&(depth>=/*29*/33/*37*/)
&&(depth!=localVar[thrId].iniDepth)) {
localVar[thrId].movePly[depth].current=0;
mexists=TRUE;
ready=FALSE;
while (mexists) {
Make(posPoint, makeWinRank, depth, thrId);
depth--;
for (ss=0; ss<=3; ss++) {
aggr[ss]=0;
for (hh=0; hh<=3; hh++)
aggr[ss]=aggr[ss] | posPoint->rankInSuit[hh][ss];
/* New algo */
posPoint->orderSet[ss]=localVar[thrId].rel[aggr[ss]].aggrRanks[ss];
}
tricks=depth>>2;
hfirst=posPoint->first[depth];
localVar[thrId].suitLengths=0;
for (ss=0; ss<=2; ss++)
for (hh=0; hh<=3; hh++) {
localVar[thrId].suitLengths=localVar[thrId].suitLengths<<4;
localVar[thrId].suitLengths|=posPoint->length[hh][ss];
}
pp=SearchLenAndInsert(localVar[thrId].rootnp[tricks][hfirst],
localVar[thrId].suitLengths, FALSE, &res, thrId);
/* Find node that fits the suit lengths */
if (pp!=NULL) {
np=pp->posSearchPoint;
if (np==NULL)
tempP=NULL;
else
tempP=FindSOP(posPoint, np, hfirst, target, tricks, &scoreFlag, thrId);
if (tempP!=NULL) {
if ((localVar[thrId].nodeTypeStore[hand]==MAXNODE)&&(scoreFlag==1)) {
for (ss=0; ss<=3; ss++)
posPoint->winRanks[depth+1][ss]=
localVar[thrId].adaptWins[aggr[ss]].winRanks[(int)tempP->leastWin[ss]];
if (tempP->bestMoveRank!=0) {
localVar[thrId].bestMoveTT[depth+1].suit=tempP->bestMoveSuit;
localVar[thrId].bestMoveTT[depth+1].rank=tempP->bestMoveRank;
}
for (ss=0; ss<=3; ss++)
posPoint->winRanks[depth+1][ss]=posPoint->winRanks[depth+1][ss]
| makeWinRank[ss];
Undo(posPoint, depth+1, thrId);
return TRUE;
}
else if ((localVar[thrId].nodeTypeStore[hand]==MINNODE)&&(scoreFlag==0)) {
for (ss=0; ss<=3; ss++)
posPoint->winRanks[depth+1][ss]=
localVar[thrId].adaptWins[aggr[ss]].winRanks[(int)tempP->leastWin[ss]];
if (tempP->bestMoveRank!=0) {
localVar[thrId].bestMoveTT[depth+1].suit=tempP->bestMoveSuit;
localVar[thrId].bestMoveTT[depth+1].rank=tempP->bestMoveRank;
}
for (ss=0; ss<=3; ss++)
posPoint->winRanks[depth+1][ss]=posPoint->winRanks[depth+1][ss]
| makeWinRank[ss];
Undo(posPoint, depth+1, thrId);
return FALSE;
}
else {
localVar[thrId].movePly[depth+1].move[localVar[thrId].movePly[depth+1].current].weight+=100;
ready=TRUE;
}
}
}
depth++;
Undo(posPoint, depth, thrId);
if (ready)
break;
if (localVar[thrId].movePly[depth].current<=localVar[thrId].movePly[depth].last-1) {
localVar[thrId].movePly[depth].current++;
mexists=TRUE;
}
else
mexists=FALSE;
}
if (ready)
InsertSort(localVar[thrId].movePly[depth].last+1, depth, thrId);
}
/*#endif*/
localVar[thrId].movePly[depth].current=0;
if (localVar[thrId].nodeTypeStore[hand]==MAXNODE) {
value=FALSE;
for (ss=0; ss<=3; ss++)
posPoint->winRanks[depth][ss]=0;
while (moveExists) {
Make(posPoint, makeWinRank, depth, thrId); /* Make current move */
assert((posPoint->handRelFirst>=0)&&(posPoint->handRelFirst<=3));
value=ABsearch(posPoint, target, depth-1, thrId);
Undo(posPoint, depth, thrId); /* Retract current move */
if (value==TRUE) {
/* A cut-off? */
for (ss=0; ss<=3; ss++)
posPoint->winRanks[depth][ss]=posPoint->winRanks[depth-1][ss] |
makeWinRank[ss];
mcurrent=localVar[thrId].movePly[depth].current;
localVar[thrId].bestMove[depth]=localVar[thrId].movePly[depth].move[mcurrent];
goto ABexit;
}
for (ss=0; ss<=3; ss++)
posPoint->winRanks[depth][ss]=posPoint->winRanks[depth][ss] |
posPoint->winRanks[depth-1][ss] | makeWinRank[ss];
moveExists=NextMove(posPoint, depth, thrId);
}
}
else { /* A minnode */
value=TRUE;
for (ss=0; ss<=3; ss++)
posPoint->winRanks[depth][ss]=0;
while (moveExists) {
Make(posPoint, makeWinRank, depth, thrId); /* Make current move */
value=ABsearch(posPoint, target, depth-1, thrId);
Undo(posPoint, depth, thrId); /* Retract current move */
if (value==FALSE) {
/* A cut-off? */
for (ss=0; ss<=3; ss++)
posPoint->winRanks[depth][ss]=posPoint->winRanks[depth-1][ss] |
makeWinRank[ss];
mcurrent=localVar[thrId].movePly[depth].current;
localVar[thrId].bestMove[depth]=localVar[thrId].movePly[depth].move[mcurrent];
goto ABexit;
}
for (ss=0; ss<=3; ss++)
posPoint->winRanks[depth][ss]=posPoint->winRanks[depth][ss] |
posPoint->winRanks[depth-1][ss] | makeWinRank[ss];
moveExists=NextMove(posPoint, depth, thrId);
}
}
}
ABexit:
if (depth>=4) {
if(posPoint->handRelFirst==0) {
tricks=depth>>2;
/*hand=posPoint->first[depth-1];*/
if (value)
k=target;
else
k=target-1;
if (depth!=localVar[thrId].iniDepth)
BuildSOP(posPoint, tricks, hand, target, depth,
value, k, thrId);
if (localVar[thrId].clearTTflag) {
/* Wipe out the TT dynamically allocated structures
except for the initially allocated structures.
Set the TT limits to the initial values.
Reset TT array indices to zero.
Reset memory chunk indices to zero.
Set allocated memory to the initial value. */
/*localVar[thrId].fp2=fopen("dyn.txt", "a");
fprintf(localVar[thrId].fp2, "Clear TT:\n");
fprintf(localVar[thrId].fp2, "wcount=%d, ncount=%d, lcount=%d\n",
wcount, ncount, lcount);
fprintf(localVar[thrId].fp2, "winSetSize=%d, nodeSetSize=%d, lenSetSize=%d\n",
winSetSize, nodeSetSize, lenSetSize);
fprintf(localVar[thrId].fp2, "\n");
fclose(localVar[thrId].fp2);*/
Wipe(thrId);
localVar[thrId].winSetSizeLimit=WINIT;
localVar[thrId].nodeSetSizeLimit=NINIT;
localVar[thrId].lenSetSizeLimit=LINIT;
localVar[thrId].lcount=0;
localVar[thrId].allocmem=(localVar[thrId].lenSetSizeLimit+1)*sizeof(struct posSearchType);
localVar[thrId].lenSetSize=0;
localVar[thrId].posSearch=localVar[thrId].pl[localVar[thrId].lcount];
for (k=0; k<=13; k++) {
for (hh=0; hh<=3; hh++) {
localVar[thrId].rootnp[k][hh]=&localVar[thrId].posSearch[localVar[thrId].lenSetSize];
localVar[thrId].posSearch[localVar[thrId].lenSetSize].suitLengths=0;
localVar[thrId].posSearch[localVar[thrId].lenSetSize].posSearchPoint=NULL;
localVar[thrId].posSearch[localVar[thrId].lenSetSize].left=NULL;
localVar[thrId].posSearch[localVar[thrId].lenSetSize].right=NULL;
localVar[thrId].lenSetSize++;
}
}
localVar[thrId].nodeSetSize=0;
localVar[thrId].winSetSize=0;
localVar[thrId].wcount=0; localVar[thrId].ncount=0;
localVar[thrId].allocmem+=(localVar[thrId].winSetSizeLimit+1)*sizeof(struct winCardType);
localVar[thrId].winCards=localVar[thrId].pw[localVar[thrId].wcount];
localVar[thrId].allocmem+=(localVar[thrId].nodeSetSizeLimit+1)*sizeof(struct nodeCardsType);
localVar[thrId].nodeCards=localVar[thrId].pn[localVar[thrId].ncount];
localVar[thrId].clearTTflag=FALSE;
localVar[thrId].windex=-1;
}
}
}
#ifdef STAT
c8[depth]++;
if (value==1)
score1Counts[depth]++;
else
score0Counts[depth]++;
if (depth==localVar[thrId].iniDepth) {
if (localVar[thrId].fp2==NULL)
exit(0);
fprintf(localVar[thrId].fp2, "\n");
fprintf(localVar[thrId].fp2, "top level cards:\n");
for (hh=0; hh<=3; hh++) {
fprintf(localVar[thrId].fp2, "hand=%c\n", cardHand[hh]);
for (ss=0; ss<=3; ss++) {
fprintf(localVar[thrId].fp2, "suit=%c", cardSuit[ss]);
for (rr=14; rr>=2; rr--)
if (posPoint->rankInSuit[hh][ss] & bitMapRank[rr])
fprintf(localVar[thrId].fp2, " %c", cardRank[rr]);
fprintf(localVar[thrId].fp2, "\n");
}
fprintf(localVar[thrId].fp2, "\n");
}
fprintf(localVar[thrId].fp2, "top level winning cards:\n");
for (ss=0; ss<=3; ss++) {
fprintf(localVar[thrId].fp2, "suit=%c", cardSuit[ss]);
for (rr=14; rr>=2; rr--)
if (posPoint->winRanks[depth][ss] & bitMapRank[rr])
fprintf(localVar[thrId].fp2, " %c", cardRank[rr]);
fprintf(localVar[thrId].fp2, "\n");
}
fprintf(localVar[thrId].fp2, "\n");
fprintf(localVar[thrId].fp2, "\n");
fprintf(localVar[thrId].fp2, "score statistics:\n");
sumScore0Counts=0;
sumScore1Counts=0;
sumc1=0; sumc2=0; sumc3=0; sumc4=0;
sumc5=0; sumc6=0; sumc7=0; sumc8=0; sumc9=0;
for (dd=localVar[thrId].iniDepth; dd>=0; dd--) {
fprintf(localVar[thrId].fp2, "depth=%d s1=%d s0=%d c1=%d c2=%d c3=%d c4=%d", dd,
score1Counts[dd], score0Counts[dd], c1[dd], c2[dd], c3[dd], c4[dd]);
fprintf(localVar[thrId].fp2, " c5=%d c6=%d c7=%d c8=%d\n", c5[dd], c6[dd],
c7[dd], c8[dd]);
sumScore0Counts=sumScore0Counts+score0Counts[dd];
sumScore1Counts=sumScore1Counts+score1Counts[dd];
sumc1=sumc1+c1[dd];
sumc2=sumc2+c2[dd];
sumc3=sumc3+c3[dd];
sumc4=sumc4+c4[dd];
sumc5=sumc5+c5[dd];
sumc6=sumc6+c6[dd];
sumc7=sumc7+c7[dd];
sumc8=sumc8+c8[dd];
sumc9=sumc9+c9[dd];
}
fprintf(localVar[thrId].fp2, "\n");
fprintf(localVar[thrId].fp2, "score sum statistics:\n");
fprintf(localVar[thrId].fp2, "\n");
fprintf(localVar[thrId].fp2, "sumScore0Counts=%d sumScore1Counts=%d\n",
sumScore0Counts, sumScore1Counts);
fprintf(localVar[thrId].fp2, "nodeSetSize=%d winSetSize=%d\n", localVar[thrId].nodeSetSize,
localVar[thrId].winSetSize);
fprintf(localVar[thrId].fp2, "sumc1=%d sumc2=%d sumc3=%d sumc4=%d\n",
sumc1, sumc2, sumc3, sumc4);
fprintf(localVar[thrId].fp2, "sumc5=%d sumc6=%d sumc7=%d sumc8=%d sumc9=%d\n",
sumc5, sumc6, sumc7, sumc8, sumc9);
fprintf(localVar[thrId].fp2, "\n");
fprintf(localVar[thrId].fp2, "\n");
fprintf(localVar[thrId].fp2, "No of searched nodes per depth:\n");
for (dd=localVar[thrId].iniDepth; dd>=0; dd--)
fprintf(localVar[thrId].fp2, "depth=%d nodes=%d\n", dd, localVar[thrId].no[dd]);
fprintf(localVar[thrId].fp2, "\n");
fprintf(localVar[thrId].fp2, "Total nodes=%d\n", localVar[thrId].nodes);
}
#endif
return value;
}
void Make(struct pos * posPoint, unsigned short int trickCards[4],
int depth, int thrId) {
int r, s, t, u, w, firstHand;
int suit, count, mcurr, h, q, done;
struct moveType mo1, mo2;
assert((posPoint->handRelFirst>=0)&&(posPoint->handRelFirst<=3));
for (suit=0; suit<=3; suit++)
trickCards[suit]=0;
firstHand=posPoint->first[depth];
r=localVar[thrId].movePly[depth].current;
if (posPoint->handRelFirst==3) { /* This hand is last hand */
mo1=localVar[thrId].movePly[depth].move[r];
mo2=posPoint->move[depth+1];
if (mo1.suit==mo2.suit) {
if (mo1.rank>mo2.rank) {
posPoint->move[depth]=mo1;
posPoint->high[depth]=handId(firstHand, 3);
}
else {
posPoint->move[depth]=posPoint->move[depth+1];
posPoint->high[depth]=posPoint->high[depth+1];
}
}
else if ((localVar[thrId].trump!=4) && (mo1.suit==localVar[thrId].trump)) {
posPoint->move[depth]=mo1;
posPoint->high[depth]=handId(firstHand, 3);
}
else {
posPoint->move[depth]=posPoint->move[depth+1];
posPoint->high[depth]=posPoint->high[depth+1];
}
/* Is the trick won by rank? */
suit=posPoint->move[depth].suit;
count=0;
for (h=0; h<=3; h++) {
mcurr=localVar[thrId].movePly[depth+h].current;
if (localVar[thrId].movePly[depth+h].move[mcurr].suit==suit)
count++;
}
if (localVar[thrId].nodeTypeStore[posPoint->high[depth]]==MAXNODE)
posPoint->tricksMAX++;
posPoint->first[depth-1]=posPoint->high[depth]; /* Defines who is first
in the next move */
t=handId(firstHand, 3);
posPoint->handRelFirst=0; /* Hand pointed to by posPoint->first
will lead the next trick */
done=FALSE;
for (s=3; s>=0; s--) {
q=handId(firstHand, 3-s);
/* Add the moves to removed ranks */
r=localVar[thrId].movePly[depth+s].current;
w=localVar[thrId].movePly[depth+s].move[r].rank;
u=localVar[thrId].movePly[depth+s].move[r].suit;
posPoint->removedRanks[u]|=bitMapRank[w];
if (s==0)
posPoint->rankInSuit[t][u]&=(~bitMapRank[w]);
if (w==posPoint->winner[u].rank)
UpdateWinner(posPoint, u);
else if (w==posPoint->secondBest[u].rank)
UpdateSecondBest(posPoint, u);
/* Determine win-ranked cards */
if ((q==posPoint->high[depth])&&(!done)) {
done=TRUE;
if (count>=2) {
trickCards[u]=bitMapRank[w];
/* Mark ranks as winning if they are part of a sequence */
trickCards[u]|=localVar[thrId].movePly[depth+s].move[r].sequence;
}
}
}
}
else if (posPoint->handRelFirst==0) { /* Is it the 1st hand? */
posPoint->first[depth-1]=firstHand; /* First hand is not changed in
next move */
posPoint->high[depth]=firstHand;
posPoint->move[depth]=localVar[thrId].movePly[depth].move[r];
t=firstHand;
posPoint->handRelFirst=1;
r=localVar[thrId].movePly[depth].current;
u=localVar[thrId].movePly[depth].move[r].suit;
w=localVar[thrId].movePly[depth].move[r].rank;
posPoint->rankInSuit[t][u]&=(~bitMapRank[w]);
}
else {
mo1=localVar[thrId].movePly[depth].move[r];
mo2=posPoint->move[depth+1];
r=localVar[thrId].movePly[depth].current;
u=localVar[thrId].movePly[depth].move[r].suit;
w=localVar[thrId].movePly[depth].move[r].rank;
if (mo1.suit==mo2.suit) {
if (mo1.rank>mo2.rank) {
posPoint->move[depth]=mo1;
posPoint->high[depth]=handId(firstHand, posPoint->handRelFirst);
}
else {
posPoint->move[depth]=posPoint->move[depth+1];
posPoint->high[depth]=posPoint->high[depth+1];
}
}
else if ((localVar[thrId].trump!=4) && (mo1.suit==localVar[thrId].trump)) {
posPoint->move[depth]=mo1;
posPoint->high[depth]=handId(firstHand, posPoint->handRelFirst);
}
else {
posPoint->move[depth]=posPoint->move[depth+1];
posPoint->high[depth]=posPoint->high[depth+1];
}
t=handId(firstHand, posPoint->handRelFirst);
posPoint->handRelFirst++; /* Current hand is stepped */
assert((posPoint->handRelFirst>=0)&&(posPoint->handRelFirst<=3));
posPoint->first[depth-1]=firstHand; /* First hand is not changed in
next move */
posPoint->rankInSuit[t][u]&=(~bitMapRank[w]);
}
posPoint->length[t][u]--;
#ifdef STAT
localVar[thrId].no[depth]++;
#endif
return;
}
void Undo(struct pos * posPoint, int depth, int thrId) {
int r, s, t, u, w, firstHand;
assert((posPoint->handRelFirst>=0)&&(posPoint->handRelFirst<=3));
firstHand=posPoint->first[depth];
switch (posPoint->handRelFirst) {
case 3: case 2: case 1:
posPoint->handRelFirst--;
break;
case 0:
posPoint->handRelFirst=3;
}
if (posPoint->handRelFirst==0) { /* 1st hand which won the previous
trick */
t=firstHand;
r=localVar[thrId].movePly[depth].current;
u=localVar[thrId].movePly[depth].move[r].suit;
w=localVar[thrId].movePly[depth].move[r].rank;
}
else if (posPoint->handRelFirst==3) { /* Last hand */
for (s=3; s>=0; s--) {
/* Delete the moves from removed ranks */
r=localVar[thrId].movePly[depth+s].current;
w=localVar[thrId].movePly[depth+s].move[r].rank;
u=localVar[thrId].movePly[depth+s].move[r].suit;
posPoint->removedRanks[u]&= (~bitMapRank[w]);
if (w>posPoint->winner[u].rank) {
posPoint->secondBest[u].rank=posPoint->winner[u].rank;
posPoint->secondBest[u].hand=posPoint->winner[u].hand;
posPoint->winner[u].rank=w;
posPoint->winner[u].hand=handId(firstHand, 3-s);
}
else if (w>posPoint->secondBest[u].rank) {
posPoint->secondBest[u].rank=w;
posPoint->secondBest[u].hand=handId(firstHand, 3-s);
}
}
t=handId(firstHand, 3);
if (localVar[thrId].nodeTypeStore[posPoint->first[depth-1]]==MAXNODE) /* First hand
of next trick is winner of the
current trick */
posPoint->tricksMAX--;
}
else {
t=handId(firstHand, posPoint->handRelFirst);
r=localVar[thrId].movePly[depth].current;
u=localVar[thrId].movePly[depth].move[r].suit;
w=localVar[thrId].movePly[depth].move[r].rank;
}
posPoint->rankInSuit[t][u]|=bitMapRank[w];
posPoint->length[t][u]++;
return;
}
struct evalType Evaluate(struct pos * posPoint, int thrId) {
int s, smax=0, max, /*i, j, r, mcurr,*/ k, firstHand, count;
struct evalType eval;
firstHand=posPoint->first[0];
assert((firstHand >= 0)&&(firstHand <= 3));
for (s=0; s<=3; s++)
eval.winRanks[s]=0;
/* Who wins the last trick? */
if (localVar[thrId].trump!=4) { /* Highest trump card wins */
max=0;
count=0;
for (s=0; s<=3; s++) {
if (posPoint->rankInSuit[s][localVar[thrId].trump]!=0)
count++;
if (posPoint->rankInSuit[s][localVar[thrId].trump]>max) {
smax=s;
max=posPoint->rankInSuit[s][localVar[thrId].trump];
}
}
if (max>0) { /* Trumpcard wins */
if (count>=2)
eval.winRanks[localVar[thrId].trump]=max;
if (localVar[thrId].nodeTypeStore[smax]==MAXNODE)
goto maxexit;
else
goto minexit;
}
}
/* Who has the highest card in the suit played by 1st hand? */
k=0;
while (k<=3) { /* Find the card the 1st hand played */
if (posPoint->rankInSuit[firstHand][k]!=0) /* Is this the card? */
break;
k++;
}
assert(k < 4);
count=0;
max=0;
for (s=0; s<=3; s++) {
if (posPoint->rankInSuit[s][k]!=0)
count++;
if (posPoint->rankInSuit[s][k]>max) {
smax=s;
max=posPoint->rankInSuit[s][k];
}
}
if (count>=2)
eval.winRanks[k]=max;
if (localVar[thrId].nodeTypeStore[smax]==MAXNODE)
goto maxexit;
else
goto minexit;
maxexit:
eval.tricks=posPoint->tricksMAX+1;
return eval;
minexit:
eval.tricks=posPoint->tricksMAX;
return eval;
}
void UpdateWinner(struct pos * posPoint, int suit) {
int k, h, hmax=0;
unsigned short int sb, sbmax;
posPoint->winner[suit]=posPoint->secondBest[suit];
if (posPoint->winner[suit].hand==-1)
return;
sbmax=0;
for (h=0; h<=3; h++) {
sb=posPoint->rankInSuit[h][suit] & (~bitMapRank[posPoint->winner[suit].rank]);
if (sb>sbmax) {
hmax=h;
sbmax=sb;
}
}
k=highestRank[sbmax];
if (k!=0) {
posPoint->secondBest[suit].hand=hmax;
posPoint->secondBest[suit].rank=k;
}
else {
posPoint->secondBest[suit].hand=-1;
posPoint->secondBest[suit].rank=0;
}
return;
}
void UpdateSecondBest(struct pos * posPoint, int suit) {
int k, h, hmax=0;
unsigned short int sb, sbmax;
sbmax=0;
for (h=0; h<=3; h++) {
sb=posPoint->rankInSuit[h][suit] & (~bitMapRank[posPoint->winner[suit].rank]);
if (sb>sbmax) {
hmax=h;
sbmax=sb;
}
}
k=highestRank[sbmax];
if (k!=0) {
posPoint->secondBest[suit].hand=hmax;
posPoint->secondBest[suit].rank=k;
}
else {
posPoint->secondBest[suit].hand=-1;
posPoint->secondBest[suit].rank=0;
}
return;
}
int QuickTricks(struct pos * posPoint, int hand,
int depth, int target, int *result, int thrId) {
unsigned short int ranks;
int suit, sum, qtricks, commPartner, commRank=0, commSuit=-1, s, found=FALSE;
int opps;
int countLho, countRho, countPart, countOwn, lhoTrumpRanks=0, rhoTrumpRanks=0;
int cutoff, k, hh, ss, rr, lowestQtricks=0, count=0;
int trump;
trump=localVar[thrId].trump;
*result=TRUE;
qtricks=0;
for (s=0; s<=3; s++)
posPoint->winRanks[depth][s]=0;
if ((depth<=0)||(depth==localVar[thrId].iniDepth)) {
*result=FALSE;
return qtricks;
}
if (localVar[thrId].nodeTypeStore[hand]==MAXNODE)
cutoff=target-posPoint->tricksMAX;
else
cutoff=posPoint->tricksMAX-target+(depth>>2)+2;
commPartner=FALSE;
for (s=0; s<=3; s++) {
if ((trump!=4)&&(trump!=s)) {
if (posPoint->winner[s].hand==partner[hand]) {
/* Partner has winning card */
if (posPoint->rankInSuit[hand][s]!=0) {
/* Own hand has card in suit */
if (((posPoint->rankInSuit[lho[hand]][s]!=0) ||
/* LHO not void */
(posPoint->rankInSuit[lho[hand]][trump]==0))
/* LHO has no trump */
&& ((posPoint->rankInSuit[rho[hand]][s]!=0) ||
/* RHO not void */
(posPoint->rankInSuit[rho[hand]][trump]==0))) {
/* RHO has no trump */
commPartner=TRUE;
commSuit=s;
commRank=posPoint->winner[s].rank;
break;
}
}
}
else if (posPoint->secondBest[s].hand==partner[hand]) {
if ((posPoint->winner[s].hand==hand)&&
(posPoint->length[hand][s]>=2)&&(posPoint->length[partner[hand]][s]>=2)) {
if (((posPoint->rankInSuit[lho[hand]][s]!=0) ||
(posPoint->rankInSuit[lho[hand]][trump]==0))
&& ((posPoint->rankInSuit[rho[hand]][s]!=0) ||
(posPoint->rankInSuit[rho[hand]][trump]==0))) {
commPartner=TRUE;
commSuit=s;
commRank=posPoint->secondBest[s].rank;
break;
}
}
}
}
else if (trump==4) {
if (posPoint->winner[s].hand==partner[hand]) {
/* Partner has winning card */
if (posPoint->rankInSuit[hand][s]!=0) {
/* Own hand has card in suit */
commPartner=TRUE;
commSuit=s;
commRank=posPoint->winner[s].rank;
break;
}
}
else if (posPoint->secondBest[s].hand==partner[hand]) {
if ((posPoint->winner[s].hand==hand)&&
(posPoint->length[hand][s]>=2)&&(posPoint->length[partner[hand]][s]>=2)) {
commPartner=TRUE;
commSuit=s;
commRank=posPoint->secondBest[s].rank;
break;
}
}
}
}
if ((trump!=4) && (!commPartner) &&
(posPoint->rankInSuit[hand][trump]!=0) &&
(posPoint->winner[trump].hand==partner[hand])) {
commPartner=TRUE;
commSuit=trump;
commRank=posPoint->winner[trump].rank;
}
if (trump!=4) {
suit=trump;
lhoTrumpRanks=posPoint->length[lho[hand]][trump];
rhoTrumpRanks=posPoint->length[rho[hand]][trump];
}
else
suit=0;
do {
countOwn=posPoint->length[hand][suit];
countLho=posPoint->length[lho[hand]][suit];
countRho=posPoint->length[rho[hand]][suit];
countPart=posPoint->length[partner[hand]][suit];
opps=countLho | countRho;
if (!opps && (countPart==0)) {
if (countOwn==0) {
if ((trump!=4) && (suit==trump)) {
if (trump==0)
suit=1;
else
suit=0;
}
else {
suit++;
if ((trump!=4) && (suit==trump))
suit++;
}
continue;
}
if ((trump!=4) && (trump!=suit)) {
if ((lhoTrumpRanks==0) &&
/* LHO has no trump */
(rhoTrumpRanks==0)) {
/* RHO has no trump */
qtricks=qtricks+countOwn;
if (qtricks>=cutoff)
return qtricks;
suit++;
if ((trump!=4) && (suit==trump))
suit++;
continue;
}
else {
suit++;
if ((trump!=4) && (suit==trump))
suit++;
continue;
}
}
else {
qtricks=qtricks+countOwn;
if (qtricks>=cutoff)
return qtricks;
if ((trump!=4) && (suit==trump)) {
if (trump==0)
suit=1;
else
suit=0;
}
else {
suit++;
if ((trump!=4) && (suit==trump))
suit++;
}
continue;
}
}
else {
if (!opps && (trump!=4) && (suit==trump)) {
sum=Max(countOwn, countPart);
for (s=0; s<=3; s++) {
if ((sum>0)&&(s!=trump)&&(countOwn>=countPart)&&(posPoint->length[hand][s]>0)&&
(posPoint->length[partner[hand]][s]==0)) {
sum++;
break;
}
}
if (sum>=cutoff)
return sum;
}
else if (!opps) {
sum=Min(countOwn,countPart);
if (trump==4) {
if (sum>=cutoff)
return sum;
}
else if ((suit!=trump)&&(lhoTrumpRanks==0)&&(rhoTrumpRanks==0)) {
if (sum>=cutoff)
return sum;
}
}
if (commPartner) {
if (!opps && (countOwn==0)) {
if ((trump!=4) && (trump!=suit)) {
if ((lhoTrumpRanks==0) &&
/* LHO has no trump */
(rhoTrumpRanks==0)) {
/* RHO has no trump */
qtricks=qtricks+countPart;
posPoint->winRanks[depth][commSuit]=posPoint->winRanks[depth][commSuit] |
bitMapRank[commRank];
if (qtricks>=cutoff)
return qtricks;
suit++;
if ((trump!=4) && (suit==trump))
suit++;
continue;
}
else {
suit++;
if ((trump!=4) && (suit==trump))
suit++;
continue;
}
}
else {
qtricks=qtricks+countPart;
posPoint->winRanks[depth][commSuit]=posPoint->winRanks[depth][commSuit] |
bitMapRank[commRank];
if (qtricks>=cutoff)
return qtricks;
if ((trump!=4) && (suit==trump)) {
if (trump==0)
suit=1;
else
suit=0;
}
else {
suit++;
if ((trump!=4) && (suit==trump))
suit++;
}
continue;
}
}
else {
if (!opps && (trump!=4) && (suit==trump)) {
sum=Max(countOwn, countPart);
for (s=0; s<=3; s++) {
if ((sum>0)&&(s!=trump)&&(countOwn<=countPart)&&(posPoint->length[partner[hand]][s]>0)&&
(posPoint->length[hand][s]==0)) {
sum++;
break;
}
}
if (sum>=cutoff) {
posPoint->winRanks[depth][commSuit]=posPoint->winRanks[depth][commSuit] |
bitMapRank[commRank];
return sum;
}
}
else if (!opps) {
sum=Min(countOwn,countPart);
if (trump==4) {
if (sum>=cutoff)
return sum;
}
else if ((suit!=trump)&&(lhoTrumpRanks==0)&&(rhoTrumpRanks==0)) {
if (sum>=cutoff)
return sum;
}
}
}
}
}
/* 08-01-30 */
if (posPoint->winner[suit].rank==0) {
if ((trump!=4) && (suit==trump)) {
if (trump==0)
suit=1;
else
suit=0;
}
else {
suit++;
if ((trump!=4) && (suit==trump))
suit++;
}
continue;
}
if (posPoint->winner[suit].hand==hand) {
/* Winner found in own hand */
if ((trump!=4)&&(trump!=suit)) {
if (((countLho!=0) ||
/* LHO not void */
(lhoTrumpRanks==0))
/* LHO has no trump */
&& ((countRho!=0) ||
/* RHO not void */
(rhoTrumpRanks==0))) {
/* RHO has no trump */
posPoint->winRanks[depth][suit]=posPoint->winRanks[depth][suit]
| bitMapRank[posPoint->winner[suit].rank];
qtricks++; /* A trick can be taken */
/* 06-12-14 */
if (qtricks>=cutoff)
return qtricks;
if ((countLho<=1)&&(countRho<=1)&&(countPart<=1)&&
(lhoTrumpRanks==0)&&(rhoTrumpRanks==0)) {
qtricks=qtricks+countOwn-1;
if (qtricks>=cutoff)
return qtricks;
suit++;
if ((trump!=4) && (suit==trump))
suit++;
continue;
}
}
if (posPoint->secondBest[suit].hand==hand) {
/* Second best found in own hand */
if ((lhoTrumpRanks==0)&&
(rhoTrumpRanks==0)) {
/* Opponents have no trump */
posPoint->winRanks[depth][suit]=posPoint->winRanks[depth][suit]
| bitMapRank[posPoint->secondBest[suit].rank];
qtricks++;
if ((countLho<=2)&&(countRho<=2)&&(countPart<=2)) {
qtricks=qtricks+countOwn-2;
if (qtricks>=cutoff)
return qtricks;
suit++;
if ((trump!=4) && (suit==trump))
suit++;
continue;
}
}
}
/* 06-08-19 */
else if ((posPoint->secondBest[suit].hand==partner[hand])
&&(countOwn>1)&&(countPart>1)) {
/* Second best at partner and suit length of own
hand and partner > 1 */
if ((lhoTrumpRanks==0)&&
(rhoTrumpRanks==0)) {
/* Opponents have no trump */
posPoint->winRanks[depth][suit]=posPoint->winRanks[depth][suit]
| bitMapRank[posPoint->secondBest[suit].rank];
qtricks++;
if ((countLho<=2)&&(countRho<=2)&&((countPart<=2)||(countOwn<=2))) {
/* 07-06-10 */
qtricks=qtricks+Max(countOwn-2, countPart-2);
if (qtricks>=cutoff)
return qtricks;
suit++;
if ((trump!=4) && (suit==trump))
suit++;
continue;
}
}
}
}
else {
posPoint->winRanks[depth][suit]=posPoint->winRanks[depth][suit]
| bitMapRank[posPoint->winner[suit].rank];
qtricks++;
/* 06-12-14 */
if (qtricks>=cutoff)
return qtricks;
if ((countLho<=1)&&(countRho<=1)&&(countPart<=1)) {
qtricks=qtricks+countOwn-1;
if (qtricks>=cutoff)
return qtricks;
if ((trump!=4) && (trump==suit)) {
if (trump==0)
suit=1;
else
suit=0;
}
else {
suit++;
if ((trump!=4) && (suit==trump))
suit++;
}
continue;
}
if (posPoint->secondBest[suit].hand==hand) {
/* Second best found in own hand */
posPoint->winRanks[depth][suit]=posPoint->winRanks[depth][suit]
| bitMapRank[posPoint->secondBest[suit].rank];
qtricks++;
if ((countLho<=2)&&(countRho<=2)&&(countPart<=2)) {
qtricks=qtricks+countOwn-2;
if (qtricks>=cutoff)
return qtricks;
if ((trump!=4) && (suit==trump)) {
if (trump==0)
suit=1;
else
suit=0;
}
else {
suit++;
if ((trump!=4) && (suit==trump))
suit++;
}
continue;
}
}
/* 06-08-19 */
else if ((posPoint->secondBest[suit].hand==partner[hand])
&&(countOwn>1)&&(countPart>1)) {
/* Second best at partner and suit length of own
hand and partner > 1 */
posPoint->winRanks[depth][suit]=posPoint->winRanks[depth][suit]
| bitMapRank[posPoint->secondBest[suit].rank];
qtricks++;
if ((countLho<=2)&&(countRho<=2)&&((countPart<=2)||(countOwn<=2))) {
/* 07-06-10 */
qtricks=qtricks+Max(countOwn-2,countPart-2);
if (qtricks>=cutoff)
return qtricks;
if ((trump!=4) && (suit==trump)) {
if (trump==0)
suit=1;
else
suit=0;
}
else {
suit++;
if ((trump!=4) && (suit==trump))
suit++;
}
continue;
}
}
}
}
/* It was not possible to take a quick trick by own winning card in
the suit */
else {
/* Partner winning card? */
if ((posPoint->winner[suit].hand==partner[hand])&&(countPart>0)) {
/* Winner found at partner*/
if (commPartner) {
/* There is communication with the partner */
if ((trump!=4)&&(trump!=suit)) {
if (((countLho!=0) ||
/* LHO not void */
(lhoTrumpRanks==0))
/* LHO has no trump */
&& ((countRho!=0) ||
/* RHO not void */
(rhoTrumpRanks==0)))
/* RHO has no trump */
{
posPoint->winRanks[depth][suit]=posPoint->winRanks[depth][suit]
| bitMapRank[posPoint->winner[suit].rank];
posPoint->winRanks[depth][commSuit]=posPoint->winRanks[depth][commSuit] |
bitMapRank[commRank];
qtricks++; /* A trick can be taken */
/* 06-12-14 */
if (qtricks>=cutoff)
return qtricks;
if ((countLho<=1)&&(countRho<=1)&&(countOwn<=1)&&
(lhoTrumpRanks==0)&&
(rhoTrumpRanks==0)) {
qtricks=qtricks+countPart-1;
if (qtricks>=cutoff)
return qtricks;
suit++;
if ((trump!=4) && (suit==trump))
suit++;
continue;
}
}
if (posPoint->secondBest[suit].hand==partner[hand]) {
/* Second best found in partners hand */
if ((lhoTrumpRanks==0)&&
(rhoTrumpRanks==0)) {
/* Opponents have no trump */
posPoint->winRanks[depth][suit]=posPoint->winRanks[depth][suit]
| bitMapRank[posPoint->secondBest[suit].rank];
posPoint->winRanks[depth][commSuit]=posPoint->winRanks[depth][commSuit] |
bitMapRank[commRank];
qtricks++;
if ((countLho<=2)&&(countRho<=2)&&(countOwn<=2)) {
qtricks=qtricks+countPart-2;
if (qtricks>=cutoff)
return qtricks;
suit++;
if ((trump!=4) && (suit==trump))
suit++;
continue;
}
}
}
/* 06-08-19 */
else if ((posPoint->secondBest[suit].hand==hand)&&
(countPart>1)&&(countOwn>1)) {
/* Second best found in own hand and suit
lengths of own hand and partner > 1*/
if ((lhoTrumpRanks==0)&&
(rhoTrumpRanks==0)) {
/* Opponents have no trump */
posPoint->winRanks[depth][suit]=posPoint->winRanks[depth][suit]
| bitMapRank[posPoint->secondBest[suit].rank];
posPoint->winRanks[depth][commSuit]=posPoint->winRanks[depth][commSuit] |
bitMapRank[commRank];
qtricks++;
if ((countLho<=2)&&(countRho<=2)&&
((countOwn<=2)||(countPart<=2))) { /* 07-06-10 */
qtricks=qtricks+
Max(countPart-2,countOwn-2);
if (qtricks>=cutoff)
return qtricks;
suit++;
if ((trump!=4) && (suit==trump))
suit++;
continue;
}
}
}
/* 06-08-24 */
else if ((suit==commSuit)&&(posPoint->secondBest[suit].hand
==lho[hand])&&((countLho>=2)||(lhoTrumpRanks==0))&&
((countRho>=2)||(rhoTrumpRanks==0))) {
ranks=0;
for (k=0; k<=3; k++)
ranks=ranks | posPoint->rankInSuit[k][suit];
for (rr=posPoint->secondBest[suit].rank-1; rr>=2; rr--) {
/* 3rd best at partner? */
if ((ranks & bitMapRank[rr])!=0) {
if ((posPoint->rankInSuit[partner[hand]][suit] &
bitMapRank[rr])!=0) {
found=TRUE;
break;
}
else {
found=FALSE;
break;
}
}
found=FALSE;
}
if (found) {
posPoint->winRanks[depth][suit]=posPoint->winRanks[depth][suit] | bitMapRank[rr];
posPoint->winRanks[depth][commSuit]=posPoint->winRanks[depth][commSuit] |
bitMapRank[commRank];
qtricks++;
if ((countOwn<=2)&&(countLho<=2)&&(countRho<=2)&&
(lhoTrumpRanks==0)&&(rhoTrumpRanks==0))
qtricks=qtricks+countPart-2;
}
}
}
else {
posPoint->winRanks[depth][suit]=posPoint->winRanks[depth][suit]
| bitMapRank[posPoint->winner[suit].rank];
posPoint->winRanks[depth][commSuit]=posPoint->winRanks[depth][commSuit] |
bitMapRank[commRank];
qtricks++;
/* 06-12-14 */
if (qtricks>=cutoff)
return qtricks;
if ((countLho<=1)&&(countRho<=1)&&(countOwn<=1)) {
qtricks=qtricks+countPart-1;
if (qtricks>=cutoff)
return qtricks;
if ((trump!=4) && (suit==trump)) {
if (trump==0)
suit=1;
else
suit=0;
}
else {
suit++;
if ((trump!=4) && (suit==trump))
suit++;
}
continue;
}
if ((posPoint->secondBest[suit].hand==partner[hand])&&(countPart>0)) {
/* Second best found in partners hand */
posPoint->winRanks[depth][suit]=posPoint->winRanks[depth][suit]
| bitMapRank[posPoint->secondBest[suit].rank];
posPoint->winRanks[depth][commSuit]=posPoint->winRanks[depth][commSuit] |
bitMapRank[commRank];
qtricks++;
if ((countLho<=2)&&(countRho<=2)&&(countOwn<=2)) {
qtricks=qtricks+countPart-2;
if (qtricks>=cutoff)
return qtricks;
if ((trump!=4) && (suit==trump)) {
if (trump==0)
suit=1;
else
suit=0;
}
else {
suit++;
if ((trump!=4) && (suit==trump))
suit++;
}
continue;
}
}
/* 06-08-19 */
else if ((posPoint->secondBest[suit].hand==hand)
&&(countPart>1)&&(countOwn>1)) {
/* Second best found in own hand and own and
partner's suit length > 1 */
posPoint->winRanks[depth][suit]=posPoint->winRanks[depth][suit]
| bitMapRank[posPoint->secondBest[suit].rank];
posPoint->winRanks[depth][commSuit]=posPoint->winRanks[depth][commSuit] |
bitMapRank[commRank];
qtricks++;
if ((countLho<=2)&&(countRho<=2)&&((countOwn<=2)||(countPart<=2))) { /* 07-06-10 */
qtricks=qtricks+Max(countPart-2,countOwn-2);
if (qtricks>=cutoff)
return qtricks;
if ((trump!=4) && (suit==trump)) {
if (trump==0)
suit=1;
else
suit=0;
}
else {
suit++;
if ((trump!=4) && (suit==trump))
suit++;
}
continue;
}
}
/* 06-08-24 */
else if ((suit==commSuit)&&(posPoint->secondBest[suit].hand
==lho[hand])) {
ranks=0;
for (k=0; k<=3; k++)
ranks=ranks | posPoint->rankInSuit[k][suit];
for (rr=posPoint->secondBest[suit].rank-1; rr>=2; rr--) {
/* 3rd best at partner? */
if ((ranks & bitMapRank[rr])!=0) {
if ((posPoint->rankInSuit[partner[hand]][suit] &
bitMapRank[rr])!=0) {
found=TRUE;
break;
}
else {
found=FALSE;
break;
}
}
found=FALSE;
}
if (found) {
posPoint->winRanks[depth][suit]=posPoint->winRanks[depth][suit] | bitMapRank[rr];
posPoint->winRanks[depth][commSuit]=posPoint->winRanks[depth][commSuit] |
bitMapRank[commRank];
qtricks++;
if ((countOwn<=2)&&(countLho<=2)&&(countRho<=2)) {
qtricks=qtricks+countPart-2;
}
}
}
}
}
}
}
if ((trump!=4) &&(suit!=trump)&&
(countOwn>0)&&(lowestQtricks==0)&&
((qtricks==0)||((posPoint->winner[suit].hand!=hand)&&
(posPoint->winner[suit].hand!=partner[hand])&&
(posPoint->winner[trump].hand!=hand)&&
(posPoint->winner[trump].hand!=partner[hand])))) {
if ((countPart==0)&&(posPoint->length[partner[hand]][trump]>0)) {
if (((countRho>0)||(posPoint->length[rho[hand]][trump]==0))&&
((countLho>0)||(posPoint->length[lho[hand]][trump]==0))) {
lowestQtricks=1;
if (1>=cutoff)
return 1;
suit++;
if ((trump!=4) && (suit==trump))
suit++;
continue;
}
else if ((countRho==0)&&(countLho==0)) {
if ((posPoint->rankInSuit[lho[hand]][trump] |
posPoint->rankInSuit[rho[hand]][trump]) <
posPoint->rankInSuit[partner[hand]][trump]) {
lowestQtricks=1;
rr=highestRank[posPoint->rankInSuit[partner[hand]][trump]];
if (rr!=0) {
posPoint->winRanks[depth][trump]|=bitMapRank[rr];
if (1>=cutoff)
return 1;
}
}
suit++;
if ((trump!=4) && (suit==trump))
suit++;
continue;
}
else if (countLho==0) {
if (posPoint->rankInSuit[lho[hand]][trump] <
posPoint->rankInSuit[partner[hand]][trump]) {
lowestQtricks=1;
for (rr=14; rr>=2; rr--) {
if ((posPoint->rankInSuit[partner[hand]][trump] &
bitMapRank[rr])!=0) {
posPoint->winRanks[depth][trump]=
posPoint->winRanks[depth][trump] | bitMapRank[rr];
break;
}
}
if (1>=cutoff)
return 1;
}
suit++;
if ((trump!=4) && (suit==trump))
suit++;
continue;
}
else if (countRho==0) {
if (posPoint->rankInSuit[rho[hand]][trump] <
posPoint->rankInSuit[partner[hand]][trump]) {
lowestQtricks=1;
for (rr=14; rr>=2; rr--) {
if ((posPoint->rankInSuit[partner[hand]][trump] &
bitMapRank[rr])!=0) {
posPoint->winRanks[depth][trump]=
posPoint->winRanks[depth][trump] | bitMapRank[rr];
break;
}
}
if (1>=cutoff)
return 1;
}
suit++;
if ((trump!=4) && (suit==trump))
suit++;
continue;
}
}
}
if (qtricks>=cutoff)
return qtricks;
if ((trump!=4) && (suit==trump)) {
if (trump==0)
suit=1;
else
suit=0;
}
else {
suit++;
if ((trump!=4) && (suit==trump))
suit++;
}
}
while (suit<=3);
if (qtricks==0) {
if ((trump==4)||(posPoint->winner[trump].rank==0)) {
found=FALSE;
for (ss=0; ss<=3; ss++) {
if (posPoint->winner[ss].rank==0)
continue;
hh=posPoint->winner[ss].hand;
if (localVar[thrId].nodeTypeStore[hh]==localVar[thrId].nodeTypeStore[hand]) {
if (posPoint->length[hand][ss]>0) {
found=TRUE;
break;
}
}
else if ((posPoint->length[partner[hand]][ss]>0)&&
(posPoint->length[hand][ss]>0)&&
(posPoint->length[partner[hh]][ss]>0)) {
count++;
}
}
if (!found) {
if (localVar[thrId].nodeTypeStore[hand]==MAXNODE) {
if ((posPoint->tricksMAX+(depth>>2)-Max(0,count-1))winner[ss].hand==-1)
posPoint->winRanks[depth][ss]=0;
else if ((posPoint->length[hand][ss]>0)
&&(localVar[thrId].nodeTypeStore[posPoint->winner[ss].hand]==MINNODE))
posPoint->winRanks[depth][ss]=
bitMapRank[posPoint->winner[ss].rank];
else
posPoint->winRanks[depth][ss]=0;
}
return 0;
}
}
else {
if ((posPoint->tricksMAX+1+Max(0,count-1))>=target) {
for (ss=0; ss<=3; ss++) {
if (posPoint->winner[ss].hand==-1)
posPoint->winRanks[depth][ss]=0;
else if ((posPoint->length[hand][ss]>0)
&&(localVar[thrId].nodeTypeStore[posPoint->winner[ss].hand]==MAXNODE))
posPoint->winRanks[depth][ss]=
bitMapRank[posPoint->winner[ss].rank];
else
posPoint->winRanks[depth][ss]=0;
}
return 0;
}
}
}
}
}
*result=FALSE;
return qtricks;
}
int LaterTricksMIN(struct pos *posPoint, int hand, int depth, int target, int thrId) {
int hh, ss, sum=0;
int trump;
trump=localVar[thrId].trump;
if ((trump==4)||(posPoint->winner[trump].rank==0)) {
for (ss=0; ss<=3; ss++) {
hh=posPoint->winner[ss].hand;
if (hh!=-1) {
if (localVar[thrId].nodeTypeStore[hh]==MAXNODE)
sum+=Max(posPoint->length[hh][ss], posPoint->length[partner[hh]][ss]);
}
}
if ((posPoint->tricksMAX+sum0)&&(depth>0)&&(depth!=localVar[thrId].iniDepth)) {
if ((posPoint->tricksMAX+(depth>>2)winner[ss].hand==-1)
posPoint->winRanks[depth][ss]=0;
else if (localVar[thrId].nodeTypeStore[posPoint->winner[ss].hand]==MINNODE)
posPoint->winRanks[depth][ss]=bitMapRank[posPoint->winner[ss].rank];
else
posPoint->winRanks[depth][ss]=0;
}
return FALSE;
}
}
}
else if ((trump!=4) && (posPoint->winner[trump].rank!=0) &&
(localVar[thrId].nodeTypeStore[posPoint->winner[trump].hand]==MINNODE)) {
if ((posPoint->length[hand][trump]==0)&&
(posPoint->length[partner[hand]][trump]==0)) {
if (((posPoint->tricksMAX+(depth>>2)+1-
Max(posPoint->length[lho[hand]][trump],
posPoint->length[rho[hand]][trump]))0)&&(depth!=localVar[thrId].iniDepth)) {
for (ss=0; ss<=3; ss++)
posPoint->winRanks[depth][ss]=0;
return FALSE;
}
}
else if (((posPoint->tricksMAX+(depth>>2))0)&&(depth!=localVar[thrId].iniDepth)) {
for (ss=0; ss<=3; ss++)
posPoint->winRanks[depth][ss]=0;
posPoint->winRanks[depth][trump]=
bitMapRank[posPoint->winner[trump].rank];
return FALSE;
}
else {
hh=posPoint->secondBest[trump].hand;
if (hh!=-1) {
if ((localVar[thrId].nodeTypeStore[hh]==MINNODE)&&(posPoint->secondBest[trump].rank!=0)) {
if (((posPoint->length[hh][trump]>1) ||
(posPoint->length[partner[hh]][trump]>1))&&
((posPoint->tricksMAX+(depth>>2)-1)0)
&&(depth!=localVar[thrId].iniDepth)) {
for (ss=0; ss<=3; ss++)
posPoint->winRanks[depth][ss]=0;
posPoint->winRanks[depth][trump]=
bitMapRank[posPoint->winner[trump].rank] |
bitMapRank[posPoint->secondBest[trump].rank] ;
return FALSE;
}
}
}
}
}
else if (trump!=4) {
hh=posPoint->secondBest[trump].hand;
if (hh!=-1) {
if ((localVar[thrId].nodeTypeStore[hh]==MINNODE)&&
(posPoint->length[hh][trump]>1)&&
(posPoint->winner[trump].hand==rho[hh])
&&(posPoint->secondBest[trump].rank!=0)) {
if (((posPoint->tricksMAX+(depth>>2))0)&&(depth!=localVar[thrId].iniDepth)) {
for (ss=0; ss<=3; ss++)
posPoint->winRanks[depth][ss]=0;
posPoint->winRanks[depth][trump]=
bitMapRank[posPoint->secondBest[trump].rank] ;
return FALSE;
}
}
}
}
return TRUE;
}
int LaterTricksMAX(struct pos *posPoint, int hand, int depth, int target, int thrId) {
int hh, ss, sum=0;
int trump;
trump=localVar[thrId].trump;
if ((trump==4)||(posPoint->winner[trump].rank==0)) {
for (ss=0; ss<=3; ss++) {
hh=posPoint->winner[ss].hand;
if (hh!=-1) {
if (localVar[thrId].nodeTypeStore[hh]==MINNODE)
sum+=Max(posPoint->length[hh][ss], posPoint->length[partner[hh]][ss]);
}
}
if ((posPoint->tricksMAX+(depth>>2)+1-sum>=target)&&
(sum>0)&&(depth>0)&&(depth!=localVar[thrId].iniDepth)) {
if ((posPoint->tricksMAX+1>=target)) {
for (ss=0; ss<=3; ss++) {
if (posPoint->winner[ss].hand==-1)
posPoint->winRanks[depth][ss]=0;
else if (localVar[thrId].nodeTypeStore[posPoint->winner[ss].hand]==MAXNODE)
posPoint->winRanks[depth][ss]=bitMapRank[posPoint->winner[ss].rank];
else
posPoint->winRanks[depth][ss]=0;
}
return TRUE;
}
}
}
else if ((trump!=4) && (posPoint->winner[trump].rank!=0) &&
(localVar[thrId].nodeTypeStore[posPoint->winner[trump].hand]==MAXNODE)) {
if ((posPoint->length[hand][trump]==0)&&
(posPoint->length[partner[hand]][trump]==0)) {
if (((posPoint->tricksMAX+Max(posPoint->length[lho[hand]][trump],
posPoint->length[rho[hand]][trump]))>=target)
&&(depth>0)&&(depth!=localVar[thrId].iniDepth)) {
for (ss=0; ss<=3; ss++)
posPoint->winRanks[depth][ss]=0;
return TRUE;
}
}
else if (((posPoint->tricksMAX+1)>=target)
&&(depth>0)&&(depth!=localVar[thrId].iniDepth)) {
for (ss=0; ss<=3; ss++)
posPoint->winRanks[depth][ss]=0;
posPoint->winRanks[depth][trump]=
bitMapRank[posPoint->winner[trump].rank];
return TRUE;
}
else {
hh=posPoint->secondBest[trump].hand;
if (hh!=-1) {
if ((localVar[thrId].nodeTypeStore[hh]==MAXNODE)&&(posPoint->secondBest[trump].rank!=0)) {
if (((posPoint->length[hh][trump]>1) ||
(posPoint->length[partner[hh]][trump]>1))&&
((posPoint->tricksMAX+2)>=target)&&(depth>0)
&&(depth!=localVar[thrId].iniDepth)) {
for (ss=0; ss<=3; ss++)
posPoint->winRanks[depth][ss]=0;
posPoint->winRanks[depth][trump]=
bitMapRank[posPoint->winner[trump].rank] |
bitMapRank[posPoint->secondBest[trump].rank];
return TRUE;
}
}
}
}
}
else if (trump!=4) {
hh=posPoint->secondBest[trump].hand;
if (hh!=-1) {
if ((localVar[thrId].nodeTypeStore[hh]==MAXNODE)&&
(posPoint->length[hh][trump]>1)&&(posPoint->winner[trump].hand==rho[hh])
&&(posPoint->secondBest[trump].rank!=0)) {
if (((posPoint->tricksMAX+1)>=target)&&(depth>0)
&&(depth!=localVar[thrId].iniDepth)) {
for (ss=0; ss<=3; ss++)
posPoint->winRanks[depth][ss]=0;
posPoint->winRanks[depth][trump]=
bitMapRank[posPoint->secondBest[trump].rank] ;
return TRUE;
}
}
}
}
return FALSE;
}
int MoveGen(struct pos * posPoint, int depth, int thrId) {
int suit, k, m, n, r, s, t, q, first, state;
unsigned short ris;
int scount[4];
int WeightAlloc(struct pos *, struct moveType * mp, int depth,
unsigned short notVoidInSuit, int thrId);
for (k=0; k<4; k++)
localVar[thrId].lowestWin[depth][k]=0;
m=0;
r=posPoint->handRelFirst;
assert((r>=0)&&(r<=3));
first=posPoint->first[depth];
q=handId(first, r);
s=localVar[thrId].movePly[depth+r].current; /* Current move of first hand */
t=localVar[thrId].movePly[depth+r].move[s].suit; /* Suit played by first hand */
ris=posPoint->rankInSuit[q][t];
if ((r!=0)&&(ris!=0)) {
/* Not first hand and not void in suit */
k=14; state=MOVESVALID;
while (k>=2) {
if ((ris & bitMapRank[k])&&(state==MOVESVALID)) {
/* Only first move in sequence is generated */
localVar[thrId].movePly[depth].move[m].suit=t;
localVar[thrId].movePly[depth].move[m].rank=k;
localVar[thrId].movePly[depth].move[m].sequence=0;
m++;
state=MOVESLOCKED;
}
else if (state==MOVESLOCKED)
if ((posPoint->removedRanks[t] & bitMapRank[k])==0) {
if ((ris & bitMapRank[k])==0)
/* If the card still exists and it is not in own hand */
state=MOVESVALID;
else
/* If the card still exists and it is in own hand */
localVar[thrId].movePly[depth].move[m-1].sequence|=bitMapRank[k];
}
k--;
}
if (m!=1) {
for (k=0; k<=m-1; k++)
localVar[thrId].movePly[depth].move[k].weight=WeightAlloc(posPoint,
&localVar[thrId].movePly[depth].move[k], depth, ris, thrId);
}
localVar[thrId].movePly[depth].last=m-1;
if (m!=1)
InsertSort(m, depth, thrId);
if (depth!=localVar[thrId].iniDepth)
return m;
else {
m=AdjustMoveList(thrId);
return m;
}
}
else { /* First hand or void in suit */
for (suit=0; suit<=3; suit++) {
k=14; state=MOVESVALID;
while (k>=2) {
if ((posPoint->rankInSuit[q][suit] & bitMapRank[k])&&
(state==MOVESVALID)) {
/* Only first move in sequence is generated */
localVar[thrId].movePly[depth].move[m].suit=suit;
localVar[thrId].movePly[depth].move[m].rank=k;
localVar[thrId].movePly[depth].move[m].sequence=0;
m++;
state=MOVESLOCKED;
}
else if (state==MOVESLOCKED)
if ((posPoint->removedRanks[suit] & bitMapRank[k])==0) {
if ((posPoint->rankInSuit[q][suit] & bitMapRank[k])==0)
/* If the card still exists and it is not in own hand */
state=MOVESVALID;
else
/* If the card still exists and it is in own hand */
localVar[thrId].movePly[depth].move[m-1].sequence|=bitMapRank[k];
}
k--;
}
}
for (k=0; k<=m-1; k++)
localVar[thrId].movePly[depth].move[k].weight=WeightAlloc(posPoint,
&localVar[thrId].movePly[depth].move[k], depth, ris, thrId);
localVar[thrId].movePly[depth].last=m-1;
InsertSort(m, depth, thrId);
if (r==0) {
for (n=0; n<=3; n++)
scount[n]=0;
for (k=0; k<=m-1; k++) {
if (scount[localVar[thrId].movePly[depth].move[k].suit]==1/*2*/)
continue;
else {
localVar[thrId].movePly[depth].move[k].weight+=500;
scount[localVar[thrId].movePly[depth].move[k].suit]++;
}
}
InsertSort(m, depth, thrId);
}
else {
for (n=0; n<=3; n++)
scount[n]=0;
for (k=0; k<=m-1; k++) {
if (scount[localVar[thrId].movePly[depth].move[k].suit]==1)
continue;
else {
localVar[thrId].movePly[depth].move[k].weight+=500;
scount[localVar[thrId].movePly[depth].move[k].suit]++;
}
}
InsertSort(m, depth, thrId);
}
if (depth!=localVar[thrId].iniDepth)
return m;
else {
m=AdjustMoveList(thrId);
return m;
}
}
}
int WeightAlloc(struct pos * posPoint, struct moveType * mp, int depth,
unsigned short notVoidInSuit, int thrId) {
int weight=0, k, l, kk, ll, suit, suitAdd=0, leadSuit;
int suitWeightDelta, first, q, trump;
int suitBonus=0;
int winMove=FALSE;
unsigned short suitCount, suitCountLH, suitCountRH;
int countLH, countRH;
first=posPoint->first[depth];
q=handId(first, posPoint->handRelFirst);
suit=mp->suit;
trump=localVar[thrId].trump;
if (!notVoidInSuit) {
suitCount=posPoint->length[q][suit];
/*suitAdd=suitCount+suitCount;*/
suitAdd=(suitCount<<6)/36;
if ((suitCount==2)&&(posPoint->secondBest[suit].hand==q))
suitAdd-=2;
}
switch (posPoint->handRelFirst) {
case 0:
suitCount=posPoint->length[q][suit];
suitCountLH=posPoint->length[lho[q]][suit];
suitCountRH=posPoint->length[rho[q]][suit];
if ((trump!=4) && (suit!=trump) &&
(((posPoint->rankInSuit[lho[q]][suit]==0) &&
(posPoint->rankInSuit[lho[q]][trump]!=0)) ||
((posPoint->rankInSuit[rho[q]][suit]==0) &&
(posPoint->rankInSuit[rho[q]][trump]!=0))))
suitBonus=-10/*12*//*15*/;
if ((posPoint->winner[suit].hand==rho[q])||
((posPoint->secondBest[suit].hand!=-1)&&
(posPoint->secondBest[suit].hand==rho[q]))) {
suitBonus-=18;
}
if ((trump!=4)&&(suit!=trump)&&(suitCount==1)&&
(posPoint->length[q][trump]>0)&&
(posPoint->length[partner[q]][suit]>1)&&
(posPoint->winner[suit].hand==partner[q]))
suitBonus+=16;
if (suitCountLH!=0)
countLH=(suitCountLH<<2);
else
countLH=depth+4;
if (suitCountRH!=0)
countRH=(suitCountRH<<2);
else
countRH=depth+4;
suitWeightDelta=suitBonus-((countLH+countRH)<<5)/15;
if (posPoint->winner[suit].rank==mp->rank) {
if ((trump!=4)&&(suit!=trump)) {
if ((posPoint->length[partner[first]][suit]!=0)||
(posPoint->length[partner[first]][trump]==0)) {
if (((posPoint->length[lho[first]][suit]!=0)||
(posPoint->length[lho[first]][trump]==0))&&
((posPoint->length[rho[first]][suit]!=0)||
(posPoint->length[rho[first]][trump]==0)))
winMove=TRUE;
}
else if (((posPoint->length[lho[first]][suit]!=0)||
(posPoint->rankInSuit[partner[first]][trump]>
posPoint->rankInSuit[lho[first]][trump]))&&
((posPoint->length[rho[first]][suit]!=0)||
(posPoint->rankInSuit[partner[first]][trump]>
posPoint->rankInSuit[rho[first]][trump])))
winMove=TRUE;
}
else
winMove=TRUE;
}
else if (posPoint->rankInSuit[partner[first]][suit] >
(posPoint->rankInSuit[lho[first]][suit] |
posPoint->rankInSuit[rho[first]][suit])) {
if ((trump!=4) && (suit!=trump)) {
if (((posPoint->length[lho[first]][suit]!=0)||
(posPoint->length[lho[first]][trump]==0))&&
((posPoint->length[rho[first]][suit]!=0)||
(posPoint->length[rho[first]][trump]==0)))
winMove=TRUE;
}
else
winMove=TRUE;
}
else if ((trump!=4)&&(suit!=trump)) {
if ((posPoint->length[partner[first]][suit]==0)&&
(posPoint->length[partner[first]][trump]!=0)) {
if ((posPoint->length[lho[first]][suit]==0)&&
(posPoint->length[lho[first]][trump]!=0)&&
(posPoint->length[rho[first]][suit]==0)&&
(posPoint->length[rho[first]][trump]!=0)) {
if (posPoint->rankInSuit[partner[first]][trump]>
(posPoint->rankInSuit[lho[first]][trump] |
posPoint->rankInSuit[rho[first]][trump]))
winMove=TRUE;
}
else if ((posPoint->length[lho[first]][suit]==0)&&
(posPoint->length[lho[first]][trump]!=0)) {
if (posPoint->rankInSuit[partner[first]][trump]
> posPoint->rankInSuit[lho[first]][trump])
winMove=TRUE;
}
else if ((posPoint->length[rho[first]][suit]==0)&&
(posPoint->length[rho[first]][trump]!=0)) {
if (posPoint->rankInSuit[partner[first]][trump]
> posPoint->rankInSuit[rho[first]][trump])
winMove=TRUE;
}
else
winMove=TRUE;
}
}
if (winMove) {
if (((suitCountLH==1)&&(posPoint->winner[suit].hand==lho[first]))
||((suitCountRH==1)&&(posPoint->winner[suit].hand==rho[first])))
weight=suitWeightDelta+40-(mp->rank);
else if (posPoint->winner[suit].hand==first) {
if ((posPoint->secondBest[suit].hand!=-1)&&
(posPoint->secondBest[suit].hand==partner[first]))
weight=suitWeightDelta+50-(mp->rank);
else if (posPoint->winner[suit].rank==mp->rank)
weight=suitWeightDelta+31;
else
weight=suitWeightDelta+19-(mp->rank);
}
else if (posPoint->winner[suit].hand==partner[first]) {
/* If partner has winning card */
if (posPoint->secondBest[suit].hand==first)
weight=suitWeightDelta+50-(mp->rank);
else
weight=suitWeightDelta+35-(mp->rank);
}
else if ((mp->sequence)&&
(mp->rank==posPoint->secondBest[suit].rank))
weight=suitWeightDelta+40/*-(mp->rank)*/;
else
weight=suitWeightDelta+30-(mp->rank);
if ((localVar[thrId].bestMove[depth].suit==mp->suit)&&
(localVar[thrId].bestMove[depth].rank==mp->rank))
weight+=52;
else if ((localVar[thrId].bestMoveTT[depth].suit==mp->suit)&&
(localVar[thrId].bestMoveTT[depth].rank==mp->rank))
weight+=11;
/*else if (localVar[thrId].bestMove[depth].suit==mp->suit)
weight+=10;*/
}
else {
if (((suitCountLH==1)&&(posPoint->winner[suit].hand==lho[first]))
||((suitCountRH==1)&&(posPoint->winner[suit].hand==rho[first])))
weight=suitWeightDelta+29-(mp->rank);
else if (posPoint->winner[suit].hand==first) {
if ((posPoint->secondBest[suit].rank!=0)&&
(posPoint->secondBest[suit].hand==partner[first]))
weight=suitWeightDelta+44-(mp->rank);
else if (posPoint->winner[suit].rank==mp->rank)
weight=suitWeightDelta+25;
else
weight=suitWeightDelta+13-(mp->rank);
}
else if (posPoint->winner[suit].hand==partner[first]) {
/* If partner has winning card */
if (posPoint->secondBest[suit].hand==first)
weight=suitWeightDelta+44-(mp->rank);
else
weight=suitWeightDelta+29-(mp->rank);
}
else if ((mp->sequence)&&
(mp->rank==posPoint->secondBest[suit].rank))
weight=suitWeightDelta+29;
else
weight=suitWeightDelta+13-(mp->rank);
if ((localVar[thrId].bestMove[depth].suit==mp->suit)&&
(localVar[thrId].bestMove[depth].rank==mp->rank))
weight+=20;
else if ((localVar[thrId].bestMoveTT[depth].suit==mp->suit)&&
(localVar[thrId].bestMoveTT[depth].rank==mp->rank))
weight+=9;
/*else if (localVar[thrId].bestMove[depth].suit==mp->suit)
weight+=10;*/
}
break;
case 1:
leadSuit=posPoint->move[depth+1].suit;
if (leadSuit==suit) {
if (bitMapRank[mp->rank]>
(bitMapRank[posPoint->move[depth+1].rank] |
posPoint->rankInSuit[partner[first]][suit])) {
if ((trump!=4) && (suit!=trump)) {
if ((posPoint->length[partner[first]][suit]!=0)||
(posPoint->length[partner[first]][trump]==0))
winMove=TRUE;
else if ((posPoint->length[rho[first]][suit]==0)
&&(posPoint->length[rho[first]][trump]!=0)
&&(posPoint->rankInSuit[rho[first]][trump]>
posPoint->rankInSuit[partner[first]][trump]))
winMove=TRUE;
}
else
winMove=TRUE;
}
else if (posPoint->rankInSuit[rho[first]][suit]>
(bitMapRank[posPoint->move[depth+1].rank] |
posPoint->rankInSuit[partner[first]][suit])) {
if ((trump!=4) && (suit!=trump)) {
if ((posPoint->length[partner[first]][suit]!=0)||
(posPoint->length[partner[first]][trump]==0))
winMove=TRUE;
}
else
winMove=TRUE;
}
else if (bitMapRank[posPoint->move[depth+1].rank] >
(posPoint->rankInSuit[rho[first]][suit] |
posPoint->rankInSuit[partner[first]][suit] |
bitMapRank[mp->rank])) {
if ((trump!=4) && (suit!=trump)) {
if ((posPoint->length[rho[first]][suit]==0)&&
(posPoint->length[rho[first]][trump]!=0)) {
if ((posPoint->length[partner[first]][suit]!=0)||
(posPoint->length[partner[first]][trump]==0))
winMove=TRUE;
else if (posPoint->rankInSuit[rho[first]][trump]
> posPoint->rankInSuit[partner[first]][trump])
winMove=TRUE;
}
}
}
else { /* winnerHand is partner to first */
if ((trump!=4) && (suit!=trump)) {
if ((posPoint->length[rho[first]][suit]==0)&&
(posPoint->length[rho[first]][trump]!=0))
winMove=TRUE;
}
}
}
else {
/* Leading suit differs from suit played by LHO */
if ((trump!=4) && (suit==trump)) {
if (posPoint->length[partner[first]][leadSuit]!=0)
winMove=TRUE;
else if (bitMapRank[mp->rank]>
posPoint->rankInSuit[partner[first]][trump])
winMove=TRUE;
else if ((posPoint->length[rho[first]][leadSuit]==0)
&&(posPoint->length[rho[first]][trump]!=0)&&
(posPoint->rankInSuit[rho[first]][trump] >
posPoint->rankInSuit[partner[first]][trump]))
winMove=TRUE;
}
else if ((trump!=4) && (leadSuit!=trump)) {
/* Neither suit nor leadSuit is trump */
if (posPoint->length[partner[first]][leadSuit]!=0) {
if (posPoint->rankInSuit[rho[first]][leadSuit] >
(posPoint->rankInSuit[partner[first]][leadSuit] |
bitMapRank[posPoint->move[depth+1].rank]))
winMove=TRUE;
else if ((posPoint->length[rho[first]][leadSuit]==0)
&&(posPoint->length[rho[first]][trump]!=0))
winMove=TRUE;
}
/* Partner to leading hand is void in leading suit */
else if ((posPoint->length[rho[first]][leadSuit]==0)
&&(posPoint->rankInSuit[rho[first]][trump]>
posPoint->rankInSuit[partner[first]][trump]))
winMove=TRUE;
else if ((posPoint->length[partner[first]][trump]==0)
&&(posPoint->rankInSuit[rho[first]][leadSuit] >
bitMapRank[posPoint->move[depth+1].rank]))
winMove=TRUE;
}
else {
/* Either no trumps or leadSuit is trump, side with
highest rank in leadSuit wins */
if (posPoint->rankInSuit[rho[first]][leadSuit] >
(posPoint->rankInSuit[partner[first]][leadSuit] |
bitMapRank[posPoint->move[depth+1].rank]))
winMove=TRUE;
}
}
kk=posPoint->rankInSuit[partner[first]][leadSuit];
ll=posPoint->rankInSuit[rho[first]][leadSuit];
k=kk & (-kk); l=ll & (-ll); /* Only least significant 1 bit */
if (winMove) {
if (!notVoidInSuit) {
if ((trump!=4) && (suit==trump))
weight=25/*30*/-(mp->rank)+suitAdd;
else
weight=60-(mp->rank)+suitAdd; /* Better discard than ruff since rho
wins anyway */
}
else if (k > bitMapRank[mp->rank])
weight=45-(mp->rank); /* If lowest card for partner to leading hand
is higher than lho played card, playing as low as
possible will give the cheapest win */
else if ((ll > bitMapRank[posPoint->move[depth+1].rank])&&
(posPoint->rankInSuit[first][leadSuit] > ll))
weight=60-(mp->rank); /* If rho has a card in the leading suit that
is higher than the trick leading card but lower
than the highest rank of the leading hand, then
lho playing the lowest card will be the cheapest
win */
else if (mp->rank > posPoint->move[depth+1].rank) {
if (bitMapRank[mp->rank] < ll)
weight=75-(mp->rank); /* If played card is lower than any of the cards of
rho, it will be the cheapest win */
else if (bitMapRank[mp->rank] > kk)
weight=70-(mp->rank); /* If played card is higher than any cards at partner
of the leading hand, rho can play low, under the
condition that he has a lower card than lho played */
else {
if (mp->sequence)
weight=60-(mp->rank);
else
weight=45-(mp->rank);
}
}
else if (posPoint->length[rho[first]][leadSuit]>0) {
if (mp->sequence)
weight=50-(mp->rank); /* Playing a card in a sequence may promote a winner */
else
weight=45-(mp->rank);
}
else
weight=45-(mp->rank);
}
else {
if (!notVoidInSuit) {
if ((trump!=4) && (suit==trump)) {
weight=15-(mp->rank)+suitAdd; /* Ruffing is preferred, makes the trick
costly for the opponents */
}
else
weight=-(mp->rank)+suitAdd;
}
else if ((k > bitMapRank[mp->rank])||
(l > bitMapRank[mp->rank]))
weight=-(mp->rank); /* If lowest rank for either partner to leading hand
or rho is higher than played card for lho,
lho should play as low card as possible */
else if (mp->rank > posPoint->move[depth+1].rank) {
if (mp->sequence)
weight=20-(mp->rank);
else
weight=10-(mp->rank);
}
else
weight=-(mp->rank);
}
break;
case 2:
leadSuit=posPoint->move[depth+2].suit;
if (WinningMove(mp, &(posPoint->move[depth+1]), thrId)) {
if (suit==leadSuit) {
if ((trump!=4) && (leadSuit!=trump)) {
if (((posPoint->length[rho[first]][suit]!=0)||
(posPoint->length[rho[first]][trump]==0))&&
(bitMapRank[mp->rank] >
posPoint->rankInSuit[rho[first]][suit]))
winMove=TRUE;
}
else if (bitMapRank[mp->rank] >
posPoint->rankInSuit[rho[first]][suit])
winMove=TRUE;
}
else { /* Suit is trump */
if (posPoint->length[rho[first]][leadSuit]==0) {
if (bitMapRank[mp->rank] >
posPoint->rankInSuit[rho[first]][trump])
winMove=TRUE;
}
else
winMove=TRUE;
}
}
else if (posPoint->high[depth+1]==first) {
if (posPoint->length[rho[first]][leadSuit]!=0) {
if (posPoint->rankInSuit[rho[first]][leadSuit]
< bitMapRank[posPoint->move[depth+2].rank])
winMove=TRUE;
}
else if (trump==4)
winMove=TRUE;
else if ((trump!=4) && (leadSuit==trump))
winMove=TRUE;
else if ((trump!=4) && (leadSuit!=trump) &&
(posPoint->length[rho[first]][trump]==0))
winMove=TRUE;
}
if (winMove) {
if (!notVoidInSuit) {
if (posPoint->high[depth+1]==first) {
if ((trump!=4) && (suit==trump))
weight=30-(mp->rank)+suitAdd; /* Ruffs partner's winner */
else
weight=60-(mp->rank)+suitAdd;
}
else if (WinningMove(mp, &(posPoint->move[depth+1]), thrId))
/* Own hand on top by ruffing */
weight=70-(mp->rank)+suitAdd;
else if ((trump!=4) && (suit==trump))
/* Discard a trump but still losing */
weight=15-(mp->rank)+suitAdd;
else
weight=30-(mp->rank)+suitAdd;
}
else
weight=60-(mp->rank);
}
else {
if (!notVoidInSuit) {
if (WinningMove(mp, &(posPoint->move[depth+1]), thrId))
/* Own hand on top by ruffing */
weight=40-(mp->rank)+suitAdd;
else if ((trump!=4) && (suit==trump))
/* Discard a trump but still losing */
weight=-15-(mp->rank)+suitAdd;
else
weight=-(mp->rank)+suitAdd;
}
else {
if (WinningMove(mp, &(posPoint->move[depth+1]), thrId)) {
if (mp->rank==posPoint->secondBest[leadSuit].rank)
weight=25/*35*/;
else if (mp->sequence)
weight=20/*30*/-(mp->rank);
else
weight=10/*20*/-(mp->rank);
}
else
weight=-10/*0*/-(mp->rank);
}
}
break;
case 3:
if (!notVoidInSuit) {
if ((posPoint->high[depth+1])==lho[first]) {
/* If the current winning move is given by the partner */
if ((trump!=4) && (suit==trump))
/* Ruffing partners winner? */
weight=14-(mp->rank)+suitAdd;
else
weight=30-(mp->rank)+suitAdd;
}
else if (WinningMove(mp, &(posPoint->move[depth+1]), thrId))
/* Own hand ruffs */
weight=30-(mp->rank)+suitAdd;
else if (suit==trump)
weight=-(mp->rank);
else
weight=14-(mp->rank)+suitAdd;
}
else if ((posPoint->high[depth+1])==(lho[first])) {
/* If the current winning move is given by the partner */
if ((trump!=4) && (suit==trump))
/* Ruffs partners winner */
weight=24-(mp->rank);
else
weight=30-(mp->rank);
}
else if (WinningMove(mp, &(posPoint->move[depth+1]), thrId))
/* If present move is superior to current winning move and the
current winning move is not given by the partner */
weight=30-(mp->rank);
else {
/* If present move is not superior to current winning move and the
current winning move is not given by the partner */
if ((trump!=4) && (suit==trump))
/* Ruffs but still loses */
weight=-(mp->rank);
else
weight=14-(mp->rank);
}
}
return weight;
}
/* Shell-1 */
/* K&R page 62: */
/*void shellSort(int n, int depth) {
int gap, i, j;
struct moveType temp;
if (n==2) {
if (movePly[depth].move[0].weight>1; gap>0; gap>>=1)
for (i=gap; i=0 && movePly[depth].move[j].weight<
movePly[depth].move[j+gap].weight; j-=gap) {
temp=movePly[depth].move[j];
movePly[depth].move[j]=movePly[depth].move[j+gap];
movePly[depth].move[j+gap]=temp;
}
} */
/* Shell-2 */
/*void shellSort(int n, int depth)
{
int i, j, increment;
struct moveType temp;
if (n==2) {
if (movePly[depth].move[0].weight 0)
{
for (i=0; i < n; i++)
{
j = i;
temp = movePly[depth].move[i];
while ((j >= increment) && (movePly[depth].move[j-increment].weight < temp.weight))
{
movePly[depth].move[j] = movePly[depth].move[j - increment];
j = j - increment;
}
movePly[depth].move[j] = temp;
}
if ((increment>>1) != 0)
increment>>=1;
else if (increment == 1)
increment = 0;
else
increment = 1;
}
} */
/* Insert-1 */
void InsertSort(int n, int depth, int thrId) {
int i, j;
struct moveType a, temp;
if (n==2) {
if (localVar[thrId].movePly[depth].move[0].weight<
localVar[thrId].movePly[depth].move[1].weight) {
temp=localVar[thrId].movePly[depth].move[0];
localVar[thrId].movePly[depth].move[0]=localVar[thrId].movePly[depth].move[1];
localVar[thrId].movePly[depth].move[1]=temp;
return;
}
else
return;
}
a=localVar[thrId].movePly[depth].move[0];
for (i=1; i<=n-1; i++)
if (localVar[thrId].movePly[depth].move[i].weight>a.weight) {
temp=a;
a=localVar[thrId].movePly[depth].move[i];
localVar[thrId].movePly[depth].move[i]=temp;
}
localVar[thrId].movePly[depth].move[0]=a;
for (i=2; i<=n-1; i++) {
j=i;
a=localVar[thrId].movePly[depth].move[i];
while (a.weight>localVar[thrId].movePly[depth].move[j-1].weight) {
localVar[thrId].movePly[depth].move[j]=localVar[thrId].movePly[depth].move[j-1];
j--;
}
localVar[thrId].movePly[depth].move[j]=a;
}
}
/* Insert-2 */
/*void InsertSort(int n, int depth) {
int i, j;
struct moveType a;
if (n==2) {
if (movePly[depth].move[0].weight=0)&&(movePly[depth].move[i].weightsuit==mvp2->suit) {
if ((mvp1->rank)>(mvp2->rank))
return TRUE;
else
return FALSE;
}
else if ((localVar[thrId].trump!=4) && (mvp1->suit)==localVar[thrId].trump)
return TRUE;
else
return FALSE;
}
struct nodeCardsType * CheckSOP(struct pos * posPoint, struct nodeCardsType
* nodep, int target, int tricks, int * result, int *value, int thrId) {
/* Check SOP if it matches the
current position. If match, pointer to the SOP node is returned and
result is set to TRUE, otherwise pointer to SOP node is returned
and result set to FALSE. */
/* 07-04-22 */
if (localVar[thrId].nodeTypeStore[0]==MAXNODE) {
if (nodep->lbound==-1) { /* This bound values for
this leading hand has not yet been determined */
*result=FALSE;
return nodep;
}
else if ((posPoint->tricksMAX + nodep->lbound)>=target) {
*value=TRUE;
*result=TRUE;
return nodep;
}
else if ((posPoint->tricksMAX + nodep->ubound)ubound==-1) { /* This bound values for
this leading hand has not yet been determined */
*result=FALSE;
return nodep;
}
else if ((posPoint->tricksMAX + (tricks + 1 - nodep->ubound))>=target) {
*value=TRUE;
*result=TRUE;
return nodep;
}
else if ((posPoint->tricksMAX + (tricks + 1 - nodep->lbound))lbound > nodep->lbound) ||
(nodep->lbound==-1))
nodep->lbound=posPoint->lbound;
if ((posPoint->ubound < nodep->ubound) ||
(nodep->ubound==-1))
nodep->ubound=posPoint->ubound;
nodep->bestMoveSuit=posPoint->bestMoveSuit;
nodep->bestMoveRank=posPoint->bestMoveRank;
return nodep;
}
struct nodeCardsType * FindSOP(struct pos * posPoint,
struct winCardType * nodeP, int firstHand,
int target, int tricks, int * valp, int thrId) {
struct nodeCardsType * sopP;
struct winCardType * np;
int s, res;
np=nodeP; s=0;
while ((np!=NULL)&&(s<4)) {
if ((np->winMask & posPoint->orderSet[s])==
np->orderSet) {
/* Winning rank set fits position */
if (s==3) {
sopP=CheckSOP(posPoint, np->first, target, tricks, &res, valp, thrId);
if (res) {
return sopP;
}
else {
if (np->next!=NULL) {
np=np->next;
}
else {
np=np->prevWin;
s--;
if (np==NULL)
return NULL;
while (np->next==NULL) {
np=np->prevWin;
s--;
if (np==NULL) /* Previous node is header node? */
return NULL;
}
np=np->next;
}
}
}
else if (s<4) {
np=np->nextWin;
s++;
}
}
else {
if (np->next!=NULL) {
np=np->next;
}
else {
np=np->prevWin;
s--;
if (np==NULL)
return NULL;
while (np->next==NULL) {
np=np->prevWin;
s--;
if (np==NULL) /* Previous node is header node? */
return NULL;
}
np=np->next;
}
}
}
return NULL;
}
struct nodeCardsType * BuildPath(struct pos * posPoint,
struct posSearchType *nodep, int * result, int thrId) {
/* If result is TRUE, a new SOP has been created and BuildPath returns a
pointer to it. If result is FALSE, an existing SOP is used and BuildPath
returns a pointer to the SOP */
int found, suit;
struct winCardType * np, * p2, /* * sp2,*/ * nprev, * fnp, *pnp;
struct winCardType temp;
struct nodeCardsType * sopP=0, * p/*, * sp*/;
np=nodep->posSearchPoint;
nprev=NULL;
suit=0;
/* If winning node has a card that equals the next winning card deduced
from the position, then there already exists a (partial) path */
if (np==NULL) { /* There is no winning list created yet */
/* Create winning nodes */
p2=&localVar[thrId].winCards[localVar[thrId].winSetSize];
AddWinSet(thrId);
p2->next=NULL;
p2->nextWin=NULL;
p2->prevWin=NULL;
nodep->posSearchPoint=p2;
p2->winMask=posPoint->winMask[suit];
p2->orderSet=posPoint->winOrderSet[suit];
p2->first=NULL;
np=p2; /* Latest winning node */
suit++;
while (suit<4) {
p2=&localVar[thrId].winCards[localVar[thrId].winSetSize];
AddWinSet(thrId);
np->nextWin=p2;
p2->prevWin=np;
p2->next=NULL;
p2->nextWin=NULL;
p2->winMask=posPoint->winMask[suit];
p2->orderSet=posPoint->winOrderSet[suit];
p2->first=NULL;
np=p2; /* Latest winning node */
suit++;
}
p=&localVar[thrId].nodeCards[localVar[thrId].nodeSetSize];
AddNodeSet(thrId);
np->first=p;
*result=TRUE;
return p;
}
else { /* Winning list exists */
while (1) { /* Find all winning nodes that correspond to current
position */
found=FALSE;
while (1) { /* Find node amongst alternatives */
if ((np->winMask==posPoint->winMask[suit])&&
(np->orderSet==posPoint->winOrderSet[suit])) {
/* Part of path found */
found=TRUE;
nprev=np;
break;
}
if (np->next!=NULL)
np=np->next;
else
break;
}
if (found) {
suit++;
if (suit>3) {
sopP=UpdateSOP(posPoint, np->first);
if (np->prevWin!=NULL) {
pnp=np->prevWin;
fnp=pnp->nextWin;
}
else
fnp=nodep->posSearchPoint;
temp.orderSet=np->orderSet;
temp.winMask=np->winMask;
temp.first=np->first;
temp.nextWin=np->nextWin;
np->orderSet=fnp->orderSet;
np->winMask=fnp->winMask;
np->first=fnp->first;
np->nextWin=fnp->nextWin;
fnp->orderSet=temp.orderSet;
fnp->winMask=temp.winMask;
fnp->first=temp.first;
fnp->nextWin=temp.nextWin;
*result=FALSE;
return sopP;
}
else {
np=np->nextWin; /* Find next winning node */
continue;
}
}
else
break; /* Node was not found */
} /* End outer while */
/* Create additional node, coupled to existing node(s) */
p2=&localVar[thrId].winCards[localVar[thrId].winSetSize];
AddWinSet(thrId);
p2->prevWin=nprev;
if (nprev!=NULL) {
p2->next=nprev->nextWin;
nprev->nextWin=p2;
}
else {
p2->next=nodep->posSearchPoint;
nodep->posSearchPoint=p2;
}
p2->nextWin=NULL;
p2->winMask=posPoint->winMask[suit];
p2->orderSet=posPoint->winOrderSet[suit];
p2->first=NULL;
np=p2; /* Latest winning node */
suit++;
/* Rest of path must be created */
while (suit<4) {
p2=&localVar[thrId].winCards[localVar[thrId].winSetSize];
AddWinSet(thrId);
np->nextWin=p2;
p2->prevWin=np;
p2->next=NULL;
p2->winMask=posPoint->winMask[suit];
p2->orderSet=posPoint->winOrderSet[suit];
p2->first=NULL;
p2->nextWin=NULL;
np=p2; /* Latest winning node */
suit++;
}
/* All winning nodes in SOP have been traversed and new nodes created */
p=&localVar[thrId].nodeCards[localVar[thrId].nodeSetSize];
AddNodeSet(thrId);
np->first=p;
*result=TRUE;
return p;
}
}
struct posSearchType * SearchLenAndInsert(struct posSearchType
* rootp, __int64 key, int insertNode, int *result, int thrId) {
/* Search for node which matches with the suit length combination
given by parameter key. If no such node is found, NULL is
returned if parameter insertNode is FALSE, otherwise a new
node is inserted with suitLengths set to key, the pointer to
this node is returned.
The algorithm used is defined in Knuth "The art of computer
programming", vol.3 "Sorting and searching", 6.2.2 Algorithm T,
page 424. */
struct posSearchType *np, *p, *sp;
if (insertNode)
sp=&localVar[thrId].posSearch[localVar[thrId].lenSetSize];
np=rootp;
while (1) {
if (key==np->suitLengths) {
*result=TRUE;
return np;
}
else if (key < np->suitLengths) {
if (np->left!=NULL)
np=np->left;
else if (insertNode) {
p=sp;
AddLenSet(thrId);
np->left=p;
p->posSearchPoint=NULL;
p->suitLengths=key;
p->left=NULL; p->right=NULL;
*result=TRUE;
return p;
}
else {
*result=FALSE;
return NULL;
}
}
else { /* key > suitLengths */
if (np->right!=NULL)
np=np->right;
else if (insertNode) {
p=sp;
AddLenSet(thrId);
np->right=p;
p->posSearchPoint=NULL;
p->suitLengths=key;
p->left=NULL; p->right=NULL;
*result=TRUE;
return p;
}
else {
*result=FALSE;
return NULL;
}
}
}
}
void BuildSOP(struct pos * posPoint, int tricks, int firstHand, int target,
int depth, int scoreFlag, int score, int thrId) {
int ss, hh, res, wm;
unsigned short int w;
unsigned short int temp[4][4];
unsigned short int aggr[4];
struct nodeCardsType * cardsP;
struct posSearchType * np;
#ifdef TTDEBUG
int k, mcurrent, rr;
mcurrent=localVar[thrId].movePly[depth].current;
#endif
for (ss=0; ss<=3; ss++) {
w=posPoint->winRanks[depth][ss];
if (w==0) {
posPoint->winMask[ss]=0;
posPoint->winOrderSet[ss]=0;
posPoint->leastWin[ss]=0;
for (hh=0; hh<=3; hh++)
temp[hh][ss]=0;
}
else {
w=w & (-w); /* Only lowest win */
for (hh=0; hh<=3; hh++)
temp[hh][ss]=posPoint->rankInSuit[hh][ss] & (-w);
aggr[ss]=0;
for (hh=0; hh<=3; hh++)
aggr[ss]=aggr[ss] | temp[hh][ss];
posPoint->winMask[ss]=localVar[thrId].rel[aggr[ss]].winMask[ss];
posPoint->winOrderSet[ss]=localVar[thrId].rel[aggr[ss]].aggrRanks[ss];
wm=posPoint->winMask[ss];
wm=wm & (-wm);
posPoint->leastWin[ss]=InvWinMask(wm);
}
}
/* 07-04-22 */
if (scoreFlag) {
if (localVar[thrId].nodeTypeStore[0]==MAXNODE) {
posPoint->ubound=tricks+1;
posPoint->lbound=target-posPoint->tricksMAX;
}
else {
posPoint->ubound=tricks+1-target+posPoint->tricksMAX;
posPoint->lbound=0;
}
}
else {
if (localVar[thrId].nodeTypeStore[0]==MAXNODE) {
posPoint->ubound=target-posPoint->tricksMAX-1;
posPoint->lbound=0;
}
else {
posPoint->ubound=tricks+1;
posPoint->lbound=tricks+1-target+posPoint->tricksMAX+1;
}
}
localVar[thrId].suitLengths=0;
for (ss=0; ss<=2; ss++)
for (hh=0; hh<=3; hh++) {
localVar[thrId].suitLengths=localVar[thrId].suitLengths<<4;
localVar[thrId].suitLengths|=posPoint->length[hh][ss];
}
np=SearchLenAndInsert(localVar[thrId].rootnp[tricks][firstHand],
localVar[thrId].suitLengths, TRUE, &res, thrId);
cardsP=BuildPath(posPoint, np, &res, thrId);
if (res) {
cardsP->ubound=posPoint->ubound;
cardsP->lbound=posPoint->lbound;
if (((localVar[thrId].nodeTypeStore[firstHand]==MAXNODE)&&(scoreFlag))||
((localVar[thrId].nodeTypeStore[firstHand]==MINNODE)&&(!scoreFlag))) {
cardsP->bestMoveSuit=localVar[thrId].bestMove[depth].suit;
cardsP->bestMoveRank=localVar[thrId].bestMove[depth].rank;
}
else {
cardsP->bestMoveSuit=0;
cardsP->bestMoveRank=0;
}
posPoint->bestMoveSuit=localVar[thrId].bestMove[depth].suit;
posPoint->bestMoveRank=localVar[thrId].bestMove[depth].rank;
for (ss=0; ss<=3; ss++)
cardsP->leastWin[ss]=posPoint->leastWin[ss];
}
#ifdef STAT
c9[depth]++;
#endif
#ifdef TTDEBUG
if ((res) && (ttCollect) && (!suppressTTlog)) {
fprintf(localVar[thrId].fp7, "cardsP=%d\n", (int)cardsP);
fprintf(localVar[thrId].fp7, "nodeSetSize=%d\n", localVar[thrId].nodeSetSize);
fprintf(localVar[thrId].fp7, "ubound=%d\n", cardsP->ubound);
fprintf(localVar[thrId].fp7, "lbound=%d\n", cardsP->lbound);
fprintf(localVar[thrId].fp7, "target=%d\n", target);
fprintf(localVar[thrId].fp7, "first=%c nextFirst=%c\n",
cardHand[posPoint->first[depth]], cardHand[posPoint->first[depth-1]]);
fprintf(localVar[thrId].fp7, "bestMove: suit=%c rank=%c\n", cardSuit[localVar[thrId].bestMove[depth].suit],
cardRank[localVar[thrId].bestMove[depth].rank]);
fprintf(localVar[thrId].fp7, "\n");
fprintf(localVar[thrId].fp7, "Last trick:\n");
fprintf(localVar[thrId].fp7, "1st hand=%c\n", cardHand[posPoint->first[depth+3]]);
for (k=3; k>=0; k--) {
mcurrent=localVar[thrId].movePly[depth+k+1].current;
fprintf(localVar[thrId].fp7, "suit=%c rank=%c\n",
cardSuit[localVar[thrId].movePly[depth+k+1].move[mcurrent].suit],
cardRank[localVar[thrId].movePly[depth+k+1].move[mcurrent].rank]);
}
fprintf(localVar[thrId].fp7, "\n");
for (hh=0; hh<=3; hh++) {
fprintf(localVar[thrId].fp7, "hand=%c\n", cardHand[hh]);
for (ss=0; ss<=3; ss++) {
fprintf(localVar[thrId].fp7, "suit=%c", cardSuit[ss]);
for (rr=14; rr>=2; rr--)
if (posPoint->rankInSuit[hh][ss] & bitMapRank[rr])
fprintf(localVar[thrId].fp7, " %c", cardRank[rr]);
fprintf(localVar[thrId].fp7, "\n");
}
fprintf(localVar[thrId].fp7, "\n");
}
fprintf(localVar[thrId].fp7, "\n");
}
#endif
}
int CheckDeal(struct moveType * cardp, int thrId) {
int h, s, k, found;
unsigned short int temp[4][4];
for (h=0; h<=3; h++)
for (s=0; s<=3; s++)
temp[h][s]=localVar[thrId].game.suit[h][s];
/* Check that all ranks appear only once within the same suit. */
for (s=0; s<=3; s++)
for (k=2; k<=14; k++) {
found=FALSE;
for (h=0; h<=3; h++) {
if ((temp[h][s] & bitMapRank[k])!=0) {
if (found) {
cardp->suit=s;
cardp->rank=k;
return 1;
}
else
found=TRUE;
}
}
}
return 0;
}
int NextMove(struct pos *posPoint, int depth, int thrId) {
/* Returns TRUE if at least one move remains to be
searched, otherwise FALSE is returned. */
int mcurrent;
unsigned short int lw;
unsigned char suit;
struct moveType currMove;
mcurrent=localVar[thrId].movePly[depth].current;
currMove=localVar[thrId].movePly[depth].move[mcurrent];
if (localVar[thrId].lowestWin[depth][currMove.suit]==0) {
/* A small card has not yet been identified for this suit. */
lw=posPoint->winRanks[depth][currMove.suit];
if (lw!=0)
lw=lw & (-lw); /* LSB */
else
lw=bitMapRank[15];
if (bitMapRank[currMove.rank]=
localVar[thrId].lowestWin[depth][localVar[thrId].movePly[depth].move[mcurrent].suit])
return TRUE;
}
return FALSE;
}
/* New: */
else {
while (localVar[thrId].movePly[depth].current<=localVar[thrId].movePly[depth].last-1) {
localVar[thrId].movePly[depth].current++;
mcurrent=localVar[thrId].movePly[depth].current;
suit=localVar[thrId].movePly[depth].move[mcurrent].suit;
if ((currMove.suit==suit) ||
(bitMapRank[localVar[thrId].movePly[depth].move[mcurrent].rank] >=
localVar[thrId].lowestWin[depth][suit]))
return TRUE;
}
return FALSE;
}
}
else {
while (localVar[thrId].movePly[depth].current<=localVar[thrId].movePly[depth].last-1) {
localVar[thrId].movePly[depth].current++;
mcurrent=localVar[thrId].movePly[depth].current;
if (bitMapRank[localVar[thrId].movePly[depth].move[mcurrent].rank] >=
localVar[thrId].lowestWin[depth][localVar[thrId].movePly[depth].move[mcurrent].suit])
return TRUE;
}
return FALSE;
}
}
int DumpInput(int errCode, struct deal dl, int target,
int solutions, int mode) {
FILE *fp;
int i, j, k;
unsigned short ranks[4][4];
fp=fopen("dump.txt", "w");
if (fp==NULL)
return -1;
fprintf(fp, "Error code=%d\n", errCode);
fprintf(fp, "\n");
fprintf(fp, "Deal data:\n");
if (dl.trump!=4)
fprintf(fp, "trump=%c\n", cardSuit[dl.trump]);
else
fprintf(fp, "trump=N\n");
fprintf(fp, "first=%c\n", cardHand[dl.first]);
for (k=0; k<=2; k++)
if (dl.currentTrickRank[k]!=0)
fprintf(fp, "index=%d currentTrickSuit=%c currentTrickRank=%c\n",
k, cardSuit[dl.currentTrickSuit[k]], cardRank[dl.currentTrickRank[k]]);
for (i=0; i<=3; i++)
for (j=0; j<=3; j++) {
fprintf(fp, "index1=%d index2=%d remainCards=%d\n",
i, j, dl.remainCards[i][j]);
ranks[i][j]=dl.remainCards[i][3-j]>>2;
}
fprintf(fp, "\n");
fprintf(fp, "target=%d\n", target);
fprintf(fp, "solutions=%d\n", solutions);
fprintf(fp, "mode=%d\n", mode);
fprintf(fp, "\n");
PrintDeal(fp, ranks);
fclose(fp);
return 0;
}
void PrintDeal(FILE *fp, unsigned short ranks[][4]) {
int i, count, ec[4], trickCount=0, s, r;
for (i=0; i<=3; i++) {
count=counttable[ranks[3][i]];
if (count>5)
ec[i]=TRUE;
else
ec[i]=FALSE;
trickCount=trickCount+count;
}
fprintf(fp, "\n");
for (s=0; s<=3; s++) {
fprintf(fp, "\t%c ", cardSuit[s]);
if (!ranks[0][s])
fprintf(fp, "--");
else {
for (r=14; r>=2; r--)
if ((ranks[0][s] & bitMapRank[r])!=0)
fprintf(fp, "%c", cardRank[r]);
}
fprintf(fp, "\n");
}
for (s=0; s<=3; s++) {
fprintf(fp, "%c ", cardSuit[s]);
if (!ranks[3][s])
fprintf(fp, "--");
else {
for (r=14; r>=2; r--)
if ((ranks[3][s] & bitMapRank[r])!=0)
fprintf(fp, "%c", cardRank[r]);
}
if (ec[s])
fprintf(fp, "\t\%c ", cardSuit[s]);
else
fprintf(fp, "\t\t\%c ", cardSuit[s]);
if (!ranks[1][s])
fprintf(fp, "--");
else {
for (r=14; r>=2; r--)
if ((ranks[1][s] & bitMapRank[r])!=0)
fprintf(fp, "%c", cardRank[r]);
}
fprintf(fp, "\n");
}
for (s=0; s<=3; s++) {
fprintf(fp, "\t%c ", cardSuit[s]);
if (!ranks[2][s])
fprintf(fp, "--");
else {
for (r=14; r>=2; r--)
if ((ranks[2][s] & bitMapRank[r])!=0)
fprintf(fp, "%c", cardRank[r]);
}
fprintf(fp, "\n");
}
fprintf(fp, "\n");
return;
}
void Wipe(int thrId) {
int k;
for (k=1; k<=localVar[thrId].wcount; k++) {
if (localVar[thrId].pw[k])
free(localVar[thrId].pw[k]);
localVar[thrId].pw[k]=NULL;
}
for (k=1; k<=localVar[thrId].ncount; k++) {
if (localVar[thrId].pn[k])
free(localVar[thrId].pn[k]);
localVar[thrId].pn[k]=NULL;
}
for (k=1; k<=localVar[thrId].lcount; k++) {
if (localVar[thrId].pl[k])
free(localVar[thrId].pl[k]);
localVar[thrId].pl[k]=NULL;
}
localVar[thrId].allocmem=localVar[thrId].summem;
return;
}
void AddWinSet(int thrId) {
if (localVar[thrId].clearTTflag) {
localVar[thrId].windex++;
localVar[thrId].winSetSize=localVar[thrId].windex;
/*localVar[thrId].fp2=fopen("dyn.txt", "a");
fprintf(localVar[thrId].fp2, "windex=%d\n", windex);
fclose(localVar[thrId].fp2);*/
localVar[thrId].winCards=&localVar[thrId].temp_win[localVar[thrId].windex];
}
else if (localVar[thrId].winSetSize>=localVar[thrId].winSetSizeLimit) {
/* The memory chunk for the winCards structure will be exceeded. */
if ((localVar[thrId].allocmem+localVar[thrId].wmem)>localVar[thrId].maxmem) {
/* Already allocated memory plus needed allocation overshot maxmem */
localVar[thrId].windex++;
localVar[thrId].winSetSize=localVar[thrId].windex;
/*localVar[thrId].fp2=fopen("dyn.txt", "a");
fprintf(localVar[thrId].fp2, "windex=%d\n", windex);
fclose(localVar[thrId].fp2);*/
localVar[thrId].clearTTflag=TRUE;
localVar[thrId].winCards=&localVar[thrId].temp_win[localVar[thrId].windex];
}
else {
localVar[thrId].wcount++; localVar[thrId].winSetSizeLimit=WSIZE;
localVar[thrId].pw[localVar[thrId].wcount] =
(struct winCardType *)calloc(localVar[thrId].winSetSizeLimit+1, sizeof(struct winCardType));
if (localVar[thrId].pw[localVar[thrId].wcount]==NULL) {
localVar[thrId].clearTTflag=TRUE;
localVar[thrId].windex++;
localVar[thrId].winSetSize=localVar[thrId].windex;
localVar[thrId].winCards=&localVar[thrId].temp_win[localVar[thrId].windex];
}
else {
localVar[thrId].allocmem+=(localVar[thrId].winSetSizeLimit+1)*sizeof(struct winCardType);
localVar[thrId].winSetSize=0;
localVar[thrId].winCards=localVar[thrId].pw[localVar[thrId].wcount];
}
}
}
else
localVar[thrId].winSetSize++;
return;
}
void AddNodeSet(int thrId) {
if (localVar[thrId].nodeSetSize>=localVar[thrId].nodeSetSizeLimit) {
/* The memory chunk for the nodeCards structure will be exceeded. */
if ((localVar[thrId].allocmem+localVar[thrId].nmem)>localVar[thrId].maxmem) {
/* Already allocated memory plus needed allocation overshot maxmem */
localVar[thrId].clearTTflag=TRUE;
}
else {
localVar[thrId].ncount++; localVar[thrId].nodeSetSizeLimit=NSIZE;
localVar[thrId].pn[localVar[thrId].ncount] = (struct nodeCardsType *)calloc(localVar[thrId].nodeSetSizeLimit+1, sizeof(struct nodeCardsType));
if (localVar[thrId].pn[localVar[thrId].ncount]==NULL) {
localVar[thrId].clearTTflag=TRUE;
}
else {
localVar[thrId].allocmem+=(localVar[thrId].nodeSetSizeLimit+1)*sizeof(struct nodeCardsType);
localVar[thrId].nodeSetSize=0;
localVar[thrId].nodeCards=localVar[thrId].pn[localVar[thrId].ncount];
}
}
}
else
localVar[thrId].nodeSetSize++;
return;
}
void AddLenSet(int thrId) {
if (localVar[thrId].lenSetSize>=localVar[thrId].lenSetSizeLimit) {
/* The memory chunk for the posSearchType structure will be exceeded. */
if ((localVar[thrId].allocmem+localVar[thrId].lmem)>localVar[thrId].maxmem) {
/* Already allocated memory plus needed allocation overshot maxmem */
localVar[thrId].clearTTflag=TRUE;
}
else {
localVar[thrId].lcount++; localVar[thrId].lenSetSizeLimit=LSIZE;
localVar[thrId].pl[localVar[thrId].lcount] = (struct posSearchType *)calloc(localVar[thrId].lenSetSizeLimit+1, sizeof(struct posSearchType));
if (localVar[thrId].pl[localVar[thrId].lcount]==NULL) {
localVar[thrId].clearTTflag=TRUE;
}
else {
localVar[thrId].allocmem+=(localVar[thrId].lenSetSizeLimit+1)*sizeof(struct posSearchType);
localVar[thrId].lenSetSize=0;
localVar[thrId].posSearch=localVar[thrId].pl[localVar[thrId].lcount];
}
}
}
else
localVar[thrId].lenSetSize++;
return;
}
#ifdef TTDEBUG
void ReceiveTTstore(struct pos *posPoint, struct nodeCardsType * cardsP,
int target, int depth, int thrId) {
int tricksLeft, hh, ss, rr;
/* Stores current position information and TT position value in table
ttStore with current entry lastTTStore. Also stores corresponding
information in log rectt.txt. */
tricksLeft=0;
for (hh=0; hh<=3; hh++)
for (ss=0; ss<=3; ss++)
tricksLeft+=posPoint->length[hh][ss];
tricksLeft=tricksLeft/4;
ttStore[lastTTstore].tricksLeft=tricksLeft;
ttStore[lastTTstore].cardsP=cardsP;
ttStore[lastTTstore].first=posPoint->first[depth];
if ((localVar[thrId].handToPlay==posPoint->first[depth])||
(localVar[thrId].handToPlay==partner[posPoint->first[depth]])) {
ttStore[lastTTstore].target=target-posPoint->tricksMAX;
ttStore[lastTTstore].ubound=cardsP->ubound;
ttStore[lastTTstore].lbound=cardsP->lbound;
}
else {
ttStore[lastTTstore].target=tricksLeft-
target+posPoint->tricksMAX+1;
}
for (hh=0; hh<=3; hh++)
for (ss=0; ss<=3; ss++)
ttStore[lastTTstore].suit[hh][ss]=
posPoint->rankInSuit[hh][ss];
localVar[thrId].fp11=fopen("rectt.txt", "a");
if (lastTTstoretricksMAX);
fprintf(localVar[thrId].fp11, "leftTricks=%d\n",
ttStore[lastTTstore].tricksLeft);
fprintf(localVar[thrId].fp11, "cardsP=%d\n",
ttStore[lastTTstore].cardsP);
fprintf(localVar[thrId].fp11, "ubound=%d\n",
ttStore[lastTTstore].ubound);
fprintf(localVar[thrId].fp11, "lbound=%d\n",
ttStore[lastTTstore].lbound);
fprintf(localVar[thrId].fp11, "first=%c\n",
cardHand[ttStore[lastTTstore].first]);
fprintf(localVar[thrId].fp11, "target=%d\n",
ttStore[lastTTstore].target);
fprintf(localVar[thrId].fp11, "\n");
for (hh=0; hh<=3; hh++) {
fprintf(localVar[thrId].fp11, "hand=%c\n", cardHand[hh]);
for (ss=0; ss<=3; ss++) {
fprintf(localVar[thrId].fp11, "suit=%c", cardSuit[ss]);
for (rr=14; rr>=2; rr--)
if (ttStore[lastTTstore].suit[hh][ss]
& bitMapRank[rr])
fprintf(localVar[thrId].fp11, " %c", cardRank[rr]);
fprintf(localVar[thrId].fp11, "\n");
}
fprintf(localVar[thrId].fp11, "\n");
}
}
fclose(localVar[thrId].fp11);
lastTTstore++;
}
#endif
#if defined(_MSC_VER)
HANDLE solveAllEvents[MAXNOOFTHREADS];
struct paramType param;
LONG volatile threadIndex;
LONG volatile current;
int timeOut;
const long chunk = 4;
DWORD CALLBACK SolveChunkDDtable (void *) {
struct futureTricks *futp[MAXNOOFBOARDS];
struct futureTricks fut[MAXNOOFBOARDS];
int thid;
long j;
clock_t tstop;
EnterCriticalSection(&solv_crit);
__try
{
threadIndex++;
thid=threadIndex;
}
__finally
{
LeaveCriticalSection(&solv_crit);
}
while ((j=_InterlockedExchangeAdd(¤t, chunk))noOfBoards!=0)) {
tstop=clock();
if (((int)tstop - param.tstart) > param.remainTime) {
timeOut=TRUE;
break;
}
}
futp[j+k]=&fut[j+k];
int res=SolveBoard(param.bop->deals[j+k], param.bop->target[j+k],
param.bop->solutions[j+k], param.bop->mode[j+k], futp[j+k], thid);
if (res==1) {
param.solvedp->solvedBoard[j+k]=fut[j+k];
}
else {
return 0;
}
}
}
if (SetEvent(solveAllEvents[thid])==0) {
int errCode=GetLastError();
return 0;
}
return 1;
}
int SolveAllBoards4(struct boards *bop, struct solvedBoards *solvedp,
int timeSupervision, int remainTime) {
int k, errCode;
DWORD res;
DWORD solveAllWaitResult;
current=0;
threadIndex=-1;
timeOut=FALSE;
if (bop->noOfBoards > MAXNOOFBOARDS)
return -4;
param.timeSupervision=timeSupervision;
if (timeSupervision) {
(int)param.tstart=clock(); param.remainTime=remainTime;
}
for (k=0; knoOfBoards;
for (k=0; ksolvedBoard[k].cards=0;
for (k=0; knoOfBoards=0;
for (k=0; ksolvedBoard[k].cards!=0)
solvedp->noOfBoards++;
}
if (timeOut)
solvedp->timeOut=TRUE;
else
solvedp->timeOut=FALSE;
return 1;
}
#else
int SolveAllBoards4(struct boards *bop, struct solvedBoards *solvedp,
int timeSupervision, int remainTime) {
int k, i, res, chunk, fail;
struct futureTricks fut[MAXNOOFBOARDS];
chunk=4; fail=FALSE;
for (i=0; isolvedBoard[i].cards=0;
#pragma omp parallel shared(bop, solvedp, chunk, fail) private(k)
{
#pragma omp for schedule(dynamic, chunk)
for (k=0; knoOfBoards; k++) {
res=SolveBoard(bop->deals[k], bop->target[k], bop->solutions[k],
bop->mode[k], &fut[k],
#ifdef _OPENMP
omp_get_thread_num()
#else
0
#endif
);
if (res==1) {
solvedp->solvedBoard[k]=fut[k];
}
else
fail=TRUE;
}
}
if (fail)
return 0;
solvedp->noOfBoards=0;
for (i=0; isolvedBoard[i].cards!=0)
solvedp->noOfBoards++;
}
return 1;
}
#endif
int STDCALL CalcDDtable(struct ddTableDeal tableDeal, struct ddTableResults * tablep) {
int h, s, k, ind, tr, first, res;
struct deal dl;
struct boards bo;
struct solvedBoards solved;
for (h=0; h<=3; h++)
for (s=0; s<=3; s++)
dl.remainCards[h][s]=tableDeal.cards[h][s];
for (k=0; k<=2; k++) {
dl.currentTrickRank[k]=0;
dl.currentTrickSuit[k]=0;
}
ind=0; bo.noOfBoards=20;
for (tr=4; tr>=0; tr--)
for (first=0; first<=3; first++) {
dl.first=first;
dl.trump=tr;
bo.deals[ind]=dl;
bo.target[ind]=-1;
bo.solutions[ind]=1;
bo.mode[ind]=1;
ind++;
}
res=SolveAllBoards4(&bo, &solved, FALSE, -1);
if (res==1) {
for (ind=0; ind<20; ind++) {
tablep->resTable[bo.deals[ind].trump][rho[bo.deals[ind].first]]=
13-solved.solvedBoard[ind].score[0];
}
return 1;
}
return res;
}
/*#endif*/
tenace-0.13/dds/mode2.txt 0000664 0004016 0004016 00000004051 11524603601 012132 0000000 0000000
Usage of the SolveBoard parameter option mode=2
-----------------------------------------------
When the score of a deal is to be calculated for different
hands leading the first trick, the mode parameter in
SolveBoard can be used to speed up the calculation.
The score of the first alternative leading hand is obtained
by setting mode=1. The parameter target can be set to -1 or
to a defined target value. The parameter solutions can be set
to either 1, 2 or 3.
The following calls to SolveBoard for the other alternative
leading hands can all have parameter mode set to 2.
When mode is set to 2, the transposition table contents is not
cleared before making the alpha-beta search for the obtaining
the score, giving a faster search.
A function calculating the score for all possible leading hands
using mode=2 must be part of the application using DDS.
Below is source code for such function using C, assuming target
is set to -1 and solutions set to 1.
Setting target to a specific value and/or setting solutions different
to 1 can be done using a similar solution.
Source code example using C
---------------------------
void SolveCamps(int est) {
/* est is estimated target.
dl is an externally declared struct of type deal.
fut is an externally declared structure of type
futureTricks.
SolveCamps needs to called for each of the suits
of the deal, i.e. for each dl.suit.
score[h] is an externally declared integer array
which will contain the score for each leading hand.
totalNodes[h] is an externally declared counter array
of type int that adds up the searched nodes for each
leading hand. */
int h, k;
for (h=0; h<=3; h++)
totalNodes[h]=0;
for (h=0; h<=3; h++) {
dl.first=h;
if (h==0)
k=SolveBoard(dl, -1, 1, 1, &fut);
else
k=SolveBoard(dl, -1, 1, 2, &fut);
score[h]=fut.score[0];
totalNodes[h]=totalNodes[h]+fut.nodes;
}
}
tenace-0.13/dds/patches/ 0000775 0004016 0004016 00000000000 12225341154 012073 5 0000000 0000000 tenace-0.13/dds/patches/series 0000664 0004016 0004016 00000000134 11524611535 013232 0000000 0000000 skip-dll-build
dds.cpp-autoconfig
dds.cpp-fixes
dds.cpp-openmp
dll.h-__int64
dll.h-extern_c
tenace-0.13/dds/patches/dll.h-__int64 0000664 0004016 0004016 00000000507 11524611355 014205 0000000 0000000 --- a/dll.h
+++ b/dll.h
@@ -41,6 +41,8 @@
#include
#include
+typedef long long __int64;
+
/*#define STAT*/ /* Define STAT to generate a statistics log, stat.txt */
/*#define TTDEBUG*/ /* Define TTDEBUG to generate transposition table debug information.
Only for a single thread! */
tenace-0.13/dds/patches/dll.h-extern_c 0000664 0004016 0004016 00000000763 11524611355 014556 0000000 0000000 --- a/dll.h
+++ b/dll.h
@@ -427,7 +427,7 @@ EXTERN_C DLLEXPORT int STDCALL SolveBoar
EXTERN_C DLLEXPORT int STDCALL CalcDDtable(struct ddTableDeal tableDeal,
struct ddTableResults * tablep);
-void InitStart(int gb_ram, int ncores);
+EXTERN_C void InitStart(int gb_ram, int ncores);
void InitGame(int gameNo, int moveTreeFlag, int first, int handRelFirst, int thrId);
void InitSearch(struct pos * posPoint, int depth,
struct moveType startMoves[], int first, int mtd, int thrId);
tenace-0.13/dds/patches/dds.cpp-fixes 0000664 0004016 0004016 00000001131 11524611450 014401 0000000 0000000 --- a/dds.cpp
+++ b/dds.cpp
@@ -86,9 +86,6 @@ extern "C" BOOL APIENTRY DllMain(HMODULE
if (localVar[k].pl)
free(localVar[k].pl);
localVar[k].pl=NULL;
- if (ttStore)
- free(ttStore);
- ttStore=NULL;
if (localVar[k].rel)
free(localVar[k].rel);
localVar[k].rel=NULL;
@@ -96,6 +93,9 @@ extern "C" BOOL APIENTRY DllMain(HMODULE
free(localVar[k].adaptWins);
localVar[k].adaptWins=NULL;
}
+ if (ttStore)
+ free(ttStore);
+ ttStore=NULL;
if (highestRank)
free(highestRank);
highestRank=NULL;
tenace-0.13/dds/patches/dds.cpp-autoconfig 0000664 0004016 0004016 00000000777 11524611450 015440 0000000 0000000 --- a/dds.cpp
+++ b/dds.cpp
@@ -854,6 +854,7 @@ void InitStart(int gb_ram, int ncores) {
exit(1);
if ((gb_ram==0)||(ncores==0)) { /* Autoconfig */
+#if defined(_WIN32)
SYSTEM_INFO temp;
MEMORYSTATUS stat;
@@ -871,6 +872,10 @@ void InitStart(int gb_ram, int ncores) {
GetSystemInfo(&temp);
noOfCores=Min(noOfThreads, (int)temp.dwNumberOfProcessors);
+#else
+ fprintf (stderr, "libdds autoconfig not supported.\n");
+ exit (1);
+#endif
}
else {
tenace-0.13/dds/patches/skip-dll-build 0000664 0004016 0004016 00000000400 11500771612 014545 0000000 0000000 --- a/dds.cpp
+++ b/dds.cpp
@@ -50,7 +50,7 @@ CRITICAL_SECTION solv_crit;
#pragma managed(push, off)
#endif
-#if defined(_WIN32)
+#if 0
extern "C" BOOL APIENTRY DllMain(HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved) {
tenace-0.13/dds/patches/dds.cpp-openmp 0000664 0004016 0004016 00000001132 11524611450 014562 0000000 0000000 --- a/dds.cpp
+++ b/dds.cpp
@@ -5102,7 +5102,13 @@ int SolveAllBoards4(struct boards *bop,
for (k=0; knoOfBoards; k++) {
res=SolveBoard(bop->deals[k], bop->target[k], bop->solutions[k],
- bop->mode[k], &fut[k], omp_get_thread_num());
+ bop->mode[k], &fut[k],
+#ifdef _OPENMP
+ omp_get_thread_num()
+#else
+ 0
+#endif
+ );
if (res==1) {
solvedp->solvedBoard[k]=fut[k];
}
--- a/Makefile
+++ b/Makefile
@@ -1,4 +1,4 @@
-CFLAGS=-g -Wall -O2
+CFLAGS=-g -Wall -O2 -fopenmp
PREFIX=/usr/local
all: libdds.a python
tenace-0.13/dds/Makefile.am 0000664 0004016 0004016 00000000707 11524621557 012435 0000000 0000000 EXTRA_DIST = \
DDS_alg_descr-*.rtf \
DLL-dds_*.rtf \
GPL.txt \
dds.cpp \
dll.h \
mode2.txt \
readme.txt \
release_notes.txt \
patches/*
if HAVE_LIBDDS
all: noop
else
all: libdds.a
endif
dds.c:
ln -s dds.cpp $@
dds.h:
ln -s dll.h dds.h
dds.o: dds.c dds.h
$(CC) $(CFLAGS) -c -o $@ $<
libdds.a: dds.o
$(AR) rc $@ $^
$(RANLIB) $@
clean-local:
rm -f dds.o libdds.a dds.c dds.h
noop:
@echo "Nothing to do here, using the system's libdds"
tenace-0.13/dds/DDS_alg_descr-revE4.rtf 0000664 0004016 0004016 00000707714 11524603565 014531 0000000 0000000 {\rtf1\ansi\ansicpg1252\uc1 \deff0\deflang1033\deflangfe1053{\fonttbl{\f0\froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f1\fswiss\fcharset0\fprq2{\*\panose 020b0604020202020204}Arial;}
{\f2\fmodern\fcharset0\fprq1{\*\panose 02070309020205020404}Courier New;}{\f3\froman\fcharset2\fprq2{\*\panose 05050102010706020507}Symbol;}{\f14\fnil\fcharset2\fprq2{\*\panose 05000000000000000000}Wingdings;}
{\f16\froman\fcharset238\fprq2 Times New Roman CE;}{\f17\froman\fcharset204\fprq2 Times New Roman Cyr;}{\f19\froman\fcharset161\fprq2 Times New Roman Greek;}{\f20\froman\fcharset162\fprq2 Times New Roman Tur;}
{\f21\froman\fcharset186\fprq2 Times New Roman Baltic;}{\f22\fswiss\fcharset238\fprq2 Arial CE;}{\f23\fswiss\fcharset204\fprq2 Arial Cyr;}{\f25\fswiss\fcharset161\fprq2 Arial Greek;}{\f26\fswiss\fcharset162\fprq2 Arial Tur;}
{\f27\fswiss\fcharset186\fprq2 Arial Baltic;}{\f28\fmodern\fcharset238\fprq1 Courier New CE;}{\f29\fmodern\fcharset204\fprq1 Courier New Cyr;}{\f31\fmodern\fcharset161\fprq1 Courier New Greek;}{\f32\fmodern\fcharset162\fprq1 Courier New Tur;}
{\f33\fmodern\fcharset186\fprq1 Courier New Baltic;}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;
\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;}{\stylesheet{\nowidctlpar\adjustright \lang2057 \snext0 Normal;}{
\s1\nowidctlpar\adjustright \lang2057 \sbasedon0 \snext0 heading 1;}{\s2\nowidctlpar\adjustright \lang2057 \sbasedon0 \snext0 heading 2;}{\s3\keepn\nowidctlpar\adjustright \b\lang1053 \sbasedon0 \snext0 heading 3;}{\*\cs10 \additive
Default Paragraph Font;}{\*\cs15 \additive \ul\cf2 \sbasedon10 Hyperlink;}{\s16\nowidctlpar\tqc\tx4536\tqr\tx9072\adjustright \lang2057 \sbasedon0 \snext16 footer;}{\*\cs17 \additive \sbasedon10 page number;}{\*\cs18 \additive \ul\cf12 \sbasedon10
FollowedHyperlink;}}{\*\listtable{\list\listtemplateid-1\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat0\levelspace0\levelindent0{\leveltext\'01*;}{\levelnumbers;}}{\listname ;}\listid-2}{\list\listtemplateid69009423\listsimple
{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-360\li360\jclisttab\tx360 }{\listname ;}\listid83117072}{\list\listtemplateid69009409\listsimple{\listlevel\levelnfc23\leveljc0
\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid402485625}{\list\listtemplateid249954820\listsimple{\listlevel\levelnfc4\leveljc0\levelfollow0
\levelstartat1\levelold\levelspace0\levelindent360{\leveltext\'02\'00);}{\levelnumbers\'01;}\f0\fbias0 }{\listname ;}\listid934823463}{\list\listtemplateid272238766{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace360\levelindent0
{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li780\jclisttab\tx780 }{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li1500\jclisttab\tx1500 }
{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}\f14\fbias0 \fi-360\li2220\jclisttab\tx2220 }{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace360
\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li2940\jclisttab\tx2940 }{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li3660
\jclisttab\tx3660 }{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}\f14\fbias0 \fi-360\li4380\jclisttab\tx4380 }{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1
\levelspace360\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li5100\jclisttab\tx5100 }{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\'01o;}{\levelnumbers;}\f2\fbias0
\fi-360\li5820\jclisttab\tx5820 }{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}\f14\fbias0 \fi-360\li6540\jclisttab\tx6540 }{\listname ;}\listid1135560398}
{\list\listtemplateid988152266\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\f0\fbias0 \jclisttab\tx0 }{\listname ;}\listid1180581588}{\list\listtemplateid69009409
\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1220364652}{\list\listtemplateid69009425\listsimple
{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'00);}{\levelnumbers\'01;}\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1424648690}{\list\listtemplateid-1916079830{\listlevel\levelnfc0
\leveljc0\levelfollow0\levelstartat6\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fbias0 \fi-360\li360\jclisttab\tx360 }{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levellegal\levelspace0\levelindent0{\leveltext
\'03\'00.\'01;}{\levelnumbers\'01\'03;}\fbias0 \fi-360\li360\jclisttab\tx360 }{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levellegal\levelspace0\levelindent0{\leveltext\'05\'00.\'01.\'02;}{\levelnumbers\'01\'03\'05;}\fbias0 \fi-720\li720
\jclisttab\tx720 }{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levellegal\levelspace0\levelindent0{\leveltext\'07\'00.\'01.\'02.\'03;}{\levelnumbers\'01\'03\'05\'07;}\fbias0 \fi-720\li720\jclisttab\tx720 }{\listlevel\levelnfc0\leveljc0
\levelfollow0\levelstartat1\levellegal\levelspace0\levelindent0{\leveltext\'09\'00.\'01.\'02.\'03.\'04;}{\levelnumbers\'01\'03\'05\'07\'09;}\fbias0 \fi-1080\li1080\jclisttab\tx1080 }{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levellegal
\levelspace0\levelindent0{\leveltext\'0b\'00.\'01.\'02.\'03.\'04.\'05;}{\levelnumbers\'01\'03\'05\'07\'09\'0b;}\fbias0 \fi-1080\li1080\jclisttab\tx1080 }{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levellegal\levelspace0\levelindent0
{\leveltext\'0d\'00.\'01.\'02.\'03.\'04.\'05.\'06;}{\levelnumbers\'01\'03\'05\'07\'09\'0b\'0d;}\fbias0 \fi-1440\li1440\jclisttab\tx1440 }{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levellegal\levelspace0\levelindent0{\leveltext
\'0f\'00.\'01.\'02.\'03.\'04.\'05.\'06.\'07;}{\levelnumbers\'01\'03\'05\'07\'09\'0b\'0d\'0f;}\fbias0 \fi-1440\li1440\jclisttab\tx1440 }{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levellegal\levelspace0\levelindent0{\leveltext
\'11\'00.\'01.\'02.\'03.\'04.\'05.\'06.\'07.\'08;}{\levelnumbers\'01\'03\'05\'07\'09\'0b\'0d\'0f\'11;}\fbias0 \fi-1800\li1800\jclisttab\tx1800 }{\listname ;}\listid1459645526}{\list\listtemplateid-144657552{\listlevel\levelnfc0\leveljc0\levelfollow0
\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\f0\fbias0 \jclisttab\tx0 }{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat2\levellegal\levelspace0\levelindent0{\leveltext\'03\'00.\'01;}{\levelnumbers\'01\'03;}
\fbias0 \s0\fi-360\li360\jclisttab\tx360 }{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levellegal\levelspace0\levelindent0{\leveltext\'05\'00.\'01.\'02;}{\levelnumbers\'01\'03\'05;}\fbias0 \s0\fi-720\li720\jclisttab\tx720 }{\listlevel
\levelnfc0\leveljc0\levelfollow0\levelstartat1\levellegal\levelspace0\levelindent0{\leveltext\'07\'00.\'01.\'02.\'03;}{\levelnumbers\'01\'03\'05\'07;}\fbias0 \s0\fi-720\li720\jclisttab\tx720 }{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1
\levellegal\levelspace0\levelindent0{\leveltext\'09\'00.\'01.\'02.\'03.\'04;}{\levelnumbers\'01\'03\'05\'07\'09;}\fbias0 \s0\fi-1080\li1080\jclisttab\tx1080 }{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levellegal\levelspace0\levelindent0
{\leveltext\'0b\'00.\'01.\'02.\'03.\'04.\'05;}{\levelnumbers\'01\'03\'05\'07\'09\'0b;}\fbias0 \s0\fi-1080\li1080\jclisttab\tx1080 }{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levellegal\levelspace0\levelindent0{\leveltext
\'0d\'00.\'01.\'02.\'03.\'04.\'05.\'06;}{\levelnumbers\'01\'03\'05\'07\'09\'0b\'0d;}\fbias0 \s0\fi-1440\li1440\jclisttab\tx1440 }{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levellegal\levelspace0\levelindent0{\leveltext
\'0f\'00.\'01.\'02.\'03.\'04.\'05.\'06.\'07;}{\levelnumbers\'01\'03\'05\'07\'09\'0b\'0d\'0f;}\fbias0 \s0\fi-1440\li1440\jclisttab\tx1440 }{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levellegal\levelspace0\levelindent0{\leveltext
\'11\'00.\'01.\'02.\'03.\'04.\'05.\'06.\'07.\'08;}{\levelnumbers\'01\'03\'05\'07\'09\'0b\'0d\'0f\'11;}\fbias0 \s0\fi-1800\li1800\jclisttab\tx1800 }{\listname ;}\listid1506170630}{\list\listtemplateid69009409\listsimple{\listlevel\levelnfc23\leveljc0
\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1611858212}{\list\listtemplateid69009409\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0
\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1686666904}{\list\listtemplateid69009409\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1
\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1883008225}{\list\listtemplateid69009439{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0
{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-360\li360\jclisttab\tx360 }{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'04\'00.\'01.;}{\levelnumbers\'01\'03;}\fi-432\li792\jclisttab\tx1080 }{\listlevel
\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'06\'00.\'01.\'02.;}{\levelnumbers\'01\'03\'05;}\fi-504\li1224\jclisttab\tx1440 }{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0
{\leveltext\'08\'00.\'01.\'02.\'03.;}{\levelnumbers\'01\'03\'05\'07;}\fi-648\li1728\jclisttab\tx2160 }{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'0a\'00.\'01.\'02.\'03.\'04.;}{\levelnumbers
\'01\'03\'05\'07\'09;}\fi-792\li2232\jclisttab\tx2880 }{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'0c\'00.\'01.\'02.\'03.\'04.\'05.;}{\levelnumbers\'01\'03\'05\'07\'09\'0b;}\fi-936\li2736
\jclisttab\tx3240 }{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'0e\'00.\'01.\'02.\'03.\'04.\'05.\'06.;}{\levelnumbers\'01\'03\'05\'07\'09\'0b\'0d;}\fi-1080\li3240\jclisttab\tx3960 }{\listlevel\levelnfc0
\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'10\'00.\'01.\'02.\'03.\'04.\'05.\'06.\'07.;}{\levelnumbers\'01\'03\'05\'07\'09\'0b\'0d\'0f;}\fi-1224\li3744\jclisttab\tx4680 }{\listlevel\levelnfc0\leveljc0\levelfollow0
\levelstartat1\levelspace0\levelindent0{\leveltext\'12\'00.\'01.\'02.\'03.\'04.\'05.\'06.\'07.\'08.;}{\levelnumbers\'01\'03\'05\'07\'09\'0b\'0d\'0f\'11;}\fi-1440\li4320\jclisttab\tx5040 }{\listname ;}\listid1938564357}{\list\listtemplateid69009409
\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1944025331}{\list\listtemplateid69009423\listsimple
{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1968315024}}{\*\listoverridetable{\listoverride\listid83117072
\listoverridecount0\ls1}{\listoverride\listid-2\listoverridecount1{\lfolevel\listoverrideformat{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat0\levelold\levelspace0\levelindent360{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 }}\ls2}
{\listoverride\listid934823463\listoverridecount0\ls3}{\listoverride\listid-2\listoverridecount1{\lfolevel\listoverrideformat{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat0\levelold\levelspace0\levelindent0{\leveltext
\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 }}\ls4}{\listoverride\listid1686666904\listoverridecount0\ls5}{\listoverride\listid1135560398\listoverridecount0\ls6}{\listoverride\listid1459645526\listoverridecount0\ls7}{\listoverride\listid1938564357
\listoverridecount0\ls8}{\listoverride\listid1968315024\listoverridecount0\ls9}{\listoverride\listid402485625\listoverridecount0\ls10}{\listoverride\listid1944025331\listoverridecount0\ls11}{\listoverride\listid1611858212\listoverridecount0\ls12}
{\listoverride\listid1883008225\listoverridecount0\ls13}{\listoverride\listid1220364652\listoverridecount0\ls14}{\listoverride\listid1180581588\listoverridecount0\ls15}{\listoverride\listid1506170630\listoverridecount0\ls16}{\listoverride\listid1424648690
\listoverridecount0\ls17}}{\info{\title Bo Haglund}{\author Bo Haglund}{\operator Bo Haglund}{\creatim\yr2008\mo9\dy7\hr11\min21}{\revtim\yr2010\mo4\dy10\hr9\min55}{\version17}{\edmins115}{\nofpages23}{\nofwords6036}{\nofchars-32766}{\*\company }
{\nofcharsws0}{\vern89}}\margl1417\margr1417\margt1417\margb1417 \deftab1304\widowctrl\ftnbj\aenddoc\hyphhotz425\hyphcaps0\viewkind1\viewscale100 \fet0\sectd \linex0\headery709\footery709\colsx709\sectdefaultcl {\footer \pard\plain \s16\nowidctlpar
\tqc\tx4536\tqr\tx9072\pvpara\phmrg\posxr\posy0\adjustright \lang2057 {\field{\*\fldinst {\cs17 PAGE }}{\fldrslt {\cs17\lang1024 12}}}{\cs17
\par }\pard \s16\ri360\nowidctlpar\tqc\tx4536\tqr\tx9072\adjustright {
\par }}{\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl4\pnlcltr\pnstart1\pnindent720\pnhang{\pntxta )}}
{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl8
\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}\pard\plain \s1\keepn\nowidctlpar\outlinelevel0\adjustright \lang2057 {\lang1053 Bo Haglund
\par }\pard\plain \nowidctlpar\adjustright \lang2057 {Rev. E4}{\lang1053 , 2010-04-09}{
\par }\pard\plain \s1\keepn\nowidctlpar\outlinelevel0\adjustright \lang2057 {\b\fs28\lang1053
\par
\par Search Algorithms for a Bridge Double Dummy Solver
\par }\pard\plain \nowidctlpar\adjustright \lang2057 {\lang1053
\par This description is intended for anyone interested in the inner workings of a bridge double dummy solver (DDS). It describes my solver implemented in the Win32 environment as a DLL.
\par
\par }{DDS algorithm descriptions already exist, see reference list at the end. However, to my knowledge, no document exists that gives an in depth description of all algorithms covered in this document.}{\lang1053
\par
\par
\par
\par
\par {\listtext\pard\plain\b \hich\af0\dbch\af0\loch\f0 1.\tab}}\pard \nowidctlpar\jclisttab\tx0\ls16\adjustright {\b\lang1053 The basic search algorithm
\par }\pard \nowidctlpar\adjustright {\lang1053
\par The search is based on the zero window search [Pearl 1980].
\par Pseudo code for its application on DD solver search is given.
\par Cards searched are described as \'94moves\'94 in contrast to cards that are really played.\page
\par int Search(posPoint, target, depth) \{
\par if (depth==0) \{
\par tricks=Evaluate;
\par if (tricks >= target)
\par value=TRUE;
\par else
\par value=FALSE;
\par return value;
\par \}
\par else \{
\par GenerateMoves;
\par if (player_side_to_move) \{
\par value=FALSE; moveExists=TRUE;
\par while (moveExists) \{
\par Make;
\par value=Search(posPoint, target, depth-1);
\par Undo;
\par if (value==TRUE)
\par \tab goto searchExit;\tab /* Cutoff, current move recorded as \'94best move\'94 */
\par moveExists=NextMove;
\par \}
\par \}\tab /* Opponents to move */
\par else \{\tab
\par value=TRUE; moveExists=TRUE;
\par while (moveExists) \{
\par Make;
\par value=Search(posPoint, target, depth-1);
\par Undo;
\par if (value==FALSE)
\par \tab goto searchExit;\tab /* Cutoff, current move recorded as \'94best move\'94 */
\par moveExists=NextMove;
\par \}
\par \}
\par \}
\par
\par searchExit:
\par return value;
\par \}
\par
\par
\par }{The Search parameters are:
\par {\pntext\pard\plain\f3\lang2057 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \fi-360\li360\nowidctlpar\jclisttab\tx360{\*\pn \pnlvlblt\ilvl0\ls5\pnrnot0\pnf3\pnstart1\pnindent360\pnhang{\pntxtb \'b7}}\ls5\adjustright {\b posPoint - }{
a pointer to a structure containing state information for the position (deal) to be searched, e.g. leading hand, hand-to-play, cards yet to play etc.
\par {\pntext\pard\plain\f3\lang2057 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \fi-360\li360\nowidctlpar\jclisttab\tx360{\*\pn \pnlvlblt\ilvl0\ls5\pnrnot0\pnf3\pnstart1\pnindent360\pnhang{\pntxtb \'b7}}\ls5\adjustright {\b target}{
- the number of tricks the player must take.
\par {\pntext\pard\plain\f3\lang2057 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \fi-360\li360\nowidctlpar\jclisttab\tx360{\*\pn \pnlvlblt\ilvl0\ls5\pnrnot0\pnf3\pnstart1\pnindent360\pnhang{\pntxtb \'b7}}\ls5\adjustright {\b depth}{ - the current search depth.
\par }\pard \nowidctlpar\adjustright {
\par Search returns TRUE if the target is reached, otherwise FALSE.
\par }{\lang1053
\par When Search is called, depth is set to the number of cards left to play minus 4.
\par GenerateMoves generates a list of alternative moves (=cards) that can be played in the initial position whose state da
ta is pointed to by posPoint. For cards that are equivalent (e.g. AK) only the card with highest rank is generated. Card equivalence is reanalyzed after each trick.
\par }{E.g. if the hand-to-play has AQ in a suit where K was played in a previous trick, then A and Q become equivalents.}{\lang1053
\par
\par If the side of the player has the move, Search tries to find a move that meets the target, i.e that evaluates to TRUE. If such a move is found, search returns TRUE, and saves the move as \'94best\'94.
\par If the other side has the move, Search tries to find a move that defies meeting the target, i.e. that evaluates to FALSE. If such a move is found, search returns FALSE, and saves the move as \'94best\'94.
\par
\par Each move in the generated move list is handled by first calling Make, which removes the ca
rd from the position state information. Search is then recursively called with a position state that now has excluded the played card, depth has been decremented by one. For each new recursive call to Search, a card is removed from the position state info
r
mation and depth is decremented. This goes on until depth equals 0 in which case only one trick remains. The outcome of this trick is calculated by Evaluate. If the total number of tricks won by the side of the player then reaches target, Search returns T
RUE, otherwise FALSE. This result propagates upwards as Search returns for each level, Undo is called which reinstalls the searched card on this level.\line Finally, Search returns for the top level.
\par
\par This basic search algorithm is not powerful enough to terminate the search of a typical 52 cards deal in a reasonable time. To accomplish this, a number of search algorithm enhancements are required, which will be described in the following chapters.
\par \page
\par The described search algorithm only tells if a predefined target can be reached. It does not tell how many tricks that the side of the player can get. This is accomplished by repeated calls to Search:
\par
\par g = guessed number of tricks for side of the player
\par iniDepth = number of cards to play minus 4
\par upperbound = 13;
\par lowerbound = 0;
\par do \{
\par if (g==lowerbound)
\par tricks=g+1;
\par else
\par tricks=g;
\par if ((Search(posPoint, tricks, iniDepth)==FALSE) \{
\par upperbound=tricks-1;
\par g=upperbound;
\par \}
\par else \{
\par lowerbound=tricks;
\par g=lowerbound;
\par \}
\par \}
\par while (lowerbound < upperbound);
\par g=maximum tricks to be won by side of player.}{\b\lang1053
\par
\par
\par
\par {\listtext\pard\plain\s3 \b \hich\af0\dbch\af0\loch\f0 2.\tab}}\pard\plain \s3\keepn\nowidctlpar\jclisttab\tx0\ls16\outlinelevel2\adjustright \b\lang1053 {Overview of the search algorithms used in the DD solver
\par }\pard\plain \nowidctlpar\adjustright \lang2057 {\b\lang1053
\par }{\lang1053 The additional functions in the pseudo code for supporting the search speed enhancements are given in }{\i\lang1053 italics}{\lang1053 .
\par \page
\par int Search(posPoint, target, depth) \{
\par if (no_move_yet_in_trick) \{}{\cf1\lang1053
\par }{\lang1053 }{\i\lang1053 TargetTooLowOrHigh;
\par }{\lang1053 if (target_already_obtained)
\par }\pard\plain \s16\nowidctlpar\adjustright \lang2057 {\lang1053 return TRUE;
\par }\pard\plain \nowidctlpar\adjustright \lang2057 {\lang1053 else if (target_can_no_longer_be_obtained)
\par return FALSE;}{\i\lang1053
\par QuickTricks;
\par LaterTricks;
\par }{\lang1053 if (cutoff_for_player_side)
\par return TRUE;
\par else if (cutoff_for_opponent_side)
\par return FALSE;}{\i\lang1053 \line RetrieveTTresult;
\par }\pard\plain \s16\nowidctlpar\adjustright \lang2057 {\lang1053 if (transposition_table_entry_match) \{
\par }\pard\plain \nowidctlpar\adjustright \lang2057 {\i\lang1053 }{\lang1053 if (target_reached)
\par return TRUE;
\par else
\par return FALSE;
\par \}}{\i\lang1053
\par }\pard\plain \s16\nowidctlpar\adjustright \lang2057 {\lang1053 \}
\par }\pard\plain \nowidctlpar\adjustright \lang2057 {\lang1053
\par if (depth==0) \{
\par }{\i\lang1053 evalRes=Evaluate;
\par }{\lang1053 if (evalRes.tricks >= target)
\par value=TRUE;
\par else
\par value=FALSE;
\par return value;
\par \}
\par else \{
\par GenerateMoves;
\par }{\i\lang1053 MoveOrdering;
\par CheckMovesForCutoff; }{\lang1053 /* For pseudo-code, see chapter 6 */}{\i\lang1053
\par }{\lang1053 if (player_side_to_move) \{
\par value=FALSE; moveExists=TRUE;
\par while (moveExists) \{
\par Make;
\par value=Search(posPoint, target, depth-1);\tab
\par Undo;
\par if (value==TRUE) \{
\par \tab }{\i\lang1053 MergeMoveData;}{\lang1053 }{\i\lang1053
\par }{\lang1053 \tab goto searchExit;\tab /* Cutoff, current move recorded as \'94best move\'94 */
\par \}
\par }{\i\lang1053 MergeAllMovesData;
\par }{\lang1053 moveExists=}{\i\lang1053 NextMove}{\lang1053 ;
\par \}
\par \}\tab /* Opponents to move */
\par else \{\tab
\par value=TRUE; moveExists=TRUE;
\par while (moveExists) \{
\par Make;
\par value=Search(posPoint, target, depth-1);\tab
\par Undo;
\par if (value==FALSE) \{
\par \tab }{\i\lang1053 MergeMoveData;}{\lang1053
\par \tab goto searchExit;\tab /* Cutoff, current move recorded as \'94best move\'94 */
\par \}
\par }{\i\lang1053 MergeAllMovesData;}{\lang1053
\par moveExists=}{\i\lang1053 NextMove}{\lang1053 ;
\par \}
\par \}
\par \}
\par searchExit:
\par }{\i\lang1053 AddNewTTentry;
\par }{\lang1053 return value;
\par \}
\par
\par
\par }{\i\lang1053 TargetTooLowOrHigh }{\lang1053 checks the target value against the number of tricks currently won by side }{\cf1\lang1053 of the player}{\lang1053 and against number of tricks left to play.
\par It is executed at the beginning of each trick, before any card has been played.
\par }{If number of currently won tricks }{\cf1 by player\rquote s side}{ equals or exceeds target, Search returns TRUE.\line If number of currently won tricks }{\cf1 by player\rquote s side}{ plus tricks left to play is less than target Search returns FALSE.
\par Since possible winning cards for the remaining tricks are irrelevant, no winning cards are backed up at cutoff termination.}{\lang1053
\par }\pard\plain \s16\nowidctlpar\adjustright \lang2057 {\lang1053
\par }\pard\plain \nowidctlpar\adjustright \lang2057 {\i\lang1053 TargetTooLowOrHigh }{\lang1053 search enhancement is described e.g. in [Chang].
\par
\par }\pard\plain \s1\keepn\nowidctlpar\outlinelevel0\adjustright \lang2057 {\i QuickTricks}{ determines if the side to move can take one or more sure tricks. }{\lang1053
E.g. if the hand to move has an Ace in an NT contract, at least one sure trick can be taken.
\par }\pard\plain \nowidctlpar\adjustright \lang2057 {\lang1053 It is executed at the beginning of each trick, before any card has been played. A simple quick trick is also executed after the leading card of the trick is played.}{
\par }\pard\plain \s1\keepn\nowidctlpar\outlinelevel0\adjustright \lang2057 {\lang1053 Assuming that the sure tricks are won by the side to move, then the conditions for search cutoff in }{\i\lang1053 TargetTooLowOrHigh}{\lang1053
are again tested to produce further search cutoffs.
\par The detailed conditions for determination of sure tricks are described in Chapter 3.
\par }\pard\plain \nowidctlpar\adjustright \lang2057 {When quicktricks win by rank, they are backed up at cutoff termination.
\par }\pard\plain \s1\keepn\nowidctlpar\outlinelevel0\adjustright \lang2057 {\lang1053
\par The idea of }{\i\lang1053 QuickTricks }{\lang1053 is described e.g. in [Chang].
\par }\pard\plain \nowidctlpar\adjustright \lang2057 {
\par }{\i LaterTricks}{ determines if the opponents of the side to move can take one or more tricks at their turn or later in the play. It is also executed at the beginning of each trick and uses similar criteria for search cutoff as }{\i Quicktricks}{.
\par When quicktricks win by rank, they are backed up at cutoff termination.\line For a detailed description, see Chapter 4.
\par }\pard\plain \s1\keepn\nowidctlpar\outlinelevel0\adjustright \lang2057 {\lang1053
\par }{\i\lang1053 RetrieveTTresult }{\lang1053 scans the set of positions in the transposition table to see if there is a match against the current position.
\par It is executed at the beginning of each trick, before any card has been played. After detection of a transposition table entry match, the winning ranks necessary in the remaining cards are backed up. \line For details, see Chapter 7.
\par }\pard\plain \nowidctlpar\adjustright \lang2057 {\fs20\lang1053
\par }{\i Evaluate }{returns evalResult which updates the position state information. evalResult contains:
\par {\listtext\pard\plain\f3\lang2057 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \fi-360\li780\nowidctlpar\jclisttab\tx780\ls6\adjustright {\b evalResult.tricks}{, the number of tricks won by the side of the player, and
\par {\listtext\pard\plain\f3\lang2057 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}{\b evalResult.winRank}{ which includes the card in the last trick that won by rank.
\par }\pard \nowidctlpar\adjustright {E.g. if the last trick includes the spades A, Q, 9 and 3, evalResult.winRank returns spade A. But
\par if the last trick was won without a win by rank as for spade 5 (leading and winning card), heart A, heart Q, heart 5, no winning rank is returned. }{\lang1053
\par
\par }{Keeping record of cards that win by ranks and subsequently using this information to ignore ranks for other cards is discussed in the Partition Search concept invented by Matthew Ginsberg and described in his paper [Ginsberg]. }{\lang1053
\par
\par }{\i MoveOrdering. }{The alternative cards created by MoveGenerate are sorted, with the cards most likely to terminate the search fastest being sorted first in the move list.The allocation of card weights are described in detail in Chapter 5.}{\lang1053
\par
\par }{\i\lang1053 CheckMovesForCutoff }{\lang1053 checks if any of the moves just generated will lead to a position that can be found in the transposition table. If so, an immediate S
earch return can be done, saving unnecessary search effort. This is further described in Chapter 6.
\par
\par To my knowledge this is not described anywhere for usage in a DDS. It is described in [Plaat et al.] and named Enhanced Transposition Cutoffs.
\par
\par At move search cutoff,}{\i\lang1053 MergeMoveData }{\lang1053
collects the union of the backed up accumulated winning ranks and the rank of the made move, assuming it did win by rank. The state data of the position is updated with the collected information.
\par
\par }{\i\lang1053 MergeAllMovesData }{\lang1053 collects the un
ion of the backed up accumulated winning ranks, the previous accumulated winning ranks of the alternative moves generated on this depth, and the rank of the made move, assuming it did win by rank. When all alternative moves have been searched without a cu
toff, the state data of the position is updated with the collected information.
\par
\par The information from }{\i\lang1053 MergeMoveData}{\lang1053 and }{\i\lang1053 MergeAllMovesData}{\lang1053 is later stored in the transposition table and determines which ranks that are essential when }{\i\lang1053 RetrieveTTresult}{\lang1053 scans th
e set of positions in the transposition table. A match of ranks with the current position is only needed for winning ranks. See Chapter 7.}{\strike\cf6\lang1053
\par }{\lang1053
\par }{\i\lang1053 AddNewTTentry }{\lang1053 adds the evaluated position as a new entry in the transposition table. See Chapter 7.
\par
\par }{\i\lang1053 NextMove }{\lang1053 filters out all \'94small\'94 cards except one per hand/suit combination. A \'94small\'94 card is a backed up card that is shown to never win by rank. The rest of the \'94small\'94
card moves for the hand/suit combination are never searched, leading to a smaller search tree.\line This search enhancement was suggested by Hans Kuijf [Kuijf].
\par
\par
\par
\par {\listtext\pard\plain\b \hich\af0\dbch\af0\loch\f0 3.\tab}}\pard \nowidctlpar\jclisttab\tx0\ls16\adjustright {\b\lang1053 The Quick Tricks cutoff algorithm
\par }\pard \nowidctlpar\adjustright {\b\lang1053
\par }{\lang1053 The number of tricks that can immediately be taken by the side to play the leading card of the trick consists of:
\par {\pntext\pard\plain\hich\af0\dbch\af0\loch\f0 a)\tab}}\pard \fi-360\li360\nowidctlpar\tx360{\*\pn \pnlvlbody\ilvl0\ls3\pnrnot0\pnlcltr\pnstart1\pnindent360 {\pntxta )}}\ls3\adjustright {\lang1053 The number of tricks that can be taken
by the hand-to-play, and
\par {\pntext\pard\plain\hich\af0\dbch\af0\loch\f0 b)\tab}}\pard \fi-360\li360\nowidctlpar\tx360{\*\pn \pnlvlbody\ilvl0\ls3\pnrnot0\pnlcltr\pnstart1\pnindent360 {\pntxta )}}\ls3\adjustright {\lang1053
The number of tricks that can be taken by the partner of the hand-to-play
\par }\pard \nowidctlpar\adjustright {\lang1053 At return by }{\i\lang1053 QuickTricks}{\lang1053 , the position state information is updated with the winning ranks found.
\par
\par }{Of course, in order to add b), there must be an entry from the hand-to-play to the partner\rquote s hand.
\par
\par For each \'94s\'94 (suit) the following is calculated:}{\lang1053
\par
\par If the hand-to-play is the only hand having cards in s, and the opponents have no trumps (when s is not trumps), the number of quick tricks for s is the suit length of the hand-to-play.
\par
\par If the opponents have no trumps, a check is made to see if quick tricks equal to the maximum of the trumps length for leading hand and the partner causes a search cutoff.
\par
\par If the hand-to-play has a card in a suit where the partner has a winning rank, and partner is the only hand having cards in s:
\par The number of quick tricks for s is the suit length of partner.
\par
\par Else:
\par If the winning rank is in hand-to-play, and the opponents can
not ruff, the number of quick tricks is incremented by one. Further, if the second best rank is also in hand-to-play, and the opponents cannot still ruff, the quick tricks is again incremented by one.
\par
\par Else:
\par If the winning rank is in partner and partner has winning rank as entry, the same applies for the partner as for the hand-to-play described above.
\par
\par }{If it is a trump contract, the first suit to be investigated is the trump suit. Then if there are trump suit quick tricks for the side to play, those are cashed and quick tricks incremented accordingly.
\par \line When the other suits are investigated for quick tricks, only the remaining opponent trump cards need to be considered.\line }{\lang1053
\par }{The quick tricks are then summarized from each suit, and the total calculated}{\lang1053 .
\par
\par A simple Quick Tricks algorithm is also executed after the leading card of the trick has been played:
\par
\par A quick trick is gained either if the hand-to-play or the partner can win the current trick with the card having the highest rank of the suit played, or if hand-to-play or the partner can win the trick by ruffing.
\par
\par The idea to also execute Quick Tricks after the leading card has been played was given by Hans Kuijf [Kuijf].
\par
\par
\par
\par {\listtext\pard\plain\b \hich\af0\dbch\af0\loch\f0 4.\tab}}\pard \nowidctlpar\jclisttab\tx0\ls16\adjustright {\b\lang1053 The Later Tricks cutoff algorithm}{\lang1053
\par }\pard \nowidctlpar\adjustright {\lang1053
\par Check for search cutoff if the opponents to the trick leading hand have at least a sure trick later.
\par
\par }{\b\lang1053 If not trump contract:\line
\par {\pntext\pard\plain\hich\af0\dbch\af0\loch\f0 1)\tab}}\pard \fi-360\li360\nowidctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls17\pnrnot0\pndec\pnstart1\pnindent360\pnhang{\pntxta )}}\ls17\adjustright {\lang1053
The opponents have at least a sure trick if for all suits where the trick leading hand has a card, the side of the leading hand does not have the highest rank.\line
More than one sure trick can be taken by the opponents if they possess the winning rank for more than one suit, or\line
\par {\pntext\pard\plain\hich\af0\dbch\af0\loch\f0 2)\tab}}\pard \fi-360\li360\nowidctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls17\pnrnot0\pndec\pnstart1\pnindent360\pnhang{\pntxta )}}\ls17\adjustright {\lang1053
Assume that all suits where the side of the trick leading hand has the winning rank give maximum possible number of tricks, i.e. that the sure trick number is the sum of the\line maximum lengths of these suits.\line
If this still cannot cause a cutoff for the trick leading side, allocate one sure trick for the opponents side.
\par }\pard \nowidctlpar\adjustright {\lang1053
\par }{\b\lang1053 If trump contract:
\par }{\lang1053
\par Quick tricks for the opponents of the leading hand are added when the opponents have one or more winning trumps. This idea was given by Pedja Stanojevic [Stanojevic].\line \line
1) If the opponent side have all the trumps, the number of sure tricks is the maximum suit length\line length, or\line
\par 2) If the opponent side has the highest trump, they have 1 sure trick. If they also have the second\line highest trump, they have 2 sure tricks, or\line \line 3) If the opponent side has the second highest trump plus at least one tr
ump more behind the \line hand with the highest trump, the opponent side has 1 sure trick.
\par \page
\par {\listtext\pard\plain\s3 \b \hich\af0\dbch\af0\loch\f0 5.\tab}}\pard\plain \s3\keepn\nowidctlpar\jclisttab\tx0\ls16\outlinelevel2\adjustright \b\lang1053 {The Move Ordering algorithm
\par }\pard\plain \nowidctlpar\adjustright \lang2057 {\b\lang1053
\par }{\lang1053 The weight of a card in the move list is affected by the suit and the rank of the card and by the other cards in the same trick.
\par The weights of the cards in the move list are used to sort them, }{with the cards having the highest weight being sorted first in the list}{\lang1053 .
\par
\par If the hand-to-play is trick leading hand or void in the suit played by leading hand, the card with the highest weight
for each present suit will get a high additional bonus weight. After list resorting, those cards will occupy the first positions in the move list.
\par
\par Two "best moves" are maintained for each searched depth, one for an alpha-beta cutoff and one at a Transpos
ition Table entry match. At an alpha-beta cutoff, the move causing the cutoff overwrites the present "best move" for the current depth. When a Transposition Table entry is created, the current best move is stored in that entry if:
\par The target is met and the leading hand belongs to the player\rquote s side, or target is not met and the leading hand belongs to the other side. Otherwise the best move is not stored in the Transposition Table entry.
\par At a Transposition Table entry match, }{its stored best move will be best move for the current search depth.}{\lang1053
\par
\par By \'94card move\'94 in the following pseudo code is meant the card by the hand-to-play that is getting a weight in the move list. }{\cf1\lang1053 The \'94card rank\'94 is a value in the range 2-14, corresponding to the card ranks 2 to the Ace.
\par
\par }{\lang1053 For the determination of the weight, it is calculated whether or not the current card move is a card that wins the current trick for the side of the hand-to-play, assuming that both sides play their optimum cards.
\par
\par If the hand-to-play is void in the trick lead suit, the suit selected for the discard gets the following\line bonus:
\par
\par suitAdd = ((suit length) * 64)/36;
\par
\par If the suit length is 2, and the hand-to-play has the next highest rank of the suit, the bonus \line (suitAdd) is subtracted by 2. }{\cf1\lang1053
\par }{\fs20\lang1053
\par
\par }\pard\plain \s2\keepn\nowidctlpar\outlinelevel1\adjustright \lang2057 {\ul\lang1053 Hand-to-play is trick leading hand
\par }\pard\plain \nowidctlpar\adjustright \lang2057 {\lang1053
\par The contribution of the suit to the weight:
\par
\par }\pard\plain \s16\nowidctlpar\adjustright \lang2057 {\lang1053 suitWeightDelta = suitBonus \endash ((countLH+countRH) * 32)/15
\par }\pard\plain \nowidctlpar\adjustright \lang2057 {\lang1053
\par suitBonus has the initial value 0, changed if conditions below apply:
\par
\par If trump contract, and the suit is not trump, then there is a (negative) suitBonus change of \endash 10 if
\par {\pntext\pard\plain\f3 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \fi-360\li360\nowidctlpar\tx360{\*\pn \pnlvlblt\ilvl0\ls2\pnrnot0\pnf3\pnindent360 {\pntxtb \'b7}}\ls2\adjustright {\lang1053 LHO is void and LHO has trump card(s), or
\par {\pntext\pard\plain\f3 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \fi-360\li360\nowidctlpar\tx360{\*\pn \pnlvlblt\ilvl0\ls2\pnrnot0\pnf3\pnindent360 {\pntxtb \'b7}}\ls2\adjustright {\lang1053 RHO is void and RHO has trump card(s)
\par }\pard \nowidctlpar\tx360\adjustright {\lang1053 \line If RHO has either the highest rank of the suit played by hand-to-play or the next highest rank,
\par then there is a suitBonus change of \endash 18.
\par
\par If it is a trump contract, the suit is not trump, own hand has a singleton, own hand has at least one trump, partner has the highest rank in the suit and at least a suit length of 2, then there is a suitBonus change of +16.
\par }\pard \nowidctlpar\adjustright {\lang1053
\par countLH = (suit length of LHO) * 4, if LHO is not void in the suit,
\par countLH = (depth + 4), if LHO is void in the suit
\par
\par countRH = (suit length of RHO) * 4, if RHO is not void in the suit,
\par countRH = (depth + 4), if RHO is void in the suit
\par
\par Suits are thus favoured where the opponents have as few move alternatives as possible.
\par
\par
\par if (trick winning card move) \{
\par if (one of the opponents has a singleton highest rank in the suit)
\par weight = suitWeightDelta + 40 \endash (rank of card move)
\par else if (hand-to-play has highest rank in suit) \{
\par if (partner has second highest rank in suit)
\par weight = suitWeightDelta + 50 \endash (rank of card move)
\par else if (the card move is the card with highest rank in the suit)
\par weight = suitWeightDelta + 31
\par else
\par weight = suitWeightDelta + 19 \endash (rank of card move)
\par \}
\par else if (partner has highest rank in suit) \{
\par if (hand-to-play has second highest rank in suit)
\par weight = suitWeightDelta + 50 \endash (rank of card move)
\par else
\par weight = suitWeightDelta + 35 \endash (rank of card move)
\par \}
\par else if (hand-to-play has second highest rank together with equivalent card(s) in suit)
\par weight = suitWeightDelta + 40
\par else
\par weight = suitWeightDelta + 30 \endash (rank of card move)
\par if (the card move is \'94best move\'94 as obtained at alpha-beta cutoff)
\par weight = weight + 52;
\par if (the card move is \'94best move\'94 as obtained from a Transposition Table entry match)
\par weight = weight + 11;
\par \}
\par else \{\tab /* Not a trick winning move */
\par if (either LHO or RHO has singleton in suit which has highest rank)
\par weight = suitWeightDelta + 29 \endash (rank of card move)
\par else if (hand-to-play has highest rank in suit) \{
\par if (partner has second highest rank in suit)
\par weight = suitWeightDelta + 44 \endash (rank of card move)
\par else if (the card move is the card with highest rank in the suit)
\par weight = suitWeightDelta + 25
\par else
\par weight = suitWeightDelta + 13 \endash (rank of card move)
\par \}
\par else if (partner has highest rank in suit) \{
\par if (hand-to-play has second highest rank in suit)
\par weight = suitWeightDelta + 44 \endash (rank of card move)
\par else
\par weight = suitWeightDelta + 29 \endash (rank of card move)
\par \}
\par else if (hand-to-play has second highest rank together with equivalent card(s) in suit)
\par weight = suitWeightDelta + 29
\par else
\par weight = suitWeightDelta + 13 \endash (rank of card move)
\par if (the card move is \'94best move\'94 as obtained at alpha-beta cutoff)
\par weight = weight + 20;
\par if (the card move is \'94best move\'94 as obtained from a Transposition Table entry match)
\par weight = weight + 9;
\par \}
\par
\par
\par }{\ul\lang1053 Hand-to-play is left hand opponent (LHO) to leading hand
\par }{\lang1053
\par if (trick winning card move) \{
\par if (hand-to-play void in the suit played by the leading hand) \{
\par if (trump contract and trump is equal to card move suit)
\par }{\cf1\lang1053 weight = 30 - (rank of card move) + suitAdd
\par else
\par weight = 60 - (rank of card move) + suitAdd
\par \}
\par else if (lowest card for partner to leading hand is higher than LHO played card)
\par weight = 45 - (rank of card move)
\par else if (RHO has a card in the leading suit that is higher than the trick leading card\line but lower than the highest rank of the leading hand)
\par weight = 60 - (rank of card move)
\par else if (LHO played card is higher than card played by the leading hand) \{
\par if (played card by LHO is lower than any card for RHO in the same suit)
\par weight = 75 - (rank of card move)
\par else if (played card by LHO is higher than any card in the same suit for the leading hand)
\par weight = 70 - (rank of card move)
\par else \{
\par }{\lang1053 if (LHO move card has at least one equivalent card) \{
\par }{\cf1\lang1053 weight = 60 - (rank of card move)}{\lang1053
\par else
\par }{\cf1\lang1053 weight = 45 - (rank of card move)
\par \}
\par \}
\par else if (RHO is not void in the suit played by the leading hand) \{
\par }{\lang1053 if (LHO move card has at least one equivalent card) }{\cf1\lang1053 }{\lang1053 }{\cf1\lang1053
\par weight = 50 - (rank of card move)
\par else
\par weight = 45 - (rank of card move)
\par \}
\par else
\par weight = 45 - (rank of card move)
\par \}
\par else \{\tab /* card move is not trick winning */
\par }{\lang1053 if (hand-to-play void in the suit played by the leading hand) \{
\par if (trump contract and trump is equal to card move suit)}{\cf1\lang1053
\par }{\lang1053 }{\cf1\lang1053 weight = 15 - (rank of card move) + suitAdd
\par else
\par weight = - (rank of card move) + suitAdd
\par \}
\par else if (lowest card for partner to leading hand or for RHO in the suit played is higher \line than played card for LHO)
\par weight = - (rank of card move)
\par else if (LHO played card is higher than card played by the leading hand) \{
\par }{\lang1053 if (LHO move card has at least one equivalent card)
\par }{\cf1\lang1053 weight = 20 - (rank of card move)
\par else}{\lang1053
\par }{\cf1\lang1053 weight = 10 - (rank of card move)
\par \} }{\lang1053
\par else
\par }{\cf1\lang1053 weight = - (rank of card move)
\par \} }{\lang1053 }{\cf1\lang1053 }{\lang1053 }{\cf1\lang1053
\par }{\lang1053
\par
\par
\par }\pard\plain \s2\keepn\nowidctlpar\outlinelevel1\adjustright \lang2057 {\ul\lang1053 Hand-to-play is partner to trick leading hand
\par }\pard\plain \nowidctlpar\adjustright \lang2057 {\lang1053
\par if (trick winning card move) \{
\par if (hand-to-play void in the suit played by the leading hand) \{
\par if (card played by the leading hand is highest so far) \{
\par if (card by hand-to-play is trump and the suit played by the leading hand is not trump)
\par }{\cf1\lang1053 weight = 30 - (rank of card move) + suitAdd
\par else
\par weight = 60 - (rank of card move) + suitAdd
\par \}
\par else if (hand-to-play is on top by ruffing)
\par weight = 70 - (rank of card move) + suitAdd
\par else if (hand-to-play discards a trump but still loses)
\par weight = 15 - (rank of card move) + suitAdd
\par else }{\lang1053
\par }{\cf1\lang1053 weight = 30 - (rank of card move) + suitAdd
\par \}
\par else }{\lang1053
\par }{\cf1\lang1053 weight = 60 - (rank of card move)
\par \}
\par else \{ /* card move is not trick winning */
\par }{\lang1053 if (hand-to-play void in the suit played by the leading hand) \{
\par }{\cf1\lang1053 if (hand-to-play is on top by ruffing)
\par weight = 40 - (rank of card move) + suitAdd
\par else if (hand-to-play underruffs */
\par weight = -15 - (rank of card move) + suitAdd
\par else
\par weight = - (rank of card move) + suitAdd
\par \}
\par else \{
\par if (the card by hand-to-play is highest so far) \{
\par if (rank of played card is second highest in the suit)
\par weight = 25
\par else }{\lang1053 if (hand-to-play card has at least one equivalent card)
\par }{\cf1\lang1053 weight = 20 - (rank of card move)
\par else
\par weight = 10 - (rank of card move)
\par \}
\par else
\par weight = -10 - (rank of card move)
\par \}
\par \}}{\lang1053
\par
\par }{\ul\lang1053 Hand-to-play is right hand opponent (RHO) to leading hand
\par
\par }{\lang1053 if (hand-to-play is void in leading suit) \{
\par if (LHO has current highest rank of the trick) \{
\par if (card move ruffs)
\par weight = 14- (rank of card move) + suitAdd
\par else
\par weight = 30- (rank of card move) + suitAdd
\par }{\fs20\lang1053 \}
\par }{\lang1053 else if (hand-to-play ruffs and wins)
\par }{\fs20\lang1053 }{\lang1053 weight = 30- (rank of card move) + suitAdd
\par else if (card move suit is trump, but not winning)
\par weight = - (rank of card move)
\par else
\par weight = 14- (rank of card move) + suitAdd
\par \}
\par else if (LHO has current winning move) \{
\par if (RHO ruffs LHO\rquote s winner)
\par weight = 24 - (rank of card move)
\par else
\par weight = 30- (rank of card move)
\par \}
\par else if (card move superior to present winning move not by LHO) \{ }{\fs20\lang1053
\par }{\lang1053 weight = 30- (rank of card move)
\par else \{
\par if (card move ruffs but still losing)
\par weight = - (rank of card move)
\par else
\par weight = 14- (rank of card move)
\par \}}{\fs20\lang1053
\par }{\lang1053
\par }\pard \fi1304\nowidctlpar\adjustright {\lang1053
\par \page
\par {\listtext\pard\plain\b \hich\af0\dbch\af0\loch\f0 6.\tab}}\pard \nowidctlpar\jclisttab\tx0\ls16\adjustright {\b\lang1053 Algorithm to try early cutoff for generated moves
\par }\pard \nowidctlpar\adjustright {\b\lang1053
\par }\pard\plain \s1\keepn\nowidctlpar\outlinelevel0\adjustright \lang2057 {\lang1053 After generating moves at the end of a trick, they are each checked to see if one of them will lead to a position that already is stored in the Transposition Table.
\par Due to the processing overhead, this check is only made if the depth is 33 or more (i.e there are at least 33 cards in the position).
\par }\pard\plain \nowidctlpar\adjustright \lang2057 {\lang1053 Pseudo code:
\par }\pard\plain \s1\keepn\nowidctlpar\outlinelevel0\adjustright \lang2057 {\lang1053
\par moveExists = TRUE;
\par }\pard\plain \nowidctlpar\adjustright \lang2057 {\lang1053 while (moveExists) \{
\par Make;
\par depth = depth \endash 1;
\par RetrieveTTresult;
\par if (hit in the transposition table) \{
\par Search returnsTRUE if value of the position is TRUE and player side to move, or
\par FALSE if value of the position is FALSE and opponents side to move.
\par Else: Increment weight of move with 100.
\par \}
\par depth = depth +1;
\par Undo;
\par moveExists = NextMove;
\par \}
\par
\par The performance improvement for this enhancement is less than for the other enhancements. The number of generated nodes is roughly decreased by 10% and the search time is slighly decreased.
\par
\par
\par
\par {\listtext\pard\plain\b \hich\af0\dbch\af0\loch\f0 7.\tab}}\pard \nowidctlpar\jclisttab\tx0\ls16\adjustright {\b\lang1053 Storage and retrieval of position state data in the Transposition Table
\par }\pard\plain \s16\nowidctlpar\tx360\adjustright \lang2057 {\lang1053 }{\b\lang1053 \line }{\cf1\lang1053
Positions stored in the Transposition Table always consist of completed tricks. Positions stored start at depth=4, then 8,12, and so on. The information stored is information on won cards, th
e suit lengths of the hands, the hand to play the leading card in the position and upper and lower bounds for the number of future tricks to be taken by the side of the player.
\par
\par Starting from issue 1.1.8, each \'94winning cards node\'94 contain all winning cards for one suit after an idea by Jo\'ebl Bradmetz. This new solution is faster.}{\b\cf1 \line }{\b\cf1\lang1053
\par }\pard\plain \nowidctlpar\adjustright \lang2057 {\b\lang1053 7.1 Transposition Table storing winning card ranks
\par }\pard \nowidctlpar\tx360\adjustright {\b\lang1053
\par }{\lang1053 For the outcome of played tricks, only card ranks that are winning due to their ranks matter:
\par Assume that the last two tricks of a deal without trumps looks like the following:
\par Trick 12: Leading hand North plays heart A, East, South and West follow by hearts Q, 9 and 7 respectively.
\par Trick 13: North then leads spade A, the other hands plays diamonds J, 8,3 in that order.
\par
\par In trick 12, heart A wins by rank. In trick 13, spade A wins but not by rank.
\par The sequence of cards could have been the following without changing the outcome:
\par Trick 12: heart A, heart x, heart x, heart x
\par Trick 13: spade x, diamond x, diamond x, diamond x
\par where x is any rank below lowest winning rank.
\par
\par The cards that win by rank are recorded during the search and backed up similarly to the search value. If a card wins by rank and there are equivalent cards, e.g. only spade A is searched from a sequence o
f AKQ, then also the other cards K and Q must be recorded as having won by rank.
\par
\par The cards winning by rank are stored in the Transposition Table as relative ranks, however any rank larger than the lowest winning rank in the suit are also stored as \'94winning ranks\'94
. Using relative ranks rather than absolute ranks considerably increases the number of positions that match this Transposition Table entry:\line As an example, assume that there are only 4 cards left in a suit, A, Q, 9, 7 where each hand has one card in
the suit. Then any combination of ranks, e.g. 8, 6, 3, 2 that preserves the relative order of ranks between hands will cause a match.
\par
\par In the state position information absolute ranks are used, it is only in the Transposition Table where the ranks are stored as relatives.
\par
\par }\pard \fi-420\li420\nowidctlpar\tx420\adjustright {\b
\par }\pard \nowidctlpar\adjustright {\b 7.2 Backing up the winning ranks
\par }\pard \nowidctlpar\tx420\adjustright {\b
\par }{At the search termination, either at the last trick or at a cutoff, the cards that have won by rank are backed up in the search tree together with the search value.
\par As this information propagates upwards, it is aggregated with backed up information from other tree branches.
\par At a search cutoff, }{\i\lang1053 MergeMoveData }{\lang1053 merges the information (V is a union):
\par }{
\par }\pard \fi-420\li420\nowidctlpar\tx420\adjustright {(winning ranks of all suits for current depth) = (winning ranks of all suits for depth - 1) V (possible winning rank for the current move causing the cutoff)
\par
\par For each new move not causing cutoff, }{\i\lang1053 MergeAllMovesData }{\lang1053 merges:
\par
\par }{(winning ranks of all suits for current depth) = (winning ranks of all suits for current depth) V (winning ranks of all suits for depth - 1) V (possible winning rank for the current move)
\par }\pard \nowidctlpar\tx420\adjustright {
\par }\pard \fi-420\li420\nowidctlpar\tx420\adjustright {\b
\par 7.3\tab }{\b\lang1053 Checking the current position for a Transposition Table entry match
\par
\par }\pard \nowidctlpar\tx420\adjustright {\cf1\lang1053 The "Transposition Table" has a tree structure rather than a table, consisting of 2 interconnected trees.
\par For deciding if there is a match, input is the position state data, including the cards left to play and the current leading hand.
\par There are \'94root pointers\'94 per number of tricks left and per leading hand which each points to the root of a tree of \'94suit lengths combination\'94
nodes. Each such node includes a 64-bit code that uniquely defines one combination of suit lengths for the hands. Th
e nodes are ordered such that the value of the 64-bit code in a parent node is higher than the 64-bit code of its left child but lower than the 64-bit code of its right child. So to find the node with the suit lengths combination for the actual position,
a binary search is made. The basic binary search algorithm is described in [Knuth].
\par Each \'94suit length combination node\'94 points to the root of a tree consisting of \'94winning cards nodes\'94, ie. cards that win by rank. (So the Transposition Table is really a number of trees, a forest.)
\par When a position is checked for a possible Transposition Table match, a tree branch is selected consisting of 4 subsequent \'94winning cards nodes\'94, each \'94winning cards node\'94 includes an aggregate of all winning cards for one suit. Th
is branch is followed as long as the \'94winning cards\'94 also can be found in the current position. (Note that the ranks of the \'94winning card nodes\'94
are relative, so the ranks of the current position must first be translated from absolute to relative ranks.) When the \'94winning cards node\'94 no longer matches with the current position and there is no other alternative \'94winning cards node\'94
that fits, then the search backs up and tries an alternative \'94winning cards node\'94 on a higher level.
\par \line When the last of the 4 subsequent \'94winning cards nodes\'94 containing clubs is reached, it points to a \'94set of positions node\'94. Its stored upper and lower value bounds are checked against the number of tricks won so far by the player
\rquote s side and the target value. The following conditions are then checked, assuming that it is the North/South side that is the player\rquote s side:
\par
\par If the sum of the stored lower value bound and the number of tricks won so far for the player\rquote s side is equal or larger than target, then target can be reached for the player\rquote
s side in the current position. Search on this depth is terminated and TRUE is returned.
\par
\par If the sum of the stored upper value bound and the number of tricks won so far for the player\rquote s side is less than target, then reaching target can be prevented by the opponents to the player\rquote
s side in the current position. Search on this depth is terminated and FALSE is returned.
\par
\par If instead it is East/West that is the player\rquote s side, the following conditions apply:
\par
\par If the sum of number of tricks remaining and the number of tricks won so far for the player\rquote s side minus the upper value bound is equal or larger than target, then target can be reached for the player\rquote
s side in the current position. Search on this depth is terminated and TRUE is returned.
\par
\par If the sum of number of tricks remaining and the number of tricks won so far for the player\rquote s side minus the lower value bound is less than target, then reaching target can be prevented by the opponents to the player\rquote
s side in the current position. Search on this depth is terminated and FALSE is returned.
\par
\par For all other cases, the search continues for the current depth.
\par
\par For example, take the previous example with 2 tricks remaining with spade rank order 1 at North. (Rank order 1 is highest rank.) The hearts have
rank orders 1 at North, 2 at East, 3 at South and 4 at West. The diamond rank orders are orders 1 at East, 2 at South and 3 at West. North is leading hand.
\par The \'94root pointer\'94 is now defined by the number of tricks remaining (=2) and North as leading hand.
\par The \'94root pointer\'94 points to the root node of its \'94suit lengths combination\'94
tree. The 64-bit integer coded from the suit lengths for all suits and hands is now searched within the tree. When the node is found with matching 64-bit suit lengths code, this node will point to the root of its \'94winning card\'94 tree.
\par This pointer points to a "winning cards node" containing spade rank order 1 at North which fits with the current position. This \'94winning cards node\'94
points to another "winning cards node" containing hearts rank orders 1 at North and 2 at East which also fits the current position. Next \'94winning cards node\'94
pointed to contains diamonds order 1 at South, which does not match the current position. However, there is an alternative \'94winning cards node\'94 that has diamonds order 1 at East, which fits. (If there had been no alternative \'94winning cards node
\'94 which fitted, the search had backed up to the previous \'94winning cards node\'94 to see if there was an alternative \'94winning cards node\'94 on this level which also fitted.) The next \'94winning cards node\'94
pointed to is for clubs. This node is empty, which fits the current position which have no clubs.
\par This \'94winning cards node\'94 points to a "set of positions node\'94 which have upper and lower value bounds defined. The conditions for these bounds are assumed to be fulfilled causing search termination on this depth, as described earlier.
\par
\par The usage of upper and lower value bounds in transposition tables is described in [Chang] and [Kupferschmid, Helmert].}{\b\lang1053
\par }\pard \nowidctlpar\adjustright {\b\lang1053
\par
\par }{\pard\plain \nowidctlpar\adjustright \f1\fs20\lang1053 {\object\objemb\objw9932\objh8477\objscalex98\objscaley98{\*\objclass Word.Picture.8}{\*\objdata 01050000020000000f000000576f72642e506963747572652e3800000000000000000000b20000
d0cf11e0a1b11ae1000000000000000000000000000000003e000300feff0900060000000000000000000000010000000100000000000000001000000200000001000000feffffff0000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
fffffffffffffffffdffffff1b000000fefffffffeffffff05000000060000000700000008000000090000000a0000000b000000feffffff0d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a000000feffffff3c0000001d0000001e00
00001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b000000fefffffffeffffff
3e0000003f0000004000000041000000420000004300000044000000450000004600000047000000feffffff490000004a0000004b0000004c0000004d0000004e0000004f000000feffffff51000000520000005300000054000000550000005600000057000000feffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffff52006f006f007400200045006e00740072007900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016000500ffffffffffffffff040000000709020000000000c00000000000004600000000000000000000000090b1
f73983d8ca0103000000400100000000000001004f006c00650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000201ffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000
0000000000000000000000001400000000000000440061007400610000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0002010100000003000000ffffffff0000000000000000000000000000000000000000000000000000
0000000000000000000004000000001000000000000031005400610062006c006500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e000201ffffffffffffffffffffffff000000000000000000000000000000000000000000000000
0000000000000000000000000c0000001c1d000000000000feffffff02000000fefffffffefffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff010000020000000000000000000000000000000038899303000000000000000000000000000000000000000000000000000000000000000000000000000000000100feff030a0000ffffffff0709020000000000c0000000000000460a00
0000576f72642d62696c64000a0000004d53576f7264446f63000f000000576f72642e506963747572652e3800f439b27100000000000000000000000000000000000000000000000000000000000000000000000000cb3b0000422a00000000000000000300000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000010000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffff3c0000003c00000060150c0660150c0600000000000000006015
0c06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000716000000000000192b0180ffffffff00000000000000000000000000000000000000000000000098670000ffffffffffffffff0100000001000000
18000000ffffffff1800000000000000010000000200000000000000006f000071000071f0dd030016020000440064000000000000000200000000000000000000000000de024e023802380200000000000000000000000000000000000000000000000000000000000000000f0004f03c000000b2040af0080000003004
0000000a000043000bf018000000044107000000810111000010bf0100001000ff0100000800000010f004000000000000c0320007f0860100000304bd0271d6ceffbe413ae425c4c635b470ff0062010000040000004400000000002f0160211bf05a010000bd0271d6ceffbe413ae425c4c635b470ec010000feff0000
ffff0000970001007a000100181d0700e8b705002801000000fe789c6d91bd4a034110c7ff3bb7d124063d35a451c26191548af8043e805aa8905af422575c0e72c1235adb585909f63e84858d2f213e8485205aa8b8cecc2646c181b99dcfdfccee195480e00d4009cb10a9b3b6a6e6d08463b1ea77b2fed12cb693c37e
9667dd41247e89e333e4dc9713ab4667b856c207859856d21dc9d710adec0df3419c025be5ee3950450b17467232e1f1691196ed55233b006424e5490f4e41b8d46abb8985fd248df368272ea2dd2c3de8e1f6e6a5b8678dd65f0ba17b92515245e74f98b2d527e954a16925a1cce73b47033f8a7c3cd0ea253bc495eef9
5fafd5f3f917632c63b6cf07ca6e2ab1618f718290bdc95e62d5697e145bd358c8ba519558a014f0eb9ea293f4d0460d8d51257ebaffde543ada46fe9e7f577fb76f07f548500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012000f000a0001005b000f0002000000000000002400
0040f1ff02002400000006004e006f0072006d0061006c0000000200000004006d481d0400000000000000000000000000000000000042004140f2ffa1004200000019005300740061006e00640061007200640073007400790063006b0065007400650063006b0065006e0073006e006900740074000000000000000000
0000000000000000180100001d01000022010000270100002c01000031010000870100008c010000910100009f010000ad01000081020000860200008b02000090020000950200009b020000a1020000a7020000ad020000b3020000b9020000bf020000c0020000f90200002103000001000000000000000000ffffffff
a80400000000000001000000000000000000ffffffffbb0400000000000001000000000000000000ffffffffb90400000000000001000000000000000000ffffffffb80400000000000001000000000000000000ffffffffb50400000000000001000000000000000000ffffffffb7040000000000000100000000000000
0000ffffffffc10400000000000001000000000000000000ffffffffb30400000000000001000000000000000000ffffffffbd0400000000000001000000000000000000ffffffffac0400000000000001000000000000000000ffffffffad0400000000000001000000000000000000ffffffff51040000000000000100
0000000000000000ffffffffba0400000000000001000000000000000000ffffffffbc0400000000000001000000000000000000ffffffffbf0400000000000001000000000000000000ffffffffc00400000000000001000000000000000000ffffffffdb0400000000000001000000000000000000ffffffffde040000
0000000001000000000000000000ffffffffdf0400000000000001000000000000000000ffffffffe00400000000000001000000000000000000ffffffffe10400000000000001000000000000000000ffffffffe20400000000000001000000000000000000ffffffffe304000000000000ffffffff000000000100ffff
ffff000000000000000001000000000000000000ffffffffe8040000000000001700000001000000000000000000000000000000000000000000180100001d01000022010000270100002c01000031010000870100008c010000910100009f010000ad01000081020000860200008b02000090020000950200009b020000
a1020000a7020000ad020000b3020000b9020000bf020000c0020000f9020000fc0200000000000000000100000000000200000000000300000000000400000000000500000000000600000000100700000000000800000000000900000000000a00000000000b00000000000c00000000000d00000000000e0000000000
0f0000000000100000000000110000000000120000000000130000000000140000000000150000000000160000000000170000000008180000000000ffff0000000000000000210300000700001400000000ffffffff010000000420ffff0100000000000000000021030000000000000000000400002107000006000000
00040000ac0600002107000007000000090000000004000020070000080000000f0000f06c000000000006f0180000000208000002000000d80000000100000001000000eb0000001f0001f02c000000320007f0240000000304d8998231e936ac9340b5972a230f4de0ff00c20c000000000000ffffffff000000004000
1ef110000000ffff00000000ff0080808000f7000010000f0002f0a00c0000100008f00800000026000000ea0400000f0003f03e0c00000f0004f028000000010009f0100000000000000000000000000000000000000002000af00800000000040000050000000f0004f04e00000012000af00800000051040000000a00
0033000bf012000000800000000c00bf0110001000ff0108000800000010f00400000000000000000011f0040000001100000000000df00400000000000c000f0004f04e00000012000af008000000a8040000000a000033000bf012000000800000000100bf0110001000ff0108000800000010f0040000000200000000
0011f0040000002700000000000df004000000000001000f0004f04200000012000af008000000ac040000000a000013000bf006000000800000000a00000010f00400000007000000000011f0040000000d00000000000df00400000000000a000f0004f04200000012000af008000000ad040000000a000013000bf006
000000800000000b00000010f00400000003000000000011f0040000000a00000000000df00400000000000b000f0004f05400000042010af008000000b0040000000a000063000bf0240000004401040000007f0100000100bf0100001000ce0102000000d70100000000ff0118001800000010f0040000002400000000
0011f004000000050000000f0004f04800000012000af008000000b3040000000a000023000bf00c0000008000000008008a00b3040000000010f0040000000b000000000011f0040000000f00000000000df004000000000008000f0004f04800000012000af008000000b5040000000a000023000bf00c000000800000
0005008a00b5040000000010f0040000000a000000000011f0040000001000000000000df004000000000005000f0004f04800000012000af008000000b7040000000a000023000bf00c0000008000000006008a00b7040000000010f00400000019000000000011f0040000001c00000000000df004000000000006000f
0004f04800000012000af008000000b8040000000a000023000bf00c0000008000000004008a00b8040000000010f00400000018000000000011f0040000001b00000000000df004000000000004000f0004f04200000012000af008000000b9040000000a000013000bf006000000800000000300000010f0040000001b
000000000011f0040000001d00000000000df004000000000003000f0004f04200000012000af008000000ba040000000a000013000bf006000000800000000d00000010f0040000001c000000000011f0040000001e00000000000df00400000000000d000f0004f04800000012000af008000000bb040000000a000023
000bf00c0000008000000002008a00bb040000000010f00400000015000000000011f0040000001b00000000000df004000000000002000f0004f04200000012000af008000000bc040000000a000013000bf006000000800000000e00000010f0040000001d000000000011f0040000001f00000000000df00400000000
000e000f0004f04200000012000af008000000bd040000000a000013000bf006000000800000000900000010f00400000023000000000011f0040000000e00000000000df004000000000009000f0004f04200000012000af008000000bf040000000a000013000bf006000000800000000f00000010f004000000220000
00000011f0040000000e00000000000df00400000000000f000f0004f04200000012000af008000000c0040000000a000013000bf006000000800000001000000010f00400000021000000000011f0040000000e00000000000df004000000000010000f0004f04200000012000af008000000c1040000000a000013000b
f006000000800000000700000010f00400000001000000000011f0040000001100000000000df004000000000007000f0004f04e00000042010af008000000c3040000000a000053000bf01e0000004401040000007f0100000100bf0100001000d10101000000ff0110001000000010f00400000005000000000011f004
000000180000000f0004f04e00000042010af008000000c5040000000a000053000bf01e0000004401040000007f0100000100bf0100001000d10101000000ff0110001000000010f00400000009000000000011f004000000120000000f0004f04e00000042010af008000000c6040000000a000053000bf01e00000044
01040000007f0100000100bf0100001000d10101000000ff0110001000000010f0040000000f000000000011f004000000160000000f0004f04e00000042010af008000000c7040000000a000053000bf01e0000004401040000007f0100000100bf0100001000d10101000000ff0110001000000010f004000000120000
00000011f004000000190000000f0004f04e00000042010af008000000c8040000000a000053000bf01e0000004401040000007f0100000100bf0100001000d10101000000ff0110001000000010f00400000013000000000011f0040000001c0000000f0004f04e00000042010af008000000c9040000000a000053000b
f01e0000004401040000007f0100000100bf0100001000d10101000000ff0110001000000010f0040000001a000000000011f0040000001e0000000f0004f04e00000042010af008000000ca040000000a000053000bf01e0000004401040000007f0100000100bf0100001000d10101000000ff0110001000000010f004
00000017000000000011f0040000001e0000000f0004f04e00000042010af008000000cb040000000a000053000bf01e0000004401040000007f0100000100bf0100001000d10101000000ff0110001000000010f00400000016000000000011f0040000001e0000000f0004f04e00000042010af008000000cc04000000
0a000053000bf01e0000004401040000007f0100000100bf0100001000d10101000000ff0110001000000010f0040000001f000000000011f004000000230000000f0004f054000000a20c0af008000000db040000000a000043000bf0180000008000000011008a00db040000bf0100001000ff0100000800000010f004
00000008000000000011f0040000002d00000000000df004000000000011000f0004f054000000a20c0af008000000de040000000a000043000bf0180000008000000012008a00de040000bf0100001000ff0100000800000010f00400000011000000000011f0040000002300000000000df004000000000012000f0004
f054000000a20c0af008000000df040000000a000043000bf0180000008000000013008a00df040000bf0100001000ff0100000800000010f00400000014000000000011f0040000002300000000000df004000000000013000f0004f054000000a20c0af008000000e0040000000a000043000bf0180000008000000014
008a00e0040000bf0100001000ff0100000800000010f00400000010000000000011f0040000002300000000000df004000000000014000f0004f054000000a20c0af008000000e1040000000a000043000bf0180000008000000015008a00e1040000bf0100001000ff0100000800000010f0040000000e000000000011
f0040000002400000000000df004000000000015000f0004f054000000a20c0af008000000e2040000000a000043000bf0180000008000000016008a00e2040000bf0100001000ff0100000800000010f0040000000d000000000011f0040000002300000000000df004000000000016000f0004f054000000a20c0af008
000000e3040000000a000043000bf0180000008000000017008a00e3040000bf0100001000ff0100000800000010f0040000000c000000000011f0040000002300000000000df004000000000017000f0004f04e00000042010af008000000e6040000000a000053000bf01e0000004401040000007f0100000100bf0100
001000d10101000000ff0110001000000010f00400000020000000000011f004000000220000000f0004f04e00000042010af008000000e7040000000a000053000bf01e0000004401040000007f0100000100bf0100001000d10101000000ff0110001000000010f0040000001e000000000011f004000000210000000f
0004f04800000012000af008000000e8040000000a000023000bf00c0000008000000019008a00e8040000000010f00400000004000000000011f0040000000f00000000000df004000000000019000f0004f04e00000042010af008000000ea040000400a000053000bf01e0000004401040000007f0100000100bf0100
001000d10101000000ff0110001000000010f00400000006000000000011f0040000000d0000000f0004f04200000012000af00800000001040000000e000053000bf01e000000bf0100001000cb0100000000ff01000008000403090000003f0301000100000011f0040000000100000000000000010000000200000003
0000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f0000002000000021000000220000
0023000000240000002103000051040000501700003e000000d02400008e070000740000000000c1040000e0170000fe18000060250000ee1c0000740000000000a8040000501700007e0b0000f0250000ce120000740000000000ad040000600a0000ce000000e00e00009e030000740000000000e804000080020000de
050000e00e0000ae080000740001000000c3040000c00400009e03000070060000de050000740000000000ea04000010030000ae080000e00500007e0b0000740000000000ac04000060010000ce000000500500009e030000740000000000db040000500500007e0b000020080000be0d0000740001000000c5040000c0
0400009e0c0000400900009e0c0000740000000000b5040000400900007e0b0000100c0000be0d0000740001000000b3040000f00100007e0b0000c0040000be0d0000740001000000e3040000b0110000ee130000801400002e160000740001000000e2040000600a0000ee130000300d00002e160000740001000000e1
04000010030000ee130000e00500002e160000740001000000c604000010030000be0d0000100300001e110000740000000000e0040000100300004e0e0000e00500008e100000740001000000de040000500500001e110000200800005e130000740001000000c7040000c00400003e120000400900003e120000740000
000000c8040000100c00003e120000901000003e120000740000000000df040000a00c00001e110000700f00005e130000740001000000bb040000901000001e110000601300005e130000740001000000cb040000b01100005e130000b0110000be160000740000000000ca040000600a00005e130000600a0000be1600
00740000000000b8040000400900001e110000100c00005e130000740001000000b7040000f00100001e110000c00400005e130000740001000000c9040000100300005e13000010030000be160000740000000000b9040000f0010000be160000c0040000fe180000740000000000ba04000040090000be160000100c00
00fe180000740000000000bc04000090100000be16000060130000fe180000740000000000e7040000b0110000fe180000b0110000ae1a0000740000000000cc04000010030000fe18000010030000ae1a0000740000000000e6040000600a0000fe180000600a0000ae1a0000740000000000c004000090100000ae1a00
0060130000ee1c0000740000000000bf04000040090000ae1a0000100c0000ee1c0000740000000000bd040000f0010000ae1a0000c0040000ee1c0000740000000000b004000070060000ee01000040090000ee01000074000000000000000000260000002d0000002e0000003300000034000000390000003a0000003e
0000003f000000490000004e00000055000000560000005b000000600000006300000064000000680000006d00000073000000860000008d0000008e000000930000009400000098000000a1000000a5000000a6000000ae000000af000000b6000000b7000000bc000000bd000000c1000000ca000000ce000000cf0000
00d3000000d7000000db000000dc000000e0000000e1000000e700000002010000060100000701000009010000140100001b0100001c01000021010000230100002701000035010000390100003e010000410100004301000046010000480100004b0100004d010000500100005201000055010000690100006c0100006e
01000073010000740100007e0100008d01000092010000970100009c0100009d010000a2010000a3010000a8010000ad010000b0010000b2010000b5010000b7010000bb010000c5010000c9010000e1010000e3010000ee010000f2010000fb01000002020000090200000f020000170200001b0200001f020000220200
0023020000270200002802000032020000360200003a0200003b020000420200004f02000054020000560200005a0200005b0200005f02000060020000670200007402000078020000790200007f020000870200008b0200008f02000092020000930200009a0200009b0200009f020000a0020000a4020000a7020000aa
020000ac020000af020000b1020000b4020000b6020000b9020000cd020000d1020000d3020000d7020000d9020000dd020000df020000e3020000e6020000ea020000ee020000f3020000f4020000f8020000010300000403000005030000090300000a030000110300002203000007001c0007001c0007001c0007001c
0007001c0007001c0007001c0007001c0007001c0007001c0007001c0007001c0007001c0007001c0007001c0007001c0007001c0007001c0007001c0007001c0007001c0007001c0007001c0007001c0007001c0007001c0007001c0007001c0007001c0007001c0007001c0007001c0007001c0007001c0007001c0007
001c0007001c0007001c0007001c0007001c0007001c0007001c0007001c0007001c0007001c0007001c0007001c0007001c0007001c0007001c0007001c0007001c0007001c0007001c0007001c0007001c0007001c0007001c0007001c0007001c0007001c0007001c0007001c0007001c0007001c0007001c0007001c
0007001c0007001c0007001c0007001c0007001c0007001c0007001c0007001c0007001c0007001c0007001c0007001c0007001c000700ff400080010000000000000000006021b0010000000000000000000000000000000000000000021000000000000000210300007000000800400000030000004716900100000202
0603050405020304ef3a00e0417800c00900000000000000ff00000000000000540069006d006500730020004e0065007700200052006f006d0061006e00000035169001020005050102010706020507000000000000001000000000000000000000008000000000530079006d0062006f006c000000332690010000020b
0604020202020204ff3a00e0437800c00900000000000000ff0000000000000041007200690061006c0000002200040070088818000018050000a901000000009275c3a69275c3a6000000000200000000000000000000000000010001000000040003100100000000000000000000000100010000000100000000000000
210300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a506c007b400b40080001e30000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000000002000000c401ffff120000000000000000000000000000000a0042006f0020004800610067006c0075006e0064000a0042006f0020004800610067006c0075006e006400000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010043006f006d0070004f0062006a00000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000120002010200000006000000ffffffff000000000000000000000000000000000000000000000000000000000000000000000000010000005b0000000000000003004f0062006a0049006e0066006f0000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000012000201ffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000000000000300000004000000000000004f0062006a0065006300740050006f006f006c0000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000160001010500000008000000ffffffff000000000000000000000000000000000000000090b1f73983d8ca0190b1f73983d8ca0100000000000000000000000002004f006c0065005000720065007300300030003000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000018000201ffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000000000001c000000ee3e000000000000ffffffff030000000400000001000000ffffffff
00000000000000006d440000673a0000c63e0000010009000003631f000008003100000000001400000026060f001e00ffffffff040014000000576f72640e004d6963726f736f667420576f7264050000000b0200000000050000000c02cc0d2a101c000000fb021000070000000000bc02000000000102022253797374
656d0000640e666f00000a0022008a0100000000ffffffff48d41200040000002d010000050000000201010000001c000000fb02adff0000000000009001000000000440001254696d6573204e657720526f6d616e0030cb120010da1c76c0601f76640e666f040000002d01010005000000090200000000050000000201
0100000007000000fc020000ffffff000000040000002d01020008000000fa0200000600000000000002040000002d010300070000001b042703580f1a00b70907000000fc020000ffffff000000040000002d01040004000000f001020008000000fa0200000000000000000000040000002d01020004000000f0010300
030000001e000700000016040503190f3b00f609050000000201010000000500000014023c00f609050000002e010100000020000000320a3c00f6090e000400000000002a10cc0d4120706f696e74657220706572203b0015002a002a0017002900170025001c0015002a0025001c001500050000002e01000000000500
00001402000000000500000014023c00c70b050000002e01010000001f000000320a3c00c70b0d000400000000002a10cc0d6e6f206f6620747269636b73200029002a0015002a001b00150017001c00170025002a0020001500050000002e0100000000050000001402000000000500000014023c00570d050000002e01
010000001d000000320a3c00570d0c000400000000002a10cc0d6c65667420616e6420706572170025001c0017001500250029002a0015002a0025001c00050000002e01000000000500000014020000000005000000020101000000050000000201010000000500000014029c00f609050000002e010100000020000000
320a9c00f6090e000400000000002a10cc0d6c656164696e672068616e642e201700250025002a0017002900290016002900250029002a0015001500050000002e0100000000050000001402000000000500000014029c00cb0b050000002e010100000020000000320a9c00cb0b0e000400000000002a10cc0d506f696e
747320746f20746865202f002a001700290017002000150017002a0015001800290025001500050000002e0100000000050000001402000000000500000014029c00810d050000002e010100000017000000320a9c00810d08000400000000002a10cc0d726f6f74206f66201c002a002a00170015002a001b0015000500
00002e0100000000050000001402000000000500000014029c00770e050000002e010100000010000000320a9c00770e03000400000000002a10cc0d69747300170017002000050000002e0100000000050000001402000000000500000002010100000005000000020101000000050000001402fc00f609050000002e01
0100000013000000320afc00f60905000400000000002a10cc0d74726565200017001c00250025001500050000002e010000000005000000140200000000050000001402fc00880a050000002e010100000020000000320afc00880a0e000400000000002a10cc0d636f6e73697374696e67206f662025002a0029002000
17002000170018002a00290015002a001b001500050000002e010000000005000000140200000000050000001402fc00480c050000002e010100000013000000320afc00480c05000400000000002a10cc0d73756974200021002900170017001500050000002e010000000005000000140200000000050000001402fc00
d50c050000002e010100000016000000320afc00d50c07000400000000002a10cc0d6c656e6774687320170026002a00290017002a002000050000002e01000000000500000014020000000005000000020101000000050000000201010000000500000014025c01f609050000002e01010000001d000000320a5c01f609
0c000400000000002a10cc0d636f6d62696e6174696f6e2025002a003f002a00180029002500170017002b0029001500050000002e0100000000050000001402000000000500000014025c01ab0b050000002e010100000014000000320a5c01ab0b06000400000000002a10cc0d6e6f6465732e29002a002a0025002000
1500050000002e0100000000050000001402000000000500000002010100000005000000020101000000050000001402bb01f609050000002e010100000013000000320abb01f60905000400000000002a10cc0d45616368200033002500250029001500050000002e010000000005000000140200000000050000001402
bb01b10a050000002e010100000013000000320abb01b10a05000400000000002a10cc0d73756974200020002a00170017001500050000002e010000000005000000140200000000050000001402bb013e0b050000002e010100000029000000320abb013e0b14000400000000002a10cc0d6c656e6774687320636f6d62
696e6174696f6e20170025002a002900180029002000150025002b003f002b00170029002500170017002b0029001500050000002e010000000005000000140200000000050000001402bb01f90d050000002e010100000011000000320abb01f90d04000400000000002a10cc0d6e6f646529002a002a00250005000000
2e01000000000500000014020000000005000000020101000000050000000201010000000500000014021b02f609050000002e010100000020000000320a1b02f6090e000400000000002a10cc0d706f696e747320746f20746865202a002a001700290017002000150017002a0015001700290025001500050000002e01
00000000050000001402000000000500000014021b02a60b050000002e010100000017000000320a1b02a60b08000400000000002a10cc0d726f6f74206f66201c002a002a00170015002a001b001500050000002e0100000000050000001402000000000500000014021b029c0c050000002e010100000011000000320a
1b029c0c04000400000000002a10cc0d697473201700170020001600050000002e0100000000050000001402000000000500000014021b02000d050000002e010100000017000000320a1b02000d08000400000000002a10cc0d77696e6e696e67203b00180029002a001700290029001500050000002e01000000000500
00001402000000000500000014021b02240e050000002e010100000011000000320a1b02240e04000400000000002a10cc0d63617264260025001c002a00050000002e01000000000500000014020000000005000000020101000000050000000201010000000500000014027d02f609050000002e010100000013000000
320a7d02f60905000400000000002a10cc0d747265652e0017001c00250025001500050000002e01000000000500000014020000000005000000020101000000040000002701ffff07000000fc020000ffffff000000040000002d01030008000000fa0200000600000000000002040000002d010500070000001b04d707
d00fca04b709040000002d01040004000000f0010300040000002d01020004000000f0010500030000001e00070000001604b507910feb04f60905000000020101000000040000002d01010005000000090200000000050000001402ec04f609050000002e010100000017000000320aec04f60908000400000000002a10
cc0d57696e6e696e67204f0017002900290018002a0029001500050000002e01000000000500000014020902640e050000001402ec042e0b050000002e010100000014000000320aec042e0b06000400000000002a10cc0d636172647320250025001c002a0020001500050000002e010000000005000000140200000000
050000001402ec04f30b050000002e010100000014000000320aec04f30b06000400000000002a10cc0d6e6f6465732029002a002a00250020001500050000002e010000000005000000140200000000050000001402ec04ca0c050000002e010100000013000000320aec04ca0c05000400000000002a10cc0d65616368
200025002500250029001500050000002e010000000005000000140200000000050000001402ec04770d050000002e010100000020000000320aec04770d0e000400000000002a10cc0d636f6e7461696e696e6720616c6c25002a002900170026001700290018002a0029001500250017001700050000002e0100000000
0500000014020000000005000000020101000000050000000201010000000500000014024c05f609050000002e010100000017000000320a4c05f60908000400000000002a10cc0d77696e6e696e67203b0018002a0029001800290029001500050000002e0100000000050000001402000000000500000014024c051b0b
050000002e01010000001a000000320a4c051b0b0a000400000000002a10cc0d636172647320666f7220250025001c002a00200015001b002a001c001500050000002e0100000000050000001402000000000500000014024c05560c050000002e010100000011000000320a4c05560c04000400000000002a10cc0d6f6e
65202a00290025001500050000002e0100000000050000001402000000000500000014024c05e30c050000002e010100000019000000320a4c05e30c09000400000000002a10cc0d737569742e20497420202100290017001700150015001c0017001500050000002e010000000005000000140200000000050000001402
4c05cd0d050000002e01010000001d000000320a4c05cd0d0c000400000000002a10cc0d706f696e747320746f20616e2a002a001700290017002000150017002a00150026002900050000002e0100000000050000001402000000000500000002010100000005000000020101000000050000001402ac05f60905000000
2e01010000001d000000320aac05f6090c000400000000002a10cc0d616c7465726e61746976652025001700170025001c002900250017001800290025001600050000002e010000000005000000140200000000050000001402ac056b0b050000002e010100000017000000320aac056b0b08000400000000002a10cc0d
77696e6e696e67203b0018002900290018002a0029001500050000002e010000000005000000140200000000050000001402ac05900c050000002e010100000014000000320aac05900c06000400000000002a10cc0d636172647320250025001c002a0020001500050000002e0100000000050000001402000000000500
00001402ac05550d050000002e01010000001f000000320aac05550d0d000400000000002a10cc0d6e6f64652c20746f20746865200029002a002a0025001500150017002a0015001700290025001500050000002e010000000005000000140200000000050000001402ac05f10e050000002e010100000011000000320a
ac05f10e04000400000000002a10cc0d6e657874290025002a001700050000002e01000000000500000014020000000005000000020101000000050000000201010000000500000014020c06f609050000002e010100000019000000320a0c06f60909000400000000002a10cc0d726571756972656420201c0025002a00
290017001c0025002a001600050000002e0100000000050000001402000000000500000014020c06220b050000002e010100000017000000320a0c06220b08000400000000002a10cc0d77696e6e696e67203a0017002a00290018002a0029001500050000002e0100000000050000001402000000000500000014020c06
460c050000002e010100000014000000320a0c06460c06000400000000002a10cc0d636172647320250025001c002a0020001500050000002e0100000000050000001402000000000500000014020c060b0d050000002e01010000001f000000320a0c060b0d0d000400000000002a10cc0d6e6f646520666f7220746865
200029002a002a00250015001b002a001c0015001700290025001500050000002e0100000000050000001402000000000500000014020c06b20e050000002e010100000011000000320a0c06b20e04000400000000002a10cc0d6e6578742900260029001700050000002e01000000000500000014020000000005000000
020101000000050000000201010000000500000014026b06f609050000002e010100000017000000320a6b06f60908000400000000002a10cc0d7375697420696e2020002900170017001500180029001500050000002e0100000000050000001402000000000500000014026b06d80a050000002e010100000013000000
320a6b06d80a05000400000000002a10cc0d74686973200018002900170020001500050000002e0100000000050000001402000000000500000014026b06650b050000002e010100000013000000320a6b06650b05000400000000002a10cc0d74726565200017001c00250025001500050000002e010000000005000000
1402000000000500000014026b06f70b050000002e01010000002c000000320a6b06f70b16000400000000002a10cc0d6272616e636820616e6420746f206120736574206f662a001c0025002900260029001500250029002a00150017002a0015002500150020002500170015002a001b00050000002e01000000000500
00001402000000000500000002010100000005000000020101000000050000001402cb06f609050000002e01010000001a000000320acb06f6090a000400000000002a10cc0d706f736974696f6e73202a002a0020001700170017002a00290020001600050000002e010000000005000000140200000000050000001402
cb06380b050000002e010100000013000000320acb06380b05000400000000002a10cc0d6e6f6465200029002a002a0025001500050000002e010000000005000000140200000000050000001402cb06ef0b050000002e01010000001f000000320acb06ef0b0d000400000000002a10cc0d696620697420697320746865
200017001b0015001700170015001700200015001800290025001600050000002e010000000005000000140200000000050000001402cb06410d050000002e010100000017000000320acb06410d08000400000000002a10cc0d77696e6e696e67203b0018002900290018002a0029001500050000002e01000000000500
0000140200000000050000001402cb06660e050000002e010100000013000000320acb06660e05000400000000002a10cc0d636172647300250025001c002a002000050000002e01000000000500000014020000000005000000020101000000050000000201010000000500000014022d07f609050000002e0101000000
26000000320a2d07f60912000400000000002a10cc0d6e6f646520666f7220746865206c6173742029002a002a00250015001b002a001c001500170029002500150017002500200017001500050000002e0100000000050000001402000000000500000014022d07250c050000002e010100000014000000320a2d07250c
06000400000000002a10cc0d737569742e2e210029001700170015001500050000002e01000000000500000014020000000005000000020101000000040000002701ffff07000000fc020000ffffff000000040000002d01030008000000fa0200000600000000000002040000002d010500070000001b04830138025600
9300040000002d01040004000000f0010300040000002d01020004000000f0010500030000001e000700000016046101f9017700d20005000000020101000000040000002d010100050000000902000000000500000014027800d200050000002e010100000011000000320a7800d20004000400000000002a10cc0d526f
6f7437002a002a001700050000002e01000000000500000014020902640e0500000002010100000005000000020101000000050000001402da00d200050000002e010100000016000000320ada00d20007000400000000002a10cc0d706f696e746572002a002a0017002900170025001c00050000002e01000000000500
000014020000000005000000020101000000040000002701ffff07000000fc020000ffffff000000040000002d01030008000000fa0200000600000000000002040000002d010500070000001b048301340656005304040000002d01040004000000f0010300040000002d01020004000000f0010500030000001e000700
000016046101f5057700920405000000020101000000040000002d0101000500000009020000000005000000140278009204050000002e010100000011000000320a7800920404000400000000002a10cc0d526f6f7437002a002a001700050000002e01000000000500000014020902640e050000000201010000000500
0000020101000000050000001402da009204050000002e010100000016000000320ada00920407000400000000002a10cc0d706f696e746572002a002a0017002900170025001c00050000002e01000000000500000014020000000005000000020101000000040000002701ffff1000000026060f001600ffffffff0000
ab020000ca000000e0030000d300000008000000fa0205000100000000000000040000002d01030007000000fc020000000000000000040000002d010500050000000601020000002800000024031200b002cb00af02cb00ae02cc00ad02cd00ac02ce00ac02ce00ad02cf00ae02d000af02d100af02d100af02d100b002
d000b102cf00b202ce00b202ce00b102cd00b002cc00b002cb002800000024031200bb02cb00ba02cb00b902cc00b802cd00b802ce00b802cf00b802d000b902d100ba02d100bb02d100bb02d100bc02d000bd02cf00be02ce00be02ce00bd02cd00bc02cc00bc02cb002800000024031200c702cb00c602cb00c502cc00
c402cd00c402ce00c402cf00c402d000c502d100c602d100c702d100c702d100c802d000c902cf00ca02ce00ca02ce00c902cd00c802cc00c802cb002800000024031200d302cb00d202cb00d102cc00d002cd00d002ce00d002cf00d002d000d102d100d202d100d302d100d302d100d402d000d502cf00d602ce00d602
ce00d502cd00d402cc00d402cb002800000024031200df02cb00de02cb00dd02cc00dc02cd00dc02ce00dc02cf00dc02d000dd02d100de02d100df02d100df02d100e002d000e102cf00e202ce00e202ce00e102cd00e002cc00e002cb002800000024031200eb02cb00ea02cb00e902cc00e802cd00e802ce00e802cf00
e802d000e902d100ea02d100eb02d100eb02d100ec02d000ed02cf00ee02ce00ee02ce00ed02cd00ec02cc00ec02cb002800000024031200f702cb00f602cb00f502cc00f402cd00f402ce00f402cf00f402d000f502d100f602d100f702d100f702d100f802d000f902cf00fa02ce00fa02ce00f902cd00f802cc00f802
cb0028000000240312000303cb000203cb000103cc000003cd000003ce000003cf000003d0000103d1000203d1000303d1000303d1000403d0000503cf000603ce000603ce000503cd000403cc000403cb0028000000240312000f03cb000e03cb000d03cc000c03cd000c03ce000c03cf000c03d0000d03d1000e03d100
0f03d1000f03d1001003d0001103cf001203ce001203ce001103cd001003cc001003cb0028000000240312001b03cb001a03cb001903cc001803cd001803ce001803cf001803d0001903d1001a03d1001b03d1001b03d1001c03d0001d03cf001e03ce001e03ce001d03cd001c03cc001c03cb0028000000240312002703
cb002603cb002503cc002403cd002403ce002403cf002403d0002503d1002603d1002703d1002703d1002803d0002903cf002a03ce002a03ce002903cd002803cc002803cb0028000000240312003303cb003203cb003103cc003003cd003003ce003003cf003003d0003103d1003203d1003303d1003303d1003403d000
3503cf003603ce003603ce003503cd003403cc003403cb0028000000240312003f03cb003e03cb003d03cc003c03cd003c03ce003c03cf003c03d0003d03d1003e03d1003f03d1003f03d1004003d0004103cf004203ce004203ce004103cd004003cc004003cb0028000000240312004b03cb004a03cb004903cc004803
cd004803ce004803cf004803d0004903d1004a03d1004b03d1004b03d1004c03d0004d03cf004e03ce004e03ce004d03cd004c03cc004c03cb0028000000240312005703cb005603cb005503cc005403cd005403ce005403cf005403d0005503d1005603d1005703d1005703d1005803d0005903cf005a03ce005a03ce00
5903cd005803cc005803cb0028000000240312006303cb006203cb006103cc006003cd006003ce006003cf006003d0006103d1006203d1006303d1006303d1006403d0006503cf006603ce006603ce006503cd006403cc006403cb0028000000240312006f03cb006e03cb006d03cc006c03cd006c03ce006c03cf006c03
d0006d03d1006e03d1006f03d1006f03d1007003d0007103cf007203ce007203ce007103cd007003cc007003cb0028000000240312007b03cb007a03cb007903cc007803cd007803ce007803cf007803d0007903d1007a03d1007b03d1007b03d1007c03d0007d03cf007e03ce007e03ce007d03cd007c03cc007c03cb00
28000000240312008703cb008603cb008503cc008403cd008403ce008403cf008403d0008503d1008603d1008703d1008703d1008803d0008903cf008a03ce008a03ce008903cd008803cc008803cb0028000000240312009303cb009203cb009103cc009003cd009003ce009003cf009003d0009103d1009203d1009303
d1009303d1009403d0009503cf009603ce009603ce009503cd009403cc009403cb0028000000240312009f03cb009e03cb009d03cc009c03cd009c03ce009c03cf009c03d0009d03d1009e03d1009f03d1009f03d100a003d000a103cf00a203ce00a203ce00a103cd00a003cc00a003cb002800000024031200ab03cb00
aa03cb00a903cc00a803cd00a803ce00a803cf00a803d000a903d100aa03d100ab03d100ab03d100ac03d000ad03cf00ae03ce00ae03ce00ad03cd00ac03cc00ac03cb002800000024031200b703cb00b603cb00b503cc00b403cd00b403ce00b403cf00b403d000b503d100b603d100b703d100b703d100b803d000b903
cf00ba03ce00ba03ce00b903cd00b803cc00b803cb002800000024031200c303cb00c203cb00c103cc00c003cd00c003ce00c003cf00c003d000c103d100c203d100c303d100c303d100c403d000c503cf00c603ce00c603ce00c503cd00c403cc00c403cb002800000024031200cf03cb00ce03cb00cd03cc00cc03cd00
cc03ce00cc03cf00cc03d000cd03d100ce03d100cf03d100cf03d100d003d000d103cf00d203ce00d203ce00d103cd00d003cc00d003cb0005000000060101000000040000002d010200040000002d01040004000000f00105000800000026060f000600ffffffff010007000000fc020000ffffff000000040000002d01
050008000000fa0200000600000000000002040000002d010600070000001b04bb05fc01ca04cf00040000002d01040004000000f0010500040000002d01020004000000f0010600030000001e000700000016049905bd01eb040e0105000000020101000000040000002d01010005000000090200000000050000001402
ee040e01050000002e010100000010000000320aee040e0103000400000000002a10cc0d57696e034f0017002900050000002e01000000000500000014020902640e05000000020101000000040000002701ffff07000000fc020000ffffff000000040000002d01050008000000fa020000060000000000000204000000
2d010600070000001b04bb050805ca04db03040000002d01040004000000f0010500040000002d01020004000000f0010600030000001e000700000016049905c904eb041a0405000000020101000000040000002d01010005000000090200000000050000001402ee041a04050000002e010100000010000000320aee04
1a0403000400000000002a10cc0d57696e034f0017002900050000002e01000000000500000014020902640e05000000020101000000040000002701ffff07000000fc020000ffffff000000040000002d01050008000000fa0200000600000000000002040000002d010600070000001b041308fc012207cf0004000000
2d01040004000000f0010500040000002d01020004000000f0010600030000001e00070000001604f107bd0143070e0105000000020101000000040000002d0101000500000009020000000005000000140246070e01050000002e010100000010000000320a46070e0103000400000000002a10cc0d57696e034f001700
2900050000002e01000000000500000014020902640e05000000020101000000040000002701ffff07000000fc020000ffffff000000040000002d01050008000000fa0200000600000000000002040000002d010600070000001b04130808052207db03040000002d01040004000000f0010500040000002d0102000400
0000f0010600030000001e00070000001604f107c90443071a0405000000020101000000040000002d0101000500000009020000000005000000140246071a04050000002e010100000010000000320a46071a0403000400000000002a10cc0d57696e034f0017002900050000002e01000000000500000014020902640e
05000000020101000000040000002701ffff07000000fc020000ffffff000000040000002d01050008000000fa0200000600000000000002040000002d010600070000001b046b0afc017a09cf00040000002d01040004000000f0010500040000002d01020004000000f0010600030000001e00070000001604490abd01
9b090e0105000000020101000000040000002d010100050000000902000000000500000014029e090e01050000002e010100000010000000320a9e090e0103000400000000002a10cc0d57696e034f0017002900050000002e01000000000500000014020902640e05000000020101000000040000002701ffff07000000
fc020000ffffff000000040000002d01050008000000fa0200000600000000000002040000002d010600070000001b046b0a08057a09db03040000002d01040004000000f0010500040000002d01020004000000f0010600030000001e00070000001604490ac9049b091a0405000000020101000000040000002d010100
050000000902000000000500000014029e091a04050000002e010100000010000000320a9e091a0403000400000000002a10cc0d57696e034f0017002900050000002e01000000000500000014020902640e05000000020101000000040000002701ffff07000000fc020000ffffff000000040000002d01050008000000
fa0200000600000000000002040000002d010600070000001b04130814082207e706040000002d01040004000000f0010500040000002d01020004000000f0010600030000001e00070000001604f107d5074307260705000000020101000000040000002d01010005000000090200000000050000001402460726070500
00002e010100000010000000320a4607260703000400000000002a10cc0d57696e034f0017002900050000002e01000000000500000014020902640e05000000020101000000040000002701ffff07000000fc020000ffffff000000040000002d01050008000000fa0200000600000000000002040000002d0106000700
00001b046b0a14087a09e706040000002d01040004000000f0010500040000002d01020004000000f0010600030000001e00070000001604490ad5079b09260705000000020101000000040000002d010100050000000902000000000500000014029e092607050000002e010100000010000000320a9e09260703000400
000000002a10cc0d57696e034f0017002900050000002e01000000000500000014020902640e05000000020101000000040000002701ffff07000000fc020000ffffff000000040000002d01050008000000fa0200000600000000000002040000002d010600070000001b040f0cfc011e0bcf00040000002d0104000400
0000f0010500040000002d01020004000000f0010600030000001e00070000001604ed0bbd013f0b0e0105000000020101000000040000002d01010005000000090200000000050000001402420b0e01050000002e010100000010000000320a420b0e0103000400000000002a10cc0d534f50032e003c002f0005000000
2e01000000000500000014020902640e05000000020101000000040000002701ffff07000000fc020000ffffff000000040000002d01050008000000fa0200000600000000000002040000002d010600070000001b040f0c08051e0bdb03040000002d01040004000000f0010500040000002d01020004000000f0010600
030000001e00070000001604ed0bc9043f0b1a0405000000020101000000040000002d01010005000000090200000000050000001402420b1a04050000002e010100000010000000320a420b1a0403000400000000002a10cc0d534f50032e003c002f00050000002e01000000000500000014020902640e050000000201
01000000040000002701ffff07000000fc020000ffffff000000040000002d01050008000000fa0200000600000000000002040000002d010600070000001b040f0c14081e0be706040000002d01040004000000f0010500040000002d01020004000000f0010600030000001e00070000001604ed0bd5073f0b26070500
0000020101000000040000002d01010005000000090200000000050000001402420b2607050000002e010100000010000000320a420b260703000400000000002a10cc0d534f50032e003c002f00050000002e01000000000500000014020902640e05000000020101000000040000002701ffff07000000fc020000ffff
ff000000040000002d01050008000000fa0200000600000000000002040000002d010600070000001b040f0c940f6a0af309040000002d01040004000000f0010500040000002d01020004000000f0010600030000001e00070000001604ed0b550f8b0a320a05000000020101000000040000002d010100050000000902
000000000500000014028c0a320a050000002e010100000026000000320a8c0a320a12000400000000002a10cc0d536574206f6620706f736974696f6e7320282e002500170015002a001b0015002a002a0020001700170017002a002a00200015001c00050000002e01000000000500000014020902640e050000001402
8c0a690c050000002e010100000013000000320a8c0a690c05000400000000002a10cc0d534f502920002e003c002f001c001500050000002e0100000000050000001402000000000500000014028c0a330d050000002e010100000013000000320a8c0a330d05000400000000002a10cc0d6e6f6465730029002a002a00
25002000050000002e0100000000050000001402000000000500000002010100000005000000020101000000050000001402ec0a320a050000002e010100000031000000320aec0a320a19000400000000002a10cc0d636f6e7461696e696e672074686520706f736974696f6e73200025002a0029001700250017002900
18002a002900150017002900250015002a002a0020001700180017002a00290020001600050000002e010000000005000000140200000000050000001402ec0a630d050000002e010100000019000000320aec0a630d09000400000000002a10cc0d757070657220616e642029002a002a0025001c001500250029002a00
050000002e01000000000500000014020000000005000000020101000000050000000201010000000500000014024c0b320a050000002e010100000014000000320a4c0b320a06000400000000002a10cc0d6c6f7765722017002b003a0025001c001500050000002e010000000005000000140200000000050000001402
4c0b040b050000002e010100000014000000320a4c0b040b06000400000000002a10cc0d76616c756520290025001800290025001500050000002e0100000000050000001402000000000500000014024c0bcd0b050000002e010100000014000000320a4c0bcd0b06000400000000002a10cc0d626f756e642e2a002a00
2a0029002a001500050000002e010000000005000000140200000000050000000201010000000500000002010100000005000000020101000000040000002701ffff1000000026060f001600ffffffff0000f70100007e010000b40200007702000008000000fa0200000600000000000000040000002d01050007000000
fc020100000000000000040000002d0106000800000025030200fb0182018a024002040000002d01030004000000f001050007000000fc020000000000000000040000002d0105000a000000240303006e025202af027202a2022b02040000002d010200040000002d01040004000000f00105000800000026060f000600
ffffffff01001000000026060f001600ffffffff0000f70100001e050000e00300006805000008000000fa0200000600000000000000040000002d010500040000002d0106000800000025030200fb0142059c034205040000002d01030004000000f001050007000000fc020000000000000000040000002d0105000a00
0000240303009a036305db0342059a032205040000002d010200040000002d01040004000000f00105000800000026060f000600ffffffff01001000000026060f001600ffffffff000022010000b60500006c0100002707000008000000fa0200000600000000000000040000002d010500040000002d01060008000000
250302004701ba054701e306040000002d01030004000000f001050007000000fc020000000000000000040000002d0105000a000000240303002601e106470122076701e106040000002d010200040000002d01040004000000f00105000800000026060f000600ffffffff01001000000026060f001600ffffffff0000
f701000076070000e0030000c007000008000000fa0200000600000000000000040000002d010500040000002d0106000800000025030200fb019a079c039a07040000002d01030004000000f001050007000000fc020000000000000000040000002d0105000a000000240303009a03bb07db039a079a037a0704000000
2d010200040000002d01040004000000f00105000800000026060f000600ffffffff01001000000026060f001600ffffffff00000305000076070000ec060000c007000008000000fa0200000600000000000000040000002d010500040000002d010600080000002503020007059a07a8069a07040000002d0103000400
0000f001050007000000fc020000000000000000040000002d0105000a00000024030300a606bb07e7069a07a6067a07040000002d010200040000002d01040004000000f00105000800000026060f000600ffffffff01001000000026060f001600ffffffff0000220100000e0800006c0100007f09000008000000fa02
00000600000000000000040000002d010500040000002d01060008000000250302004701120847013b09040000002d01030004000000f001050007000000fc020000000000000000040000002d0105000a000000240303002601390947017a0967013909040000002d010200040000002d01040004000000f00105000800
000026060f000600ffffffff01001000000026060f001600ffffffff00002e0400000e080000780400007f09000008000000fa0200000600000000000000040000002d010500040000002d01060008000000250302005304120853043b09040000002d01030004000000f001050007000000fc0200000000000000000400
00002d0105000a000000240303003204390953047a0973043909040000002d010200040000002d01040004000000f00105000800000026060f000600ffffffff01001000000026060f001600ffffffff00003a0700000e080000840700007f09000008000000fa0200000600000000000000040000002d01050004000000
2d01060008000000250302005f0712085f073b09040000002d01030004000000f001050007000000fc020000000000000000040000002d0105000a000000240303003e0739095f077a097f073909040000002d010200040000002d01040004000000f00105000800000026060f000600ffffffff01001000000026060f00
1600ffffffff000022010000660a00006c010000230b000008000000fa0200000600000000000000040000002d010500040000002d010600080000002503020047016a0a4701df0a040000002d01030004000000f001050007000000fc020000000000000000040000002d0105000a000000240303002601dd0a47011e0b
6701dd0a040000002d010200040000002d01040004000000f00105000800000026060f000600ffffffff0100040000002d010600040000002d010300070000001b04bb056403ca043702040000002d010400040000002d010200030000001e000700000016049c052803e804730205000000020101000000040000002d01
010005000000090200000000050000001402eb047302050000002e010100000011000000320aeb04730204000400000000002a10cc0d416c742e3b00170017001500050000002e01000000000500000014020902640e05000000020101000000040000002701ffff040000002d010600040000002d010300070000001b04
1308640322073702040000002d010400040000002d010200030000001e00070000001604f40728034007730205000000020101000000040000002d0101000500000009020000000005000000140243077302050000002e010100000011000000320a4307730204000400000000002a10cc0d416c742e3b00170017001500
050000002e01000000000500000014020902640e05000000020101000000040000002701ffff040000002d010600040000002d010300070000001b041308700622074305040000002d010400040000002d010200030000001e00070000001604f407340640077f0505000000020101000000040000002d01010005000000
09020000000005000000140243077f05050000002e010100000011000000320a43077f0504000400000000002a10cc0d416c742e3b00170017001500050000002e01000000000500000014020902640e05000000020101000000040000002701ffff040000002d010600040000002d010300070000001b04e7067402f605
4701040000002d010400040000002d010200030000001e00070000001604c80638021406830105000000020101000000040000002d0101000500000009020000000005000000140217068301050000002e010100000011000000320a1706830104000400000000002a10cc0d4e6578743c00250029001700050000002e01
000000000500000014020902640e05000000020101000000040000002701ffff040000002d010600040000002d010300070000001b043f0974024e084701040000002d010400040000002d010200030000001e00070000001604200938026c08830105000000020101000000040000002d01010005000000090200000000
0500000014026f088301050000002e010100000011000000320a6f08830104000400000000002a10cc0d4e6578743c00250029001700050000002e01000000000500000014020902640e05000000020101000000040000002701ffff040000002d010600040000002d010300070000001b043f0980054e08530404000000
2d010400040000002d010200030000001e00070000001604200944056c088f0405000000020101000000040000002d010100050000000902000000000500000014026f088f04050000002e010100000011000000320a6f088f0404000400000000002a10cc0d4e6578743c00250029001700050000002e01000000000500
000014020902640e05000000020101000000040000002701ffff040000002d010600040000002d010300070000001b043f098c084e085f07040000002d010400040000002d010200030000001e00070000001604200950086c089b0705000000020101000000040000002d01010005000000090200000000050000001402
6f089b07050000002e010100000011000000320a6f089b0704000400000000002a10cc0d4e6578743c00250029001700050000002e01000000000500000014020902640e05000000020101000000040000002701ffff1000000026060f001600ffffffff00002e040000660a000078040000230b000008000000fa020000
0600000000000000040000002d010500040000002d010600080000002503020053046a0a5304df0a040000002d01030004000000f001050007000000fc020000000000000000040000002d0105000a000000240303003204dd0a53041e0b7304dd0a040000002d010200040000002d01040004000000f001050008000000
26060f000600ffffffff01001000000026060f001600ffffffff00003a070000660a000084070000230b000008000000fa0200000600000000000000040000002d010500040000002d01060008000000250302005f076a0a5f07df0a040000002d01030004000000f001050007000000fc02000000000000000004000000
2d0105000a000000240303003e07dd0a5f071e0b7f07dd0a040000002d010200040000002d01040004000000f00105000800000026060f000600ffffffff010007000000fc020000ffffff000000040000002d01050008000000fa0200000600000000000002040000002d010700070000001b049f03340672020b010400
00002d01040004000000f0010500040000002d01020004000000f0010700030000001e000700000016047d03f50593024a0105000000020101000000040000002d0101000500000009020000000005000000140294024a01050000002e010100000017000000320a94024a0108000400000000002a10cc0d54726565206f
662034001c002500240015002a001b001500050000002e01000000000500000014020902640e05000000140294025202050000002e010100000014000000320a9402520206000400000000002a10cc0d6e6f6465732029002a002a00250020001500050000002e0100000000050000001402000000000500000014029402
2903050000002e01010000001f000000320a940229030d000400000000002a10cc0d656163682073746f72696e67200025002500250029001500200017002a001c0017002a0029001500050000002e0100000000050000001402000000000500000014029402d204050000002e010100000011000000320a9402d2040400
0400000000002a10cc0d6f6e65202a00290025001500050000002e01000000000500000014020000000005000000140294025f05050000002e010100000011000000320a94025f0504000400000000002a10cc0d737569742100290017001700050000002e01000000000500000014020000000005000000020101000000
05000000020101000000050000001402f6024a01050000002e010100000028000000320af6024a0113000400000000002a10cc0d6c656e6774687320636f6d62696e6174696f6e031700250029002a0017002a002000150025002b003f002a00180029002500170017002a002900050000002e0100000000050000001402
0000000005000000020101000000040000002701ffff1000000026060f001600ffffffff0000430100009a03000078020000cf04000008000000fa0200000600000000000000040000002d010500040000002d010600080000002503020073029e0373019e04040000002d01030004000000f001050007000000fc020000
000000000000040000002d0105000a000000240303005e0185044701ca048c01b304040000002d010200040000002d01040004000000f00105000800000026060f000600ffffffff0100040000002d0100000300000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000057006f007200640044006f0063007500
6d0065006e007400000000000000000000000000000000000000000000000000000000000000000000000000000000001a000200070000000a000000ffffffff0000000000000000000000000000000000000000000000000000000000000000000000003d0000001e140000000000005200690063006800450064006900
740046006c0061006700730000000000000000000000000000000000000000000000000000000000000000000000000000001c000200ffffffffffffffffffffffff000000000000000000000000000000000000000000000000000000000000000000000000040000000c000000000000000500530075006d006d006100
7200790049006e0066006f0072006d006100740069006f006e00000000000000000000000000000000000000000000000000000028000201090000000b000000ffffffff000000000000000000000000000000000000000000000000000000000000000000000000480000000010000000000000050044006f0063007500
6d0065006e007400530075006d006d0061007200790049006e0066006f0072006d006100740069006f006e000000000000000000000038000200ffffffffffffffffffffffff000000000000000000000000000000000000000000000000000000000000000000000000500000000010000000000000eca5c10059001d04
00000012bf000000000000100000000000040000210700000e00626a626af357f3570000000000000000000000000000000000001d0416001e140000913d0100913d0100260000000000000000000000000000000000000000000000fa02000000000000ffff0f000000000000000000ffff0f000000000000000000ffff
0f00000000000000000000000000000000005d00000000009800000000000000980000009800000000000000980000000000000048040000000000004804000000000000480400001400000000000000000000007804000000000000780400000000000078040000000000007804000000000000780400000c0000008404
0000140000007804000000000000201a0000b6000000a404000000000000a404000000000000a404000000000000a404000000000000a4040000000000001b160000000000001b160000000000001b16000000000000e519000002000000e719000000000000e719000000000000e719000000000000e719000000000000
e719000000000000e719000024000000d61a0000f4010000ca1c0000520000000b1a0000150000000000000000000000000000000000000048040000000000001b1600000000000000000000000000000000000000000000c11100005a0400001b160000000000001b160000000000001b160000000000000b1a00000000
0000e51900000000000098000000000000009800000000000000a4040000000000000000000000000000a40400001d0d0000a404000000000000e519000000000000e519000000000000e5190000000000001b160000ca03000098000000a8020000a4040000000000004804000000000000a404000000000000e5190000
00000000000000000000000000000000000000005c0400000e0000006a0400000e00000098000000000000009800000000000000980000000000000098000000000000001b16000000000000e519000000000000e519000000000000e5190000000000000000000000000000e51900000000000040030000080100004804
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e519000000000000a404000000000000980400000c00000040a7f1f91886c80178040000000000007804000000000000e519000000000000e519000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000080808080808080808080808080808080808080808080808080808080808080808080808080d57696e6e696e67206361726473206e6f646573206561636820636f6e7461696e696e6720616c6c2077696e6e696e6720636172647320666f72206f6e6520737569742e20497420706f696e747320746f
20616e20616c7465726e61746976652077696e6e696e67206361726473206e6f64652c20746f20746865206e6578742072657175697265642077696e6e696e67206361726473206e6f646520666f7220746865206e657874207375697420696e20746869732074726565206272616e636820616e6420746f206120736574
206f6620706f736974696f6e73206e6f6465206966206974206973207468652077696e6e696e6720636172647320206e6f646520666f7220746865206c61737420737569742e2e200d0d57696e0d0d57696e0d0d57696e0d0d57696e0d0d57696e0d0d536574206f6620706f736974696f6e732028534f5029206e6f6465
7320636f6e7461696e696e672074686520706f736974696f6e7320757070657220616e64206c6f7765722076616c756520626f756e642e200d0d0d57696e0d0d534f500d0d526f6f7420706f696e7465720d0d526f6f7420706f696e7465720d0d4120706f696e74657220706572206e6f206f6620747269636b73206c65
667420616e6420706572206c656164696e672068616e642e20506f696e747320746f2074686520726f6f74206f6620697473207472656520636f6e73697374696e67206f662073756974206c656e6774687320636f6d62696e6174696f6e206e6f6465732e0d456163682073756974206c656e6774687320636f6d62696e
6174696f6e206e6f646520706f696e747320746f2074686520726f6f74206f66206974732077696e6e696e67206361726420747265652e0d0d57696e0d0d57696e0d0d534f500d0d534f500d0d416c742e0d0d416c742e0d0d416c742e0d0d4e6578740d0d4e6578740d0d4e6578740d0d4e6578740d0d0d54726565206f
66206e6f64657320656163682073746f72696e67206f6e652073756974206c656e6774687320636f6d62696e6174696f6e0d0d0d0d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000400002504000021070000f800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000d036a000000005508016d480004000200040000260400003d0500003e050000420500004305000047050000480500004c0500004d05000051050000520500005605000057050000ab050000ac050000ad050000b1050000b2050000b605
0000b7050000c4050000c5050000d2050000d305000056060000a6060000a7060000ab060000ac060000fd000000000000000000000000fd000000000000000000000000fd000000000000000000000000fd000000000000000000000000fd000000000000000000000000fd000000000000000000000000fd0000000000
00000000000000fd000000000000000000000000fd000000000000000000000000fd000000000000000000000000fd000000000000000000000000fd000000000000000000000000fd000000000000000000000000fd000000000000000000000000fd000000000000000000000000fd000000000000000000000000fd00
0000000000000000000000fd000000000000000000000000fd000000000000000000000000fd000000000000000000000000fd000000000000000000000000fd000000000000000000000000fd000000000000000000000000fd000000000000000000000000fd000000000000000000000000fd00000000000000000000
0000fd000000000000000000000000fd000000000000000000000000fd00000000000000000000000000000000000000000000010000001d00040000260400003d0500003e050000420500004305000047050000480500004c0500004d05000051050000520500005605000057050000ab050000ac050000ad050000b105
0000b2050000b6050000b7050000c4050000c5050000d2050000d305000056060000a6060000a7060000ab060000ac060000b0060000b1060000b5060000b6060000ba060000bb060000c0060000c1060000c6060000c7060000cc060000cd060000d2060000d3060000d8060000d9060000de060000df060000e4060000
e5060000e60600001e0700001f0700002007000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035ac060000b0060000b1060000b5060000b6060000ba060000bb060000c0060000c1060000c6060000c7060000cc060000cd060000d2060000d3060000d806
0000d9060000de060000df060000e4060000e5060000e60600001e0700001f0700002007000021070000fd000000000000000000000000fd000000000000000000000000fd000000000000000000000000fd000000000000000000000000fd000000000000000000000000fd000000000000000000000000fd0000000000
00000000000000fd000000000000000000000000fd000000000000000000000000fd000000000000000000000000fd000000000000000000000000fd000000000000000000000000fd000000000000000000000000fd000000000000000000000000fd000000000000000000000000fd000000000000000000000000fd00
0000000000000000000000fd000000000000000000000000fd000000000000000000000000fd000000000000000000000000fd000000000000000000000000fd000000000000000000000000fd000000000000000000000000fd000000000000000000000000fd0000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000191c001fb0cc4e20b0c04e21b0001422b001142390d2162490d21625b00000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000feff0000060002000000000000000000000000000000000001000000e0859ff2f94f6810ab9108002b27b3d93000
0000580100001000000001000000880000000200000090000000030000009c00000004000000a800000005000000bc00000007000000c800000008000000d800000009000000ec00000012000000f80000000a000000140100000c000000200100000d0000002c0100000e000000380100000f0000004001000010000000
48010000130000005001000002000000e40400001e00000001000000000073001e00000001000000000073001e0000000b000000426f204861676c756e6400001e00000001000000006f20481e000000070000004e6f726d616c00751e0000000b000000426f204861676c756e6400001e00000002000000320020481e00
0000130000004d6963726f736f667420576f726420382e3000004000000000000000000000004000000000f475e11886c8014000000000f475e11886c80103000000010000000300000000000000030000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000feff000006000200000000000000000000000000000000000200000002d5cdd59c2e1b10939708002b2cf9ae4400000005d5cdd59c2e1b10939708002b2cf9ae2c010000e80000000c00000001000000680000000f00000070000000050000007c0000000600000084000000
110000008c00000017000000940000000b0000009c00000010000000a400000013000000ac00000016000000b40000000d000000bc0000000c000000c900000002000000e40400001e0000000200000020000000030000000100000003000000010000000300000000000000030000006a1008000b000000000000000b00
0000000000000b000000000000000b000000000000001e1000000100000001000000000c100000020000001e000000060000005469746c6500030000000100000000980000000300000000000000200000000100000036000000020000003e00000001000000020000000a0000005f5049445f475549440002000000e404
0000410000004e0000007b00340038003700430043003500330038002d0041004100460038002d0034003800390031002d0041003500440046002d003200410037003700460032004400340034003800340046007d0000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001050000050000000d0000004d45544146494c4550494354006d44000099c5ffffce3e000008006d44673a0000
010009000003631f000008003100000000001400000026060f001e00ffffffff040014000000576f72640e004d6963726f736f667420576f7264050000000b0200000000050000000c02cc0d2a101c000000fb021000070000000000bc02000000000102022253797374656d0000640e666f00000a0022008a0100000000
ffffffff48d41200040000002d010000050000000201010000001c000000fb02adff0000000000009001000000000440001254696d6573204e657720526f6d616e0030cb120010da1c76c0601f76640e666f040000002d010100050000000902000000000500000002010100000007000000fc020000ffffff0000000400
00002d01020008000000fa0200000600000000000002040000002d010300070000001b042703580f1a00b70907000000fc020000ffffff000000040000002d01040004000000f001020008000000fa0200000000000000000000040000002d01020004000000f0010300030000001e000700000016040503190f3b00f609
050000000201010000000500000014023c00f609050000002e010100000020000000320a3c00f6090e000400000000002a10cc0d4120706f696e74657220706572203b0015002a002a0017002900170025001c0015002a0025001c001500050000002e0100000000050000001402000000000500000014023c00c70b0500
00002e01010000001f000000320a3c00c70b0d000400000000002a10cc0d6e6f206f6620747269636b73200029002a0015002a001b00150017001c00170025002a0020001500050000002e0100000000050000001402000000000500000014023c00570d050000002e01010000001d000000320a3c00570d0c0004000000
00002a10cc0d6c65667420616e6420706572170025001c0017001500250029002a0015002a0025001c00050000002e01000000000500000014020000000005000000020101000000050000000201010000000500000014029c00f609050000002e010100000020000000320a9c00f6090e000400000000002a10cc0d6c65
6164696e672068616e642e201700250025002a0017002900290016002900250029002a0015001500050000002e0100000000050000001402000000000500000014029c00cb0b050000002e010100000020000000320a9c00cb0b0e000400000000002a10cc0d506f696e747320746f20746865202f002a00170029001700
2000150017002a0015001800290025001500050000002e0100000000050000001402000000000500000014029c00810d050000002e010100000017000000320a9c00810d08000400000000002a10cc0d726f6f74206f66201c002a002a00170015002a001b001500050000002e0100000000050000001402000000000500
000014029c00770e050000002e010100000010000000320a9c00770e03000400000000002a10cc0d69747300170017002000050000002e0100000000050000001402000000000500000002010100000005000000020101000000050000001402fc00f609050000002e010100000013000000320afc00f609050004000000
00002a10cc0d74726565200017001c00250025001500050000002e010000000005000000140200000000050000001402fc00880a050000002e010100000020000000320afc00880a0e000400000000002a10cc0d636f6e73697374696e67206f662025002a002900200017002000170018002a00290015002a001b001500
050000002e010000000005000000140200000000050000001402fc00480c050000002e010100000013000000320afc00480c05000400000000002a10cc0d73756974200021002900170017001500050000002e010000000005000000140200000000050000001402fc00d50c050000002e010100000016000000320afc00
d50c07000400000000002a10cc0d6c656e6774687320170026002a00290017002a002000050000002e01000000000500000014020000000005000000020101000000050000000201010000000500000014025c01f609050000002e01010000001d000000320a5c01f6090c000400000000002a10cc0d636f6d62696e6174
696f6e2025002a003f002a00180029002500170017002b0029001500050000002e0100000000050000001402000000000500000014025c01ab0b050000002e010100000014000000320a5c01ab0b06000400000000002a10cc0d6e6f6465732e29002a002a00250020001500050000002e01000000000500000014020000
00000500000002010100000005000000020101000000050000001402bb01f609050000002e010100000013000000320abb01f60905000400000000002a10cc0d45616368200033002500250029001500050000002e010000000005000000140200000000050000001402bb01b10a050000002e010100000013000000320a
bb01b10a05000400000000002a10cc0d73756974200020002a00170017001500050000002e010000000005000000140200000000050000001402bb013e0b050000002e010100000029000000320abb013e0b14000400000000002a10cc0d6c656e6774687320636f6d62696e6174696f6e20170025002a00290018002900
2000150025002b003f002b00170029002500170017002b0029001500050000002e010000000005000000140200000000050000001402bb01f90d050000002e010100000011000000320abb01f90d04000400000000002a10cc0d6e6f646529002a002a002500050000002e01000000000500000014020000000005000000
020101000000050000000201010000000500000014021b02f609050000002e010100000020000000320a1b02f6090e000400000000002a10cc0d706f696e747320746f20746865202a002a001700290017002000150017002a0015001700290025001500050000002e010000000005000000140200000000050000001402
1b02a60b050000002e010100000017000000320a1b02a60b08000400000000002a10cc0d726f6f74206f66201c002a002a00170015002a001b001500050000002e0100000000050000001402000000000500000014021b029c0c050000002e010100000011000000320a1b029c0c04000400000000002a10cc0d69747320
1700170020001600050000002e0100000000050000001402000000000500000014021b02000d050000002e010100000017000000320a1b02000d08000400000000002a10cc0d77696e6e696e67203b00180029002a001700290029001500050000002e0100000000050000001402000000000500000014021b02240e0500
00002e010100000011000000320a1b02240e04000400000000002a10cc0d63617264260025001c002a00050000002e01000000000500000014020000000005000000020101000000050000000201010000000500000014027d02f609050000002e010100000013000000320a7d02f60905000400000000002a10cc0d7472
65652e0017001c00250025001500050000002e01000000000500000014020000000005000000020101000000040000002701ffff07000000fc020000ffffff000000040000002d01030008000000fa0200000600000000000002040000002d010500070000001b04d707d00fca04b709040000002d01040004000000f001
0300040000002d01020004000000f0010500030000001e00070000001604b507910feb04f60905000000020101000000040000002d01010005000000090200000000050000001402ec04f609050000002e010100000017000000320aec04f60908000400000000002a10cc0d57696e6e696e67204f001700290029001800
2a0029001500050000002e01000000000500000014020902640e050000001402ec042e0b050000002e010100000014000000320aec042e0b06000400000000002a10cc0d636172647320250025001c002a0020001500050000002e010000000005000000140200000000050000001402ec04f30b050000002e0101000000
14000000320aec04f30b06000400000000002a10cc0d6e6f6465732029002a002a00250020001500050000002e010000000005000000140200000000050000001402ec04ca0c050000002e010100000013000000320aec04ca0c05000400000000002a10cc0d65616368200025002500250029001500050000002e010000
000005000000140200000000050000001402ec04770d050000002e010100000020000000320aec04770d0e000400000000002a10cc0d636f6e7461696e696e6720616c6c25002a002900170026001700290018002a0029001500250017001700050000002e01000000000500000014020000000005000000020101000000
050000000201010000000500000014024c05f609050000002e010100000017000000320a4c05f60908000400000000002a10cc0d77696e6e696e67203b0018002a0029001800290029001500050000002e0100000000050000001402000000000500000014024c051b0b050000002e01010000001a000000320a4c051b0b
0a000400000000002a10cc0d636172647320666f7220250025001c002a00200015001b002a001c001500050000002e0100000000050000001402000000000500000014024c05560c050000002e010100000011000000320a4c05560c04000400000000002a10cc0d6f6e65202a00290025001500050000002e0100000000
050000001402000000000500000014024c05e30c050000002e010100000019000000320a4c05e30c09000400000000002a10cc0d737569742e20497420202100290017001700150015001c0017001500050000002e0100000000050000001402000000000500000014024c05cd0d050000002e01010000001d000000320a
4c05cd0d0c000400000000002a10cc0d706f696e747320746f20616e2a002a001700290017002000150017002a00150026002900050000002e0100000000050000001402000000000500000002010100000005000000020101000000050000001402ac05f609050000002e01010000001d000000320aac05f6090c000400
000000002a10cc0d616c7465726e61746976652025001700170025001c002900250017001800290025001600050000002e010000000005000000140200000000050000001402ac056b0b050000002e010100000017000000320aac056b0b08000400000000002a10cc0d77696e6e696e67203b0018002900290018002a00
29001500050000002e010000000005000000140200000000050000001402ac05900c050000002e010100000014000000320aac05900c06000400000000002a10cc0d636172647320250025001c002a0020001500050000002e010000000005000000140200000000050000001402ac05550d050000002e01010000001f00
0000320aac05550d0d000400000000002a10cc0d6e6f64652c20746f20746865200029002a002a0025001500150017002a0015001700290025001500050000002e010000000005000000140200000000050000001402ac05f10e050000002e010100000011000000320aac05f10e04000400000000002a10cc0d6e657874
290025002a001700050000002e01000000000500000014020000000005000000020101000000050000000201010000000500000014020c06f609050000002e010100000019000000320a0c06f60909000400000000002a10cc0d726571756972656420201c0025002a00290017001c0025002a001600050000002e010000
0000050000001402000000000500000014020c06220b050000002e010100000017000000320a0c06220b08000400000000002a10cc0d77696e6e696e67203a0017002a00290018002a0029001500050000002e0100000000050000001402000000000500000014020c06460c050000002e010100000014000000320a0c06
460c06000400000000002a10cc0d636172647320250025001c002a0020001500050000002e0100000000050000001402000000000500000014020c060b0d050000002e01010000001f000000320a0c060b0d0d000400000000002a10cc0d6e6f646520666f7220746865200029002a002a00250015001b002a001c001500
1700290025001500050000002e0100000000050000001402000000000500000014020c06b20e050000002e010100000011000000320a0c06b20e04000400000000002a10cc0d6e6578742900260029001700050000002e010000000005000000140200000000050000000201010000000500000002010100000005000000
14026b06f609050000002e010100000017000000320a6b06f60908000400000000002a10cc0d7375697420696e2020002900170017001500180029001500050000002e0100000000050000001402000000000500000014026b06d80a050000002e010100000013000000320a6b06d80a05000400000000002a10cc0d7468
6973200018002900170020001500050000002e0100000000050000001402000000000500000014026b06650b050000002e010100000013000000320a6b06650b05000400000000002a10cc0d74726565200017001c00250025001500050000002e0100000000050000001402000000000500000014026b06f70b05000000
2e01010000002c000000320a6b06f70b16000400000000002a10cc0d6272616e636820616e6420746f206120736574206f662a001c0025002900260029001500250029002a00150017002a0015002500150020002500170015002a001b00050000002e010000000005000000140200000000050000000201010000000500
0000020101000000050000001402cb06f609050000002e01010000001a000000320acb06f6090a000400000000002a10cc0d706f736974696f6e73202a002a0020001700170017002a00290020001600050000002e010000000005000000140200000000050000001402cb06380b050000002e010100000013000000320a
cb06380b05000400000000002a10cc0d6e6f6465200029002a002a0025001500050000002e010000000005000000140200000000050000001402cb06ef0b050000002e01010000001f000000320acb06ef0b0d000400000000002a10cc0d696620697420697320746865200017001b001500170017001500170020001500
1800290025001600050000002e010000000005000000140200000000050000001402cb06410d050000002e010100000017000000320acb06410d08000400000000002a10cc0d77696e6e696e67203b0018002900290018002a0029001500050000002e010000000005000000140200000000050000001402cb06660e0500
00002e010100000013000000320acb06660e05000400000000002a10cc0d636172647300250025001c002a002000050000002e01000000000500000014020000000005000000020101000000050000000201010000000500000014022d07f609050000002e010100000026000000320a2d07f60912000400000000002a10
cc0d6e6f646520666f7220746865206c6173742029002a002a00250015001b002a001c001500170029002500150017002500200017001500050000002e0100000000050000001402000000000500000014022d07250c050000002e010100000014000000320a2d07250c06000400000000002a10cc0d737569742e2e2100
29001700170015001500050000002e01000000000500000014020000000005000000020101000000040000002701ffff07000000fc020000ffffff000000040000002d01030008000000fa0200000600000000000002040000002d010500070000001b048301380256009300040000002d01040004000000f00103000400
00002d01020004000000f0010500030000001e000700000016046101f9017700d20005000000020101000000040000002d010100050000000902000000000500000014027800d200050000002e010100000011000000320a7800d20004000400000000002a10cc0d526f6f7437002a002a001700050000002e0100000000
0500000014020902640e0500000002010100000005000000020101000000050000001402da00d200050000002e010100000016000000320ada00d20007000400000000002a10cc0d706f696e746572002a002a0017002900170025001c00050000002e010000000005000000140200000000050000000201010000000400
00002701ffff07000000fc020000ffffff000000040000002d01030008000000fa0200000600000000000002040000002d010500070000001b048301340656005304040000002d01040004000000f0010300040000002d01020004000000f0010500030000001e000700000016046101f505770092040500000002010100
0000040000002d0101000500000009020000000005000000140278009204050000002e010100000011000000320a7800920404000400000000002a10cc0d526f6f7437002a002a001700050000002e01000000000500000014020902640e0500000002010100000005000000020101000000050000001402da0092040500
00002e010100000016000000320ada00920407000400000000002a10cc0d706f696e746572002a002a0017002900170025001c00050000002e01000000000500000014020000000005000000020101000000040000002701ffff1000000026060f001600ffffffff0000ab020000ca000000e0030000d300000008000000
fa0205000100000000000000040000002d01030007000000fc020000000000000000040000002d010500050000000601020000002800000024031200b002cb00af02cb00ae02cc00ad02cd00ac02ce00ac02ce00ad02cf00ae02d000af02d100af02d100af02d100b002d000b102cf00b202ce00b202ce00b102cd00b002
cc00b002cb002800000024031200bb02cb00ba02cb00b902cc00b802cd00b802ce00b802cf00b802d000b902d100ba02d100bb02d100bb02d100bc02d000bd02cf00be02ce00be02ce00bd02cd00bc02cc00bc02cb002800000024031200c702cb00c602cb00c502cc00c402cd00c402ce00c402cf00c402d000c502d100
c602d100c702d100c702d100c802d000c902cf00ca02ce00ca02ce00c902cd00c802cc00c802cb002800000024031200d302cb00d202cb00d102cc00d002cd00d002ce00d002cf00d002d000d102d100d202d100d302d100d302d100d402d000d502cf00d602ce00d602ce00d502cd00d402cc00d402cb00280000002403
1200df02cb00de02cb00dd02cc00dc02cd00dc02ce00dc02cf00dc02d000dd02d100de02d100df02d100df02d100e002d000e102cf00e202ce00e202ce00e102cd00e002cc00e002cb002800000024031200eb02cb00ea02cb00e902cc00e802cd00e802ce00e802cf00e802d000e902d100ea02d100eb02d100eb02d100
ec02d000ed02cf00ee02ce00ee02ce00ed02cd00ec02cc00ec02cb002800000024031200f702cb00f602cb00f502cc00f402cd00f402ce00f402cf00f402d000f502d100f602d100f702d100f702d100f802d000f902cf00fa02ce00fa02ce00f902cd00f802cc00f802cb0028000000240312000303cb000203cb000103
cc000003cd000003ce000003cf000003d0000103d1000203d1000303d1000303d1000403d0000503cf000603ce000603ce000503cd000403cc000403cb0028000000240312000f03cb000e03cb000d03cc000c03cd000c03ce000c03cf000c03d0000d03d1000e03d1000f03d1000f03d1001003d0001103cf001203ce00
1203ce001103cd001003cc001003cb0028000000240312001b03cb001a03cb001903cc001803cd001803ce001803cf001803d0001903d1001a03d1001b03d1001b03d1001c03d0001d03cf001e03ce001e03ce001d03cd001c03cc001c03cb0028000000240312002703cb002603cb002503cc002403cd002403ce002403
cf002403d0002503d1002603d1002703d1002703d1002803d0002903cf002a03ce002a03ce002903cd002803cc002803cb0028000000240312003303cb003203cb003103cc003003cd003003ce003003cf003003d0003103d1003203d1003303d1003303d1003403d0003503cf003603ce003603ce003503cd003403cc00
3403cb0028000000240312003f03cb003e03cb003d03cc003c03cd003c03ce003c03cf003c03d0003d03d1003e03d1003f03d1003f03d1004003d0004103cf004203ce004203ce004103cd004003cc004003cb0028000000240312004b03cb004a03cb004903cc004803cd004803ce004803cf004803d0004903d1004a03
d1004b03d1004b03d1004c03d0004d03cf004e03ce004e03ce004d03cd004c03cc004c03cb0028000000240312005703cb005603cb005503cc005403cd005403ce005403cf005403d0005503d1005603d1005703d1005703d1005803d0005903cf005a03ce005a03ce005903cd005803cc005803cb002800000024031200
6303cb006203cb006103cc006003cd006003ce006003cf006003d0006103d1006203d1006303d1006303d1006403d0006503cf006603ce006603ce006503cd006403cc006403cb0028000000240312006f03cb006e03cb006d03cc006c03cd006c03ce006c03cf006c03d0006d03d1006e03d1006f03d1006f03d1007003
d0007103cf007203ce007203ce007103cd007003cc007003cb0028000000240312007b03cb007a03cb007903cc007803cd007803ce007803cf007803d0007903d1007a03d1007b03d1007b03d1007c03d0007d03cf007e03ce007e03ce007d03cd007c03cc007c03cb0028000000240312008703cb008603cb008503cc00
8403cd008403ce008403cf008403d0008503d1008603d1008703d1008703d1008803d0008903cf008a03ce008a03ce008903cd008803cc008803cb0028000000240312009303cb009203cb009103cc009003cd009003ce009003cf009003d0009103d1009203d1009303d1009303d1009403d0009503cf009603ce009603
ce009503cd009403cc009403cb0028000000240312009f03cb009e03cb009d03cc009c03cd009c03ce009c03cf009c03d0009d03d1009e03d1009f03d1009f03d100a003d000a103cf00a203ce00a203ce00a103cd00a003cc00a003cb002800000024031200ab03cb00aa03cb00a903cc00a803cd00a803ce00a803cf00
a803d000a903d100aa03d100ab03d100ab03d100ac03d000ad03cf00ae03ce00ae03ce00ad03cd00ac03cc00ac03cb002800000024031200b703cb00b603cb00b503cc00b403cd00b403ce00b403cf00b403d000b503d100b603d100b703d100b703d100b803d000b903cf00ba03ce00ba03ce00b903cd00b803cc00b803
cb002800000024031200c303cb00c203cb00c103cc00c003cd00c003ce00c003cf00c003d000c103d100c203d100c303d100c303d100c403d000c503cf00c603ce00c603ce00c503cd00c403cc00c403cb002800000024031200cf03cb00ce03cb00cd03cc00cc03cd00cc03ce00cc03cf00cc03d000cd03d100ce03d100
cf03d100cf03d100d003d000d103cf00d203ce00d203ce00d103cd00d003cc00d003cb0005000000060101000000040000002d010200040000002d01040004000000f00105000800000026060f000600ffffffff010007000000fc020000ffffff000000040000002d01050008000000fa02000006000000000000020400
00002d010600070000001b04bb05fc01ca04cf00040000002d01040004000000f0010500040000002d01020004000000f0010600030000001e000700000016049905bd01eb040e0105000000020101000000040000002d01010005000000090200000000050000001402ee040e01050000002e010100000010000000320a
ee040e0103000400000000002a10cc0d57696e034f0017002900050000002e01000000000500000014020902640e05000000020101000000040000002701ffff07000000fc020000ffffff000000040000002d01050008000000fa0200000600000000000002040000002d010600070000001b04bb050805ca04db030400
00002d01040004000000f0010500040000002d01020004000000f0010600030000001e000700000016049905c904eb041a0405000000020101000000040000002d01010005000000090200000000050000001402ee041a04050000002e010100000010000000320aee041a0403000400000000002a10cc0d57696e034f00
17002900050000002e01000000000500000014020902640e05000000020101000000040000002701ffff07000000fc020000ffffff000000040000002d01050008000000fa0200000600000000000002040000002d010600070000001b041308fc012207cf00040000002d01040004000000f0010500040000002d010200
04000000f0010600030000001e00070000001604f107bd0143070e0105000000020101000000040000002d0101000500000009020000000005000000140246070e01050000002e010100000010000000320a46070e0103000400000000002a10cc0d57696e034f0017002900050000002e01000000000500000014020902
640e05000000020101000000040000002701ffff07000000fc020000ffffff000000040000002d01050008000000fa0200000600000000000002040000002d010600070000001b04130808052207db03040000002d01040004000000f0010500040000002d01020004000000f0010600030000001e00070000001604f107
c90443071a0405000000020101000000040000002d0101000500000009020000000005000000140246071a04050000002e010100000010000000320a46071a0403000400000000002a10cc0d57696e034f0017002900050000002e01000000000500000014020902640e05000000020101000000040000002701ffff0700
0000fc020000ffffff000000040000002d01050008000000fa0200000600000000000002040000002d010600070000001b046b0afc017a09cf00040000002d01040004000000f0010500040000002d01020004000000f0010600030000001e00070000001604490abd019b090e0105000000020101000000040000002d01
0100050000000902000000000500000014029e090e01050000002e010100000010000000320a9e090e0103000400000000002a10cc0d57696e034f0017002900050000002e01000000000500000014020902640e05000000020101000000040000002701ffff07000000fc020000ffffff000000040000002d0105000800
0000fa0200000600000000000002040000002d010600070000001b046b0a08057a09db03040000002d01040004000000f0010500040000002d01020004000000f0010600030000001e00070000001604490ac9049b091a0405000000020101000000040000002d010100050000000902000000000500000014029e091a04
050000002e010100000010000000320a9e091a0403000400000000002a10cc0d57696e034f0017002900050000002e01000000000500000014020902640e05000000020101000000040000002701ffff07000000fc020000ffffff000000040000002d01050008000000fa0200000600000000000002040000002d010600
070000001b04130814082207e706040000002d01040004000000f0010500040000002d01020004000000f0010600030000001e00070000001604f107d5074307260705000000020101000000040000002d0101000500000009020000000005000000140246072607050000002e010100000010000000320a460726070300
0400000000002a10cc0d57696e034f0017002900050000002e01000000000500000014020902640e05000000020101000000040000002701ffff07000000fc020000ffffff000000040000002d01050008000000fa0200000600000000000002040000002d010600070000001b046b0a14087a09e706040000002d010400
04000000f0010500040000002d01020004000000f0010600030000001e00070000001604490ad5079b09260705000000020101000000040000002d010100050000000902000000000500000014029e092607050000002e010100000010000000320a9e09260703000400000000002a10cc0d57696e034f00170029000500
00002e01000000000500000014020902640e05000000020101000000040000002701ffff07000000fc020000ffffff000000040000002d01050008000000fa0200000600000000000002040000002d010600070000001b040f0cfc011e0bcf00040000002d01040004000000f0010500040000002d01020004000000f001
0600030000001e00070000001604ed0bbd013f0b0e0105000000020101000000040000002d01010005000000090200000000050000001402420b0e01050000002e010100000010000000320a420b0e0103000400000000002a10cc0d534f50032e003c002f00050000002e01000000000500000014020902640e05000000
020101000000040000002701ffff07000000fc020000ffffff000000040000002d01050008000000fa0200000600000000000002040000002d010600070000001b040f0c08051e0bdb03040000002d01040004000000f0010500040000002d01020004000000f0010600030000001e00070000001604ed0bc9043f0b1a04
05000000020101000000040000002d01010005000000090200000000050000001402420b1a04050000002e010100000010000000320a420b1a0403000400000000002a10cc0d534f50032e003c002f00050000002e01000000000500000014020902640e05000000020101000000040000002701ffff07000000fc020000
ffffff000000040000002d01050008000000fa0200000600000000000002040000002d010600070000001b040f0c14081e0be706040000002d01040004000000f0010500040000002d01020004000000f0010600030000001e00070000001604ed0bd5073f0b260705000000020101000000040000002d01010005000000
090200000000050000001402420b2607050000002e010100000010000000320a420b260703000400000000002a10cc0d534f50032e003c002f00050000002e01000000000500000014020902640e05000000020101000000040000002701ffff07000000fc020000ffffff000000040000002d01050008000000fa020000
0600000000000002040000002d010600070000001b040f0c940f6a0af309040000002d01040004000000f0010500040000002d01020004000000f0010600030000001e00070000001604ed0b550f8b0a320a05000000020101000000040000002d010100050000000902000000000500000014028c0a320a050000002e01
0100000026000000320a8c0a320a12000400000000002a10cc0d536574206f6620706f736974696f6e7320282e002500170015002a001b0015002a002a0020001700170017002a002a00200015001c00050000002e01000000000500000014020902640e0500000014028c0a690c050000002e010100000013000000320a
8c0a690c05000400000000002a10cc0d534f502920002e003c002f001c001500050000002e0100000000050000001402000000000500000014028c0a330d050000002e010100000013000000320a8c0a330d05000400000000002a10cc0d6e6f6465730029002a002a0025002000050000002e0100000000050000001402
000000000500000002010100000005000000020101000000050000001402ec0a320a050000002e010100000031000000320aec0a320a19000400000000002a10cc0d636f6e7461696e696e672074686520706f736974696f6e73200025002a002900170025001700290018002a002900150017002900250015002a002a00
20001700180017002a00290020001600050000002e010000000005000000140200000000050000001402ec0a630d050000002e010100000019000000320aec0a630d09000400000000002a10cc0d757070657220616e642029002a002a0025001c001500250029002a00050000002e010000000005000000140200000000
05000000020101000000050000000201010000000500000014024c0b320a050000002e010100000014000000320a4c0b320a06000400000000002a10cc0d6c6f7765722017002b003a0025001c001500050000002e0100000000050000001402000000000500000014024c0b040b050000002e010100000014000000320a
4c0b040b06000400000000002a10cc0d76616c756520290025001800290025001500050000002e0100000000050000001402000000000500000014024c0bcd0b050000002e010100000014000000320a4c0bcd0b06000400000000002a10cc0d626f756e642e2a002a002a0029002a001500050000002e01000000000500
0000140200000000050000000201010000000500000002010100000005000000020101000000040000002701ffff1000000026060f001600ffffffff0000f70100007e010000b40200007702000008000000fa0200000600000000000000040000002d01050007000000fc020100000000000000040000002d0106000800
000025030200fb0182018a024002040000002d01030004000000f001050007000000fc020000000000000000040000002d0105000a000000240303006e025202af027202a2022b02040000002d010200040000002d01040004000000f00105000800000026060f000600ffffffff01001000000026060f001600ffffffff
0000f70100001e050000e00300006805000008000000fa0200000600000000000000040000002d010500040000002d0106000800000025030200fb0142059c034205040000002d01030004000000f001050007000000fc020000000000000000040000002d0105000a000000240303009a036305db0342059a0322050400
00002d010200040000002d01040004000000f00105000800000026060f000600ffffffff01001000000026060f001600ffffffff000022010000b60500006c0100002707000008000000fa0200000600000000000000040000002d010500040000002d01060008000000250302004701ba054701e306040000002d010300
04000000f001050007000000fc020000000000000000040000002d0105000a000000240303002601e106470122076701e106040000002d010200040000002d01040004000000f00105000800000026060f000600ffffffff01001000000026060f001600ffffffff0000f701000076070000e0030000c007000008000000
fa0200000600000000000000040000002d010500040000002d0106000800000025030200fb019a079c039a07040000002d01030004000000f001050007000000fc020000000000000000040000002d0105000a000000240303009a03bb07db039a079a037a07040000002d010200040000002d01040004000000f0010500
0800000026060f000600ffffffff01001000000026060f001600ffffffff00000305000076070000ec060000c007000008000000fa0200000600000000000000040000002d010500040000002d010600080000002503020007059a07a8069a07040000002d01030004000000f001050007000000fc020000000000000000
040000002d0105000a00000024030300a606bb07e7069a07a6067a07040000002d010200040000002d01040004000000f00105000800000026060f000600ffffffff01001000000026060f001600ffffffff0000220100000e0800006c0100007f09000008000000fa0200000600000000000000040000002d0105000400
00002d01060008000000250302004701120847013b09040000002d01030004000000f001050007000000fc020000000000000000040000002d0105000a000000240303002601390947017a0967013909040000002d010200040000002d01040004000000f00105000800000026060f000600ffffffff0100100000002606
0f001600ffffffff00002e0400000e080000780400007f09000008000000fa0200000600000000000000040000002d010500040000002d01060008000000250302005304120853043b09040000002d01030004000000f001050007000000fc020000000000000000040000002d0105000a00000024030300320439095304
7a0973043909040000002d010200040000002d01040004000000f00105000800000026060f000600ffffffff01001000000026060f001600ffffffff00003a0700000e080000840700007f09000008000000fa0200000600000000000000040000002d010500040000002d01060008000000250302005f0712085f073b09
040000002d01030004000000f001050007000000fc020000000000000000040000002d0105000a000000240303003e0739095f077a097f073909040000002d010200040000002d01040004000000f00105000800000026060f000600ffffffff01001000000026060f001600ffffffff000022010000660a00006c010000
230b000008000000fa0200000600000000000000040000002d010500040000002d010600080000002503020047016a0a4701df0a040000002d01030004000000f001050007000000fc020000000000000000040000002d0105000a000000240303002601dd0a47011e0b6701dd0a040000002d010200040000002d010400
04000000f00105000800000026060f000600ffffffff0100040000002d010600040000002d010300070000001b04bb056403ca043702040000002d010400040000002d010200030000001e000700000016049c052803e804730205000000020101000000040000002d01010005000000090200000000050000001402eb04
7302050000002e010100000011000000320aeb04730204000400000000002a10cc0d416c742e3b00170017001500050000002e01000000000500000014020902640e05000000020101000000040000002701ffff040000002d010600040000002d010300070000001b041308640322073702040000002d01040004000000
2d010200030000001e00070000001604f40728034007730205000000020101000000040000002d0101000500000009020000000005000000140243077302050000002e010100000011000000320a4307730204000400000000002a10cc0d416c742e3b00170017001500050000002e01000000000500000014020902640e
05000000020101000000040000002701ffff040000002d010600040000002d010300070000001b041308700622074305040000002d010400040000002d010200030000001e00070000001604f407340640077f0505000000020101000000040000002d0101000500000009020000000005000000140243077f0505000000
2e010100000011000000320a43077f0504000400000000002a10cc0d416c742e3b00170017001500050000002e01000000000500000014020902640e05000000020101000000040000002701ffff040000002d010600040000002d010300070000001b04e7067402f6054701040000002d010400040000002d0102000300
00001e00070000001604c80638021406830105000000020101000000040000002d0101000500000009020000000005000000140217068301050000002e010100000011000000320a1706830104000400000000002a10cc0d4e6578743c00250029001700050000002e01000000000500000014020902640e050000000201
01000000040000002701ffff040000002d010600040000002d010300070000001b043f0974024e084701040000002d010400040000002d010200030000001e00070000001604200938026c08830105000000020101000000040000002d010100050000000902000000000500000014026f088301050000002e0101000000
11000000320a6f08830104000400000000002a10cc0d4e6578743c00250029001700050000002e01000000000500000014020902640e05000000020101000000040000002701ffff040000002d010600040000002d010300070000001b043f0980054e085304040000002d010400040000002d010200030000001e000700
00001604200944056c088f0405000000020101000000040000002d010100050000000902000000000500000014026f088f04050000002e010100000011000000320a6f088f0404000400000000002a10cc0d4e6578743c00250029001700050000002e01000000000500000014020902640e050000000201010000000400
00002701ffff040000002d010600040000002d010300070000001b043f098c084e085f07040000002d010400040000002d010200030000001e00070000001604200950086c089b0705000000020101000000040000002d010100050000000902000000000500000014026f089b07050000002e010100000011000000320a
6f089b0704000400000000002a10cc0d4e6578743c00250029001700050000002e01000000000500000014020902640e05000000020101000000040000002701ffff1000000026060f001600ffffffff00002e040000660a000078040000230b000008000000fa0200000600000000000000040000002d01050004000000
2d010600080000002503020053046a0a5304df0a040000002d01030004000000f001050007000000fc020000000000000000040000002d0105000a000000240303003204dd0a53041e0b7304dd0a040000002d010200040000002d01040004000000f00105000800000026060f000600ffffffff01001000000026060f00
1600ffffffff00003a070000660a000084070000230b000008000000fa0200000600000000000000040000002d010500040000002d01060008000000250302005f076a0a5f07df0a040000002d01030004000000f001050007000000fc020000000000000000040000002d0105000a000000240303003e07dd0a5f071e0b
7f07dd0a040000002d010200040000002d01040004000000f00105000800000026060f000600ffffffff010007000000fc020000ffffff000000040000002d01050008000000fa0200000600000000000002040000002d010700070000001b049f03340672020b01040000002d01040004000000f0010500040000002d01
020004000000f0010700030000001e000700000016047d03f50593024a0105000000020101000000040000002d0101000500000009020000000005000000140294024a01050000002e010100000017000000320a94024a0108000400000000002a10cc0d54726565206f662034001c002500240015002a001b0015000500
00002e01000000000500000014020902640e05000000140294025202050000002e010100000014000000320a9402520206000400000000002a10cc0d6e6f6465732029002a002a00250020001500050000002e01000000000500000014020000000005000000140294022903050000002e01010000001f000000320a9402
29030d000400000000002a10cc0d656163682073746f72696e67200025002500250029001500200017002a001c0017002a0029001500050000002e0100000000050000001402000000000500000014029402d204050000002e010100000011000000320a9402d20404000400000000002a10cc0d6f6e65202a0029002500
1500050000002e01000000000500000014020000000005000000140294025f05050000002e010100000011000000320a94025f0504000400000000002a10cc0d737569742100290017001700050000002e0100000000050000001402000000000500000002010100000005000000020101000000050000001402f6024a01
050000002e010100000028000000320af6024a0113000400000000002a10cc0d6c656e6774687320636f6d62696e6174696f6e031700250029002a0017002a002000150025002b003f002a00180029002500170017002a002900050000002e01000000000500000014020000000005000000020101000000040000002701
ffff1000000026060f001600ffffffff0000430100009a03000078020000cf04000008000000fa0200000600000000000000040000002d010500040000002d010600080000002503020073029e0373019e04040000002d01030004000000f001050007000000fc020000000000000000040000002d0105000a0000002403
03005e0185044701ca048c01b304040000002d010200040000002d01040004000000f00105000800000026060f000600ffffffff0100040000002d010000030000000000}{\result {\f1\fs20\lang1053 {\pict{\*\picprop\shplid1025{\sp{\sn shapeType}{\sv 75}}{\sp{\sn fFlipH}{\sv 0}}
{\sp{\sn fFlipV}{\sv 0}}{\sp{\sn pictureGray}{\sv 0}}{\sp{\sn pictureBiLevel}{\sv 0}}{\sp{\sn pictureActive}{\sv 0}}{\sp{\sn fillColor}{\sv 268435473}}{\sp{\sn fFilled}{\sv 0}}{\sp{\sn fHitTestFill}{\sv 1}}{\sp{\sn fillShape}{\sv 1}}
{\sp{\sn fillUseRect}{\sv 0}}{\sp{\sn fNoFillHitTest}{\sv 0}}{\sp{\sn fLine}{\sv 0}}}\picscalex98\picscaley98\piccropl0\piccropr0\piccropt0\piccropb0
\picw17517\pich14951\picwgoal9931\pichgoal8476\wmetafile8\bliptag21317130\blipupi-134{\*\blipuid 0145460ab0e156603b98478d583ea052}
010009000003631f000008003100000000001400000026060f001e00ffffffff040014000000576f72640e004d6963726f736f667420576f7264050000000b02
00000000050000000c02cc0d2a101c000000fb021000070000000000bc02000000000102022253797374656d0000640e666f00000a0022008a0100000000ffff
ffff48d41200040000002d010000050000000201010000001c000000fb02adff0000000000009001000000000440001254696d6573204e657720526f6d616e00
30cb120010da1c76c0601f76640e666f040000002d010100050000000902000000000500000002010100000007000000fc020000ffffff000000040000002d01
020008000000fa0200000600000000000002040000002d010300070000001b042703580f1a00b70907000000fc020000ffffff000000040000002d0104000400
0000f001020008000000fa0200000000000000000000040000002d01020004000000f0010300030000001e000700000016040503190f3b00f609050000000201
010000000500000014023c00f609050000002e010100000020000000320a3c00f6090e000400000000002a10cc0d4120706f696e74657220706572203b001500
2a002a0017002900170025001c0015002a0025001c001500050000002e0100000000050000001402000000000500000014023c00c70b050000002e0101000000
1f000000320a3c00c70b0d000400000000002a10cc0d6e6f206f6620747269636b73200029002a0015002a001b00150017001c00170025002a00200015000500
00002e0100000000050000001402000000000500000014023c00570d050000002e01010000001d000000320a3c00570d0c000400000000002a10cc0d6c656674
20616e6420706572170025001c0017001500250029002a0015002a0025001c00050000002e010000000005000000140200000000050000000201010000000500
00000201010000000500000014029c00f609050000002e010100000020000000320a9c00f6090e000400000000002a10cc0d6c656164696e672068616e642e20
1700250025002a0017002900290016002900250029002a0015001500050000002e0100000000050000001402000000000500000014029c00cb0b050000002e01
0100000020000000320a9c00cb0b0e000400000000002a10cc0d506f696e747320746f20746865202f002a001700290017002000150017002a00150018002900
25001500050000002e0100000000050000001402000000000500000014029c00810d050000002e010100000017000000320a9c00810d08000400000000002a10
cc0d726f6f74206f66201c002a002a00170015002a001b001500050000002e0100000000050000001402000000000500000014029c00770e050000002e010100
000010000000320a9c00770e03000400000000002a10cc0d69747300170017002000050000002e01000000000500000014020000000005000000020101000000
05000000020101000000050000001402fc00f609050000002e010100000013000000320afc00f60905000400000000002a10cc0d74726565200017001c002500
25001500050000002e010000000005000000140200000000050000001402fc00880a050000002e010100000020000000320afc00880a0e000400000000002a10
cc0d636f6e73697374696e67206f662025002a002900200017002000170018002a00290015002a001b001500050000002e010000000005000000140200000000
050000001402fc00480c050000002e010100000013000000320afc00480c05000400000000002a10cc0d73756974200021002900170017001500050000002e01
0000000005000000140200000000050000001402fc00d50c050000002e010100000016000000320afc00d50c07000400000000002a10cc0d6c656e6774687320
170026002a00290017002a002000050000002e01000000000500000014020000000005000000020101000000050000000201010000000500000014025c01f609
050000002e01010000001d000000320a5c01f6090c000400000000002a10cc0d636f6d62696e6174696f6e2025002a003f002a00180029002500170017002b00
29001500050000002e0100000000050000001402000000000500000014025c01ab0b050000002e010100000014000000320a5c01ab0b06000400000000002a10
cc0d6e6f6465732e29002a002a00250020001500050000002e010000000005000000140200000000050000000201010000000500000002010100000005000000
1402bb01f609050000002e010100000013000000320abb01f60905000400000000002a10cc0d45616368200033002500250029001500050000002e0100000000
05000000140200000000050000001402bb01b10a050000002e010100000013000000320abb01b10a05000400000000002a10cc0d73756974200020002a001700
17001500050000002e010000000005000000140200000000050000001402bb013e0b050000002e010100000029000000320abb013e0b14000400000000002a10
cc0d6c656e6774687320636f6d62696e6174696f6e20170025002a002900180029002000150025002b003f002b00170029002500170017002b00290015000500
00002e010000000005000000140200000000050000001402bb01f90d050000002e010100000011000000320abb01f90d04000400000000002a10cc0d6e6f6465
29002a002a002500050000002e01000000000500000014020000000005000000020101000000050000000201010000000500000014021b02f609050000002e01
0100000020000000320a1b02f6090e000400000000002a10cc0d706f696e747320746f20746865202a002a001700290017002000150017002a00150017002900
25001500050000002e0100000000050000001402000000000500000014021b02a60b050000002e010100000017000000320a1b02a60b08000400000000002a10
cc0d726f6f74206f66201c002a002a00170015002a001b001500050000002e0100000000050000001402000000000500000014021b029c0c050000002e010100
000011000000320a1b029c0c04000400000000002a10cc0d697473201700170020001600050000002e0100000000050000001402000000000500000014021b02
000d050000002e010100000017000000320a1b02000d08000400000000002a10cc0d77696e6e696e67203b00180029002a001700290029001500050000002e01
00000000050000001402000000000500000014021b02240e050000002e010100000011000000320a1b02240e04000400000000002a10cc0d6361726426002500
1c002a00050000002e01000000000500000014020000000005000000020101000000050000000201010000000500000014027d02f609050000002e0101000000
13000000320a7d02f60905000400000000002a10cc0d747265652e0017001c00250025001500050000002e010000000005000000140200000000050000000201
01000000040000002701ffff07000000fc020000ffffff000000040000002d01030008000000fa0200000600000000000002040000002d010500070000001b04
d707d00fca04b709040000002d01040004000000f0010300040000002d01020004000000f0010500030000001e00070000001604b507910feb04f60905000000
020101000000040000002d01010005000000090200000000050000001402ec04f609050000002e010100000017000000320aec04f60908000400000000002a10
cc0d57696e6e696e67204f0017002900290018002a0029001500050000002e01000000000500000014020902640e050000001402ec042e0b050000002e010100
000014000000320aec042e0b06000400000000002a10cc0d636172647320250025001c002a0020001500050000002e0100000000050000001402000000000500
00001402ec04f30b050000002e010100000014000000320aec04f30b06000400000000002a10cc0d6e6f6465732029002a002a00250020001500050000002e01
0000000005000000140200000000050000001402ec04ca0c050000002e010100000013000000320aec04ca0c05000400000000002a10cc0d6561636820002500
2500250029001500050000002e010000000005000000140200000000050000001402ec04770d050000002e010100000020000000320aec04770d0e0004000000
00002a10cc0d636f6e7461696e696e6720616c6c25002a002900170026001700290018002a0029001500250017001700050000002e0100000000050000001402
0000000005000000020101000000050000000201010000000500000014024c05f609050000002e010100000017000000320a4c05f60908000400000000002a10
cc0d77696e6e696e67203b0018002a0029001800290029001500050000002e0100000000050000001402000000000500000014024c051b0b050000002e010100
00001a000000320a4c051b0b0a000400000000002a10cc0d636172647320666f7220250025001c002a00200015001b002a001c001500050000002e0100000000
050000001402000000000500000014024c05560c050000002e010100000011000000320a4c05560c04000400000000002a10cc0d6f6e65202a00290025001500
050000002e0100000000050000001402000000000500000014024c05e30c050000002e010100000019000000320a4c05e30c09000400000000002a10cc0d7375
69742e20497420202100290017001700150015001c0017001500050000002e0100000000050000001402000000000500000014024c05cd0d050000002e010100
00001d000000320a4c05cd0d0c000400000000002a10cc0d706f696e747320746f20616e2a002a001700290017002000150017002a0015002600290005000000
2e0100000000050000001402000000000500000002010100000005000000020101000000050000001402ac05f609050000002e01010000001d000000320aac05
f6090c000400000000002a10cc0d616c7465726e61746976652025001700170025001c002900250017001800290025001600050000002e010000000005000000
140200000000050000001402ac056b0b050000002e010100000017000000320aac056b0b08000400000000002a10cc0d77696e6e696e67203b00180029002900
18002a0029001500050000002e010000000005000000140200000000050000001402ac05900c050000002e010100000014000000320aac05900c060004000000
00002a10cc0d636172647320250025001c002a0020001500050000002e010000000005000000140200000000050000001402ac05550d050000002e0101000000
1f000000320aac05550d0d000400000000002a10cc0d6e6f64652c20746f20746865200029002a002a0025001500150017002a00150017002900250015000500
00002e010000000005000000140200000000050000001402ac05f10e050000002e010100000011000000320aac05f10e04000400000000002a10cc0d6e657874
290025002a001700050000002e01000000000500000014020000000005000000020101000000050000000201010000000500000014020c06f609050000002e01
0100000019000000320a0c06f60909000400000000002a10cc0d726571756972656420201c0025002a00290017001c0025002a001600050000002e0100000000
050000001402000000000500000014020c06220b050000002e010100000017000000320a0c06220b08000400000000002a10cc0d77696e6e696e67203a001700
2a00290018002a0029001500050000002e0100000000050000001402000000000500000014020c06460c050000002e010100000014000000320a0c06460c0600
0400000000002a10cc0d636172647320250025001c002a0020001500050000002e0100000000050000001402000000000500000014020c060b0d050000002e01
010000001f000000320a0c060b0d0d000400000000002a10cc0d6e6f646520666f7220746865200029002a002a00250015001b002a001c001500170029002500
1500050000002e0100000000050000001402000000000500000014020c06b20e050000002e010100000011000000320a0c06b20e04000400000000002a10cc0d
6e6578742900260029001700050000002e01000000000500000014020000000005000000020101000000050000000201010000000500000014026b06f6090500
00002e010100000017000000320a6b06f60908000400000000002a10cc0d7375697420696e2020002900170017001500180029001500050000002e0100000000
050000001402000000000500000014026b06d80a050000002e010100000013000000320a6b06d80a05000400000000002a10cc0d746869732000180029001700
20001500050000002e0100000000050000001402000000000500000014026b06650b050000002e010100000013000000320a6b06650b05000400000000002a10
cc0d74726565200017001c00250025001500050000002e0100000000050000001402000000000500000014026b06f70b050000002e01010000002c000000320a
6b06f70b16000400000000002a10cc0d6272616e636820616e6420746f206120736574206f662a001c0025002900260029001500250029002a00150017002a00
15002500150020002500170015002a001b00050000002e0100000000050000001402000000000500000002010100000005000000020101000000050000001402
cb06f609050000002e01010000001a000000320acb06f6090a000400000000002a10cc0d706f736974696f6e73202a002a0020001700170017002a0029002000
1600050000002e010000000005000000140200000000050000001402cb06380b050000002e010100000013000000320acb06380b05000400000000002a10cc0d
6e6f6465200029002a002a0025001500050000002e010000000005000000140200000000050000001402cb06ef0b050000002e01010000001f000000320acb06
ef0b0d000400000000002a10cc0d696620697420697320746865200017001b0015001700170015001700200015001800290025001600050000002e0100000000
05000000140200000000050000001402cb06410d050000002e010100000017000000320acb06410d08000400000000002a10cc0d77696e6e696e67203b001800
2900290018002a0029001500050000002e010000000005000000140200000000050000001402cb06660e050000002e010100000013000000320acb06660e0500
0400000000002a10cc0d636172647300250025001c002a002000050000002e010000000005000000140200000000050000000201010000000500000002010100
00000500000014022d07f609050000002e010100000026000000320a2d07f60912000400000000002a10cc0d6e6f646520666f7220746865206c617374202900
2a002a00250015001b002a001c001500170029002500150017002500200017001500050000002e0100000000050000001402000000000500000014022d07250c
050000002e010100000014000000320a2d07250c06000400000000002a10cc0d737569742e2e210029001700170015001500050000002e010000000005000000
14020000000005000000020101000000040000002701ffff07000000fc020000ffffff000000040000002d01030008000000fa02000006000000000000020400
00002d010500070000001b048301380256009300040000002d01040004000000f0010300040000002d01020004000000f0010500030000001e00070000001604
6101f9017700d20005000000020101000000040000002d010100050000000902000000000500000014027800d200050000002e010100000011000000320a7800
d20004000400000000002a10cc0d526f6f7437002a002a001700050000002e01000000000500000014020902640e050000000201010000000500000002010100
0000050000001402da00d200050000002e010100000016000000320ada00d20007000400000000002a10cc0d706f696e746572002a002a001700290017002500
1c00050000002e01000000000500000014020000000005000000020101000000040000002701ffff07000000fc020000ffffff000000040000002d0103000800
0000fa0200000600000000000002040000002d010500070000001b048301340656005304040000002d01040004000000f0010300040000002d01020004000000
f0010500030000001e000700000016046101f5057700920405000000020101000000040000002d01010005000000090200000000050000001402780092040500
00002e010100000011000000320a7800920404000400000000002a10cc0d526f6f7437002a002a001700050000002e01000000000500000014020902640e0500
000002010100000005000000020101000000050000001402da009204050000002e010100000016000000320ada00920407000400000000002a10cc0d706f696e
746572002a002a0017002900170025001c00050000002e01000000000500000014020000000005000000020101000000040000002701ffff1000000026060f00
1600ffffffff0000ab020000ca000000e0030000d300000008000000fa0205000100000000000000040000002d01030007000000fc0200000000000000000400
00002d010500050000000601020000002800000024031200b002cb00af02cb00ae02cc00ad02cd00ac02ce00ac02ce00ad02cf00ae02d000af02d100af02d100
af02d100b002d000b102cf00b202ce00b202ce00b102cd00b002cc00b002cb002800000024031200bb02cb00ba02cb00b902cc00b802cd00b802ce00b802cf00
b802d000b902d100ba02d100bb02d100bb02d100bc02d000bd02cf00be02ce00be02ce00bd02cd00bc02cc00bc02cb002800000024031200c702cb00c602cb00
c502cc00c402cd00c402ce00c402cf00c402d000c502d100c602d100c702d100c702d100c802d000c902cf00ca02ce00ca02ce00c902cd00c802cc00c802cb00
2800000024031200d302cb00d202cb00d102cc00d002cd00d002ce00d002cf00d002d000d102d100d202d100d302d100d302d100d402d000d502cf00d602ce00
d602ce00d502cd00d402cc00d402cb002800000024031200df02cb00de02cb00dd02cc00dc02cd00dc02ce00dc02cf00dc02d000dd02d100de02d100df02d100
df02d100e002d000e102cf00e202ce00e202ce00e102cd00e002cc00e002cb002800000024031200eb02cb00ea02cb00e902cc00e802cd00e802ce00e802cf00
e802d000e902d100ea02d100eb02d100eb02d100ec02d000ed02cf00ee02ce00ee02ce00ed02cd00ec02cc00ec02cb002800000024031200f702cb00f602cb00
f502cc00f402cd00f402ce00f402cf00f402d000f502d100f602d100f702d100f702d100f802d000f902cf00fa02ce00fa02ce00f902cd00f802cc00f802cb00
28000000240312000303cb000203cb000103cc000003cd000003ce000003cf000003d0000103d1000203d1000303d1000303d1000403d0000503cf000603ce00
0603ce000503cd000403cc000403cb0028000000240312000f03cb000e03cb000d03cc000c03cd000c03ce000c03cf000c03d0000d03d1000e03d1000f03d100
0f03d1001003d0001103cf001203ce001203ce001103cd001003cc001003cb0028000000240312001b03cb001a03cb001903cc001803cd001803ce001803cf00
1803d0001903d1001a03d1001b03d1001b03d1001c03d0001d03cf001e03ce001e03ce001d03cd001c03cc001c03cb0028000000240312002703cb002603cb00
2503cc002403cd002403ce002403cf002403d0002503d1002603d1002703d1002703d1002803d0002903cf002a03ce002a03ce002903cd002803cc002803cb00
28000000240312003303cb003203cb003103cc003003cd003003ce003003cf003003d0003103d1003203d1003303d1003303d1003403d0003503cf003603ce00
3603ce003503cd003403cc003403cb0028000000240312003f03cb003e03cb003d03cc003c03cd003c03ce003c03cf003c03d0003d03d1003e03d1003f03d100
3f03d1004003d0004103cf004203ce004203ce004103cd004003cc004003cb0028000000240312004b03cb004a03cb004903cc004803cd004803ce004803cf00
4803d0004903d1004a03d1004b03d1004b03d1004c03d0004d03cf004e03ce004e03ce004d03cd004c03cc004c03cb0028000000240312005703cb005603cb00
5503cc005403cd005403ce005403cf005403d0005503d1005603d1005703d1005703d1005803d0005903cf005a03ce005a03ce005903cd005803cc005803cb00
28000000240312006303cb006203cb006103cc006003cd006003ce006003cf006003d0006103d1006203d1006303d1006303d1006403d0006503cf006603ce00
6603ce006503cd006403cc006403cb0028000000240312006f03cb006e03cb006d03cc006c03cd006c03ce006c03cf006c03d0006d03d1006e03d1006f03d100
6f03d1007003d0007103cf007203ce007203ce007103cd007003cc007003cb0028000000240312007b03cb007a03cb007903cc007803cd007803ce007803cf00
7803d0007903d1007a03d1007b03d1007b03d1007c03d0007d03cf007e03ce007e03ce007d03cd007c03cc007c03cb0028000000240312008703cb008603cb00
8503cc008403cd008403ce008403cf008403d0008503d1008603d1008703d1008703d1008803d0008903cf008a03ce008a03ce008903cd008803cc008803cb00
28000000240312009303cb009203cb009103cc009003cd009003ce009003cf009003d0009103d1009203d1009303d1009303d1009403d0009503cf009603ce00
9603ce009503cd009403cc009403cb0028000000240312009f03cb009e03cb009d03cc009c03cd009c03ce009c03cf009c03d0009d03d1009e03d1009f03d100
9f03d100a003d000a103cf00a203ce00a203ce00a103cd00a003cc00a003cb002800000024031200ab03cb00aa03cb00a903cc00a803cd00a803ce00a803cf00
a803d000a903d100aa03d100ab03d100ab03d100ac03d000ad03cf00ae03ce00ae03ce00ad03cd00ac03cc00ac03cb002800000024031200b703cb00b603cb00
b503cc00b403cd00b403ce00b403cf00b403d000b503d100b603d100b703d100b703d100b803d000b903cf00ba03ce00ba03ce00b903cd00b803cc00b803cb00
2800000024031200c303cb00c203cb00c103cc00c003cd00c003ce00c003cf00c003d000c103d100c203d100c303d100c303d100c403d000c503cf00c603ce00
c603ce00c503cd00c403cc00c403cb002800000024031200cf03cb00ce03cb00cd03cc00cc03cd00cc03ce00cc03cf00cc03d000cd03d100ce03d100cf03d100
cf03d100d003d000d103cf00d203ce00d203ce00d103cd00d003cc00d003cb0005000000060101000000040000002d010200040000002d01040004000000f001
05000800000026060f000600ffffffff010007000000fc020000ffffff000000040000002d01050008000000fa0200000600000000000002040000002d010600
070000001b04bb05fc01ca04cf00040000002d01040004000000f0010500040000002d01020004000000f0010600030000001e000700000016049905bd01eb04
0e0105000000020101000000040000002d01010005000000090200000000050000001402ee040e01050000002e010100000010000000320aee040e0103000400
000000002a10cc0d57696e034f0017002900050000002e01000000000500000014020902640e05000000020101000000040000002701ffff07000000fc020000
ffffff000000040000002d01050008000000fa0200000600000000000002040000002d010600070000001b04bb050805ca04db03040000002d01040004000000
f0010500040000002d01020004000000f0010600030000001e000700000016049905c904eb041a0405000000020101000000040000002d010100050000000902
00000000050000001402ee041a04050000002e010100000010000000320aee041a0403000400000000002a10cc0d57696e034f0017002900050000002e010000
00000500000014020902640e05000000020101000000040000002701ffff07000000fc020000ffffff000000040000002d01050008000000fa02000006000000
00000002040000002d010600070000001b041308fc012207cf00040000002d01040004000000f0010500040000002d01020004000000f0010600030000001e00
070000001604f107bd0143070e0105000000020101000000040000002d0101000500000009020000000005000000140246070e01050000002e01010000001000
0000320a46070e0103000400000000002a10cc0d57696e034f0017002900050000002e01000000000500000014020902640e0500000002010100000004000000
2701ffff07000000fc020000ffffff000000040000002d01050008000000fa0200000600000000000002040000002d010600070000001b04130808052207db03
040000002d01040004000000f0010500040000002d01020004000000f0010600030000001e00070000001604f107c90443071a04050000000201010000000400
00002d0101000500000009020000000005000000140246071a04050000002e010100000010000000320a46071a0403000400000000002a10cc0d57696e034f00
17002900050000002e01000000000500000014020902640e05000000020101000000040000002701ffff07000000fc020000ffffff000000040000002d010500
08000000fa0200000600000000000002040000002d010600070000001b046b0afc017a09cf00040000002d01040004000000f0010500040000002d0102000400
0000f0010600030000001e00070000001604490abd019b090e0105000000020101000000040000002d010100050000000902000000000500000014029e090e01
050000002e010100000010000000320a9e090e0103000400000000002a10cc0d57696e034f0017002900050000002e01000000000500000014020902640e0500
0000020101000000040000002701ffff07000000fc020000ffffff000000040000002d01050008000000fa0200000600000000000002040000002d0106000700
00001b046b0a08057a09db03040000002d01040004000000f0010500040000002d01020004000000f0010600030000001e00070000001604490ac9049b091a04
05000000020101000000040000002d010100050000000902000000000500000014029e091a04050000002e010100000010000000320a9e091a04030004000000
00002a10cc0d57696e034f0017002900050000002e01000000000500000014020902640e05000000020101000000040000002701ffff07000000fc020000ffff
ff000000040000002d01050008000000fa0200000600000000000002040000002d010600070000001b04130814082207e706040000002d01040004000000f001
0500040000002d01020004000000f0010600030000001e00070000001604f107d5074307260705000000020101000000040000002d0101000500000009020000
000005000000140246072607050000002e010100000010000000320a4607260703000400000000002a10cc0d57696e034f0017002900050000002e0100000000
0500000014020902640e05000000020101000000040000002701ffff07000000fc020000ffffff000000040000002d01050008000000fa020000060000000000
0002040000002d010600070000001b046b0a14087a09e706040000002d01040004000000f0010500040000002d01020004000000f0010600030000001e000700
00001604490ad5079b09260705000000020101000000040000002d010100050000000902000000000500000014029e092607050000002e010100000010000000
320a9e09260703000400000000002a10cc0d57696e034f0017002900050000002e01000000000500000014020902640e05000000020101000000040000002701
ffff07000000fc020000ffffff000000040000002d01050008000000fa0200000600000000000002040000002d010600070000001b040f0cfc011e0bcf000400
00002d01040004000000f0010500040000002d01020004000000f0010600030000001e00070000001604ed0bbd013f0b0e010500000002010100000004000000
2d01010005000000090200000000050000001402420b0e01050000002e010100000010000000320a420b0e0103000400000000002a10cc0d534f50032e003c00
2f00050000002e01000000000500000014020902640e05000000020101000000040000002701ffff07000000fc020000ffffff000000040000002d0105000800
0000fa0200000600000000000002040000002d010600070000001b040f0c08051e0bdb03040000002d01040004000000f0010500040000002d01020004000000
f0010600030000001e00070000001604ed0bc9043f0b1a0405000000020101000000040000002d01010005000000090200000000050000001402420b1a040500
00002e010100000010000000320a420b1a0403000400000000002a10cc0d534f50032e003c002f00050000002e01000000000500000014020902640e05000000
020101000000040000002701ffff07000000fc020000ffffff000000040000002d01050008000000fa0200000600000000000002040000002d01060007000000
1b040f0c14081e0be706040000002d01040004000000f0010500040000002d01020004000000f0010600030000001e00070000001604ed0bd5073f0b26070500
0000020101000000040000002d01010005000000090200000000050000001402420b2607050000002e010100000010000000320a420b26070300040000000000
2a10cc0d534f50032e003c002f00050000002e01000000000500000014020902640e05000000020101000000040000002701ffff07000000fc020000ffffff00
0000040000002d01050008000000fa0200000600000000000002040000002d010600070000001b040f0c940f6a0af309040000002d01040004000000f0010500
040000002d01020004000000f0010600030000001e00070000001604ed0b550f8b0a320a05000000020101000000040000002d01010005000000090200000000
0500000014028c0a320a050000002e010100000026000000320a8c0a320a12000400000000002a10cc0d536574206f6620706f736974696f6e7320282e002500
170015002a001b0015002a002a0020001700170017002a002a00200015001c00050000002e01000000000500000014020902640e0500000014028c0a690c0500
00002e010100000013000000320a8c0a690c05000400000000002a10cc0d534f502920002e003c002f001c001500050000002e01000000000500000014020000
00000500000014028c0a330d050000002e010100000013000000320a8c0a330d05000400000000002a10cc0d6e6f6465730029002a002a002500200005000000
2e0100000000050000001402000000000500000002010100000005000000020101000000050000001402ec0a320a050000002e010100000031000000320aec0a
320a19000400000000002a10cc0d636f6e7461696e696e672074686520706f736974696f6e73200025002a002900170025001700290018002a00290015001700
2900250015002a002a0020001700180017002a00290020001600050000002e010000000005000000140200000000050000001402ec0a630d050000002e010100
000019000000320aec0a630d09000400000000002a10cc0d757070657220616e642029002a002a0025001c001500250029002a00050000002e01000000000500
000014020000000005000000020101000000050000000201010000000500000014024c0b320a050000002e010100000014000000320a4c0b320a060004000000
00002a10cc0d6c6f7765722017002b003a0025001c001500050000002e0100000000050000001402000000000500000014024c0b040b050000002e0101000000
14000000320a4c0b040b06000400000000002a10cc0d76616c756520290025001800290025001500050000002e01000000000500000014020000000005000000
14024c0bcd0b050000002e010100000014000000320a4c0bcd0b06000400000000002a10cc0d626f756e642e2a002a002a0029002a001500050000002e010000
000005000000140200000000050000000201010000000500000002010100000005000000020101000000040000002701ffff1000000026060f001600ffffffff
0000f70100007e010000b40200007702000008000000fa0200000600000000000000040000002d01050007000000fc020100000000000000040000002d010600
0800000025030200fb0182018a024002040000002d01030004000000f001050007000000fc020000000000000000040000002d0105000a000000240303006e02
5202af027202a2022b02040000002d010200040000002d01040004000000f00105000800000026060f000600ffffffff01001000000026060f001600ffffffff
0000f70100001e050000e00300006805000008000000fa0200000600000000000000040000002d010500040000002d0106000800000025030200fb0142059c03
4205040000002d01030004000000f001050007000000fc020000000000000000040000002d0105000a000000240303009a036305db0342059a03220504000000
2d010200040000002d01040004000000f00105000800000026060f000600ffffffff01001000000026060f001600ffffffff000022010000b60500006c010000
2707000008000000fa0200000600000000000000040000002d010500040000002d01060008000000250302004701ba054701e306040000002d01030004000000
f001050007000000fc020000000000000000040000002d0105000a000000240303002601e106470122076701e106040000002d010200040000002d0104000400
0000f00105000800000026060f000600ffffffff01001000000026060f001600ffffffff0000f701000076070000e0030000c007000008000000fa0200000600
000000000000040000002d010500040000002d0106000800000025030200fb019a079c039a07040000002d01030004000000f001050007000000fc0200000000
00000000040000002d0105000a000000240303009a03bb07db039a079a037a07040000002d010200040000002d01040004000000f00105000800000026060f00
0600ffffffff01001000000026060f001600ffffffff00000305000076070000ec060000c007000008000000fa0200000600000000000000040000002d010500
040000002d010600080000002503020007059a07a8069a07040000002d01030004000000f001050007000000fc020000000000000000040000002d0105000a00
000024030300a606bb07e7069a07a6067a07040000002d010200040000002d01040004000000f00105000800000026060f000600ffffffff0100100000002606
0f001600ffffffff0000220100000e0800006c0100007f09000008000000fa0200000600000000000000040000002d010500040000002d010600080000002503
02004701120847013b09040000002d01030004000000f001050007000000fc020000000000000000040000002d0105000a000000240303002601390947017a09
67013909040000002d010200040000002d01040004000000f00105000800000026060f000600ffffffff01001000000026060f001600ffffffff00002e040000
0e080000780400007f09000008000000fa0200000600000000000000040000002d010500040000002d01060008000000250302005304120853043b0904000000
2d01030004000000f001050007000000fc020000000000000000040000002d0105000a000000240303003204390953047a0973043909040000002d0102000400
00002d01040004000000f00105000800000026060f000600ffffffff01001000000026060f001600ffffffff00003a0700000e080000840700007f0900000800
0000fa0200000600000000000000040000002d010500040000002d01060008000000250302005f0712085f073b09040000002d01030004000000f00105000700
0000fc020000000000000000040000002d0105000a000000240303003e0739095f077a097f073909040000002d010200040000002d01040004000000f0010500
0800000026060f000600ffffffff01001000000026060f001600ffffffff000022010000660a00006c010000230b000008000000fa0200000600000000000000
040000002d010500040000002d010600080000002503020047016a0a4701df0a040000002d01030004000000f001050007000000fc0200000000000000000400
00002d0105000a000000240303002601dd0a47011e0b6701dd0a040000002d010200040000002d01040004000000f00105000800000026060f000600ffffffff
0100040000002d010600040000002d010300070000001b04bb056403ca043702040000002d010400040000002d010200030000001e000700000016049c052803
e804730205000000020101000000040000002d01010005000000090200000000050000001402eb047302050000002e010100000011000000320aeb0473020400
0400000000002a10cc0d416c742e3b00170017001500050000002e01000000000500000014020902640e05000000020101000000040000002701ffff04000000
2d010600040000002d010300070000001b041308640322073702040000002d010400040000002d010200030000001e00070000001604f4072803400773020500
0000020101000000040000002d0101000500000009020000000005000000140243077302050000002e010100000011000000320a430773020400040000000000
2a10cc0d416c742e3b00170017001500050000002e01000000000500000014020902640e05000000020101000000040000002701ffff040000002d0106000400
00002d010300070000001b041308700622074305040000002d010400040000002d010200030000001e00070000001604f407340640077f050500000002010100
0000040000002d0101000500000009020000000005000000140243077f05050000002e010100000011000000320a43077f0504000400000000002a10cc0d416c
742e3b00170017001500050000002e01000000000500000014020902640e05000000020101000000040000002701ffff040000002d010600040000002d010300
070000001b04e7067402f6054701040000002d010400040000002d010200030000001e00070000001604c8063802140683010500000002010100000004000000
2d0101000500000009020000000005000000140217068301050000002e010100000011000000320a1706830104000400000000002a10cc0d4e6578743c002500
29001700050000002e01000000000500000014020902640e05000000020101000000040000002701ffff040000002d010600040000002d010300070000001b04
3f0974024e084701040000002d010400040000002d010200030000001e00070000001604200938026c08830105000000020101000000040000002d0101000500
00000902000000000500000014026f088301050000002e010100000011000000320a6f08830104000400000000002a10cc0d4e6578743c002500290017000500
00002e01000000000500000014020902640e05000000020101000000040000002701ffff040000002d010600040000002d010300070000001b043f0980054e08
5304040000002d010400040000002d010200030000001e00070000001604200944056c088f0405000000020101000000040000002d0101000500000009020000
00000500000014026f088f04050000002e010100000011000000320a6f088f0404000400000000002a10cc0d4e6578743c00250029001700050000002e010000
00000500000014020902640e05000000020101000000040000002701ffff040000002d010600040000002d010300070000001b043f098c084e085f0704000000
2d010400040000002d010200030000001e00070000001604200950086c089b0705000000020101000000040000002d0101000500000009020000000005000000
14026f089b07050000002e010100000011000000320a6f089b0704000400000000002a10cc0d4e6578743c00250029001700050000002e010000000005000000
14020902640e05000000020101000000040000002701ffff1000000026060f001600ffffffff00002e040000660a000078040000230b000008000000fa020000
0600000000000000040000002d010500040000002d010600080000002503020053046a0a5304df0a040000002d01030004000000f001050007000000fc020000
000000000000040000002d0105000a000000240303003204dd0a53041e0b7304dd0a040000002d010200040000002d01040004000000f0010500080000002606
0f000600ffffffff01001000000026060f001600ffffffff00003a070000660a000084070000230b000008000000fa0200000600000000000000040000002d01
0500040000002d01060008000000250302005f076a0a5f07df0a040000002d01030004000000f001050007000000fc020000000000000000040000002d010500
0a000000240303003e07dd0a5f071e0b7f07dd0a040000002d010200040000002d01040004000000f00105000800000026060f000600ffffffff010007000000
fc020000ffffff000000040000002d01050008000000fa0200000600000000000002040000002d010700070000001b049f03340672020b01040000002d010400
04000000f0010500040000002d01020004000000f0010700030000001e000700000016047d03f50593024a0105000000020101000000040000002d0101000500
000009020000000005000000140294024a01050000002e010100000017000000320a94024a0108000400000000002a10cc0d54726565206f662034001c002500
240015002a001b001500050000002e01000000000500000014020902640e05000000140294025202050000002e010100000014000000320a9402520206000400
000000002a10cc0d6e6f6465732029002a002a00250020001500050000002e01000000000500000014020000000005000000140294022903050000002e010100
00001f000000320a940229030d000400000000002a10cc0d656163682073746f72696e67200025002500250029001500200017002a001c0017002a0029001500
050000002e0100000000050000001402000000000500000014029402d204050000002e010100000011000000320a9402d20404000400000000002a10cc0d6f6e
65202a00290025001500050000002e01000000000500000014020000000005000000140294025f05050000002e010100000011000000320a94025f0504000400
000000002a10cc0d737569742100290017001700050000002e010000000005000000140200000000050000000201010000000500000002010100000005000000
1402f6024a01050000002e010100000028000000320af6024a0113000400000000002a10cc0d6c656e6774687320636f6d62696e6174696f6e03170025002900
2a0017002a002000150025002b003f002a00180029002500170017002a002900050000002e010000000005000000140200000000050000000201010000000400
00002701ffff1000000026060f001600ffffffff0000430100009a03000078020000cf04000008000000fa0200000600000000000000040000002d0105000400
00002d010600080000002503020073029e0373019e04040000002d01030004000000f001050007000000fc020000000000000000040000002d0105000a000000
240303005e0185044701ca048c01b304040000002d010200040000002d01040004000000f00105000800000026060f000600ffffffff0100040000002d0100000300000000000000000000000000000000000000000000000000}}}}}{\lang1053
\par The \'94suit lengths combination\'94 node includes:
\par {\pntext\pard\plain\f3 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \fi-360\li360\nowidctlpar\jclisttab\tx360{\*\pn \pnlvlblt\ilvl0\ls14\pnrnot0\pnf3\pnstart1\pnindent360\pnhang{\pntxtb \'b7}}\ls14\adjustright {\lang1053
The suit lengths combination as a 64-bit integer.
\par {\pntext\pard\plain\f3 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \fi-360\li360\nowidctlpar\jclisttab\tx360{\*\pn \pnlvlblt\ilvl0\ls14\pnrnot0\pnf3\pnstart1\pnindent360\pnhang{\pntxtb \'b7}}\ls14\adjustright {\lang1053 A pointer to the top \'94
winning cards node\'94.
\par {\pntext\pard\plain\f3 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \fi-360\li360\nowidctlpar\jclisttab\tx360{\*\pn \pnlvlblt\ilvl0\ls14\pnrnot0\pnf3\pnstart1\pnindent360\pnhang{\pntxtb \'b7}}\ls14\adjustright {\lang1053 A pointer to next left \'94
suit lengths combination node\'94 in the binary tree.
\par {\pntext\pard\plain\f3 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \fi-360\li360\nowidctlpar\jclisttab\tx360{\*\pn \pnlvlblt\ilvl0\ls14\pnrnot0\pnf3\pnstart1\pnindent360\pnhang{\pntxtb \'b7}}\ls14\adjustright {\lang1053 A pointer to next right \'94
suit lengths combination node\'94 in the binary tree.
\par }\pard \nowidctlpar\adjustright {\lang1053
\par
\par The \'94winning cards node\'94 includes:
\par {\pntext\pard\plain\f3 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \fi-720\li720\nowidctlpar{\*\pn \pnlvlblt\ilvl0\ls4\pnrnot0\pnf3 {\pntxtb \'b7}}\ls4\adjustright {\lang1053 The hands of the relative ranks for each winning card of the actual suit.
\par {\pntext\pard\plain\f3 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \fi-720\li720\nowidctlpar{\*\pn \pnlvlblt\ilvl0\ls4\pnrnot0\pnf3 {\pntxtb \'b7}}\ls4\adjustright {\lang1053
A pointer to the next winning cards node required to achieve a Transposition Table match for this branch of the tree.
\par {\pntext\pard\plain\f3 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \fi-720\li720\nowidctlpar{\*\pn \pnlvlblt\ilvl0\ls4\pnrnot0\pnf3 {\pntxtb \'b7}}\ls4\adjustright {\lang1053 A pointer to the previous winning cards node.
\par {\pntext\pard\plain\f3 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \fi-720\li720\nowidctlpar{\*\pn \pnlvlblt\ilvl0\ls4\pnrnot0\pnf3 {\pntxtb \'b7}}\ls4\adjustright {\lang1053 A pointer to the next alternative winning cards n
ode that leads to a Transposition Table match in an alternative tree branch.
\par {\pntext\pard\plain\f3 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \fi-360\li360\nowidctlpar\jclisttab\tx360{\*\pn \pnlvlblt\ilvl0\ls10\pnrnot0\pnf3\pnstart1\pnindent360\pnhang{\pntxtb \'b7}}\ls10\adjustright {\lang1053
A pointer to the "set of positions node".
\par }\pard \nowidctlpar\adjustright {\lang1053
\par
\par The "set of positions node\'94 includes:
\par {\pntext\pard\plain\f3 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \fi-720\li720\nowidctlpar{\*\pn \pnlvlblt\ilvl0\ls4\pnrnot0\pnf3 {\pntxtb \'b7}}\ls4\adjustright {\lang1053
An upper and a lower bound for the winning tricks of the North/South side. These values\line are used to determine whether or not a search cutoff can be done.
\par {\pntext\pard\plain\f3 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \fi-720\li720\nowidctlpar{\*\pn \pnlvlblt\ilvl0\ls4\pnrnot0\pnf3 {\pntxtb \'b7}}\ls4\adjustright {\lang1053 The lowest winning rank per suit, expressed as relative rank.
\par {\pntext\pard\plain\f3 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \fi-720\li720\nowidctlpar{\*\pn \pnlvlblt\ilvl0\ls4\pnrnot0\pnf3 {\pntxtb \'b7}}\ls4\adjustright {\lang1053 The suit and rank for the currently best move.
\par }\pard \nowidctlpar\adjustright {\lang1053
\par
\par }\pard \nowidctlpar\tx420\adjustright {\cf1\lang1053
After a Transposition Table match, the current position may later be part of a position that will be stored in the Transposition Table. Therefore, the stored winning ranks in the Transposition Table must be included in the state information of the current
position. However, the winning ranks cannot be taken as is, because they are stored as relative ranks which now must be converted to absolute ranks in the current position.
\par This is done using the lowest winning relative rank for each suit that is stored in the \'94set of positions\'94 node that gave the Transposition Table match:
\par The aggregated set of (absolute) ranks for each suit in the current position is filtered using the stored information on the lowest winning relative rank. The winning ranks for each suit
is then the aggregated set with only the number of highest ranks implied by the stored lowest winning relative rank in the \'94set of positions\'94 node.
\par E.g. if the aggregated rank set for spades is A J 9 4 2 and lowest winning relative rank is order=2, then winning ranks are A J.
\par }\pard \nowidctlpar\adjustright {\lang1053
\par
\par }\pard \nowidctlpar\tx420\adjustright {\b\cf1\lang1053 7.4 Building a new entry in the Transposition Table}{\cf1\lang1053
\par
\par When the value of the current position is known and it is the end of a trick (except the last), position state information is collected for storage in the Transposition Table.
\par The ranks of the backed up winning cards are converted from absolute to relative.
\par For each suit, it is determined which winning rank that is lowest. The relative ranks then stored in the new Transposition Table entry are all ranks above and including the lowest rank, filling out any \'94holes\'94
in the ranks that might have been present.
\par The trees of the Transposition Table are searched starting from the \'94root pointer\'94 and additional nodes are inserted corresponding to the current position.
\par First, the suit lengths of the current position are used to find a \'94suit lengths combination node\'94 or to create a new such node if it does not exist already.
\par The next step is to search for a \'94winning card node\'94 that has the \'94suit length combination node\'94 as parent. This \'94winning card node\'94 has then winning cards for spades.
\par If no such node yet exists, \'94winning card nodes\'94, one for each suit, are created using the winning cards of the current position. Each such node includes all winning cards for one of the suits. Then, a \'94set of positions\'94
node is created. This node is pointed to from the last created \'94winning card node\'94 created for the winning cards of clubs.
\par Otherwise, if there already exists a matching \'94winning card node\'94 with the \'94suit length combination node\'94 as parent, it is checked whether or not the \'94winning card nodes\'94
in a subsequent tree branch already created for hearts, diamonds and clubs also are matched with the current position.
\par If such a sequence of nodes can be found, the upper or lower bound in the connected \'94set of positions node\'94 may be updated to allow for an increased number of cutoffs:
\par
\par If the current position upper value bound is less than the stored upper value bound, the stored value is updated with the current position value.
\par If the current position lower value bound is larger than the stored lower value bound, the stored value is updated with the current position value.
\par
\par In case a matching \'94winning card node\'94 cannot be found, a new \'94winning card node\'94 is created and linked to the last matching node. E.g. if existing \'94winning card nodes\'94
for spades and hearts match the current position, but no node match for diamonds, then a \'94winning cards node\'94 for diamonds is created and linked to the previous \'94winning cards node\'94 for hearts. Then a clubs \'94winning cards node\'94 and a
\'94set of positions node\'94 are created.
\par
\par
\par }\pard \nowidctlpar\adjustright {\b\lang1053
\par
\par
\par References
\par }{\lang1053
\par James Dow Allen:
\par Source code for a simple DDS.
\par }{\field\fldedit{\*\fldinst {\lang1053 HYPERLINK \\l "_Hlk134153111" }{\fs20\lang1053 {\*\datafield
08d0c9ea79f9bace118c8200aa004ba90b02000000080000000e0000005f0048006c006b00310033003400310035003300310031003100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000}}}{\fldrslt {\cs15\ul\cf2 http://freepages.genealogy.rootsweb.com/~jamesdow/Tech/dbldum.htm}}}{\lang1053
\par
\par Matthias Brill:
\par DDS algorithms description (in German) and DDS source code.
\par }{\field\fldedit{\*\fldinst {\lang1053 HYPERLINK \\l "_Hlk134153080" }{\fs20\lang1053 {\*\datafield
08d0c9ea79f9bace118c8200aa004ba90b02000000080000000e0000005f0048006c006b00310033003400310035003300300038003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000}}}{\fldrslt {\ul\cf2 http://linux.softpedia.com/get/Science-and-Engineering/Artificial-Intelligence/cddsolve-20055.shtml}{\lang1053 }}}{\lang1053
\par
\par Ming-Sheng Chang:
\par DDS algorithms description.
\par {\*\bkmkstart _Hlt193293965}}{\field\fldedit{\*\fldinst {\lang1053 HYPERLINK "\\\\l "_Hlk132979785" "}{\fs20\lang1053 {\*\datafield
00d0c9ea79f9bace118c8200aa004ba90b02000000010000000303000000000000c0000000000000460000040000005c6c2000ffffadde000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000}}}{\fldrslt {cs.nyu.edu/web/Research/TechReports/TR1996-725/TR1996-725.ps.gz
\par }}}\pard\plain \nowidctlpar\adjustright \lang2057 {\lang1053 {\*\bkmkend _Hlt193293965}
\par
\par Ed Colley:
\par DDS source code and DDS executable.
\par }{\field\flddirty{\*\fldinst {\lang1053 HYPERLINK "\\\\l "_Hlk133040134" "}{\fs20\lang1053 {\*\datafield
00d0c9ea79f9bace118c8200aa004ba90b02000000010000000303000000000000c0000000000000460000040000005c6c2000ffffadde000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000}}}{\fldrslt {\ul\cf2\lang1053 http://freefinesse.sourceforge.net/}}}{\lang1053
\par
\par Matthew L. Ginsberg:
\par DDS algorithms description.
\par }{\field\fldedit{\*\fldinst {\lang1053 HYPERLINK \\l "_Hlk134152954" }{\fs20\lang1053 {\*\datafield
08d0c9ea79f9bace118c8200aa004ba90b02000000080000000e0000005f0048006c006b00310033003400310035003200390035003400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000}}}{\fldrslt {\cs15\ul\cf2 http://www.cs.cmu.edu/afs/cs/project/jair/pub/volume14/ginsberg01a.pdf}}}{\lang1053
\par
\par Dan Hirschberg:
\par DDS algorithms description and DDS executable (MS DOS, cannot run in XP?)
\par }{\field\flddirty{\*\fldinst {\lang1053 HYPERLINK "\\\\l "_Hlk132979763" "}{\fs20\lang1053 {\*\datafield
00d0c9ea79f9bace118c8200aa004ba90b02000000010000000303000000000000c0000000000000460000040000005c6c2000ffffadde000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000}}}{\fldrslt {\ul\cf2\lang1053 http://www.ics.uci.edu/~dan/bridge/index.html
\par }}}\pard\plain \nowidctlpar\adjustright \lang2057 {\lang1053
\par Alexey Slovesnov:
\par DDS source code and DDS executable.
\par
\par Judea Pearl: Asymptotic properties of minimax trees and game search precedures.\line Artificial Intelligence 14(2):113-138. [Pearl 1980]
\par
\par Aske Plaat, Jonathan Schaeffer, Wim Pijls and Arie de Bruin: Exploiting graph properties of game trees. In }{\i\lang1053 Proceedings of the Thirteenth National Conference on Artificial Intelligence}{\lang1053 , pages 234-239, 1996 [Plaat et al.]
\par
\par Hans Kuijf, personal communication.
\par
\par Pedja Stanojevic, personal communication.
\par
\par Knuth: The art of computer programming, Vol. 3, Searching and Sorting, chapter 6.2.2, Algorithm T.
\par
\par Sebastian Kupferschmid, Malte Helmert: A Skat Player Based on Monte Carlo Simulation.
\par
\par Jo\'ebl Bradmetz, personal communication.
\par http://jibe-bridge.perso.cegetel.net/
\par }} tenace-0.13/dds/Makefile.in 0000664 0004016 0004016 00000045131 12225337316 012442 0000000 0000000 # Makefile.in generated by automake 1.13.3 from Makefile.am.
# @configure_input@
# Copyright (C) 1994-2013 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
@SET_MAKE@
VPATH = @srcdir@
am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
am__make_running_with_option = \
case $${target_option-} in \
?) ;; \
*) echo "am__make_running_with_option: internal error: invalid" \
"target option '$${target_option-}' specified" >&2; \
exit 1;; \
esac; \
has_opt=no; \
sane_makeflags=$$MAKEFLAGS; \
if $(am__is_gnu_make); then \
sane_makeflags=$$MFLAGS; \
else \
case $$MAKEFLAGS in \
*\\[\ \ ]*) \
bs=\\; \
sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
| sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
esac; \
fi; \
skip_next=no; \
strip_trailopt () \
{ \
flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
}; \
for flg in $$sane_makeflags; do \
test $$skip_next = yes && { skip_next=no; continue; }; \
case $$flg in \
*=*|--*) continue;; \
-*I) strip_trailopt 'I'; skip_next=yes;; \
-*I?*) strip_trailopt 'I';; \
-*O) strip_trailopt 'O'; skip_next=yes;; \
-*O?*) strip_trailopt 'O';; \
-*l) strip_trailopt 'l'; skip_next=yes;; \
-*l?*) strip_trailopt 'l';; \
-[dEDm]) skip_next=yes;; \
-[JT]) skip_next=yes;; \
esac; \
case $$flg in \
*$$target_option*) has_opt=yes; break;; \
esac; \
done; \
test $$has_opt = yes
am__make_dryrun = (target_option=n; $(am__make_running_with_option))
am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
pkgdatadir = $(datadir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkglibexecdir = $(libexecdir)/@PACKAGE@
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_HEADER = $(INSTALL_DATA)
transform = $(program_transform_name)
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
subdir = dds
DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \
$(top_srcdir)/m4/extensions.m4 \
$(top_srcdir)/m4/extern-inline.m4 \
$(top_srcdir)/m4/gnulib-common.m4 \
$(top_srcdir)/m4/gnulib-comp.m4 \
$(top_srcdir)/m4/include_next.m4 $(top_srcdir)/m4/intltool.m4 \
$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nproc.m4 \
$(top_srcdir)/m4/off_t.m4 $(top_srcdir)/m4/onceonly.m4 \
$(top_srcdir)/m4/physmem.m4 $(top_srcdir)/m4/ssize_t.m4 \
$(top_srcdir)/m4/stdbool.m4 $(top_srcdir)/m4/stddef_h.m4 \
$(top_srcdir)/m4/sys_types_h.m4 $(top_srcdir)/m4/unistd_h.m4 \
$(top_srcdir)/m4/warn-on-use.m4 $(top_srcdir)/m4/wchar_t.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
AM_V_P = $(am__v_P_@AM_V@)
am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
am__v_P_0 = false
am__v_P_1 = :
AM_V_GEN = $(am__v_GEN_@AM_V@)
am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
am__v_GEN_0 = @echo " GEN " $@;
am__v_GEN_1 =
AM_V_at = $(am__v_at_@AM_V@)
am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
am__v_at_0 = @
am__v_at_1 =
SOURCES =
DIST_SOURCES =
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
*) (install-info --version) >/dev/null 2>&1;; \
esac
am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
ALL_LINGUAS = @ALL_LINGUAS@
AMTAR = @AMTAR@
AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
AR = @AR@
ARFLAGS = @ARFLAGS@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
CATALOGS = @CATALOGS@
CATOBJEXT = @CATOBJEXT@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CYGPATH_W = @CYGPATH_W@
DATADIRNAME = @DATADIRNAME@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
FGREP = @FGREP@
GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
GMOFILES = @GMOFILES@
GMSGFMT = @GMSGFMT@
GNULIB_CHDIR = @GNULIB_CHDIR@
GNULIB_CHOWN = @GNULIB_CHOWN@
GNULIB_CLOSE = @GNULIB_CLOSE@
GNULIB_DUP = @GNULIB_DUP@
GNULIB_DUP2 = @GNULIB_DUP2@
GNULIB_DUP3 = @GNULIB_DUP3@
GNULIB_ENVIRON = @GNULIB_ENVIRON@
GNULIB_EUIDACCESS = @GNULIB_EUIDACCESS@
GNULIB_FACCESSAT = @GNULIB_FACCESSAT@
GNULIB_FCHDIR = @GNULIB_FCHDIR@
GNULIB_FCHOWNAT = @GNULIB_FCHOWNAT@
GNULIB_FDATASYNC = @GNULIB_FDATASYNC@
GNULIB_FSYNC = @GNULIB_FSYNC@
GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@
GNULIB_GETCWD = @GNULIB_GETCWD@
GNULIB_GETDOMAINNAME = @GNULIB_GETDOMAINNAME@
GNULIB_GETDTABLESIZE = @GNULIB_GETDTABLESIZE@
GNULIB_GETGROUPS = @GNULIB_GETGROUPS@
GNULIB_GETHOSTNAME = @GNULIB_GETHOSTNAME@
GNULIB_GETLOGIN = @GNULIB_GETLOGIN@
GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@
GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@
GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@
GNULIB_GROUP_MEMBER = @GNULIB_GROUP_MEMBER@
GNULIB_ISATTY = @GNULIB_ISATTY@
GNULIB_LCHOWN = @GNULIB_LCHOWN@
GNULIB_LINK = @GNULIB_LINK@
GNULIB_LINKAT = @GNULIB_LINKAT@
GNULIB_LSEEK = @GNULIB_LSEEK@
GNULIB_PIPE = @GNULIB_PIPE@
GNULIB_PIPE2 = @GNULIB_PIPE2@
GNULIB_PREAD = @GNULIB_PREAD@
GNULIB_PWRITE = @GNULIB_PWRITE@
GNULIB_READ = @GNULIB_READ@
GNULIB_READLINK = @GNULIB_READLINK@
GNULIB_READLINKAT = @GNULIB_READLINKAT@
GNULIB_RMDIR = @GNULIB_RMDIR@
GNULIB_SETHOSTNAME = @GNULIB_SETHOSTNAME@
GNULIB_SLEEP = @GNULIB_SLEEP@
GNULIB_SYMLINK = @GNULIB_SYMLINK@
GNULIB_SYMLINKAT = @GNULIB_SYMLINKAT@
GNULIB_TTYNAME_R = @GNULIB_TTYNAME_R@
GNULIB_UNISTD_H_NONBLOCKING = @GNULIB_UNISTD_H_NONBLOCKING@
GNULIB_UNISTD_H_SIGPIPE = @GNULIB_UNISTD_H_SIGPIPE@
GNULIB_UNLINK = @GNULIB_UNLINK@
GNULIB_UNLINKAT = @GNULIB_UNLINKAT@
GNULIB_USLEEP = @GNULIB_USLEEP@
GNULIB_WRITE = @GNULIB_WRITE@
GREP = @GREP@
HAVE_CHOWN = @HAVE_CHOWN@
HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@
HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@
HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@
HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@
HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@
HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@
HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@
HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@
HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@
HAVE_DUP2 = @HAVE_DUP2@
HAVE_DUP3 = @HAVE_DUP3@
HAVE_EUIDACCESS = @HAVE_EUIDACCESS@
HAVE_FACCESSAT = @HAVE_FACCESSAT@
HAVE_FCHDIR = @HAVE_FCHDIR@
HAVE_FCHOWNAT = @HAVE_FCHOWNAT@
HAVE_FDATASYNC = @HAVE_FDATASYNC@
HAVE_FSYNC = @HAVE_FSYNC@
HAVE_FTRUNCATE = @HAVE_FTRUNCATE@
HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@
HAVE_GETGROUPS = @HAVE_GETGROUPS@
HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@
HAVE_GETLOGIN = @HAVE_GETLOGIN@
HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@
HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@
HAVE_LCHOWN = @HAVE_LCHOWN@
HAVE_LINK = @HAVE_LINK@
HAVE_LINKAT = @HAVE_LINKAT@
HAVE_OS_H = @HAVE_OS_H@
HAVE_PIPE = @HAVE_PIPE@
HAVE_PIPE2 = @HAVE_PIPE2@
HAVE_PREAD = @HAVE_PREAD@
HAVE_PWRITE = @HAVE_PWRITE@
HAVE_READLINK = @HAVE_READLINK@
HAVE_READLINKAT = @HAVE_READLINKAT@
HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@
HAVE_SLEEP = @HAVE_SLEEP@
HAVE_SYMLINK = @HAVE_SYMLINK@
HAVE_SYMLINKAT = @HAVE_SYMLINKAT@
HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@
HAVE_UNISTD_H = @HAVE_UNISTD_H@
HAVE_UNLINKAT = @HAVE_UNLINKAT@
HAVE_USLEEP = @HAVE_USLEEP@
HAVE_WCHAR_T = @HAVE_WCHAR_T@
HAVE__BOOL = @HAVE__BOOL@
INCLUDE_NEXT = @INCLUDE_NEXT@
INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
INSTOBJEXT = @INSTOBJEXT@
INTLLIBS = @INTLLIBS@
INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
INTLTOOL_MERGE = @INTLTOOL_MERGE@
INTLTOOL_PERL = @INTLTOOL_PERL@
INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@
INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@
INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@
INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
MAINT = @MAINT@
MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MKINSTALLDIRS = @MKINSTALLDIRS@
MSGFMT = @MSGFMT@
MSGFMT_OPTS = @MSGFMT_OPTS@
MSGMERGE = @MSGMERGE@
NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@
NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@
NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@
NEXT_STDDEF_H = @NEXT_STDDEF_H@
NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@
NEXT_UNISTD_H = @NEXT_UNISTD_H@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
OBJEXT = @OBJEXT@
OTOOL = @OTOOL@
OTOOL64 = @OTOOL64@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_CFLAGS = @PACKAGE_CFLAGS@
PACKAGE_LIBS = @PACKAGE_LIBS@
PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
POFILES = @POFILES@
POSUB = @POSUB@
PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
PRAGMA_COLUMNS = @PRAGMA_COLUMNS@
PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@
RANLIB = @RANLIB@
REPLACE_CHOWN = @REPLACE_CHOWN@
REPLACE_CLOSE = @REPLACE_CLOSE@
REPLACE_DUP = @REPLACE_DUP@
REPLACE_DUP2 = @REPLACE_DUP2@
REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@
REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@
REPLACE_GETCWD = @REPLACE_GETCWD@
REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@
REPLACE_GETGROUPS = @REPLACE_GETGROUPS@
REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@
REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@
REPLACE_ISATTY = @REPLACE_ISATTY@
REPLACE_LCHOWN = @REPLACE_LCHOWN@
REPLACE_LINK = @REPLACE_LINK@
REPLACE_LINKAT = @REPLACE_LINKAT@
REPLACE_LSEEK = @REPLACE_LSEEK@
REPLACE_NULL = @REPLACE_NULL@
REPLACE_PREAD = @REPLACE_PREAD@
REPLACE_PWRITE = @REPLACE_PWRITE@
REPLACE_READ = @REPLACE_READ@
REPLACE_READLINK = @REPLACE_READLINK@
REPLACE_RMDIR = @REPLACE_RMDIR@
REPLACE_SLEEP = @REPLACE_SLEEP@
REPLACE_SYMLINK = @REPLACE_SYMLINK@
REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@
REPLACE_UNLINK = @REPLACE_UNLINK@
REPLACE_UNLINKAT = @REPLACE_UNLINKAT@
REPLACE_USLEEP = @REPLACE_USLEEP@
REPLACE_WRITE = @REPLACE_WRITE@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STDBOOL_H = @STDBOOL_H@
STDDEF_H = @STDDEF_H@
STRIP = @STRIP@
UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@
UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@
USE_NLS = @USE_NLS@
VERSION = @VERSION@
WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@
XGETTEXT = @XGETTEXT@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
ac_ct_AR = @ac_ct_AR@
ac_ct_CC = @ac_ct_CC@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
builddir = @builddir@
datadir = @datadir@
datarootdir = @datarootdir@
docdir = @docdir@
dvidir = @dvidir@
exec_prefix = @exec_prefix@
gl_LIBOBJS = @gl_LIBOBJS@
gl_LTLIBOBJS = @gl_LTLIBOBJS@
gltests_LIBOBJS = @gltests_LIBOBJS@
gltests_LTLIBOBJS = @gltests_LTLIBOBJS@
gltests_WITNESS = @gltests_WITNESS@
host = @host@
host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
intltool__v_merge_options_ = @intltool__v_merge_options_@
intltool__v_merge_options_0 = @intltool__v_merge_options_0@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
EXTRA_DIST = \
DDS_alg_descr-*.rtf \
DLL-dds_*.rtf \
GPL.txt \
dds.cpp \
dll.h \
mode2.txt \
readme.txt \
release_notes.txt \
patches/*
all: all-am
.SUFFIXES:
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
&& { if test -f $@; then exit 0; else break; fi; }; \
exit 1;; \
esac; \
done; \
echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign dds/Makefile'; \
$(am__cd) $(top_srcdir) && \
$(AUTOMAKE) --foreign dds/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
*) \
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
esac;
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):
mostlyclean-libtool:
-rm -f *.lo
clean-libtool:
-rm -rf .libs _libs
tags TAGS:
ctags CTAGS:
cscope cscopelist:
distdir: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
list='$(DISTFILES)'; \
dist_files=`for file in $$list; do echo $$file; done | \
sed -e "s|^$$srcdirstrip/||;t" \
-e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
case $$dist_files in \
*/*) $(MKDIR_P) `echo "$$dist_files" | \
sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
sort -u` ;; \
esac; \
for file in $$dist_files; do \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
if test -d $$d/$$file; then \
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
if test -d "$(distdir)/$$file"; then \
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \
cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
else \
test -f "$(distdir)/$$file" \
|| cp -p $$d/$$file "$(distdir)/$$file" \
|| exit 1; \
fi; \
done
check-am: all-am
check: check-am
all-am: Makefile
installdirs:
install: install-am
install-exec: install-exec-am
install-data: install-data-am
uninstall: uninstall-am
install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
installcheck: installcheck-am
install-strip:
if test -z '$(STRIP)'; then \
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
install; \
else \
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
"INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
fi
mostlyclean-generic:
clean-generic:
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
clean: clean-am
clean-am: clean-generic clean-libtool clean-local mostlyclean-am
distclean: distclean-am
-rm -f Makefile
distclean-am: clean-am distclean-generic
dvi: dvi-am
dvi-am:
html: html-am
html-am:
info: info-am
info-am:
install-data-am:
install-dvi: install-dvi-am
install-dvi-am:
install-exec-am:
install-html: install-html-am
install-html-am:
install-info: install-info-am
install-info-am:
install-man:
install-pdf: install-pdf-am
install-pdf-am:
install-ps: install-ps-am
install-ps-am:
installcheck-am:
maintainer-clean: maintainer-clean-am
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
mostlyclean: mostlyclean-am
mostlyclean-am: mostlyclean-generic mostlyclean-libtool
pdf: pdf-am
pdf-am:
ps: ps-am
ps-am:
uninstall-am:
.MAKE: install-am install-strip
.PHONY: all all-am check check-am clean clean-generic clean-libtool \
clean-local cscopelist-am ctags-am distclean distclean-generic \
distclean-libtool distdir dvi dvi-am html html-am info info-am \
install install-am install-data install-data-am install-dvi \
install-dvi-am install-exec install-exec-am install-html \
install-html-am install-info install-info-am install-man \
install-pdf install-pdf-am install-ps install-ps-am \
install-strip installcheck installcheck-am installdirs \
maintainer-clean maintainer-clean-generic mostlyclean \
mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
tags-am uninstall uninstall-am
@HAVE_LIBDDS_TRUE@all: noop
@HAVE_LIBDDS_FALSE@all: libdds.a
dds.c:
ln -s dds.cpp $@
dds.h:
ln -s dll.h dds.h
dds.o: dds.c dds.h
$(CC) $(CFLAGS) -c -o $@ $<
libdds.a: dds.o
$(AR) rc $@ $^
$(RANLIB) $@
clean-local:
rm -f dds.o libdds.a dds.c dds.h
noop:
@echo "Nothing to do here, using the system's libdds"
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:
tenace-0.13/dds/DLL-dds_21_j.rtf 0000664 0004016 0004016 00000034177 11524603565 013123 0000000 0000000 {\rtf1\ansi\ansicpg1252\uc1 \deff1\deflang1033\deflangfe1053{\fonttbl{\f0\froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f1\fswiss\fcharset0\fprq2{\*\panose 020b0604020202020204}Arial;}
{\f16\froman\fcharset238\fprq2 Times New Roman CE;}{\f17\froman\fcharset204\fprq2 Times New Roman Cyr;}{\f19\froman\fcharset161\fprq2 Times New Roman Greek;}{\f20\froman\fcharset162\fprq2 Times New Roman Tur;}
{\f21\froman\fcharset186\fprq2 Times New Roman Baltic;}{\f22\fswiss\fcharset238\fprq2 Arial CE;}{\f23\fswiss\fcharset204\fprq2 Arial Cyr;}{\f25\fswiss\fcharset161\fprq2 Arial Greek;}{\f26\fswiss\fcharset162\fprq2 Arial Tur;}
{\f27\fswiss\fcharset186\fprq2 Arial Baltic;}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;
\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;}{\stylesheet{\nowidctlpar\adjustright \f1\cgrid \snext0 Normal;}{
\s1\nowidctlpar\outlinelevel0\adjustright \f1\cgrid \sbasedon0 \snext0 heading 1;}{\s2\keepn\nowidctlpar\outlinelevel1\adjustright \b\f1\fs20\ul\cf1\lang1053\cgrid \sbasedon0 \snext0 heading 2;}{\s3\keepn\nowidctlpar\outlinelevel2\adjustright
\b\f1\fs20\cf1\lang1053\cgrid \sbasedon0 \snext0 heading 3;}{\*\cs10 \additive Default Paragraph Font;}{\*\cs15 \additive \b \sbasedon10 Strong;}}{\info{\title Bo Haglund, Bob Richardson}{\author Bo Haglund}{\operator Bo Haglund}
{\creatim\yr2007\mo4\dy23\hr19\min18}{\revtim\yr2010\mo5\dy28\hr23\min47}{\version33}{\edmins161}{\nofpages3}{\nofwords1128}{\nofchars6430}{\*\company }{\nofcharsws0}{\vern89}}\margl1417\margr1417\margt1417\margb1417
\widowctrl\ftnbj\aenddoc\hyphhotz425\noxlattoyen\expshrtn\noultrlspc\dntblnsbdb\nospaceforul\hyphcaps0\viewkind4\viewscale100 \fet0\sectd \linex0\headery709\footery709\colsx709\sectdefaultcl {\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang{\pntxta .}}
{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl4\pnlcltr\pnstart1\pnindent720\pnhang{\pntxta )}}{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}
{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl8\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl9
\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}\pard\plain \nowidctlpar\adjustright \f1\cgrid {\fs20\lang1053 Bo Haglund, Bob Richardson
\par Rev J, 2010-05-29
\par Latest DLL issue with this description is available at http://www.bahnhof.se/wb758135/
\par
\par
\par }\pard\plain \s2\keepn\nowidctlpar\outlinelevel1\adjustright \b\f1\fs20\ul\cf1\lang1053\cgrid {Short description of the DLL functions supported in Double Dummy Problem Solver 2.1
\par }\pard\plain \nowidctlpar\adjustright \f1\cgrid {\fs20\cf1\lang1053
\par }\pard\plain \s3\keepn\nowidctlpar\outlinelevel2\adjustright \b\f1\fs20\cf1\lang1053\cgrid {Callable functions
\par }\pard\plain \nowidctlpar\adjustright \f1\cgrid {\fs20\cf1\lang1053
\par extern "C" __declspec(dllimport) int __stdcall SolveBoard(struct deal, int target,
\par int solutions, int mode, struct futureTricks *futp, int threadIndex);
\par
\par extern "C" __declspec(dllimport) int __stdcall CalcDDtable(struct ddTableDeal tableDeal, struct ddTableResults * tablep);
\par
\par
\par }\pard\plain \s3\keepn\nowidctlpar\outlinelevel2\adjustright \b\f1\fs20\cf1\lang1053\cgrid {SolveBoard
\par }\pard\plain \nowidctlpar\adjustright \f1\cgrid {\fs20\cf1\lang1053
\par SolveBoard is thread-safe, so several threads (max 16) can call SolveBoard in parallel.
\par
\par Before SolveBoard can be called, a structure of type "futureTricks" must be declared.
\par
\par }{\b\fs20\cf1\lang1053 SolveBoard}{\fs20\cf1\lang1053 returns a status integer, "no fault" means the DLL supplies the trick data in the "futureTricks" type structure.\line Status codes:
\par 1=No fault,
\par -1=Unknown fault,
\par -2=No of cards = 0,
\par -3=target > Number of tricks left,
\par -4=Duplicated cards,
\par -5=target < -1,
\par -7=target >13,
\par -8=solutions < 1,
\par -9=solutions > 3,
\par -10=No of cards > 52
\par -11=Not used
\par -12=Suit or rank value out of range for deal.currentTrickSuit or deal.currentTrickRank.
\par -13=Card already played in the current trick is also defined as a remaining card to play.
\par -14=Wrong number of remaining cards for a hand.
\par -15=threadIndex < 0 or > 15.\line \line Structure \'94}{\b\fs20\cf1\lang1053 deal}{\fs20\cf1\lang1053 \'94 defines all data needed to describe the deal to be analyzed.
\par struct deal \{}{\f0\fs20\cf1\lang1053
\par }{\fs20\cf1\lang1053 int trump; /* I.e. which suit that is trump or if contract is NT, Spades=0, Hearts=1, Diamonds=2, Clubs=3, NT=4 */}{\f0\fs20\cf1\lang1053
\par }{\fs20\cf1\lang1053 int first; /* 0-3, 0=North, 1=East, 2=South, 3=West , Leading hand for the trick.*/}{\f0\fs20\cf1\lang1053
\par }{\fs20\cf1\lang1053 int currentTrickSuit[3]; /* 0-2 for up to 3 cards in the order played */
\par int currentTrickRank[3]; /* 2-14 for up to 3 cards */}{\f0\fs20\cf1\lang1053
\par }{\fs20\cf1\lang1053 unsigned int remainCards[4][4]; /* 1}{\fs20\cf1\lang1053\super st}{\fs20\cf1\lang1053 index hand (0-3), 2}{\fs20\cf1\lang1053\super nd}{\fs20\cf1\lang1053 in
dex suit (0-3), values as bitstring of ranks bit 0=0, bit 1=0, bit 2=rank 2, \'85\'85\'85. bit 14=rank 14, bit 15=0}{\f0\fs20\cf1\lang1053 }{\fs20\cf1\lang1053
for cards remaining after already played cards (cards already played to the current trick are not included in this bitstring). \line The decimal value for a card then range between 4 (=rank 2) and 16384 (Ace=rank 14). */}{\f0\fs20\cf1\lang1053
\par }{\fs20\cf1\lang1053 \};}{\f0\fs20\cf1\lang1053 }{\fs20\cf1\lang1053
\par
\par Parameter \'94}{\b\fs20\cf1\lang1053 target}{\fs20\cf1\lang1053 \'94 is the number of tricks to be won by the side to play, -1 means that the program}{\f0\fs20\cf1\lang1053 }{\fs20\cf1\lang1053
shall find the maximum number. For equivalent cards only the highest is returned.
\par \line Parameter \'94}{\b\fs20\cf1\lang1053 solutions}{\fs20\cf1\lang1053 \'94 defines how many card solutions that SolveBoard must return:
\par target=1-13, solutions=1: Returns only one of the cards. Its returned score is the same as target whentarget or higher tricks can be won. Otherwise, score \endash 1 is returned if target cannot be reached, or score 0 if no tricks can be won. \line
target=-1, solutions=1: Returns only one of the optimum cards and its score.
\par }{\fs20\lang1053 target=0, solutions=1: Returns only one of the cards legal to play with score set to 0.}{\fs20\cf1\lang1053 \line target 1-13,
solutions=2: Return all cards meeting target. Their returned scores are the same as target when target or higher tricks can be won. Otherwise, only one card is returned with score \endash
1 if target cannot be reached, or score 0 for all cards legal to play if no tricks can be won.\line target \endash 1, solutions=2: Return all optimum cards with their scores.
\par }{\fs20\lang1053 target=0, solutions=2: Return all cards legal to play with scores set to 0}{\fs20\cf6\lang1053 .}{\fs20\cf1\lang1053 \line target irrelevant, solutions=3: Return all cards that can be legally played with
their scores in descending order.
\par
\par Parameter \'94}{\b\fs20\cf1\lang1053 mode}{\fs20\cf1\lang1053 \'94 defines the DLL mode of operation.\line mode=0: Do not search to find the score if the hand to play has only one card, including its equivalents, to play. Score is set to \endash
2 for this card, indicating that there are no alternative cards. If there are multiple choices for cards to play, search is done to find the score. This mode is very fast but you don\rquote t
\par mode=1: Always }{\fs20 search to find the score. Even when the hand to play has only one card, with possibl
e equivalents, to play. For both mode=0 and mode=1: If the preceding SolveBoard call had the same trump suit and the same deal, except for deal.first, then the transposition table contents is reused from the preceding SolveBoard call. Setting mode=2 is n
o longer needed in this case, but can still be done for backwards compatibility.\line
mode=2: As for mode=1, but the transposition table contents is reused from the preceding SolveBoard call. It is the responsibility of the programmer using the DLL to ensure
that reusing the table is safe in the actual situation. Example: Deal is the same, except for deal.first. Trump suit is the same.
\par }\pard \fi720\nowidctlpar\adjustright {\fs20 1}{\fs20\super st}{\fs20 call: SolveBoard(deal, -1, 1, 1, &fut, 0), deal.first=1, i.e. East leads.
\par }\pard \nowidctlpar\adjustright {\fs20 \tab 2}{\fs20\super nd}{\fs20 call: SolveBoard(deal, -1, 1, 2, &fut, 0), deal.first=2, i.e. South leads.
\par \tab 3rd call: SolveBoard(deal, -1, 1, 2, &fut, 0), deal.first=3, i.e. West leads.
\par }\pard \fi720\nowidctlpar\adjustright {\fs20 4th call: SolveBoard(deal, -1, 1, 2, &fut, 0), deal.first=0, i.e. North leads. }{\fs20\cf1\lang1053
\par }\pard \nowidctlpar\adjustright {\fs20\cf1\lang1053
\par struct }{\b\fs20\cf1\lang1053 futureTricks}{\fs20\cf1\lang1053 \{ /* The DLL provides the score (number of tricks) that can be won by the card to play defined by its suit and rank. Array of all alternative cards. */}{\f0\fs20\cf1\lang1053
\par }{\fs20\cf1\lang1053 int nodes; /* Number of searched nodes */
\par int cards; /* No of alternative cards */}{\f0\fs20\cf1\lang1053
\par }{\fs20\cf1\lang1053 int suit[13]; /* 0=Spades, 1=Hearts, 2=Diamonds, 3=Clubs */
\par int rank[13]; /* 2-14 for 2 through Ace *}{\b\fs20\cf1\lang1053 /
\par }{\fs20\cf1\lang1053 int equals[13]; /* Bitstring of ranks for equivalent lower rank cards. The decimal value range between 4 (=2) and 8192 (King=rank 13). When there are several \'94equals\'94, the value is the sum of each \'94equal\'94. *}{
\b\fs20\cf1\lang1053 /}{\fs20\cf1\lang1053
\par int score[13]; /* -1 indicates that target was not reached, otherwise target or max numbe of tricks */}{\f0\fs20\cf1\lang1053
\par }{\fs20\cf1\lang1053 \} ;
\par
\par Parameter \'94}{\b\fs20\cf1\lang1053 threadIndex}{\fs20\cf1\lang1053 \'94 defines the identity of the thread used when calling SolveBoard.
\par Maximum 16 threads can call SolveBoard in parallel, threadIndex must be an integer of the range 0..15.}{
\par }\pard\plain \s3\keepn\nowidctlpar\outlinelevel2\adjustright \b\f1\fs20\cf1\lang1053\cgrid {
\par
\par CalcDDtable
\par }\pard\plain \nowidctlpar\adjustright \f1\cgrid {\f0\fs20\cf1\lang1053
\par }\pard\plain \s1\keepn\nowidctlpar\outlinelevel0\adjustright \f1\cgrid {\fs20\cf1\lang1053 CalcDDtable calculates the double dummy values of the initial 52 cards for all the 20 trump suit/leading hand combinations.
\par }\pard\plain \nowidctlpar\adjustright \f1\cgrid {
\par }\pard\plain \s1\keepn\nowidctlpar\outlinelevel0\adjustright \f1\cgrid {\fs20\cf1\lang1053 Before CalcDDtable can be called, a structure of type " ddTableResults" must be declared.
\par }\pard\plain \nowidctlpar\adjustright \f1\cgrid {\b\fs20\cf1\lang1053 CalcDDtable}{\fs20\cf1\lang1053 returns a status integer, "no fault" means the DLL supplies the double dummy scores in the "ddTableResults" type structure.\line Status codes:
\par 1=No fault,
\par Other status codes are errors, with codes equal to SolveBoard status codes. }{
\par
\par }{\fs20\cf1\lang1053 Structure \'94}{\b\fs20\cf1\lang1053 ddTableDeal}{\fs20\cf1\lang1053 \'94 defines the dealt cards to be analyzed.}{\fs20
\par struct ddTableDeal \{
\par unsigned int cards[4][4]; /* 1}{\fs20\super st}{\fs20 index is hand, 2}{\fs20\super nd}{\fs20 index is suit, same coding as for deal.remainCards for SolveBoard. */
\par \};
\par
\par }{\fs20\cf1\lang1053 struct }{\b\fs20\cf1\lang1053 ddTableResults}{\fs20\cf1\lang1053 \{ /* For each combination trump suit / leading hand, the DLL provides the double dummy score. */}{\fs20
\par int resTable[5][4];\tab /* 1}{\fs20\super st}{\fs20 index is trump (0=Spades, 1=Hearts, 2=Diamonds, 3=Clubs, 4=No Trump 2}{\fs20\super nd}{\fs20 index is leading hand, 0=North, 1=East, 2=South, 3=West */
\par \};
\par }{
\par
\par
\par
\par }\pard\plain \s1\keepn\nowidctlpar\outlinelevel0\adjustright \f1\cgrid {\b\fs20\cf1\lang1053 Revision History
\par }\pard\plain \nowidctlpar\adjustright \f1\cgrid {\fs20\cf1\lang1053
\par Rev A, 2006-02-25.\tab \tab First issue.
\par
\par Rev B, 2006-03-20\tab \tab Updated issue.
\par
\par }\pard \fi-2880\li2880\nowidctlpar\adjustright {\fs20\cf1\lang1053 Rev C, 2006-03-28\tab Updated issue. Addition of the SolveBoard parameter \'94mode\'94.
\par
\par Rev D, 2006-04-05\tab Updated issue. Usage of target=0 to list all cards that are legal to play.
\par
\par Rev E, 2006-05-29\tab Updated issue. New error code \endash 10 for number of cards > 52.
\par
\par Rev F, 2006-08-09\tab Updated issue. New mode parameter value = 2. New error code \endash 11 for calling SolveBoard with mode = 2 and forbidden values of other parameters.
\par }\pard \nowidctlpar\adjustright {\fs20\cf1\lang1053
\par }\pard \fi-2880\li2880\nowidctlpar\adjustright {\fs20\cf1\lang1053 Rev F1, 2006-08-14\tab Clarifications on conditions for returning scores for the different combinations of the values for target and solutions.
\par
\par Rev F2, 2006-08-26\tab New error code \endash 12 for wrongly set values of deal.currentTrickSuit and\line deal.currentTrickRank.
\par
\par Rev G, 2007-01-04\tab New DDS release 1.1, otherwise no change compared to isse F2.
\par
\par Rev H, 2007-04-23\tab DDS release 1.4, changes for parameter mode=2.
\par
\par Rev I, 2010-04-10\tab DDS release 2.0, multi-thread support.
\par
\par Rec J, 2010-05-29\tab DDS release 2.1, OpenMP support, reuse of previous DD transposition table results of similar deals.
\par }} tenace-0.13/examples/ 0000775 0004016 0004016 00000000000 12225341155 011511 5 0000000 0000000 tenace-0.13/examples/README.examples 0000664 0004016 0004016 00000001052 11500771612 014124 0000000 0000000 Notes on the tenace examples
============================
Notes on the "Everybody makes" deals can be found at Thomas Andrew's site and
in an article by Richard Pavlicek:
* http://bridge.thomasoandrews.com/deals/everybody/
* http://www.rpbridge.net/7a59.htm#10
triple-coup.lin is an interesting deal where South can make 7H on a Spade lead.
* http://james.fabpedigree.com/gslamsol.htm
7nt-south.lin is a hand where South makes 7NT, but North does not, and no hand
has a void. (Otherwise, the example is trivial to contruct.) By Christian
Löwenstein.
tenace-0.13/examples/Makefile.am 0000664 0004016 0004016 00000000437 11500771612 013471 0000000 0000000 examplesdir = $(docdir)/examples
examples_DATA = README.examples \
01-26-08-3.lin \
2007_Spingold_Final.First_Quarter.lin \
7nt-south.lin \
everybody-makes-3nt.lin \
everybody-makes-3s.lin \
everybody-makes-7nt.lin \
squeeze.lin \
triple-coup.lin
EXTRA_DIST = $(examples_DATA)
tenace-0.13/examples/squeeze.lin 0000664 0004016 0004016 00000000225 11500771612 013615 0000000 0000000 pn|South,West,North,East|st||md|3S37QH3JD45JC78QKA,S8JKH68QKD236TC69,S26AH457TAD7QC35J,|rh||ah|Board 1|sv|o|mb|1H|mb|p|mb|3N|mb|p|mb|p|mb|p|pg||pg||
tenace-0.13/examples/everybody-makes-3nt.lin 0000664 0004016 0004016 00000000221 11500771612 015740 0000000 0000000 pn|Süd,West,Nord,Ost|st||md|3S2345678AH9TQDCJK,SHJKD9TQC2345678A,S9TQH2345678ADJKC,|rh||ah|Board 1|sv|o|mb|p|mb|p|mb|3N|mb|p|mb|p|mb|p|pg||pg||
tenace-0.13/examples/01-26-08-3.lin 0000664 0004016 0004016 00000011637 11500771612 013177 0000000 0000000 vg|Bridge Base Online,IMPs,P,1,21,,,,|
rs|3SE=,,4SN=,,3NS=,,2NE+3,,3NW-1,,4SW=,,4SW=,,4SS+3,,3NN+1,,6NS=,,4HE=,,2DW=,,3CS-1,,3NW-2,,6CE=,,4SS+2,,3DW-1,,3HS+1,,4SEx-1,,6HS=,,3NW+2,|
pw|Frederic,Advena,hennibaer,Codo,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,Myon,wendelin,zuse,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,|
mp|,2.1,4.3,,2.3,,5.7,,2.7,,,6.1,,3.8,2.5,,3.5,,4.2,,,1.5,0.3,,4.0,,3.3,,,8.9,1.1,,1.2,,3.0,,1.1,,--,--,,2.7|
bn|23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43|
pg||
qx|o11|pn|Frederic,Myon,wendelin,zuse|st||md|3S2349JH56D2KC25QK,S5TQKH78AD46JAC49,S67AHKD5789TQC678,|rh||ah|Board 33|sv|o|mb|p|mb|3H|mb|p|mb|4H|mb|p|mb|p|mb|p|pg||pc|DK|pc|DA|pc|D5|pc|D3|pg||pc|C9|pc|C8|pc|C3|pc|CQ|pg||pc|D2|pc|DJ|pc|DQ|pc|H2|pg||pc|HT|pc|H5|pc|H7|pc|HK|pg||pc|DT|pc|HQ|pc|S9|pc|D4|pg||pc|S8|pc|S2|pc|SQ|pc|SA|pg||pc|C6|pc|CA|pc|C2|pc|C4|pg||pc|H3|pc|H6|pc|H8|pc|D7|pg||mc|10|pg||
qx|o12|pn|Frederic,Myon,wendelin,zuse|st||md|4S59TJH38D29JC45TK,S34H5TAD358TQAC3A,S28KAH9JQKD46C28J,|rh||ah|Board 34|sv|n|mb|p|mb|p|mb|1D|mb|d|mb|p|mb|1S|mb|2D|mb|p|mb|p|mb|p|pg||pc|HK|pc|h2|pc|H8|pc|hA|pg||pc|c3|pc|C2|pc|cQ|pc|CK|pg||pc|H3|pc|h5|pc|H9|pc|h4|pg||pc|HQ|pc|h6|pc|SJ|pc|hT|pg||pc|HJ|pc|h7|pc|S5|pc|d3|pg||pc|d5|pc|D4|pc|dK|pc|D2|pg||pc|d7|pc|D9|pc|dA|pc|D6|pg||mc|8|pg||
qx|o13|pn|Frederic,Myon,wendelin,zuse|st||md|1S68KAH7QD38C2459A,S59JH2TJKAD256ACJ,S34TH346DTQC68TQK,|rh||ah|Board 35|sv|e|mb|1C|mb|1H|mb|2C|mb|p|mb|3C|mb|p|mb|p|mb|p|pg||pc|hA|pc|H3|pc|H8|pc|H7|pg||pc|hK|pc|H4|pc|H5|pc|HQ|pg||pc|d2|pc|DT|pc|DJ|pc|D3|pg||pc|S2|pc|SA|pc|s5|pc|S3|pg||pc|C2|pc|cJ|pc|CQ|pc|C3|pg||pc|H6|pc|H9|pc|C5|pc|h2|pg||pc|CA|pc|hT|pc|C6|pc|C7|pg||pc|D8|pc|dA|pc|DQ|pc|D4|pg||pc|s9|pc|ST|pc|SQ|pc|SK|pg||pc|S6|pc|sJ|pc|S4|pc|S7|pg||mc|8|pg||
qx|o14|pn|Frederic,Myon,wendelin,zuse|st||md|2S3456H26D24TKC257,S89H79TKD35JQC3QK,S2TJQH348QAD6AC89,|rh||ah|Board 36|sv|b|mb|p|mb|1H|mb|p|mb|p|mb|1N|mb|p|mb|3N|mb|p|mb|p|mb|p|pg||pc|SQ|pc|sA|pc|S6|pc|s8|pg||pc|hJ|pc|H2|pc|h7|pc|HQ|pg||pc|SJ|pc|sK|pc|S5|pc|s9|pg||pc|h5|pc|H6|pc|hK|pc|HA|pg||pc|ST|pc|s7|pc|S3|pc|d3|pg||pc|DA|pc|d7|pc|D2|pc|d5|pg||pc|S2|pc|d8|pc|S4|pc|c3|pg||pc|DK|pc|dJ|pc|D6|pc|d9|pg||pc|D4|mc|7|pg||
qx|o15|pn|Frederic,Myon,wendelin,zuse|st||md|3S256H367QKD289C78,S8QAH5TJADTKAC49K,S379KH248D457JC6J,|rh||ah|Board 37|sv|n|mb|p|mb|p|mb|p|mb|2N|mb|p|mb|6C|mb|p|mb|p|mb|p|pg||pc|HK|pc|HA|pc|H8|pc|H9|pg||pc|C4|pc|C6|pc|CA|pc|C7|pg||pc|C2|pc|C8|pc|CK|pc|CJ|pg||pc|DA|pc|D4|pc|D3|pc|D2|pg||pc|DK|pc|D5|pc|D6|pc|D8|pg||pc|DT|pc|D7|pc|DQ|pc|D9|pg||pc|ST|pc|S2|pc|S8|pc|SK|pg||pc|H2|mc|12|pg||
qx|o16|pn|Frederic,Myon,wendelin,zuse|st||md|4S368JQHD2457QKC4A,S24TH4JQD8AC567QK,S7KAH3569TAD39C29,|rh||ah|Board 38|sv|e|mb|p|mb|1S|mb|2C|mb|2H|mb|3C|mb|3D|mb|p|mb|4S|mb|p|mb|p|mb|p|pg||pc|cK|pc|C2|pc|C3|pc|CA|pg||pc|S3|pc|s2|pc|SA|pc|S5|pg||pc|HA|pc|H2|pc|C4|pc|h4|pg||pc|D3|pc|D6|pc|DK|pc|dA|pg||pc|cQ|pc|C9|pc|CJ|pc|S6|pg||pc|DQ|pc|d8|pc|D9|pc|DT|pg||pc|D2|pc|sT|pc|SK|pc|DJ|pg||pc|S7|pc|S9|pc|SQ|pc|s4|pg||mc|12|pg||
qx|o17|pn|Frederic,Myon,wendelin,zuse|st||md|1S56TKH68JD26TC78Q,S37H5KD4578QAC34K,S248AH479TAD39JCA,|rh||ah|Board 39|sv|b|mb|p|mb|1D|mb|1H|mb|1N|mb|2H|mb|3D|mb|p|mb|p|mb|p|pg||pc|CA|pc|c2|pc|C8|pc|c3|pg||pc|HA|pc|h2|pc|H8|pc|h5|pg||pc|H7|pc|h3|pc|H6|pc|hK|pg||pc|d4|pc|D3|pc|dK|pc|D6|pg||pc|hQ|pc|HJ|pc|s3|pc|H4|pg||pc|cJ|pc|C7|pc|c4|pc|D9|pg||pc|S2|pc|s9|pc|ST|pc|s7|pg||pc|CQ|pc|cK|pc|DJ|pc|c5|pg||pc|S4|mc|8|pg||
qx|o18|pn|Frederic,Myon,wendelin,zuse|st||md|2S6TH58TJQAD5C247T,S4QAH6D468TJKC8KA,S89KH7KD239AC359Q,|rh||ah|Board 40|sv|o|mb|1D|mb|p|mb|p|mb|2H|mb|3D|mb|3H|mb|p|mb|p|mb|p|pg||pc|cA|pc|C3|pc|CJ|pc|C2|pg||pc|s4|pc|SK|pc|S7|pc|S6|pg||pc|HK|pc|H2|pc|H5|pc|h6|pg||pc|H7|pc|H3|pc|HQ|pc|d4|pg||pc|HA|pc|d6|pc|S8|pc|H4|pg||pc|HJ|pc|d8|pc|S9|pc|H9|pg||pc|C4|pc|cK|pc|C5|pc|C6|pg||pc|sA|pc|D2|pc|S2|pc|ST|pg||pc|sQ|mc|10|pg||
qx|o19|pn|Frederic,Myon,wendelin,zuse|st||md|3S8H7TKD567KAC2479,S26QH238QAD2C56TA,S3TJKH56JD349JQCJ,|rh||ah|Board 41|sv|e|mb|p|mb|p|mb|1D|mb|1H|mb|d|mb|1S|mb|p|mb|2S|mb|3D|mb|3S|mb|p|mb|4S|mb|d|mb|p|mb|p|mb|p|pg||pc|DA|pc|D2|pc|D9|pc|DT|pg||pc|C4|pc|C5|pc|CJ|pc|CK|pg||pc|D8|pc|D5|pc|S2|pc|D3|pg||pc|S6|pc|S3|pc|S4|pc|S8|pg||pc|C2|pc|CA|pc|ST|pc|C3|pg||pc|SK|pc|SA|pc|C7|pc|SQ|pg||pc|H9|pc|HT|pc|HQ|pc|H5|pg||mc|9|pg||
qx|o20|pn|Frederic,Myon,wendelin,zuse|st||md|4S36JH59JQKDC2347K,S57KH68D267C59TJQ,S4AH347TAD5TQKAC8,|rh||ah|Board 42|sv|b|mb|p|mb|1H|mb|p|mb|2D|mb|p|mb|2H|mb|p|mb|2S!|mb|p|mb|4S|mb|p|mb|4N|mb|p|mb|5C|mb|p|mb|6H|mb|p|mb|p|mb|p|pg||pc|cQ|pc|C8|pc|CA|pc|C2|pg||pc|D3|pc|S3|pc|d2|pc|D5|pg||pc|H3|pc|H2|pc|HK|pc|h6|pg||pc|H5|pc|h8|pc|HT|pc|S9|pg||mc|12|pg||
qx|o21|pn|Frederic,Myon,wendelin,zuse|st||md|1S579TH67D9AC2345T,S46QH389AD6TKC9JQ,S8KH245JQD278C68K,|rh||ah|Board 43|sv|o|mb|p|mb|1D|mb|1H|mb|d|mb|p|mb|1N|mb|p|mb|3N|mb|p|mb|p|mb|p|pg||pc|H4|pc|hT|pc|H6|pc|h3|pg||pc|d3|pc|DA|pc|d6|pc|D8|pg||pc|H7|pc|h8|pc|H2|pc|hK|pg||pc|cA|pc|C4|pc|c9|pc|C6|pg||pc|c7|pc|C2|pc|cQ|pc|CK|pg||pc|HQ|pc|s2|pc|D9|pc|hA|pg||pc|cJ|pc|C8|pc|s3|pc|C3|pg||pc|dK|pc|D2|pc|d4|pc|C5|pg||pc|dT|pc|D7|pc|d5|mc|11|pg||
tenace-0.13/examples/Makefile.in 0000664 0004016 0004016 00000051160 12225337317 013506 0000000 0000000 # Makefile.in generated by automake 1.13.3 from Makefile.am.
# @configure_input@
# Copyright (C) 1994-2013 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
@SET_MAKE@
VPATH = @srcdir@
am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
am__make_running_with_option = \
case $${target_option-} in \
?) ;; \
*) echo "am__make_running_with_option: internal error: invalid" \
"target option '$${target_option-}' specified" >&2; \
exit 1;; \
esac; \
has_opt=no; \
sane_makeflags=$$MAKEFLAGS; \
if $(am__is_gnu_make); then \
sane_makeflags=$$MFLAGS; \
else \
case $$MAKEFLAGS in \
*\\[\ \ ]*) \
bs=\\; \
sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
| sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
esac; \
fi; \
skip_next=no; \
strip_trailopt () \
{ \
flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
}; \
for flg in $$sane_makeflags; do \
test $$skip_next = yes && { skip_next=no; continue; }; \
case $$flg in \
*=*|--*) continue;; \
-*I) strip_trailopt 'I'; skip_next=yes;; \
-*I?*) strip_trailopt 'I';; \
-*O) strip_trailopt 'O'; skip_next=yes;; \
-*O?*) strip_trailopt 'O';; \
-*l) strip_trailopt 'l'; skip_next=yes;; \
-*l?*) strip_trailopt 'l';; \
-[dEDm]) skip_next=yes;; \
-[JT]) skip_next=yes;; \
esac; \
case $$flg in \
*$$target_option*) has_opt=yes; break;; \
esac; \
done; \
test $$has_opt = yes
am__make_dryrun = (target_option=n; $(am__make_running_with_option))
am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
pkgdatadir = $(datadir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkglibexecdir = $(libexecdir)/@PACKAGE@
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_HEADER = $(INSTALL_DATA)
transform = $(program_transform_name)
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
subdir = examples
DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \
$(top_srcdir)/m4/extensions.m4 \
$(top_srcdir)/m4/extern-inline.m4 \
$(top_srcdir)/m4/gnulib-common.m4 \
$(top_srcdir)/m4/gnulib-comp.m4 \
$(top_srcdir)/m4/include_next.m4 $(top_srcdir)/m4/intltool.m4 \
$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nproc.m4 \
$(top_srcdir)/m4/off_t.m4 $(top_srcdir)/m4/onceonly.m4 \
$(top_srcdir)/m4/physmem.m4 $(top_srcdir)/m4/ssize_t.m4 \
$(top_srcdir)/m4/stdbool.m4 $(top_srcdir)/m4/stddef_h.m4 \
$(top_srcdir)/m4/sys_types_h.m4 $(top_srcdir)/m4/unistd_h.m4 \
$(top_srcdir)/m4/warn-on-use.m4 $(top_srcdir)/m4/wchar_t.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
AM_V_P = $(am__v_P_@AM_V@)
am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
am__v_P_0 = false
am__v_P_1 = :
AM_V_GEN = $(am__v_GEN_@AM_V@)
am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
am__v_GEN_0 = @echo " GEN " $@;
am__v_GEN_1 =
AM_V_at = $(am__v_at_@AM_V@)
am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
am__v_at_0 = @
am__v_at_1 =
SOURCES =
DIST_SOURCES =
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
*) (install-info --version) >/dev/null 2>&1;; \
esac
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
am__vpath_adj = case $$p in \
$(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
*) f=$$p;; \
esac;
am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
am__install_max = 40
am__nobase_strip_setup = \
srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
am__nobase_strip = \
for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
am__nobase_list = $(am__nobase_strip_setup); \
for p in $$list; do echo "$$p $$p"; done | \
sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
$(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
if (++n[$$2] == $(am__install_max)) \
{ print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
END { for (dir in files) print dir, files[dir] }'
am__base_list = \
sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
am__uninstall_files_from_dir = { \
test -z "$$files" \
|| { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
|| { echo " ( cd '$$dir' && rm -f" $$files ")"; \
$(am__cd) "$$dir" && rm -f $$files; }; \
}
am__installdirs = "$(DESTDIR)$(examplesdir)"
DATA = $(examples_DATA)
am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
ALL_LINGUAS = @ALL_LINGUAS@
AMTAR = @AMTAR@
AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
AR = @AR@
ARFLAGS = @ARFLAGS@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
CATALOGS = @CATALOGS@
CATOBJEXT = @CATOBJEXT@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CYGPATH_W = @CYGPATH_W@
DATADIRNAME = @DATADIRNAME@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
FGREP = @FGREP@
GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
GMOFILES = @GMOFILES@
GMSGFMT = @GMSGFMT@
GNULIB_CHDIR = @GNULIB_CHDIR@
GNULIB_CHOWN = @GNULIB_CHOWN@
GNULIB_CLOSE = @GNULIB_CLOSE@
GNULIB_DUP = @GNULIB_DUP@
GNULIB_DUP2 = @GNULIB_DUP2@
GNULIB_DUP3 = @GNULIB_DUP3@
GNULIB_ENVIRON = @GNULIB_ENVIRON@
GNULIB_EUIDACCESS = @GNULIB_EUIDACCESS@
GNULIB_FACCESSAT = @GNULIB_FACCESSAT@
GNULIB_FCHDIR = @GNULIB_FCHDIR@
GNULIB_FCHOWNAT = @GNULIB_FCHOWNAT@
GNULIB_FDATASYNC = @GNULIB_FDATASYNC@
GNULIB_FSYNC = @GNULIB_FSYNC@
GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@
GNULIB_GETCWD = @GNULIB_GETCWD@
GNULIB_GETDOMAINNAME = @GNULIB_GETDOMAINNAME@
GNULIB_GETDTABLESIZE = @GNULIB_GETDTABLESIZE@
GNULIB_GETGROUPS = @GNULIB_GETGROUPS@
GNULIB_GETHOSTNAME = @GNULIB_GETHOSTNAME@
GNULIB_GETLOGIN = @GNULIB_GETLOGIN@
GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@
GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@
GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@
GNULIB_GROUP_MEMBER = @GNULIB_GROUP_MEMBER@
GNULIB_ISATTY = @GNULIB_ISATTY@
GNULIB_LCHOWN = @GNULIB_LCHOWN@
GNULIB_LINK = @GNULIB_LINK@
GNULIB_LINKAT = @GNULIB_LINKAT@
GNULIB_LSEEK = @GNULIB_LSEEK@
GNULIB_PIPE = @GNULIB_PIPE@
GNULIB_PIPE2 = @GNULIB_PIPE2@
GNULIB_PREAD = @GNULIB_PREAD@
GNULIB_PWRITE = @GNULIB_PWRITE@
GNULIB_READ = @GNULIB_READ@
GNULIB_READLINK = @GNULIB_READLINK@
GNULIB_READLINKAT = @GNULIB_READLINKAT@
GNULIB_RMDIR = @GNULIB_RMDIR@
GNULIB_SETHOSTNAME = @GNULIB_SETHOSTNAME@
GNULIB_SLEEP = @GNULIB_SLEEP@
GNULIB_SYMLINK = @GNULIB_SYMLINK@
GNULIB_SYMLINKAT = @GNULIB_SYMLINKAT@
GNULIB_TTYNAME_R = @GNULIB_TTYNAME_R@
GNULIB_UNISTD_H_NONBLOCKING = @GNULIB_UNISTD_H_NONBLOCKING@
GNULIB_UNISTD_H_SIGPIPE = @GNULIB_UNISTD_H_SIGPIPE@
GNULIB_UNLINK = @GNULIB_UNLINK@
GNULIB_UNLINKAT = @GNULIB_UNLINKAT@
GNULIB_USLEEP = @GNULIB_USLEEP@
GNULIB_WRITE = @GNULIB_WRITE@
GREP = @GREP@
HAVE_CHOWN = @HAVE_CHOWN@
HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@
HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@
HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@
HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@
HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@
HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@
HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@
HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@
HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@
HAVE_DUP2 = @HAVE_DUP2@
HAVE_DUP3 = @HAVE_DUP3@
HAVE_EUIDACCESS = @HAVE_EUIDACCESS@
HAVE_FACCESSAT = @HAVE_FACCESSAT@
HAVE_FCHDIR = @HAVE_FCHDIR@
HAVE_FCHOWNAT = @HAVE_FCHOWNAT@
HAVE_FDATASYNC = @HAVE_FDATASYNC@
HAVE_FSYNC = @HAVE_FSYNC@
HAVE_FTRUNCATE = @HAVE_FTRUNCATE@
HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@
HAVE_GETGROUPS = @HAVE_GETGROUPS@
HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@
HAVE_GETLOGIN = @HAVE_GETLOGIN@
HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@
HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@
HAVE_LCHOWN = @HAVE_LCHOWN@
HAVE_LINK = @HAVE_LINK@
HAVE_LINKAT = @HAVE_LINKAT@
HAVE_OS_H = @HAVE_OS_H@
HAVE_PIPE = @HAVE_PIPE@
HAVE_PIPE2 = @HAVE_PIPE2@
HAVE_PREAD = @HAVE_PREAD@
HAVE_PWRITE = @HAVE_PWRITE@
HAVE_READLINK = @HAVE_READLINK@
HAVE_READLINKAT = @HAVE_READLINKAT@
HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@
HAVE_SLEEP = @HAVE_SLEEP@
HAVE_SYMLINK = @HAVE_SYMLINK@
HAVE_SYMLINKAT = @HAVE_SYMLINKAT@
HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@
HAVE_UNISTD_H = @HAVE_UNISTD_H@
HAVE_UNLINKAT = @HAVE_UNLINKAT@
HAVE_USLEEP = @HAVE_USLEEP@
HAVE_WCHAR_T = @HAVE_WCHAR_T@
HAVE__BOOL = @HAVE__BOOL@
INCLUDE_NEXT = @INCLUDE_NEXT@
INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
INSTOBJEXT = @INSTOBJEXT@
INTLLIBS = @INTLLIBS@
INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
INTLTOOL_MERGE = @INTLTOOL_MERGE@
INTLTOOL_PERL = @INTLTOOL_PERL@
INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@
INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@
INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@
INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
MAINT = @MAINT@
MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MKINSTALLDIRS = @MKINSTALLDIRS@
MSGFMT = @MSGFMT@
MSGFMT_OPTS = @MSGFMT_OPTS@
MSGMERGE = @MSGMERGE@
NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@
NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@
NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@
NEXT_STDDEF_H = @NEXT_STDDEF_H@
NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@
NEXT_UNISTD_H = @NEXT_UNISTD_H@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
OBJEXT = @OBJEXT@
OTOOL = @OTOOL@
OTOOL64 = @OTOOL64@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_CFLAGS = @PACKAGE_CFLAGS@
PACKAGE_LIBS = @PACKAGE_LIBS@
PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
POFILES = @POFILES@
POSUB = @POSUB@
PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
PRAGMA_COLUMNS = @PRAGMA_COLUMNS@
PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@
RANLIB = @RANLIB@
REPLACE_CHOWN = @REPLACE_CHOWN@
REPLACE_CLOSE = @REPLACE_CLOSE@
REPLACE_DUP = @REPLACE_DUP@
REPLACE_DUP2 = @REPLACE_DUP2@
REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@
REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@
REPLACE_GETCWD = @REPLACE_GETCWD@
REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@
REPLACE_GETGROUPS = @REPLACE_GETGROUPS@
REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@
REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@
REPLACE_ISATTY = @REPLACE_ISATTY@
REPLACE_LCHOWN = @REPLACE_LCHOWN@
REPLACE_LINK = @REPLACE_LINK@
REPLACE_LINKAT = @REPLACE_LINKAT@
REPLACE_LSEEK = @REPLACE_LSEEK@
REPLACE_NULL = @REPLACE_NULL@
REPLACE_PREAD = @REPLACE_PREAD@
REPLACE_PWRITE = @REPLACE_PWRITE@
REPLACE_READ = @REPLACE_READ@
REPLACE_READLINK = @REPLACE_READLINK@
REPLACE_RMDIR = @REPLACE_RMDIR@
REPLACE_SLEEP = @REPLACE_SLEEP@
REPLACE_SYMLINK = @REPLACE_SYMLINK@
REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@
REPLACE_UNLINK = @REPLACE_UNLINK@
REPLACE_UNLINKAT = @REPLACE_UNLINKAT@
REPLACE_USLEEP = @REPLACE_USLEEP@
REPLACE_WRITE = @REPLACE_WRITE@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STDBOOL_H = @STDBOOL_H@
STDDEF_H = @STDDEF_H@
STRIP = @STRIP@
UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@
UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@
USE_NLS = @USE_NLS@
VERSION = @VERSION@
WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@
XGETTEXT = @XGETTEXT@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
ac_ct_AR = @ac_ct_AR@
ac_ct_CC = @ac_ct_CC@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
builddir = @builddir@
datadir = @datadir@
datarootdir = @datarootdir@
docdir = @docdir@
dvidir = @dvidir@
exec_prefix = @exec_prefix@
gl_LIBOBJS = @gl_LIBOBJS@
gl_LTLIBOBJS = @gl_LTLIBOBJS@
gltests_LIBOBJS = @gltests_LIBOBJS@
gltests_LTLIBOBJS = @gltests_LTLIBOBJS@
gltests_WITNESS = @gltests_WITNESS@
host = @host@
host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
intltool__v_merge_options_ = @intltool__v_merge_options_@
intltool__v_merge_options_0 = @intltool__v_merge_options_0@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
examplesdir = $(docdir)/examples
examples_DATA = README.examples \
01-26-08-3.lin \
2007_Spingold_Final.First_Quarter.lin \
7nt-south.lin \
everybody-makes-3nt.lin \
everybody-makes-3s.lin \
everybody-makes-7nt.lin \
squeeze.lin \
triple-coup.lin
EXTRA_DIST = $(examples_DATA)
all: all-am
.SUFFIXES:
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
&& { if test -f $@; then exit 0; else break; fi; }; \
exit 1;; \
esac; \
done; \
echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign examples/Makefile'; \
$(am__cd) $(top_srcdir) && \
$(AUTOMAKE) --foreign examples/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
*) \
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
esac;
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):
mostlyclean-libtool:
-rm -f *.lo
clean-libtool:
-rm -rf .libs _libs
install-examplesDATA: $(examples_DATA)
@$(NORMAL_INSTALL)
@list='$(examples_DATA)'; test -n "$(examplesdir)" || list=; \
if test -n "$$list"; then \
echo " $(MKDIR_P) '$(DESTDIR)$(examplesdir)'"; \
$(MKDIR_P) "$(DESTDIR)$(examplesdir)" || exit 1; \
fi; \
for p in $$list; do \
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
echo "$$d$$p"; \
done | $(am__base_list) | \
while read files; do \
echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(examplesdir)'"; \
$(INSTALL_DATA) $$files "$(DESTDIR)$(examplesdir)" || exit $$?; \
done
uninstall-examplesDATA:
@$(NORMAL_UNINSTALL)
@list='$(examples_DATA)'; test -n "$(examplesdir)" || list=; \
files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
dir='$(DESTDIR)$(examplesdir)'; $(am__uninstall_files_from_dir)
tags TAGS:
ctags CTAGS:
cscope cscopelist:
distdir: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
list='$(DISTFILES)'; \
dist_files=`for file in $$list; do echo $$file; done | \
sed -e "s|^$$srcdirstrip/||;t" \
-e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
case $$dist_files in \
*/*) $(MKDIR_P) `echo "$$dist_files" | \
sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
sort -u` ;; \
esac; \
for file in $$dist_files; do \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
if test -d $$d/$$file; then \
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
if test -d "$(distdir)/$$file"; then \
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \
cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
else \
test -f "$(distdir)/$$file" \
|| cp -p $$d/$$file "$(distdir)/$$file" \
|| exit 1; \
fi; \
done
check-am: all-am
check: check-am
all-am: Makefile $(DATA)
installdirs:
for dir in "$(DESTDIR)$(examplesdir)"; do \
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
done
install: install-am
install-exec: install-exec-am
install-data: install-data-am
uninstall: uninstall-am
install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
installcheck: installcheck-am
install-strip:
if test -z '$(STRIP)'; then \
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
install; \
else \
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
"INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
fi
mostlyclean-generic:
clean-generic:
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
clean: clean-am
clean-am: clean-generic clean-libtool mostlyclean-am
distclean: distclean-am
-rm -f Makefile
distclean-am: clean-am distclean-generic
dvi: dvi-am
dvi-am:
html: html-am
html-am:
info: info-am
info-am:
install-data-am: install-examplesDATA
install-dvi: install-dvi-am
install-dvi-am:
install-exec-am:
install-html: install-html-am
install-html-am:
install-info: install-info-am
install-info-am:
install-man:
install-pdf: install-pdf-am
install-pdf-am:
install-ps: install-ps-am
install-ps-am:
installcheck-am:
maintainer-clean: maintainer-clean-am
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
mostlyclean: mostlyclean-am
mostlyclean-am: mostlyclean-generic mostlyclean-libtool
pdf: pdf-am
pdf-am:
ps: ps-am
ps-am:
uninstall-am: uninstall-examplesDATA
.MAKE: install-am install-strip
.PHONY: all all-am check check-am clean clean-generic clean-libtool \
cscopelist-am ctags-am distclean distclean-generic \
distclean-libtool distdir dvi dvi-am html html-am info info-am \
install install-am install-data install-data-am install-dvi \
install-dvi-am install-examplesDATA install-exec \
install-exec-am install-html install-html-am install-info \
install-info-am install-man install-pdf install-pdf-am \
install-ps install-ps-am install-strip installcheck \
installcheck-am installdirs maintainer-clean \
maintainer-clean-generic mostlyclean mostlyclean-generic \
mostlyclean-libtool pdf pdf-am ps ps-am tags-am uninstall \
uninstall-am uninstall-examplesDATA
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:
tenace-0.13/examples/triple-coup.lin 0000664 0004016 0004016 00000000670 11500771612 014403 0000000 0000000 pn|Süd,West,Nord,Ost|st||md|3SH569JKAD345C9JQA,S89TJQH4D9TJQC2TK,S34567KAH23D2KAC3,|rh||ah|Board 1|sv|o|pg||pc|SQ|pc|SA|pc|S2|pc|D3|pg||pc|SK|pc|C4|pc|H5|pc|S8|pg||pc|CA|pc|C2|pc|C3|pc|C5|pg||pc|CQ|pc|CT|pc|S3|pc|C6|pg||pc|CJ|pc|CK|pc|H2|pc|C7|pg||pc|H3|pc|H7|pc|H9|pc|H4|pg||pc|C9|pc|D9|pc|S4|pc|C8|pg||pc|D4|pc|DT|pc|DA|pc|D6|pg||pc|S5|pc|D7|pc|H6|pc|S9|pg||pc|D5|pc|DJ|pc|DK|pc|D8|pg||pc|D2|pc|C6|pc|CJ|pc|CT|pg||pc|C3|pc|C7|pc|CA|pg||
tenace-0.13/examples/2007_Spingold_Final.First_Quarter.lin 0000664 0004016 0004016 00000201602 11500771612 020267 0000000 0000000 vg|2007 SPINGOLD FINAL,First Quarter,I,1,16,NICKELL,0,GROMOV,0|
rs|2HN=,3HN=,4SS=,5CN+1,3NN=,3NN+1,3NW+2,4SE+1,2SN-1,3CW=,6HS+1,1SWx-4,1NS+1,1NS+1,6CN=,6CN=,4SW-1,4SW-1,3NE+1,3NE+1,4SE+1,4SE=,3SS-2,3NNx-1,3NW-2,2NW=,4SN-1,4SN-1,4DW=,4CE-1,3NN+1,3NN=|
pn|Meckstroth,Zmudzinski,Rodwell,Balicki,Dubinin,Nickell,Gromov,Lall|pg||
qx|o1|st||md|3SA2HT7DK75432C974,S84HQ986DQTCAK852,SKQT3HAKJ54DCJT63,SJ9765H32DAJ986CQ|sv|o|nt|Walddk2: Hello everyone and welcome back to Nashville, Tennessee, for the Spingold Knockout Teams. Finals, 4 segments of 16 boards; this is the first|pg||
mb|1H|mb|p|nt|brolucius: Hi to the kibitzers!|pg||
nt|Walddk2: Your commentators are David Bird, England, and Karen Allison, USA. I am Roland Wald from Denmark|pg||
mb|1N|an|f1|mb|p|mb|2C|nt|Walddk2: Our operator is Jan Martel from USA. Good morning to you|pg||
nt|kareno: Good morning from Nashville. Roland :) David :) Jan :)|pg||
nt|brolucius: Both pairs are top-of-the-range and we should be in for a great session.|pg||
mb|d|nt|kareno: They have met before at World Championships. And the level of the Spingold is certainly up to World Championship quality.|pg||
nt|brolucius: Now meckstroth will be worried about bidding diamonds because East has shown them.|pg||
mb|2D|nt|brolucius: Still, no reason to think that clubs would be better.|pg||
nt|Vugraph7: I think that N & S alerted 2@c as could be as few as 2|pg||
nt|kareno: He would never have bid them - In my opinion he was always going back to hearts.|pg||
nt|kareno: hm.. wrong again!|pg||
nt|brolucius: West has a misfit but he may be worried that East is stronger and that N-S are attempting to steal the board with a light opening and a light response.|pg||
mb|d|mb|2H|mb|p|nt|brolucius: Terence Reese once described meckstroth as 'having the appearance of an all-in wrestler'. A fearsome opponent indeed.|pg||
nt|Vugraph7: Adam writing about his dbl I think (I'm going to call him Adam because Zmudzinski is just too much for me to type fast|pg||
mb|p|nt|brolucius: In their youth, Rodwell and Meckstroth were long-haired 'angry young men'. Now they have some of the best temperaments in world bridge. Often impossible to tell from their manner ...|pg||
nt|brolucius: whether they have just had a bad board or an excellent one.|pg||
nt|brolucius: They never seem to get ruffled. Mind you, that is easier when you win most of the time...|pg||
nt|Vugraph7: Lots of writing went on, which I can't begin to see. Now Adam has his head in his hand and is thinking|pg||
mb|p|nt|Vugraph7: Rod asks about honor leads and Zmud says "standard"|pg||
nt|kareno: A good decision. 2@h will make or go down one I think.|pg||
pc|cQ|pc|c4|pc|c5|pc|c6|pg||
nt|Walddk2: http://www.acbl.org/nabc/Nashville2007/ is the link to the official website with schedule, results and daily bulletins|pg||
nt|brolucius: West has wisely decided not to double 2@H, which might punish partner for his initiative in competing for the partscore.|pg||
nt|Vugraph7: Now Zmud says - sorry - honor leads standard except J denies and 10, 9 from interior sequences (probably didn't think about that because of the lead being Q but wanted to be sure ...|pg||
nt|Vugraph7: he didn't mislead for a future hand|pg||
pc|h2|pc|h7|pc|h8|pc|hJ|pg||
nt|brolucius: Great that Jan can find time for extra 'table info'. More than i would be able to do, with all the cards to tap in. (Not that anyone would ever persuade me to do such a tiring ...|pg||
nt|brolucius: job). |pg||
pc|s3|pc|s7|pc|sA|pc|s4|pg||
pc|hT|pc|hQ|pc|hA|pc|h3|pg||
nt|Walddk2: http://www.worldbridge.org/people/person.asp?qryid=3776 Jeff Meckstroth|pg||
pc|hK|pc|d6|nt|Walddk2: http://www.worldbridge.org/people/person.asp?qryid=3777 Eric Rodwell|pg||
pc|d2|pc|h6|pg||
pc|c3|nt|Walddk2: http://www.worldbridge.org/people/person.asp?qryid=4861 Cezary Balicki|pg||
pc|d8|pc|c9|nt|Walddk2: http://www.worldbridge.org/people/person.asp?qryid=4862 Adam Zmudzinski|pg||
pc|cK|pg||
pc|s8|pc|sK|pc|s5|pc|s2|pg||
pc|cJ|nt|kareno: Just making two.|pg||
nt|brolucius: Rodwell might have tried to ruff the @S10, hoping to absorb West's trump trick. But it seems that West could have crossed to the East hand with a club ruff to score a second ...|pg||
nt|brolucius: overruff in spades.|pg||
mc|8|pg||
qx|c1|st||md|3SA2HT7DK75432C974,S84HQ986DQTCAK852,SKQT3HAKJ54DCJT63,SJ9765H32DAJ986CQ|sv|o|mb|1H|mb|p|nt|jtr: X at MPs i guess|pg||
mb|1N|nt|jtr: Passed partner too|pg||
nt|hedyg: alerted 1@c, maybe strong?|pg||
nt|xenya: maybe strong club?|pg||
nt|jtr: ah maybe|pg||
nt|jtr: So double for reds or blacks:)|pg||
nt|hedyg: LOL|pg||
mb|p|mb|2C|mb|p|mb|2H|mb|p|mb|p|nt|xenya: yeah, double anyway :)|pg||
nt|jtr: Not a strong @c|pg||
nt|vugraph814: seems to be natural, no alert on 1@d|pg||
mb|2S|mb|3D|nt|jtr: 3@d could turn out to be lucky|pg||
mb|p|mb|3H|mb|p|mb|p|mb|p|nt|voldenuit: 3@d can be made 2@d and 2@h to lose |pg||
nt|jtr: first bit of luck has appeared|pg||
nt|hedyg: friendly lead|pg||
pc|s5|pc|s2|pc|s8|pc|sT|pg||
pc|c3|pc|cQ|nt|hedyg: 2nd good news|pg||
nt|jtr: No lead was likely to do any damage but this helped the timing|pg||
pc|c4|nt|jtr: Well, he may be able to play for H10 doubleton|pg||
pc|c2|pg||
pc|s6|pc|sA|nt|jtr: By ruffing in hand|pg||
pc|s4|pc|s3|pg||
pc|c7|pc|cA|pc|c6|pc|d9|pg||
pc|dQ|pc|h4|nt|hedyg: had to play another @s first|pg||
pc|d6|pc|d2|pg||
pc|cJ|pc|sJ|pc|c9|nt|jtr: nice recovery|pg||
nt|jtr: except the @s gets ruffed now|pg||
nt|xenya: indeed|pg||
pc|cK|pg||
pc|c8|pc|cT|pc|h2|nt|jtr: Nice little hand Kokish would love it|pg||
pc|h7|pg||
pc|hT|pc|hQ|nt|voldenuit: deep finesse says 1 down but I don't know how he can down 1 now |pg||
pc|hA|pc|h3|pg||
nt|hedyg: with a @s ruff|pg||
pc|hK|pc|d8|pc|d3|nt|voldenuit: ah yes sry |pg||
pc|h6|pg||
pc|sK|pc|s7|pc|d4|nt|jtr: @hK better|pg||
nt|hedyg: clearer yes|pg||
nt|jtr: Help partner to avoid a mistake|pg||
nt|xenya: good principle|pg||
pc|h8|pg||
mc|9|pg||
qx|o2|st||md|4ST87654H74DACAJ97,SK932H52DJT7542C3,SAQHKQJ8DQCQT8654,SJHAT963DK9863CK2|sv|n|nt|Walddk2: Long time partnerships as you can see by looking at their WBF numbers, just next to each other|pg||
nt|Vugraph7: Polish discussion E-W and ROd asks what does "yocki crupa" mean - something about cards :)|pg||
mb|1H|mb|1S|mb|p|mb|2H|mb|p|nt|brolucius: A friend of mine, what I was chatting to him on Friday morning, talked about 'Meckstroth and Rodwell, when they were in their prime'. Who says they are not now, when they reach the ...|pg||
nt|brolucius: Spingold final yet again?|pg||
mb|3S|mb|p|mb|4S|mb|p|mb|p|nt|Walddk2: And yet another Bermuda Bowl appearance in a couple of months|pg||
nt|brolucius: The same applied to Hamman and Soloway. Amazing to play with such intensity after so many years of hard work at the table.|pg||
nt|Vugraph7: Zmud asks about 3@h - I think Meck said game try in spades|pg||
mb|p|pc|c3|pc|cQ|pc|cK|pc|cA|pg||
pc|s4|pc|s2|pc|sA|pc|sJ|pg||
pc|sQ|pc|h6|pc|s5|nt|Walddk2: Balicki - Zmudzinski not in contention for the Polish Bermuda Bowl team. Rumour has it they will be representing Russis at the next European Championships. They would be eligible|pg||
pc|sK|pg||
nt|Walddk2: Russia that is|pg||
pc|h2|nt|brolucius: Interesting that Meckstroth should think that he has sufficient by way of extras (for a vulnerable overcall) to jump a level. It was the sixth spade that tipped it.|pg||
pc|hK|pc|hA|pc|h4|pg||
nt|Walddk2: And their team-mates in this event are indeed from Russia|pg||
nt|kareno: Great play, ace of spades. Caters to either singleton.|pg||
mc|10|pg||
qx|c2|st||md|4ST87654H74DACAJ97,SK932H52DJT7542C3,SAQHKQJ8DQCQT8654,SJHAT963DK9863CK2|sv|n|nt|jtr: Both majors opening?|pg||
nt|hedyg: pass!|pg||
mb|1H|mb|1S|mb|p|mb|2C|mb|p|mb|2D!|mb|p|mb|3C|nt|Walddk2: Many can now bid a weak 2@H|pg||
nt|hedyg: nice to play 2@h as weak|pg||
nt|Walddk2: pass or correct|pg||
mb|p|mb|4C|nt|voldenuit: 2@s or 2@h is the same number of trick |pg||
nt|hedyg: use checkback for better hands|pg||
mb|p|nt|voldenuit: hard lead for east |pg||
mb|5C|mb|p|mb|p|mb|p|nt|Walddk2: But it will be difficult for Holmen to know the club position with his holding. Not so attractive to lead from|pg||
pc|d3|pc|dA|pc|d2|nt|jtr: well @hs will make 9|pg||
nt|hedyg: small @H?|pg||
pc|dQ|pg||
pc|s4|nt|Walddk2: Welcome back to Anders Kristensen|pg||
pc|s3|pc|sA|nt|andersk: ty|pg||
nt|xenya: @H lead was just fine imo|pg||
nt|hedyg: hi Anders!|pg||
nt|andersk: great dinner here:)|pg||
nt|xenya: re Anders|pg||
nt|hedyg: lol|pg||
nt|andersk: Hi Hedy, long time now:)|pg||
nt|hedyg: :)|pg||
pc|sJ|pg||
nt|andersk: Hi vladimir:)|pg||
pc|cQ|pc|c2|pc|c7|nt|voldenuit: well done |pg||
pc|c3|pg||
pc|c4|pc|cK|pc|cA|nt|jtr: Nice|pg||
nt|Walddk2: well done indeed|pg||
pc|d4|pg||
nt|voldenuit: hi anders|pg||
pc|s5|pc|s2|nt|andersk: Hi:)|pg||
pc|sQ|pc|d6|pg||
mc|12|pg||
qx|o3|st||md|1S95HK93DKT874CK73,SAT2H742DQ6CAT865,SQJ63HAJ8DAJ5CQJ4,SK874HQT65D932C92|sv|e|mb|p|mb|p|nt|kareno: Interesting that they can switch so easily to playing for Russia.|pg||
mb|1N|mb|p|mb|2N|mb|p|mb|3C|mb|p|mb|3N|mb|p|mb|p|mb|p|nt|brolucius: A couple of days ago I made some general comment about the standard of the bulletins in these events and that they did not seem to contain many deals (rather than appeals and long ...|pg||
nt|brolucius: lists of contestants). I see that my comment is inappropriate here. The bulletins look good and contain several interesting hands. So, I must apologize for that.|pg||
pc|h5|pc|h3|pc|h7|pc|hJ|pg||
nt|kareno: Our bulletins always have a great deal of interest, including hands, appeal committee reports, human interest and so on, David.|pg||
pc|cJ|pc|c9|pc|c3|nt|brolucius: Not always.... (I have often looked for column deals in previous bulletins and found few match reports). |pg||
nt|kareno: There is a requirement to wait before you can switch playing for countries (I did that when I moved to Canada and again when I returned to the US).|pg||
nt|kareno: Apparently this pair has fulfilled that requirement already.|pg||
pc|cA|pg||
nt|brolucius: Although one never knows with M & R (who have a complicated system), this auction seems to be a transfer to diamonds, broken by the opener, and then 3NT to offer a choice of games ...|pg||
nt|brolucius: if partner has good diamond support and a low doubleton in some suit.|pg||
pc|sT|pc|sQ|pc|sK|pc|s5|pg||
nt|kareno: The daily bulletins can be found at www.acbl.org|pg||
nt|brolucius: I am told that 2NT is puppet Stayman with 3@C denying a five-card major. |pg||
nt|Vugraph7: Balicki pulled out spade 4, put it back, now thinking|pg||
pc|s8|pc|s9|pc|sA|pc|s3|pg||
pc|s2|nt|brolucius: If Rodwell knew where the 13th spade was, he could finesse diamonds into the 'safe hand'.|pg||
nt|Vugraph7: Rod's in "thinking" posture, sitting up, arms crossed, cards on table|pg||
nt|brolucius: Kibitzers are commending the @S8 play, which may give declarer an awkward guess.|pg||
nt|Walddk2: They don't seem to care who is North and South. Yesterday Meck was North all day and night|pg||
nt|Vugraph7: Rod asks "do you have any understanding about breaking suits like this?" Bal: "no, normally we lead 2nd/4th but nothing special here"|pg||
nt|kareno: The deuce tells a story too, David.|pg||
nt|brolucius: Declarer has no count on the heart suit, really, so he is some way from obtaining a count to assist him in the diamond guess. Anyway, the queen lies with the doubleton.|pg||
pc|s6|pc|s7|nt|kareno: If he decides to play west for three spades, he may play the diamond into the safe hand.|pg||
pc|d4|pg||
nt|kareno: Apparently he hasn't done so. |pg||
nt|kareno: Now Balicki must exit safely.|pg||
nt|Vugraph7: Bal now has head in hands to think|pg||
nt|brolucius: Now he must guess the diamonds. If he has risen with the @SJ, he would have a double chance: diamond finesse wins, or a losing finesse into the hand with no spade. But of course ...|pg||
nt|brolucius: finessing the spade here was also a possible chance. So that was two chances too.|pg||
nt|kareno: Then Rodwell can cash the spade before playing on diamonds to confirm suit lengths.|pg||
nt|Walddk2: Those guys guess better than most people so it would not surprise me one bit if Rod gets diamonds right|pg||
nt|Vugraph7: Bal fingering the heart Q|pg||
pc|hQ|pc|h9|pc|h2|pc|hA|pg||
pc|sJ|pc|s4|pc|d7|pc|c6|pg||
pc|c4|pc|c2|pc|cK|pc|c5|pg||
nt|kareno: This is all about the diamond queen. |pg||
pc|c7|pc|c8|pc|cQ|nt|Walddk2: Specs suggest that he will go wrong because he knows Bal has three diamonds to Zmud's two. We shall see|pg||
nt|brolucius: Perhaps he will place East with @H4 and think that West has three hearts, causing him to finesse the right way.|pg||
nt|kareno: He has a good nose, you know. |pg||
nt|Vugraph7: Bal pulled out a diamond, then teh heart 6, now head in hands again|pg||
nt|kareno: I can't answer all the spec comments.. we all know what is going on here :)|pg||
nt|Walddk2: Exciting board no matter what|pg||
nt|brolucius: Yes|pg||
pc|d3|pg||
pc|h8|pc|h6|pc|hK|pc|h4|pg||
nt|kareno: He cannot get a complete count.|pg||
nt|kareno: The diamond pitch was unexpected!!|pg||
nt|Vugraph7: Rod: "I'm going to play for diamonds 2-2 now"|pg||
mc|9|pg||
qx|c3|st||md|1S95HK93DKT874CK73,SAT2H742DQ6CAT865,SQJ63HAJ8DAJ5CQJ4,SK874HQT65D932C92|sv|e|nt|Walddk2: I agree with you, Ivar. You must bid 2@H with that hand|pg||
mb|p|nt|andersk: better stop in max 3@S here|pg||
nt|Walddk2: No guarantee of a fit of course, but it's with the odds to assume that 2 of a major plays better|pg||
mb|p|mb|1N|nt|xenya: well EW have some partial on the previous hand -- might pay more than 100|pg||
nt|hedyg: no reason to get higher|pg||
mb|p|mb|3N|nt|Walddk2: http://bridgefestival.no/results.htm for results and ranking|pg||
nt|Walddk2: http://bridgefestival.no/webcam.htm for live pictures with autorefresh every 30 seconds|pg||
mb|p|mb|p|nt|jtr: 2@h|pg||
nt|hedyg: wow great to be able to pass 1@s|pg||
mb|p|nt|jtr: Yes, that is why East must not pass though|pg||
nt|hedyg: first time i see this|pg||
pc|h5|pc|h9|pc|h2|pc|h8|pg||
pc|d4|pc|d6|pc|dJ|pc|d2|pg||
pc|dA|nt|andersk: strange pass|pg||
nt|hedyg: 6-10 HCPs 5 @ss|pg||
nt|voldenuit: maybe 1@s isn't forcing for them |pg||
pc|d9|pc|d7|nt|hedyg: that isnt forcing|pg||
nt|voldenuit: and they use double to show better hand with @s |pg||
nt|hedyg: maybe|pg||
nt|xenya: very awkward for E -- on the one hand he hates to let them 1@S, on the other no bid looks safe enough at this vulnerability|pg||
nt|jtr: You must take risks when the opponents do something that looks good for them|pg||
pc|dQ|pg||
pc|cJ|nt|andersk: wd|pg||
nt|andersk: 9 safe now|pg||
pc|c2|pc|c3|pc|cA|pg||
pc|sT|pc|sJ|pc|sK|pc|s5|pg||
nt|hedyg: claim|pg||
mc|10|pg||
qx|o4|st||md|2ST54HQT9542D74C72,S82HKJ6DAKJ93C863,SA93HA3D865CQJT95,SKQJ76H87DQT2CAK4|sv|b|nt|brolucius: Well, that all finished at the speed of light, after so much thought on the way.|pg||
mb|1D|mb|p|mb|1S|mb|p|mb|1N|mb|p|mb|2D!|mb|p|mb|2N|mb|p|nt|brolucius: Nearly everyone uses either 2@C (or 2@D or both) to ask for extra information on shape.|pg||
nt|Vugraph7: Zmud thought about 2NT, now writing, so maybe had a choice to show the 5 card @d suit, but usually they have 5 when they open 1@d instead of a Polish club with a weak NT|pg||
nt|brolucius: Yes, 1@C shows the 12-14 hands, so 1@D nearly always shows five.|pg||
mb|3D|mb|p|mb|3H!|mb|p|nt|Vugraph7: When he bid 3@h, Zmud indicated it was values|pg||
mb|3N|nt|brolucius: This is a lot of bidding in what seemed at first to be rather simple hands.|pg||
mb|p|mb|p|mb|p|pc|cJ|pc|cA|nt|brolucius: But I suppose that is the only way to detect @H8-7 opposite @HQ-4 and then play in diamonds instead.|pg||
pc|c2|pc|c3|pg||
pc|sK|pc|s5|pc|s2|pc|sA|pg||
pc|c9|nt|Vugraph7: Bal went for a cigarette break, then the hand was very fast and now Zmud has gone to get him|pg||
nt|Vugraph7: Now Meck & Rod leaving also, back shortly I'm sure|pg||
nt|brolucius: Cigarette break. Is that $250 or 10 IMPs in this tournament? I forget.|pg||
nt|brolucius: Does Meckstroth still smoke? I remember (a few years ago) that Rodwell detested smoke. |pg||
nt|brolucius: A kibitzer tells me that the penalty is the 'higher of the two', namely 10 IMPs.|pg||
nt|kareno: I believe he still does.|pg||
nt|brolucius: Anyway, taking a cigarette break when you are keeping 1991 people waiting is quite something. |pg||
nt|kareno: They're playing fast enough not to incur time penalties I'm sure.|pg||
nt|kareno: And that is only in THIS room!!|pg||
nt|brolucius: Yes. "Marlboro tastes so great, folks, that people who smoke them are happy to keep 1991 people waiting."|pg||
nt|kareno: There is only one smoking area in the Convention Center and that is quite a distance from the playing space. |pg||
nt|brolucius: The further the better. The TD should supply nicotine patches.|pg||
nt|Vugraph7: We're back now|pg||
mc|11|pg||
qx|c4|st||md|2ST54HQT9542D74C72,S82HKJ6DAKJ93C863,SA93HA3D865CQJT95,SKQJ76H87DQT2CAK4|sv|b|mb|1D|mb|p|mb|1S|mb|p|mb|1N|mb|p|mb|2D!|mb|p|mb|3D|mb|p|nt|voldenuit: they will play probably 4@h = |pg||
mb|3S|nt|jtr: A very flat noard here|pg||
nt|hedyg: can claim already|pg||
mb|p|nt|andersk: yes|pg||
mb|4S|mb|p|mb|p|mb|p|pc|c7|pc|c8|pc|c9|pc|cA|pg||
pc|sK|pc|s4|pc|s2|pc|s3|pg||
pc|sQ|pc|s5|pc|s8|pc|sA|pg||
nt|voldenuit: y few pairs might played 5@h if west make an effort with this hand |pg||
nt|andersk: agree|pg||
pc|cQ|pc|cK|pc|c2|pc|c3|pg||
pc|sJ|pc|sT|pc|c6|pc|s9|pg||
mc|11|pg||
qx|o5|st||md|3SJ87HJ2DAJ973C753,SH9864DKQ6CKQT864,SA9643HA753D52CAJ,SKQT52HKQTDT84C92|sv|n|nt|Vugraph7: Meck, who just gave up smoking, says "I can smell you guys, it smells wonderful"|pg||
mb|1S|nt|brolucius: A friend of mine, Marc Smith, asked me to joing his pub quiz team. I said I would after July, when smoking was banned in English pubs. He replied that he would not be going to any ...|pg||
nt|brolucius: pubs then. (He is a two-pack-a-day man).|pg||
mb|p|mb|1N!|mb|p|mb|2H|mb|p|mb|2S|mb|p|mb|p|mb|p|nt|kareno: e/w wisely staying out of this misfit auction.|pg||
nt|Vugraph7: Meck, as he puts down dummy; "we play 1-2 as constructive"|pg||
pc|d8|nt|Vugraph7: Rod: "just so I understand, with 3 small you lead middle?" Zmud yes|pg||
pc|dA|pc|d6|pc|d2|pg||
pc|h2|pc|h4|pc|h7|pc|hQ|pg||
pc|c2|pc|c3|pc|cQ|pc|cA|pg||
pc|hA|pc|hK|pc|hJ|pc|h6|pg||
pc|h3|pc|hT|pc|s7|pc|h8|pg||
pc|c5|pc|cK|pc|cJ|pc|c9|pg||
nt|brolucius: Yes, when you play a forcing 1NT response there are two ways of raising to 2@S: direct and via 1NT. Since you have to take the indirect route on some hands with only two spades, it ...|pg||
nt|brolucius: is sensible that this is the weaker route.|pg||
pc|dK|pc|d5|pc|d4|pc|d3|pg||
pc|c8|pc|s6|nt|kareno: East's spades may become an encumbrance.|pg||
pc|sT|pc|c7|pg||
pc|sK|pc|s8|pc|c4|pc|sA|pg||
pc|h5|pc|dT|pc|sJ|pc|h9|pg||
mc|7|pg||
qx|c5|st||md|3SJ87HJ2DAJ973C753,SH9864DKQ6CKQT864,SA9643HA753D52CAJ,SKQT52HKQTDT84C92|sv|n|nt|xenya: but i don't like E's break -- his hand is under 17 hcp i think|pg||
nt|andersk: just tell them to claim 11 here|pg||
mb|1S|nt|jtr: and another.....|pg||
mb|p|mb|2S!|mb|3C|mb|p|mb|p|nt|xenya: sort of twin hand|pg||
mb|p|pc|d5|pc|d8|pc|dA|pc|d6|pg||
nt|andersk: maybe we can get a smoke break|pg||
pc|hJ|pc|h4|pc|hA|nt|voldenuit: they have avoid the contract of 3Nt which is 10 tricks |pg||
nt|jtr: However, you will find that E/W will probably score around 55% on each of these|pg||
pc|hT|pg||
pc|h3|pc|hQ|pc|h2|pc|h6|pg||
pc|c2|pc|c5|pc|cK|pc|cA|pg||
pc|h5|pc|hK|pc|c3|nt|andersk: Karlberg - Fagerdal, just past +800|pg||
pc|h8|pg||
pc|d3|pc|dQ|pc|d2|pc|d4|pg||
pc|cQ|pc|cJ|pc|c9|pc|c7|pg||
mc|9|pg||
qx|o6|st||md|4S72HAKQT43DAQCKQ6,SKT8643HJ7DKT93C5,SAQJ5H985D64CA942,S9H62DJ8752CJT873|sv|e|nt|kareno: The five will stand up for a trick but east will be endplayed for down only one.|pg||
mb|p|nt|Vugraph7: Meck: Good you didn't take a long time to play that one. Rod "well, I might have done better double dummy..."|pg||
nt|brolucius: Nickells' 3@C overcall at the other table may seem risky, but when the opponents find a fit at a low level (1@S - 2@S) it is reasonably safe to enter the bidding with a long suit. ...|pg||
nt|brolucius: They will not want to double at a low level.|pg||
mb|1C!|an|str|nt|kareno: A good heart slam here.|pg||
mb|1H|an|!|nt|Vugraph7: Both sides writing but of course I can't read them|pg||
nt|brolucius: Wow! 1100 at the one level at the other table.|pg||
mb|d!|nt|kareno: Could be a duplicated result here.|pg||
mb|2N|nt|brolucius: Nice double from South (there) rather than bidding the hearts.|pg||
nt|kareno: With that EXCELLENT dummy :)|pg||
nt|kareno: Finding a better home .. diamonds|pg||
nt|brolucius: 1@H must show two suits, so East is confident of a fit in one of the minors.|pg||
nt|kareno: And safe for sure at the three-level.|pg||
nt|Vugraph7: Zmud writing a lot - I might be able to see if it was in pen, but it's pencil, sorry|pg||
mb|3H|mb|p|nt|brolucius: I am told: 1@H is 54 with @S and @D or with @H and @C|pg||
nt|Vugraph7: I'm told that 2NT was pick a minor|pg||
nt|kareno: 7 is excellent on the auction. |pg||
nt|kareno: They will surely reach 6@h.|pg||
nt|brolucius: Now it is more difficult for North to express his hand because the opponents have not clearly bid a suit.|pg||
nt|kareno: They have bid spades clearly, David, and north has those locked up.|pg||
nt|brolucius: To reach 7@H would be an immense triumph. To reach 6@H would be great.|pg||
nt|kareno: Actually with the explanation, west has shown spades and diamonds.|pg||
nt|brolucius: North might bid 3@S, on the assumption that West must hold that suit, but it is a bit murky.|pg||
nt|Vugraph7: Rod studying his hand and the bidding|pg||
mb|5H|mb|p|nt|brolucius: Now South may worry about two spade losers.|pg||
nt|brolucius: Amazing what difficulties the intervention caused. You can imagine M/R soaring into a slam in a few seconds without intervention.|pg||
nt|Vugraph7: Silent conversation between Meck & Zmud|pg||
nt|kareno: It is absolutely clear now that west holds spades and diamonds. South has bid hearts naturally.|pg||
nt|brolucius: But Meckstroth's trumps are so great he can guess that North must hold some controls.|pg||
mb|6H|mb|p|mb|p|mb|p|nt|brolucius: He cannot be missing controls AND trumps. Yes, well bid!|pg||
nt|kareno: So they will pick up eight IMPs on the board.|pg||
nt|kareno: Welcome Doug Simpson, a great player and expert on Meckwell|pg||
nt|Vugraph7: Meck & Rod discuss what they should do vs EW's interference|pg||
pc|c5|pc|c2|pc|cT|pc|cK|pg||
nt|kareno: Oh.. wrong vulnerability.. sorry, they lose IMPs here.|pg||
pc|hA|pc|h7|pc|h5|pc|h2|pg||
pc|hK|pc|hJ|pc|h8|pc|h6|pg||
nt|kareno: Lose three IMPs.|pg||
nt|dougs: Rod's x is usually 6-7, but here he was hoping for a penalty|pg||
pc|hQ|pc|s6|pc|h9|pc|c3|pg||
pc|s7|pc|s3|pc|sQ|pc|s9|pg||
pc|c4|pc|c7|pc|cQ|pc|s4|pg||
pc|s2|pc|s8|pc|sJ|mc|13|pg||
qx|c6|st||md|4S72HAKQT43DAQCKQ6,SKT8643HJ7DKT93C5,SAQJ5H985D64CA942,S9H62DJ8752CJT873|sv|e|mb|p|mb|1C!|mb|1S|nt|andersk: hehe another @h Game|pg||
mb|p!|nt|jtr: method testing for E/W|pg||
nt|hedyg: why not bid 1@s?|pg||
nt|hedyg: as t/o of @s|pg||
nt|jtr: Transfers are not unusual nowadays so they should know what to do|pg||
mb|p|mb|d|nt|voldenuit: 4@s downs of 3 in NS with a good defense |pg||
nt|jtr: X then X to show more maybe?|pg||
mb|p|mb|p|nt|jtr: Nice 3@s|pg||
mb|p|nt|hedyg: 1@s and then X for me|pg||
nt|jtr: South may save now|pg||
nt|hedyg: now if i could only get pd to lead @d......|pg||
pc|h8|pc|h2|pc|hQ|nt|xenya: why not lead it yourself Hedy?|pg||
pc|h7|pg||
nt|hedyg: ah true!|pg||
nt|hedyg: :))|pg||
pc|s2|pc|s3|pc|sJ|pc|s9|pg||
pc|h9|pc|h6|pc|hK|pc|hJ|pg||
pc|hT|pc|s4|pc|h5|nt|xenya: played by S 4@S is likely to go 3 down -- too expensive|pg||
pc|d2|pg||
pc|dK|pc|d4|pc|d5|pc|dA|pg||
pc|h3|pc|s6|pc|d6|pc|d7|pg||
nt|jtr: If East takes the @dA|pg||
pc|d9|nt|xenya: yes|pg||
pc|s5|pc|d8|pc|dQ|pg||
pc|c4|pc|c3|pc|cQ|pc|c5|pg||
pc|h4|pc|sT|pc|sQ|pc|dJ|pg||
pc|c2|pc|c7|nt|andersk: now short break:)|pg||
nt|jtr: Yes i am|pg||
nt|vugraph814: they played fast, so a short break till next round|pg||
nt|andersk: I think The leaders will scoore 70% this round|pg||
nt|hedyg: webcam: http://bridgefestival.no/modules.php?name=NukeWrap&page=http://bridgefestival.no/refresh.htm|pg||
nt|andersk: I think we get Geo-Furunes vs karlber- Fagerdal next round|pg||
nt|hedyg: wishful thinking?|pg||
nt|andersk: top 3 vil jeg si|pg||
nt|hedyg: webcam seems to be stuck|pg||
nt|Walddk2: webcam is fine here, but updates on result page. they are having a look at it now|pg||
nt|Walddk2: no updates currently|pg||
nt|hedyg: i have had the same picture for 10 minutes|pg||
nt|Walddk2: Definitely working|pg||
nt|Walddk2: http://bridgefestival.no/webcam.htm for live pictures with autorefresh every 30 seconds|pg||
nt|andersk: my webcam is ok|pg||
nt|hedyg: i feel at a disadvantage! story of my life|pg||
nt|andersk: hehe|pg||
nt|andersk: 2 strong pairs now|pg||
nt|vugraph814: Waiting for Geo|pg||
nt|Walddk2: 170 pairs in the Swiss here, and 60 teams in the mixed simultaneously. Very impressive. We had 260 pairs in the mixed|pg||
nt|andersk: thats normal:)|pg||
nt|andersk: been around 160-180 in swiss pairs last 3 years, we had 220 3 years ago|pg||
nt|vugraph814: including the side tournament, there are 185 tables at play now. New record!|pg||
nt|andersk: no|pg||
nt|andersk: thats not recor Ivar|pg||
nt|vugraph814: wanna bet? :)|pg||
nt|andersk: 2 years ago therewere 198 teams in open teas, and 2 sideturnament beside withover 30 tables|pg||
pc|cK|pc|s8|pg||
pc|d3|pc|c9|pc|c8|pc|s7|pg||
pc|hA|mc|3|pg||
qx|o7|st||md|1SK9H743DAQJ2CQ954,ST7HAJ65D873CA872,SAQJ4HT982D965CT3,S86532HKQDKT4CKJ6|sv|b|nt|brolucius: North-South can be happy to have reached 6@H, as I see it. They faced a very awkward situation, which they got right. |pg||
nt|Vugraph7: R-M agree that DBL is a little better vs these methods. |pg||
nt|kareno: Doug :)|pg||
mb|1D|an|can be short|mb|p|mb|1H|mb|p|nt|Walddk2: Welcome to Doug Simson, one of our two Meckwell experts|pg||
nt|Vugraph7: Meck said: "great bid, partner" after the discussion about new methods|pg||
mb|1N|mb|p|mb|p|mb|p|nt|Vugraph7: No lead, Meck says "thank you, play small"|pg||
nt|dougs: Meckwell have great judgement in these ackward hands.|pg||
pc|c2|pc|c3|pc|cK|pc|c4|pg||
pc|cJ|pc|cQ|nt|brolucius: Yes, and that is so important. That sort of hand is where all the points exchange hands.|pg||
pc|cA|pc|cT|pg||
nt|Walddk2: 4 segments of 16 boards, two of which will be played before a break for dinner|pg||
pc|c8|pc|d5|pc|c6|pc|c9|pg||
pc|s9|pc|s7|pc|sJ|pc|s6|pg||
pc|d6|nt|Walddk2: I am asked if the players know the running scores. The answer is know. They will not know until they score up after each segment of 16 boards|pg||
pc|d4|pc|dQ|pc|d3|pg||
pc|sK|pc|sT|pc|sA|pc|s2|pg||
nt|Walddk2: The answer is no, I meant to say|pg||
pc|sQ|nt|brolucius: With players of this quality at the table, we might easily be watching a Bermuda Bowl final (as another commentator mentioned at the start). Even a 1NT contract may become ...|pg||
nt|brolucius: interesting. No, I shouldn't exaggerate.|pg||
pc|s3|pc|d2|pc|h5|pg||
pc|d9|nt|kareno: Actually, David, while some points change hands on these deals, I am still of the opinion that the team that gets the partscore battles right will win in the long run.|pg||
pc|dT|pc|dJ|pc|d7|pg||
pc|dA|pc|d8|pc|s4|pc|dK|pg||
nt|Walddk2: I must agree with that|pg||
mc|8|pg||
qx|c7|st||md|1SK9H743DAQJ2CQ954,ST7HAJ65D873CA872,SAQJ4HT982D965CT3,S86532HKQDKT4CKJ6|sv|b|nt|hedyg: we trust Ivar! he told us to:)|pg||
nt|andersk: I take the bet|pg||
nt|andersk: I was there:)|pg||
mb|1N|mb|p|mb|p|mb|p|pc|h5|pc|h2|pc|hQ|pc|h4|pg||
pc|hK|pc|h7|pc|h6|pc|h8|pg||
pc|d4|pc|dQ|nt|jtr: 3@c shows a good raise but a little optimistic|pg||
pc|d3|pc|d5|pg||
pc|sK|pc|sT|pc|s4|pc|s3|pg||
pc|s9|pc|s7|pc|sJ|pc|s2|pg||
pc|sA|pc|s5|pc|c4|pc|c2|pg||
nt|voldenuit: very funny board if 4@s is played king of @c ruff @d ruff @c overruff |pg||
nt|andersk: 4@S is makeable|pg||
nt|jtr: I guess 4@s might have made|pg||
pc|sQ|pc|s6|pc|h3|pc|d8|pg||
pc|d6|nt|jtr: But could be defeated|pg||
pc|dT|pc|dJ|pc|d7|pg||
pc|dA|pc|c7|pc|d9|pc|dK|pg||
pc|d2|pc|c8|nt|jtr: ?|pg||
nt|jtr: Did he miss the @c9?|pg||
nt|hedyg: seems so|pg||
nt|Walddk2: Good afternoon to Frances Hinden from England|pg||
pc|c3|pc|s8|pg||
mc|11|pg||
qx|o8|st||md|2SAHA8432DAQT2CK94,SQJ98HKDJ98765C75,SKT65HT7D4CAQJT82,S7432HQJ965DK3C63|sv|o|nt|Walddk2: The partscore swings often decide matches between two very good teams|pg||
mb|p|mb|2C!|an|6+ clubs, 11-15|nt|kareno: Note how south gave up a spade trick for the extra entry to finesse diamonds twice. |pg||
mb|p|mb|2D|an|asking description|nt|brolucius: Seven hands in an hour, despite the break. That is better. The first session of one of the QFs took 3 hours for 16 boards. I never heard if any penalty was applied. Probably not.|pg||
nt|Walddk2: 2@C 11-15 5+ clubs|pg||
mb|p|mb|2H!|mb|p|mb|2S|an|!|mb|p|nt|dougs: 2@H shows a major|pg||
mb|3C!|mb|p|mb|3D!|nt|Walddk2: Can be 10 with a good shape like this one|pg||
nt|dougs: 3@C shows spades|pg||
mb|p|nt|dougs: 3@D is a slam try on @C|pg||
mb|3S!|mb|p|nt|brolucius: Another bidding test for them. But with no opposition the odds are good that they can hit the target.|pg||
nt|dougs: 2C promises 6|pg||
mb|4D!|an|RKCB !cs|mb|p|nt|kareno: This has the feel of a relay auction.. Doug?|pg||
mb|4S|nt|brolucius: It will be disappointing when someone makes a natural bid.|pg||
mb|p|nt|dougs: 3@S shows a spade control and denies a @H control|pg||
mb|4N|nt|Walddk2: http://usbf.org/docs/2006usbc/SSF/06meckstrothrodwell.htm for a system summary|pg||
nt|dougs: 4@D is RKC|pg||
nt|Vugraph7: I think 4@d was RKCB clubs and 4@s showed 1|pg||
nt|dougs: 4@S is 1|pg||
mb|p|mb|5H|nt|dougs: 4nt ask for Q|pg||
mb|p|nt|dougs: 5@H is q with 1 king|pg||
nt|Walddk2: Nice to have Doug here to give us accurate info on all this artificial stuff|pg||
nt|kareno: I'll say!!|pg||
nt|brolucius: I hope Bal and Zmud are enjoying this. I guess not. |pg||
nt|dougs: Thanks|pg||
mb|6C|mb|p|mb|p|mb|p|nt|kareno: They are having a nice nap until the full auction is over.|pg||
pc|hQ|pc|hA|pc|hK|pc|h7|pg||
nt|dougs: Rod is known to be 6+@C with 4@S and 2 @H without A K|pg||
nt|brolucius: It was like watching an expert cellist. You don't know quite how he/she does it but the end effect is very pleasant.|pg||
pc|sA|pc|s8|pc|s5|pc|s2|pg||
pc|c4|pc|c5|nt|Walddk2: They are thinking about 7 in the closed room at the moment|pg||
nt|kareno: A trump lead would have been useful here. But the diamond comes on the second round so all is well. (and is in the pocket for that possible play).|pg||
pc|cQ|pc|c3|pg||
pc|s6|pc|s3|nt|Walddk2: 6@C bid so far, but Dubinin is in the tank|pg||
pc|c9|pc|s9|pg||
pc|dA|pc|d5|pc|d4|pc|d3|pg||
nt|kareno: It's not good but it will make if it is bid.|pg||
nt|Vugraph7: Meck: "sorry, should have bid it" Rod: "did he have the K of diamonds? I dont' want to bid grands on a finesse"|pg||
nt|Walddk2: 6@C passed eventually in the closed room|pg||
mc|12|pg||
qx|c8|st||md|2SAHA8432DAQT2CK94,SQJ98HKDJ98765C75,SKT65HT7D4CAQJT82,S7432HQJ965DK3C63|sv|o|nt|hedyg: welcome Frances|pg||
nt|finch: Good afternoon|pg||
nt|andersk: Welc:)|pg||
mb|p|nt|voldenuit: hi frances |pg||
nt|xenya: hello Frances|pg||
mb|2C!|mb|p|mb|2D|nt|vugraph814: sry, misclick|pg||
mb|p|nt|voldenuit: conservative pass by north |pg||
nt|hedyg: very|pg||
mb|2S|nt|hedyg: lollllll|pg||
mb|p|mb|2N!|mb|p|mb|3S!|nt|xenya: but not unreasinable -- holding as many as 3 hearts|pg||
mb|p|mb|4C!|mb|p|mb|4D|nt|finch: I was about to say I might bid 1NT in 4th seat (as a passed hand)|pg||
nt|finch: ...which would not have been a great success|pg||
nt|hedyg: how many @ss did W need to pass?|pg||
mb|p|nt|voldenuit: I don't like to bid 1Nt without stopper @h |pg||
mb|4H!|mb|p|mb|5H!|mb|p|mb|5N!|mb|p|mb|6C|mb|p|nt|finch: This is the one auction in which I think it's OK|pg||
nt|Walddk2: A cunning low heart now perhaps|pg||
mb|p|mb|p|pc|hJ|pc|hA|pc|hK|pc|h7|pg||
pc|sA|pc|s9|pc|s5|pc|s4|pg||
pc|dA|pc|d5|pc|d4|pc|d3|pg||
pc|d2|pc|d6|nt|hedyg: nice|pg||
pc|c2|pc|dK|pg||
pc|cA|pc|c3|pc|c4|pc|c5|pg||
pc|sK|pc|s2|pc|h2|mc|12|pg||
qx|o9|st||md|3SQJ4HT42DQ76CQJT8,SKT9632HKJDAK2C52,S87HAQ8DJ953C9643,SA5H97653DT84CAK7|sv|e|mb|p|nt|dougs: Meck knew they had a heat loser from Eric failre to cue 3@H|pg||
mb|1H|nt|dougs: heart|pg||
mb|p|mb|1S|nt|Vugraph7: M-R still mumbling about whether they should have tried harder for 7 :)|pg||
nt|brolucius: Great to get actual dialogue. Much appreciated, Jan!|pg||
mb|p|mb|1N|nt|brolucius: Like many of the kibitzers, I would have been well pleased to get to six. Typical that at this level they have to mumble about missing seven.|pg||
mb|p|mb|4S|mb|p|mb|p|mb|p|pc|c4|nt|kareno: I've been asked about prizes for this tournament. Of course there are master points (but these folks don't need them!).|pg||
pc|cK|nt|kareno: In addition there is (for an all-US team) the benefit of better placement in the Team Trials |pg||
pc|cQ|pc|c2|pg||
nt|dougs: Can i buy some master points on E-bay?|pg||
nt|brolucius: They will get a Mercedes each from their sponsors. No problem.|pg||
nt|kareno: However, there are no money prizes - with a professional team, there are, of course, fees from the sponsor and possible bonuses but we are not privy to that information.|pg||
nt|Vugraph7: Mostly it's glory - name on the Spingold trophy :)|pg||
nt|brolucius: Neither is the taxman privy to that information, I dare say...|pg||
nt|Walddk2: Fame but no fortune?|pg||
nt|kareno: Nickell most likely gets his extra qualification by being the last US team in the event.|pg||
nt|kareno: This could mean a bye to the semi-finals.. Jan is that correct?|pg||
pc|sA|pc|s4|pc|s2|pc|s7|pg||
pc|s5|pc|sQ|pc|sK|pc|s8|pg||
pc|sT|nt|kareno: The event I'm referring to is the US Team Trials for World Championship play.|pg||
nt|Vugraph7: No, this one event won't earn them a semi-final bye - need more Positioning Points than that, but it's a good start|pg||
pc|c3|pc|h3|pc|sJ|pg||
pc|h2|nt|Vugraph7: I don't have the PP scale or bye requirements memorized, but I think a semi bye requires at least one win plus something more|pg||
pc|hJ|pc|hQ|pc|h5|pg||
pc|c6|pc|cA|pc|c8|pc|c5|pg||
pc|h6|pc|h4|pc|hK|pc|hA|pg||
nt|kareno: And this is what, the beginning of a cycle?|pg||
mc|9|pg||
qx|c9|st||md|3SQJ4HT42DQ76CQJT8,SKT9632HKJDAK2C52,S87HAQ8DJ953C9643,SA5H97653DT84CAK7|sv|e|mb|p|nt|Walddk2: This would have been a passout 57 years ago|pg||
mb|p|nt|Walddk2: Not so any more|pg||
nt|hedyg: now they all open:)|pg||
nt|jtr: Now it is maybe a game hand:)|pg||
mb|p|mb|1S|nt|hedyg: E. S and W|pg||
mb|p|mb|2H|nt|finch: Good hand for the methods: 1@S denying spades|pg||
mb|p|mb|2S|nt|hedyg: maybe showing @ds|pg||
nt|finch: (double shows spades) - gets NT the right way up|pg||
nt|jtr: Maybe play a 14-16NT|pg||
nt|Walddk2: No, just denying four spades|pg||
mb|p|nt|hedyg: ok ty|pg||
mb|3S|nt|hedyg: wow lead|pg||
mb|p|mb|4H|nt|jtr: Unusual|pg||
mb|p|mb|4S|mb|p|mb|p|nt|hedyg: especially since W tends to have minors|pg||
nt|finch: Horrible lead problem. I might have gone for a low spade lead - but depends what double of 1@S would have meant|pg||
nt|Walddk2: I'm old-fashioned. I would have led 4th best from my longest and strongest|pg||
mb|p|nt|hedyg: leading through dummies strength?|pg||
pc|c6|pc|cA|pc|cQ|nt|Walddk2: And @H3 would have been a fine lead|pg||
pc|c2|pg||
pc|h3|pc|h4|pc|hJ|nt|jtr: the @h2 even:)|pg||
pc|hQ|pg||
pc|c3|pc|cK|pc|c8|pc|c5|pg||
pc|h5|pc|h2|pc|hK|pc|hA|pg||
nt|hedyg: didnt expect K@D in N|pg||
pc|c4|pc|c7|pc|cJ|pc|s2|pg||
pc|s3|pc|s7|pc|sA|nt|hedyg: sry J@d|pg||
nt|vugraph814: Geo not looking happy, the diamond position was a nasty surprise|pg||
pc|s4|pg||
pc|s5|pc|sJ|pc|sK|pc|s8|pg||
pc|s9|pc|c9|pc|h6|nt|Walddk2: http://bridgefestival.no/webcam.htm for live pictures with autorefresh every 30 seconds|pg||
pc|sQ|pg||
nt|voldenuit: 1Nt is a good mark for EW|pg||
nt|hedyg: @ds were supposed to be 3 3 with QJ10 in S|pg||
nt|xenya: yes nice score|pg||
nt|finch: +120 would have been even better|pg||
nt|voldenuit: 90 is probably 70% for EW|pg||
nt|jtr: Most wll open i would think Suitable distribution|pg||
nt|finch: 3 10s|pg||
nt|finch: More of an opening bid that many 4333 12-counts|pg||
nt|xenya: true but where 1@H opening would get them is another question|pg||
nt|finch: I think East has more of an opening than South, even though South has a 5-card suit|pg||
nt|xenya: ah yes|pg||
nt|Walddk2: Good afternoon and welcome back to Liz McGowan|pg||
nt|cuttysark: Good afternoon|pg||
nt|finch: Hi Liz|pg||
nt|xenya: re Liz|pg||
nt|voldenuit: hi liz |pg||
pc|hT|pc|s6|pc|h8|pc|h7|pg||
pc|sT|pc|d3|pc|h9|pc|cT|pg||
pc|dA|mc|9|pg||
qx|o10|st||md|4SAK43HQT764DJ632C,SJ5H52DAQ5CAJT964,S76H983DT874CK832,SQT982HAKJDK9CQ75|sv|b|nt|Walddk2: Please understand that the commentators may not have time to respond to private chat messages. No offence intended. Useful information much appreciated though|pg||
nt|kareno: Positioning points for the Open Team Trials come from the three major team games - the Vanderbilt, the Spingold and the Reisinger.|pg||
nt|Walddk2: sagolun çok teþekkürler siz nereye karar verdiniz. is not considered useful info as far as I am concerned :)|pg||
nt|Vugraph7: Yes, the Open cycle is always Summer-Spring, so this is the first event of the cycle. PPs are awarded based on finish in the event (iow, if Nickell loses today, they get the PPs ...|pg||
nt|Vugraph7: for second even though the winners would not get any PPs because they're not US players)|pg||
mb|1N|an|15-17|nt|brolucius: Incredible that the scoreline is just 5-0. A measure of the standard, I suppose. |pg||
mb|d!|an|1 minor or both majors|nt|dougs: d is 1 minor or both majors|pg||
mb|3N|nt|dougs: x|pg||
mb|p|nt|Walddk2: We will try to respond to as many private messages as possible and even relay questions if we find them appropriate, but please understand that we can't respond to all of them. ...|pg||
nt|Walddk2: Thank you|pg||
mb|p|mb|p|pc|h6|nt|kareno: I think we can sit back and have a cup of tea (_)? and a few cookies (except Roland who prefers smaller ones) OOO|pg||
nt|Vugraph7: Zmud: "don't go too many down" |pg||
pc|h2|nt|Walddk2: Yes, the holes are too big|pg||
pc|h3|pc|hJ|pg||
pc|cQ|pc|h4|pc|c4|nt|brolucius: On the last deal declarer would have had to set up the hearts to dispose of his diamond loser. Not an obvious line, perhaps.|pg||
pc|cK|pg||
nt|kareno: We used to say, "Don't come home lame, partner!" with such a dummy.|pg||
pc|s7|mc|10|pg||
qx|c10|st||md|4SAK43HQT764DJ632C,SJ5H52DAQ5CAJT964,S76H983DT874CK832,SQT982HAKJDK9CQ75|sv|b|mb|1N|mb|2H!|mb|2N!|mb|p|nt|vugraph814: sys on or not after X? :)|pg||
nt|hedyg: xfer to @c|pg||
mb|3C|mb|d|nt|finch: 2@S either a transfer to clubs or a well-timed psyche|pg||
nt|hedyg: ooooops|pg||
mb|3N|mb|p|nt|Walddk2: Well, it was natural to one player|pg||
mb|p|mb|p|nt|voldenuit: missunderstand here |pg||
nt|hedyg: he got me!|pg||
nt|cuttysark: I was wondering what the double meant :) Some play it as showing spades....|pg||
nt|Walddk2: Unfortunately the wrong one|pg||
nt|jtr: Where is DB99 on the rare occasion we need him?:)|pg||
pc|h6|nt|finch: Do we know what the double meant?|pg||
pc|h2|nt|voldenuit: y and west hasn't double |pg||
pc|h8|nt|hedyg: see? even when he isnt here he is here!|pg||
nt|vugraph814: double showed a strong hand|pg||
pc|hJ|pg||
pc|cQ|pc|hQ|nt|cuttysark: I suppose he fancies his chances with a spade lead. Probably fancies them even more now|pg||
pc|c4|pc|c2|pg||
nt|finch: It can be a wildly effective psyche when partner has 12-14, less so opposite a strong NT|pg||
nt|Walddk2: Holmen left in the dark|pg||
nt|Walddk2: Maybe he knows now|pg||
nt|hedyg: now why doesnt pd give a ruff?|pg||
nt|Walddk2: The problem is that he endplayed his partner|pg||
nt|finch: As it seems that 2@S was marginal for 7 or 8 tricks, going for -150 won't be good|pg||
nt|finch: -100 might not be great either, but that will be his target|pg||
pc|c5|pc|dJ|pc|cJ|pc|cK|pg||
pc|s7|pc|s2|pc|sK|pc|s5|pg||
pc|sA|pc|sJ|pc|s6|pc|s8|pg||
mc|10|pg||
qx|o11|st||md|1SJTHJ95DT52CKT853,SA8764HQ4DK6CJ742,S9HAT763DAQJ9CQ96,SKQ532HK82D8743CA|sv|o|mb|p|mb|p|mb|1H|mb|1S|nt|Vugraph7: We've had a time monitor in the room, so the pace of play has picked up :)|pg||
mb|2H|nt|Vugraph7: Now that we're back on time, he's left :)|pg||
mb|3H|nt|kareno: That would help!|pg||
nt|brolucius: I had so many messages, I was not following the last deal. General opinion seems to be that the club lead prevented declarer from making the contract. |pg||
mb|p|mb|4S|mb|p|mb|p|mb|p|nt|Vugraph7: M & R agreed they couldn't beat it|pg||
pc|h5|pc|h4|pc|hA|pc|h2|pg||
pc|h3|nt|kareno: North has a problem on the low heart lead. If south has the king, he needs to cash two hearts and get a diamond shift.|pg||
nt|brolucius: Declarer now has a discard for one of the diamond losers.|pg||
mc|11|pg||
qx|c11|st||md|1SJTHJ95DT52CKT853,SA8764HQ4DK6CJ742,S9HAT763DAQJ9CQ96,SKQ532HK82D8743CA|sv|o|nt|Walddk3: http://bridgefestival.no/webcam.htm for live pictures with autorefresh every 30 seconds|pg||
mb|p|mb|p|nt|jtr: This 11 i would not think of opening|pg||
nt|hedyg: 2 10s......|pg||
nt|finch: Nor I|pg||
nt|vugraph814: Nymoen commenting it was bad luck this happened at the vugraph table :)|pg||
mb|1H|nt|jtr: yes, and three ruffing values i suppose....|pg||
mb|1S|nt|hedyg: and opps still in shock.....|pg||
nt|xenya: obviously W and N went to different schools|pg||
nt|hedyg: hopefully!|pg||
mb|2D!|mb|2H!|nt|Walddk3: No defence against 3NT|pg||
mb|3D|mb|3H|nt|hedyg: 2NT is a bit high for me|pg||
nt|finch: 3NT is a little awkward once North has held up in diamonds twice|pg||
mb|p|nt|finch: Though I agree it's still likely to make a lot of tricks|pg||
nt|Walddk3: Then you can turn your attention to hearts|pg||
mb|4S|mb|p|mb|p|nt|jtr: Odd not to raise Maybe they open all 11's too|pg||
mb|p|pc|sJ|pc|s4|pc|s9|nt|jtr: But the KJ@c is worth 5 points|pg||
nt|voldenuit: north has to duck 1 time more |pg||
nt|finch: Covering the @D10 gives North count in the suit|pg||
nt|hedyg: you can overtake @c to get to hand|pg||
nt|finch: That's only 8 tricks, however|pg||
pc|sK|pg||
mc|10|pg||
qx|o12|st||md|2SQ98742HJ4DQ6CAK3,SKJT3HQT7DT9832C8,SA5HK632DKJ5CT642,S6HA985DA74CQJ975|sv|n|nt|kareno: In this case, the ace loses a trick but it is not an important trick.|pg||
mb|p|mb|1D|an|can be short|nt|kareno: The three of hearts was, I suspect, upside down suit preference, showing diamonds. Doug?|pg||
nt|dougs: i can answer questions on meckwell if anyone likes|pg||
nt|brolucius: I am impressed by all five participants here (including Jan.... nice job!)|pg||
mb|p|mb|1S|mb|p|nt|dougs: they play ud suit pref|pg||
mb|1N|mb|p|nt|dougs: doesn't everyone?|pg||
nt|Vugraph7: Thank you for all of us :)|pg||
nt|Walddk2: They are playing very fast in this room. On board 9 in the closed room|pg||
nt|kareno: Yes, so a low heart back would ask for the high suit, in this case diamonds.|pg||
mb|3S|mb|p|nt|brolucius: If anyone wants to know why it is good idea to open that North hand, vulnerable, please ask Doug and not me...|pg||
mb|p|mb|p|pc|d3|pc|d5|nt|kareno: Ahh and I thought the Brits were the specialists in paper-thin opening bids :)|pg||
nt|brolucius: 3@S is normally played as forcing. Not by them, though, so it is a good stop.|pg||
nt|Walddk2: Not balanced 11 counts, unless you play some kind of mini-NT|pg||
pc|dA|pc|d6|pg||
pc|c5|pc|cA|pc|c8|pc|c2|pg||
pc|s2|pc|s3|pc|sA|pc|s6|pg||
pc|s5|pc|c7|pc|s9|nt|Walddk2: 1@S was the limit it seems|pg||
pc|sT|pg||
nt|Walddk2: Very nasty trump break|pg||
nt|brolucius: It is easier to get away with light openings when you play a strong 1@C system. Otherwise you run the risk of widening the range too much for one-of-a-suit. |pg||
pc|d8|nt|kareno: I imagine they are glad they play it invitational only.|pg||
pc|dK|pc|d7|pc|dQ|pg||
pc|dJ|pc|d4|pc|c3|pc|d2|pg||
pc|c4|nt|dougs: controls are underrated...an A and 2 K's qualify for a Meckwell opening|pg||
pc|c9|pc|cK|pc|sJ|pg||
pc|sK|pc|h2|pc|h5|pc|s4|pg||
pc|dT|pc|c6|pc|cQ|pc|s7|pg||
mc|7|pg||
qx|c12|st||md|2SQ98742HJ4DQ6CAK3,SKJT3HQT7DT9832C8,SA5HK632DKJ5CT642,S6HA985DA74CQJ975|sv|n|mb|p|mb|p|mb|1C|mb|1S|mb|p|mb|1N|nt|hedyg: heavy 1NT|pg||
mb|p|mb|2S|nt|cuttysark: Gosh, the16-18 1NT - you don't see many of these|pg||
nt|hedyg: AND both majors!|pg||
nt|voldenuit: pessimistic bid from the 2 sides |pg||
mb|p|nt|finch: Is it really 16-18? If so why didn't East move?|pg||
mb|3S|mb|p|nt|vugraph814: they play 15-17|pg||
mb|3N|mb|d|nt|jtr: What is East doing?|pg||
nt|cuttysark: Maybe if he cannot count his cards he cannot count his points either. Nerves will do that to you|pg||
nt|hedyg: 3@s?|pg||
nt|hedyg: must do something now|pg||
nt|voldenuit: pass is very pessimistic by east u have 2 aces and 5@c and 4@s |pg||
mb|p|mb|p|mb|p|pc|s6|nt|hedyg: 2@s could be 0!|pg||
nt|hedyg: 3@s better|pg||
nt|jtr: Playing a near slam in a part-score?|pg||
nt|finch: It's consistent to bid 2@S now having passed 1NT; you've already made the decision|pg||
nt|hedyg: not once pd shows a good NT opening|pg||
pc|s9|nt|cuttysark: Another unique contract, I suspect|pg||
nt|hedyg: yes and the majors|pg||
nt|finch: The double of 2@D doesn't show extras, it just shows diamond shortage - you can't pass out 2@D|pg||
nt|voldenuit: in imp east hand is game forcing after 1Nt opening of his partner|pg||
pc|sT|pc|sA|pg||
pc|s5|pc|h5|pc|sQ|nt|hedyg: it surely shows a good hand once pd has passed|pg||
pc|sK|pg||
pc|d9|nt|hedyg: he wouldnt X with 15|pg||
pc|d5|pc|d4|pc|dQ|pg||
nt|jtr: Well, it is closer to a 2NT opening than a 1NT anyway|pg||
pc|s8|nt|cuttysark: Well, he would with xx in diamonds - nothing to say partner doesn't have a major or two and a few points|pg||
nt|finch: Oh yes, the same hand without the @DK is an easy double |pg||
nt|hedyg: for sure|pg||
pc|sJ|pc|h3|nt|finch: At matchpoints I'd expect a double on the same hand without one of the major suit kings as well|pg||
pc|c7|pg||
pc|d8|nt|hedyg: i wouldnt|pg||
pc|dK|pc|dA|pc|d6|pg||
pc|cQ|nt|cuttysark: He may as well go for 11 tricks - only vompeting with the other pairs in pastscore now - if there are any|pg||
nt|voldenuit: it's a great score for NS 90% I think |pg||
pc|cA|pc|c8|pc|c4|pg||
pc|s7|pc|s3|pc|h2|pc|c5|pg||
pc|s4|pc|h7|nt|hedyg: even like this still makes 11|pg||
nt|vugraph814: he claimed 10 of course, still a @c loser|pg||
nt|cuttysark: That should cheer up some of our spectators - it doesn't just happen at your table :)|pg||
pc|c2|pc|d7|pg||
pc|h4|pc|hT|pc|hK|pc|hA|pg||
pc|h8|pc|hJ|pc|hQ|pc|h6|pg||
pc|d2|pc|dJ|mc|8|pg||
qx|o13|st||md|3SAQJ2HA875DQ96C62,S95HQ43DAK3CAQJ84,ST73HT6D8742CKT93,SK864HKJ92DJT5C75|sv|b|nt|dougs: 3@S is invitational and shows a balanced hand as well inviting 3nt|pg||
nt|brolucius: It was easy for North to reject the game-try. Rather more difficult, it seemed, for South to only make a game try on that hand. Well done.|pg||
nt|kareno: As we used to say in the bad old days of 'Animal Acol,' an opening bid opposite an opening bid makes a partscore when the suits break well!!|pg||
mb|p|mb|p|nt|Walddk2: http://www.worldbridge.org/people/person.asp?qryid=3776 Jeff Meckstroth|pg||
nt|Walddk2: http://www.worldbridge.org/people/person.asp?qryid=3777 Eric Rodwell|pg||
nt|Vugraph7: R-M discussing the decision to pass 3@s - Meck :"you had a lot of primes" Rod: Kings aren't aces|pg||
nt|Walddk2: http://www.worldbridge.org/people/person.asp?qryid=4861 Cezary Balicki|pg||
mb|1D|mb|1N|nt|Walddk2: http://www.worldbridge.org/people/person.asp?qryid=4862 Adam Zmudzinski|pg||
mb|p|mb|2C|mb|p|nt|dougs: karen do yo think meckwell will play all 4 quarter in this final?|pg||
mb|2D|mb|p|mb|2N|mb|p|mb|3N|mb|p|mb|p|mb|p|pc|d8|nt|dougs: 1@D in 3rd set vul is 11-14 since 1nt would be 15-17|pg||
nt|kareno: My guess is yes, Doug. Paul Soloway's health isn't the best and I think they'll rest him when they can.|pg||
nt|brolucius: This is a borderline game and it seems that the lie of the cards is not favourable enough for a make. Perhaps he can work a miracle.|pg||
nt|dougs: They finished very last last night|pg||
nt|Vugraph7: Zmud asks about lead in "your suit" Meck: 1@d isn't really a suit, so this is just a normal lead, either 4th or high or 2nd high|pg||
pc|dJ|pc|d6|pc|d3|pg||
pc|c5|pc|c6|pc|cJ|pc|cK|pg||
nt|brolucius: South declines to cover in case declarer has @DA-K bare, but that was unlikely after North's choice of spotcard for the lead.|pg||
pc|d2|pc|d5|pc|d9|pc|dA|pg||
nt|ritong: he also wanted to encourage a @s shift|pg||
nt|ritong: disclosing @d AK with declarer|pg||
nt|Vugraph7: Z studying dummy|pg||
nt|kareno: South needs a shoehorn to force an entry into north's hand!|pg||
nt|brolucius: The spade game on board 9 has again gone one down on a club lead, in the Closed Room.|pg||
nt|Vugraph7: Yesterday, each time they finished, R-M asked me if the other room was done and I had to laugh, I can see it will be the same today :)|pg||
pc|cA|pc|c3|pc|c7|pc|c2|pg||
pc|cQ|pc|c9|pc|s4|nt|brolucius: Very good.|pg||
nt|kareno: I imagine the time monitor has gone away?|pg||
nt|Vugraph7: yes, probably to the other room|pg||
pc|h8|pg||
nt|Vugraph7: :)|pg||
pc|h3|pc|h6|pc|hJ|nt|dougs: Jeff plays very quickly...Eric is more studious, especially in the card play.|pg||
nt|Vugraph7: Meck had the low heart out, then stopped and now is studying things|pg||
nt|brolucius: West denies four hearts in the bidding, so South knows his partner has at least two.|pg||
pc|h5|pg||
nt|kareno: If he ducks two hearts, Jeff will be stripped of his diamond exit before being tucked in with the third heart.|pg||
pc|h2|pc|hA|pc|h4|pc|hT|pg||
nt|brolucius: Now he must take the ace and exit in diamonds. Yes, well defended.|pg||
nt|Vugraph7: He actually played the A instantly, but hid it from me|pg||
pc|dQ|pc|dK|nt|kareno: Now the diamond and then he'll have to pitch a quack of spades on the last heart, allowing his partner to win the ten.|pg||
pc|d4|pc|dT|pg||
nt|brolucius: Now Meckstroth must discard a middle spade to avoid having to give dummy the @SK.|pg||
nt|Vugraph7: Z shaking his head as he looks at the dummy|pg||
nt|Walddk2: He will do that I am sure. This is great bridge|pg||
nt|kareno: If declarer leads a spade now, Rodwell can play the ten.|pg||
nt|brolucius: Yes, it is brilliant to watch.|pg||
nt|Walddk2: More than 3,100 watching at this table|pg||
pc|hQ|nt|kareno: You are really privileged to watch these two great pairs compete, spectators.|pg||
pc|d7|nt|brolucius: Declarer has to calculate whether to overtake.|pg||
pc|h9|pc|h7|pg||
nt|kareno: Here is the node point. Duck and play for the spade onside or win and play for the ending.|pg||
nt|Vugraph7: Before he ducked, Z said "is it down 2 or down 1" - presumably if he guessed wrong|pg||
nt|ritong: if the endplay works, it works with a @s from hand as well|pg||
pc|s9|pc|sT|nt|kareno: Ten!|pg||
nt|Vugraph7: Meck claimed|pg||
mc|7|pg||
qx|c13|st||md|3SAQJ2HA875DQ96C62,S95HQ43DAK3CAQJ84,ST73HT6D8742CKT93,SK864HKJ92DJT5C75|sv|b|mb|p|mb|p|mb|1D!|mb|1N|nt|hedyg: @c lead will save a trick for NS|pg||
mb|p|mb|2C|mb|p|mb|2D|mb|p|nt|hedyg: oh! not in @s:)|pg||
nt|cuttysark: Hearts better - get the ruff|pg||
mb|2N|mb|p|mb|p|mb|p|pc|sT|nt|finch: NS bidding has rather propelled EW into a making game|pg||
pc|sK|nt|hedyg: making?|pg||
nt|hedyg: not anymore:)|pg||
pc|sA|nt|voldenuit: to beat 4@s south had to play ace and king of @h for the jack of @h of his part and @d for his ace |pg||
pc|s5|pg||
nt|finch: ...or a 500 save. Still I doubt there were many matchpoints available for -420|pg||
pc|c6|nt|cuttysark: I guess the defence is not trivial - some will make 4@S|pg||
nt|finch: Yes, we can see 4@S is beatable, but I bet it makes most of the time|pg||
pc|cQ|pc|cK|pc|c5|pg||
pc|s7|pc|s4|nt|jtr: I cant see many bidding it though|pg||
pc|sJ|nt|finch: Yes, left to their own devices EW will play a major suit partial|pg||
pc|s9|pg||
pc|c2|nt|voldenuit: a lot of pairs will play 2@h +2 I think |pg||
pc|cJ|pc|c3|pc|c7|pg||
pc|hQ|pc|h6|pc|h2|pc|h5|pg||
pc|h3|nt|xenya: i don't agree with S's 5@C |pg||
pc|hT|pc|hK|pc|h7|pg||
pc|h9|nt|hedyg: once W found the doublefit and with a stiff @c he loved his hand|pg||
pc|hA|pc|h4|nt|jtr: 4@c was the error i think-although tempting|pg||
pc|d7|pg||
pc|h8|pc|c4|pc|s3|pc|hJ|pg||
pc|dJ|nt|cuttysark: I think the club overcall is normal, and the negative dbl will get them to spades, surely?|pg||
nt|voldenuit: me too his hand is too balanced 6322 |pg||
pc|d9|pc|d3|pc|d2|pg||
pc|d5|pc|d6|pc|dK|pc|d4|pg||
pc|dA|pc|d8|pc|dT|pc|dQ|pg||
pc|cA|pc|c9|pc|s6|pc|s2|pg||
pc|c8|pc|cT|pc|s8|pc|sQ|pg||
pg||
qx|o14|st||md|4SA852HQ72DAKJ63C3,SQ63HK54DT74CT854,SJT974HA86D852CK7,SKHJT93DQ9CAQJ962|sv|o|nt|Vugraph7: Rod: "nice defense partner"|pg||
nt|brolucius: Well, it was more interesting than most '3NT-2's. If that is the correct plural.|pg||
mb|2C!|an|6+ clubs|mb|d|mb|3C|nt|brolucius: The most important move in the defence, which many would have got wrong, was to rise with the @HA on the second round.|pg||
nt|Walddk2: sure, one sec|pg||
mb|3S|mb|4C|mb|4S|mb|p|mb|p|mb|p|nt|Walddk2: Welcome to Barnet Shenkin from USA|pg||
nt|kareno: The nine of spades did not change anything. On the low one, Eric would surely have played the ten.|pg||
nt|barnets: afternoon all from wet florida|pg||
nt|kareno: Barnet :)|pg||
nt|ritong: hi barnet|pg||
nt|barnets: stormy weather|pg||
nt|kareno: Likely @h jack lead.|pg||
nt|Walddk2: That's a song|pg||
nt|ritong: hurricane?|pg||
nt|kareno: I love that song, Roland :)|pg||
nt|Vugraph7: Rod just told Bal it was his lead, apparently he thought his partner was on lead :)|pg||
pc|hJ|nt|Walddk2: But to say that we know it well is also the same as revealing our age I'm afraid|pg||
nt|brolucius: Most unlikely to be from K-J-10, but what can declarer do about it?|pg||
nt|kareno: I'm not afraid to reveal my age. I think it's still in the Encyclopedia anyway ;)|pg||
nt|Vugraph7: Actually, they play that J denies a higher, as Z told R|pg||
nt|Vugraph7: Both of these pairs are very good about disclosing everything to their opponents|pg||
nt|barnets: so we have a strong 4 handed team in strong contention int he spingold ----|pg||
nt|brolucius: Declarer can lose a trump trick to the 'safe hand' who cannot play a second heart but, of course, East still has the @CA.|pg||
nt|Walddk2: Not much Rod can do about this|pg||
nt|Vugraph7: Rod leaning back studying the dummy|pg||
nt|kareno: Yes, the non-club lead is fatal to the contract.|pg||
nt|barnets: anyone know when was the last time a four handed team actually won the spingold?|pg||
nt|Walddk2: B-Z are not known to present gifts|pg||
nt|barnets: my guess avery long time ago|pg||
nt|barnets: the specs say b_Z won 4 handed in 2001 |pg||
nt|Walddk2: I am getting lots of interesting lines that suggest that it makes. I do not believe any of them|pg||
nt|brolucius: Unlucky for North-South that East had an 'easy' heart lead to make. Somehow, they needed South to play the contract.|pg||
pc|h2|pc|h5|nt|brolucius: If anyone does tell you how to make it, Roland, copy me on their message... |pg||
nt|Vugraph7: Rod had a card out then put it back and now thinking again|pg||
pc|hA|pg||
pc|sJ|pc|sK|pc|sA|nt|Walddk2: I think they got cold feet. There really is no way he can make it|pg||
pc|s3|pg||
nt|brolucius: Usually Barnet can spot a winning line but he is as quiet as the grave at the moment.|pg||
pc|s2|pc|sQ|pc|s7|pc|c2|pg||
pc|c8|nt|Walddk2: Now comes the club switch and a heart through|pg||
nt|barnets: cant see it 4 diamonds west makes 2 trump tricks|pg||
nt|Vugraph7: Bathroom break|pg||
nt|barnets: even thought the heart goes|pg||
nt|barnets: declarer could not stop east getting in to play the HJ thru|pg||
nt|kareno: The heart opening lead was natural from east and will probably be duplicated in the closed room.|pg||
nt|brolucius: West would ruff the fourth round of diamonds low.|pg||
nt|kareno: And east would not cover the jack of spades from a doubleton holding.|pg||
nt|barnets: if west had clubsingleton -- could make with 4 diamonds pitching a club the only lose 2 trumps and heart|pg||
nt|brolucius: I told my wife I would watch only one session of this and be by her side thereafter.... but it sure it tempting to watch more.|pg||
nt|Walddk2: Notice how in high level bridge how quickly the resolution/claim happens, and how the experts treat each other in that regard|pg||
nt|barnets: if north had club sing that shud rread|pg||
nt|kareno: That's what happens when you have a wife, David :)|pg||
nt|Walddk2: Rod conceded 1 down very quickly after the C switch I am sure|pg||
nt|barnets: so now i am told a 4 handed team won 20 years ago in 1987|pg||
nt|brolucius: Married for 32 years.... he said proudly.|pg||
nt|dougs: The quality of shortsmanship is very high in top level bridge.|pg||
nt|dougs: sportmanship|pg||
nt|kareno: And luckily - you've obviously found a keeper :)|pg||
nt|Walddk2: Yes, a housekeeper. Hope she doesn't leave and keep the house|pg||
nt|barnets: who knows who won in 2001 was it this same 4?|pg||
nt|kareno: That was a Zsa Zsa Gabor line, Roland :)|pg||
nt|Walddk2: I am not THAT old|pg||
nt|brolucius: Housekeepers can be found on Ebay. A good wife is much more difficult to find... but I was lucky.|pg||
nt|kareno: She said she was a good housekeeper - married X times and kept the house each time.|pg||
nt|ritong: :)|pg||
nt|kareno: And Roland - as I've said - I AM that old!! And hope to be doing commentary for another twenty years or so :)|pg||
nt|Walddk2: Also, the "cards speak"; therefore, when it is "obvious", the opponents will just concede, and just tell declarer what they made: no one looks at the cards, however, they might ...|pg||
nt|Walddk2: ask the shapes, as everyone knows the position of the high cards|pg||
mc|9|pg||
qx|c14|st||md|4SA852HQ72DAKJ63C3,SQ63HK54DT74CT854,SJT974HA86D852CK7,SKHJT93DQ9CAQJ962|sv|o|nt|hedyg: most might bid 2@H|pg||
nt|cuttysark: Without the overcall, maybe|pg||
mb|1C|mb|1D|mb|p|mb|1S|mb|2C|mb|3S|mb|p|mb|4S|mb|p|mb|p|mb|p|nt|voldenuit: 11 tricks in 4@h north may have tried the contract of 3Nt |pg||
pc|hJ|pc|h2|pc|h5|pc|h6|pg||
pc|hT|pc|hQ|pc|hK|pc|hA|pg||
pc|sJ|pc|sK|pc|sA|pc|s3|pg||
pc|s2|pc|sQ|nt|cuttysark: That is a mtach point bid that deseerves its fate on a diamond lead|pg||
pc|s4|pc|c6|pg||
pc|c5|pc|cK|pc|cA|nt|voldenuit: south could play @s 4/2 now when he sees @h 4/1 |pg||
pc|c3|pg||
pc|h9|pc|h7|pc|h4|pc|h8|pg||
pc|h3|mc|9|pg||
qx|o15|st||md|1SQ976HJT85DATCT75,SKJ5HAK7D865432CJ,SAT842HQ32DJ9CA42,S3H964DKQ7CKQ9863|sv|n|nt|barnets: Apparently the won either the spingold or the vandrebilt 4 handed in 2001 -- B -Z Gromov and Petrunin|pg||
nt|brolucius: Anyone logging on to BBO now will say.... "Oh, no, the score had gone wrong again. Typical!" Who would believe 6-0 after so many boards?|pg||
nt|Walddk2: Walddk6 would|pg||
mb|p|mb|1D|nt|barnets: the vanderbit is confirmed|pg||
mb|1S|nt|brolucius: Or perhaps that just represents the number of cigarettes smoked by each team.|pg||
mb|2C|nt|kareno: Of course, quite a few boards are yet to be played in the closed room.|pg||
mb|3H!|nt|dougs: close between 3@S preemptive and 3@H 8-9 raise|pg||
mb|p|mb|3S|mb|3N!|mb|p|mb|4D|mb|p|mb|p|mb|p|nt|barnets: A spec has menioned curiously that in all the vugraph matches he has watched he has never ever seen Meckwell not score 1 imp in a quarter|pg||
nt|brolucius: Not at all easy for E-W after that barrage. If 3NT meant 'you choose the minor' that was a great piece of system.|pg||
nt|kareno: I have a report that on board 12 (where Meckwell stayed out of the poor spade game) the Russians are in 3NT doubled.|pg||
pc|h2|nt|Walddk2: And will go for 500 most likely|pg||
nt|kareno: 3NT would have been expensive.|pg||
nt|kareno: So a pickup for Nickell.|pg||
nt|Walddk2: That would be 7 IMPs to Nickell, and we have a new lerader|pg||
pc|h4|pc|h8|pc|hK|pg||
nt|barnets: so that fixes the specs problem :)|pg||
pc|d5|pc|d9|pc|dK|pc|dA|pg||
nt|kareno: The heart lead deprives west of an opportunity to set up a spade trick.|pg||
nt|Walddk2: It's quite normal for Meckwell to play all 4 sets in a final|pg||
nt|brolucius: South must persist with partner's chosen defence.|pg||
nt|barnets: declare has a achance fro down 1 in 3N x now would be flat board|pg||
nt|barnets: the score is morelike baseball than bridge|pg||
nt|brolucius: Tennis!|pg||
nt|Walddk2: Football (soccer)|pg||
pc|sQ|nt|Walddk2: I believe Russia could beat USA 6-0 :)|pg||
nt|brolucius: "First set to Gromov!"|pg||
pc|sK|pc|sA|pc|s3|pg||
nt|barnets: thats only if man u are playing|pg||
nt|kareno: I said it to Roland privately but I'll repeat it: Meckwell aren't kids any more but they still have plenty of energy for long matches.|pg||
nt|brolucius: Well, who would believe it? Meckstroth is human.|pg||
nt|Walddk2: It could also be the Ashes scoreline if they played 6 tests |pg||
nt|brolucius: With a vulnerable overcall opposite, it was unlikely that a spade switch would cost. But it has done.|pg||
pc|h3|pc|h6|pc|hT|pc|hA|pg||
pc|sJ|pc|s4|pc|h9|pc|s6|pg||
pc|cJ|nt|kareno: Yes.. undone the fine opening lead by Rodwell.. the deuce, not a higher one.|pg||
nt|Walddk2: 3NTX on 12 only 1 down, so a flat board it is|pg||
nt|Walddk2: Still 0-6|pg||
pc|cA|pc|c3|pc|c5|pg||
mc|10|pg||
qx|c15|st||md|1SQ976HJT85DATCT75,SKJ5HAK7D865432CJ,SAT842HQ32DJ9CA42,S3H964DKQ7CKQ9863|sv|n|mb|p|mb|1D|mb|1S|mb|2C|mb|2S|mb|p|mb|p|mb|2N|mb|3S|mb|3N|nt|hedyg: nice pass by S over 2@h|pg||
mb|p|nt|finch: 2NT was a little optimistic - unless 2@H showed a 2-suiter|pg||
nt|vugraph814: all natural|pg||
nt|jtr: trump lead mandatory here|pg||
mb|4C|mb|p|mb|p|mb|p|pc|hJ|pc|hA|nt|jtr: low @s better|pg||
pc|h2|nt|finch: I agree this would usually be a trump lead - but in fact forcing it feels like good defence|pg||
pc|h4|pg||
pc|d2|pc|d9|pc|dK|pc|dA|pg||
pc|h5|pc|hK|pc|h3|pc|h6|pg||
pc|cJ|pc|c4|pc|c3|pc|c5|pg||
pc|d3|pc|dJ|pc|dQ|pc|dT|pg||
pc|cK|pc|c7|nt|hedyg: needs to try K@h|pg||
pc|d4|nt|hedyg: now @ds|pg||
nt|finch: North might have done better to duck the heart off|pg||
pc|cA|pg||
pc|sA|pc|s3|pc|s6|pc|s5|pg||
nt|hedyg: ty all! see you later:)|pg||
nt|cuttysark: Sometimes when you sacrifice a trick it comes back - East would probably rise with @HK but that might not be enough|pg||
nt|andersk: Board 46, might be same board as a board in Mixed Pairs, they are workeing on it now to find out if it is same board!|pg||
nt|andersk: Ivar, maybe you can give us an update when they have investigated:)|pg||
nt|vugraph814: I wasn't aware there was anything wrong, Mixed teams is in the other end of the venue|pg||
nt|xenya: thanks everyone -- bye for now |pg||
pc|hQ|pc|h9|pc|h8|pc|h7|pg||
pc|c2|mc|9|pg||
qx|o16|st||md|2SJTHQJ5DAKT954CT6,S8HKT832D862CKJ42,SA542HA9DQJ7CQ985,SKQ9763H764D3CA73|sv|e|nt|brolucius: It was great bidding by the Poles, to get to 4@D. And almost a great defence from M/R.|pg||
nt|Walddk2: This is the last board of the first quarter. Many thanks to Jan Martel, our brilliant operator in Nashville. Flawless operating, and much useful information from the table|pg||
nt|Vugraph7: Thank you.|pg||
nt|brolucius: Yes, top class, Jan.|pg||
nt|Walddk2: Also thanks to my excellent fellow commentators: Karen Allison, David Bird, Doug Simson, Barnet Shenkin and Henri Schweitzer|pg||
mb|p|mb|1D|mb|2S|mb|3C|mb|p|mb|3N|mb|p|mb|p|mb|p|nt|kareno: And to you, Roland, for organizing these vugraphs and for your excellent participation as well!|pg||
nt|dougs: 3@C shows invite + in @D..transfer in effect|pg||
nt|Walddk2: Finally thanks to the ACBL, Rick Beye and Kevin Perkins for bringing this prestigious event to BBO vugraph. Much appreciated by all our dedicated fans|pg||
pc|s7|pc|sT|pc|s8|nt|dougs: Eric has an easy 3nt with 2 Aces and a @D fit|pg||
pc|s2|pg||
pc|hQ|nt|barnets: The sK lead would have given declarer more problems|pg||
pc|h2|pc|h9|pc|h7|pg||
nt|brolucius: It has been an intriguing 'warm-up' set to get the final going. Who knows what will happen in the next three sets. There's only one way to find out!|pg||
nt|barnets: with only 8 top tricks|pg||
nt|barnets: and would have gone much slower|pg||
nt|kareno: But with the heart in the pocket, all would be well.|pg||
nt|Walddk2: Thanks everyone. We will be back about 15 minutes after play finishes at the other table|pg||
nt|barnets: yes finally|pg||
nt|kareno: Yes, specs, don't give up your seats!!|pg||
nt|brolucius: Thanks for watching!|pg||
nt|Walddk2: See you then, bye for now|pg||
nt|kareno: Bye for now.|pg||
nt|barnets: later|pg||
nt|dougs: If there are any more questions, I will do my best.|pg||
nt|bigtrain: morning/afternoon/evening all|pg||
mc|10|pg||
qx|c16|st||md|2SJTHQJ5DAKT954CT6,S8HKT832D862CKJ42,SA542HA9DQJ7CQ985,SKQ9763H764D3CA73|sv|e|mb|p|mb|1N|mb|p|mb|3N|mb|p|mb|p|mb|p|pc|sQ|nt|voldenuit: which range is nt ? 14/16|pg||
pc|sT|pc|s8|pc|s2|pg||
nt|vugraph814: I'm not sure, no one has asked|pg||
nt|finch: EW are on the same wavelength - many people play 4NT as quantitative here|pg||
nt|finch: (how would you bid with invitational slam values and 4 spades?)|pg||
pc|sK|pc|sJ|pc|d2|pc|sA|pg||
pc|dQ|nt|cuttysark: Agree - I have to make some kind of fit-showing cuebid before using Blackwood|pg||
pc|d3|pc|d4|pc|d6|pg||
pc|dJ|pc|c7|pc|d5|pc|d8|pg||
pc|d7|pc|s3|pc|dA|pc|c2|pg||
pc|dK|pc|h3|pc|s5|pc|h4|pg||
pc|dT|pc|c4|pc|c5|pc|c3|pg||
pc|d9|nt|finch: As it is, at pairs 6NT is better (and making)|pg||
mc|9|pg||
tenace-0.13/examples/everybody-makes-3s.lin 0000664 0004016 0004016 00000000221 11500771612 015561 0000000 0000000 pn|Süd,West,Nord,Ost|st||md|3S234567TJH23456DC,SHD56789TJC345678,S9H9TJD234QAC2QKA,|rh||ah|Board 1|sv|o|mb|p|mb|p|mb|3S|mb|p|mb|p|mb|p|pg||pg||
tenace-0.13/examples/7nt-south.lin 0000664 0004016 0004016 00000000541 11500771612 014005 0000000 0000000 pn|Süd,West,Nord,Ost|st||md|3STJKAH2JKDTQC29QK,S89QH9TQD789JC45J,S2H345AD2345KAC3A,|rh||ah|Board 1|sv|o|mb|p|mb|p|mb|7N|mb|p|mb|p|mb|p|pg||pc|CT|pc|C3|pc|C6|pc|C9|pg||pc|C2|pc|C5|pc|CA|pc|C7|pg||pc|HA|pc|H6|pc|H2|pc|H9|pg||pc|H3|pc|H7|pc|HK|pc|HT|pg||pc|SA|pc|S8|pc|S2|pc|S3|pg||pc|SK|pc|S9|pc|H4|pc|S4|pg||pc|CK|pc|CJ|pc|H5|pc|CT|pg||pc|CQ|pc|SQ|pg||
tenace-0.13/examples/everybody-makes-7nt.lin 0000664 0004016 0004016 00000000207 11500771612 015750 0000000 0000000 pn|Süd,West,Nord,Ost|st||md|3SHD234567C2345678,SHD89TJQKAC9TJQKA,S89TJQKAH9TJQKADC,|rh||ah|Board 1|sv|o|mb|7N|mb|p|mb|p|mb|p|pg||pg||
tenace-0.13/config.h.in 0000664 0004016 0004016 00000034344 12215417333 011647 0000000 0000000 /* config.h.in. Generated from configure.ac by autoheader. */
/* always defined to indicate that i18n is enabled */
#undef ENABLE_NLS
/* tenace */
#undef GETTEXT_PACKAGE
/* Define to 1 if you have the `bind_textdomain_codeset' function. */
#undef HAVE_BIND_TEXTDOMAIN_CODESET
/* Define to 1 if you have the `dcgettext' function. */
#undef HAVE_DCGETTEXT
/* Define to 1 if you have the header file. */
#undef HAVE_DLFCN_H
/* Define to 1 if you have the `getsysinfo' function. */
#undef HAVE_GETSYSINFO
/* Define if the GNU gettext() function is already present or preinstalled. */
#undef HAVE_GETTEXT
/* Define to 1 if you have the header file. */
#undef HAVE_INTTYPES_H
/* Define if your file defines LC_MESSAGES. */
#undef HAVE_LC_MESSAGES
/* Define to 1 if you have the header file. */
#undef HAVE_LOCALE_H
/* Define to 1 if you have the header file. */
#undef HAVE_MACHINE_HAL_SYSINFO_H
/* Define to 1 if you have the header file. */
#undef HAVE_MEMORY_H
/* Define to 1 if you have the `pstat_getdynamic' function. */
#undef HAVE_PSTAT_GETDYNAMIC
/* Define to 1 if you have the `pstat_getstatic' function. */
#undef HAVE_PSTAT_GETSTATIC
/* Define to 1 if chdir is declared even after undefining macros. */
#undef HAVE_RAW_DECL_CHDIR
/* Define to 1 if chown is declared even after undefining macros. */
#undef HAVE_RAW_DECL_CHOWN
/* Define to 1 if dup is declared even after undefining macros. */
#undef HAVE_RAW_DECL_DUP
/* Define to 1 if dup2 is declared even after undefining macros. */
#undef HAVE_RAW_DECL_DUP2
/* Define to 1 if dup3 is declared even after undefining macros. */
#undef HAVE_RAW_DECL_DUP3
/* Define to 1 if endusershell is declared even after undefining macros. */
#undef HAVE_RAW_DECL_ENDUSERSHELL
/* Define to 1 if environ is declared even after undefining macros. */
#undef HAVE_RAW_DECL_ENVIRON
/* Define to 1 if euidaccess is declared even after undefining macros. */
#undef HAVE_RAW_DECL_EUIDACCESS
/* Define to 1 if faccessat is declared even after undefining macros. */
#undef HAVE_RAW_DECL_FACCESSAT
/* Define to 1 if fchdir is declared even after undefining macros. */
#undef HAVE_RAW_DECL_FCHDIR
/* Define to 1 if fchownat is declared even after undefining macros. */
#undef HAVE_RAW_DECL_FCHOWNAT
/* Define to 1 if fdatasync is declared even after undefining macros. */
#undef HAVE_RAW_DECL_FDATASYNC
/* Define to 1 if fsync is declared even after undefining macros. */
#undef HAVE_RAW_DECL_FSYNC
/* Define to 1 if ftruncate is declared even after undefining macros. */
#undef HAVE_RAW_DECL_FTRUNCATE
/* Define to 1 if getcwd is declared even after undefining macros. */
#undef HAVE_RAW_DECL_GETCWD
/* Define to 1 if getdomainname is declared even after undefining macros. */
#undef HAVE_RAW_DECL_GETDOMAINNAME
/* Define to 1 if getdtablesize is declared even after undefining macros. */
#undef HAVE_RAW_DECL_GETDTABLESIZE
/* Define to 1 if getgroups is declared even after undefining macros. */
#undef HAVE_RAW_DECL_GETGROUPS
/* Define to 1 if gethostname is declared even after undefining macros. */
#undef HAVE_RAW_DECL_GETHOSTNAME
/* Define to 1 if getlogin is declared even after undefining macros. */
#undef HAVE_RAW_DECL_GETLOGIN
/* Define to 1 if getlogin_r is declared even after undefining macros. */
#undef HAVE_RAW_DECL_GETLOGIN_R
/* Define to 1 if getpagesize is declared even after undefining macros. */
#undef HAVE_RAW_DECL_GETPAGESIZE
/* Define to 1 if getusershell is declared even after undefining macros. */
#undef HAVE_RAW_DECL_GETUSERSHELL
/* Define to 1 if group_member is declared even after undefining macros. */
#undef HAVE_RAW_DECL_GROUP_MEMBER
/* Define to 1 if isatty is declared even after undefining macros. */
#undef HAVE_RAW_DECL_ISATTY
/* Define to 1 if lchown is declared even after undefining macros. */
#undef HAVE_RAW_DECL_LCHOWN
/* Define to 1 if link is declared even after undefining macros. */
#undef HAVE_RAW_DECL_LINK
/* Define to 1 if linkat is declared even after undefining macros. */
#undef HAVE_RAW_DECL_LINKAT
/* Define to 1 if lseek is declared even after undefining macros. */
#undef HAVE_RAW_DECL_LSEEK
/* Define to 1 if pipe is declared even after undefining macros. */
#undef HAVE_RAW_DECL_PIPE
/* Define to 1 if pipe2 is declared even after undefining macros. */
#undef HAVE_RAW_DECL_PIPE2
/* Define to 1 if pread is declared even after undefining macros. */
#undef HAVE_RAW_DECL_PREAD
/* Define to 1 if pwrite is declared even after undefining macros. */
#undef HAVE_RAW_DECL_PWRITE
/* Define to 1 if readlink is declared even after undefining macros. */
#undef HAVE_RAW_DECL_READLINK
/* Define to 1 if readlinkat is declared even after undefining macros. */
#undef HAVE_RAW_DECL_READLINKAT
/* Define to 1 if rmdir is declared even after undefining macros. */
#undef HAVE_RAW_DECL_RMDIR
/* Define to 1 if sethostname is declared even after undefining macros. */
#undef HAVE_RAW_DECL_SETHOSTNAME
/* Define to 1 if setusershell is declared even after undefining macros. */
#undef HAVE_RAW_DECL_SETUSERSHELL
/* Define to 1 if sleep is declared even after undefining macros. */
#undef HAVE_RAW_DECL_SLEEP
/* Define to 1 if symlink is declared even after undefining macros. */
#undef HAVE_RAW_DECL_SYMLINK
/* Define to 1 if symlinkat is declared even after undefining macros. */
#undef HAVE_RAW_DECL_SYMLINKAT
/* Define to 1 if ttyname_r is declared even after undefining macros. */
#undef HAVE_RAW_DECL_TTYNAME_R
/* Define to 1 if unlink is declared even after undefining macros. */
#undef HAVE_RAW_DECL_UNLINK
/* Define to 1 if unlinkat is declared even after undefining macros. */
#undef HAVE_RAW_DECL_UNLINKAT
/* Define to 1 if usleep is declared even after undefining macros. */
#undef HAVE_RAW_DECL_USLEEP
/* Define to 1 if you have the `sched_getaffinity' function. */
#undef HAVE_SCHED_GETAFFINITY
/* Define to 1 if sched_getaffinity has a glibc compatible declaration. */
#undef HAVE_SCHED_GETAFFINITY_LIKE_GLIBC
/* Define to 1 if you have the `sched_getaffinity_np' function. */
#undef HAVE_SCHED_GETAFFINITY_NP
/* Define to 1 if you have the header file. */
#undef HAVE_STDINT_H
/* Define to 1 if you have the header file. */
#undef HAVE_STDLIB_H
/* Define to 1 if you have the header file. */
#undef HAVE_STRINGS_H
/* Define to 1 if you have the header file. */
#undef HAVE_STRING_H
/* Define to 1 if you have the `sysctl' function. */
#undef HAVE_SYSCTL
/* Define to 1 if you have the `sysmp' function. */
#undef HAVE_SYSMP
/* Define to 1 if you have the header file. */
#undef HAVE_SYS_PARAM_H
/* Define to 1 if you have the header file. */
#undef HAVE_SYS_PSTAT_H
/* Define to 1 if you have the header file. */
#undef HAVE_SYS_STAT_H
/* Define to 1 if you have the header file. */
#undef HAVE_SYS_SYSCTL_H
/* Define to 1 if you have the header file. */
#undef HAVE_SYS_SYSINFO_H
/* Define to 1 if you have the header file. */
#undef HAVE_SYS_SYSMP_H
/* Define to 1 if you have the header file. */
#undef HAVE_SYS_SYSTEMCFG_H
/* Define to 1 if you have the header file. */
#undef HAVE_SYS_TABLE_H
/* Define to 1 if you have the header file. */
#undef HAVE_SYS_TYPES_H
/* Define to 1 if you have the `table' function. */
#undef HAVE_TABLE
/* Define to 1 if you have the header file. */
#undef HAVE_UNISTD_H
/* Define if you have the 'wchar_t' type. */
#undef HAVE_WCHAR_T
/* Define to 1 if the system has the type `_Bool'. */
#undef HAVE__BOOL
/* Define to 1 if you have the external variable, _system_configuration with a
member named physmem. */
#undef HAVE__SYSTEM_CONFIGURATION
/* Define to the sub-directory in which libtool stores uninstalled libraries.
*/
#undef LT_OBJDIR
/* Name of package */
#undef PACKAGE
/* Define to the address where bug reports for this package should be sent. */
#undef PACKAGE_BUGREPORT
/* Define to the full name of this package. */
#undef PACKAGE_NAME
/* Define to the full name and version of this package. */
#undef PACKAGE_STRING
/* Define to the one symbol short name of this package. */
#undef PACKAGE_TARNAME
/* Define to the home page for this package. */
#undef PACKAGE_URL
/* Define to the version of this package. */
#undef PACKAGE_VERSION
/* Define to 1 if you have the ANSI C header files. */
#undef STDC_HEADERS
/* Enable extensions on AIX 3, Interix. */
#ifndef _ALL_SOURCE
# undef _ALL_SOURCE
#endif
/* Enable general extensions on OS X. */
#ifndef _DARWIN_C_SOURCE
# undef _DARWIN_C_SOURCE
#endif
/* Enable GNU extensions on systems that have them. */
#ifndef _GNU_SOURCE
# undef _GNU_SOURCE
#endif
/* Enable threading extensions on Solaris. */
#ifndef _POSIX_PTHREAD_SEMANTICS
# undef _POSIX_PTHREAD_SEMANTICS
#endif
/* Enable extensions on HP NonStop. */
#ifndef _TANDEM_SOURCE
# undef _TANDEM_SOURCE
#endif
/* Enable X/Open extensions if necessary. HP-UX 11.11 defines
mbstate_t only if _XOPEN_SOURCE is defined to 500, regardless of
whether compiling with -Ae or -D_HPUX_SOURCE=1. */
#ifndef _XOPEN_SOURCE
# undef _XOPEN_SOURCE
#endif
/* Enable general extensions on Solaris. */
#ifndef __EXTENSIONS__
# undef __EXTENSIONS__
#endif
/* Version number of package */
#undef VERSION
/* Define to 1 if on MINIX. */
#undef _MINIX
/* Define to 1 to make NetBSD features available. MINIX 3 needs this. */
#undef _NETBSD_SOURCE
/* The _Noreturn keyword of C11. */
#if ! (defined _Noreturn \
|| (defined __STDC_VERSION__ && 201112 <= __STDC_VERSION__))
# if (3 <= __GNUC__ || (__GNUC__ == 2 && 8 <= __GNUC_MINOR__) \
|| 0x5110 <= __SUNPRO_C)
# define _Noreturn __attribute__ ((__noreturn__))
# elif defined _MSC_VER && 1200 <= _MSC_VER
# define _Noreturn __declspec (noreturn)
# else
# define _Noreturn
# endif
#endif
/* Define to 2 if the system does not provide POSIX.1 features except with
this defined. */
#undef _POSIX_1_SOURCE
/* Define to 1 if you need to in order for 'stat' and other things to work. */
#undef _POSIX_SOURCE
/* _GL_INLINE is a portable alternative to ISO C99 plain 'inline'.
_GL_EXTERN_INLINE is a portable alternative to 'extern inline'.
_GL_INLINE_HEADER_BEGIN contains useful stuff to put
in an include file, before uses of _GL_INLINE.
It suppresses GCC's bogus "no previous prototype for 'FOO'" diagnostic,
when FOO is an inline function in the header; see
.
_GL_INLINE_HEADER_END contains useful stuff to put
in the same include file, after uses of _GL_INLINE.
Suppress extern inline with HP-UX cc, as it appears to be broken; see
.
Suppress extern inline with Sun C in standards-conformance mode, as it
mishandles inline functions that call each other. E.g., for 'inline void f
(void) { } inline void g (void) { f (); }', c99 incorrectly complains
'reference to static identifier "f" in extern inline function'.
This bug was observed with Sun C 5.12 SunOS_i386 2011/11/16.
Suppress the use of extern inline on Apple's platforms, as Libc at least
through Libc-825.26 (2013-04-09) is incompatible with it; see, e.g.,
.
Perhaps Apple will fix this some day. */
#if ((__GNUC__ \
? defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__ \
: (199901L <= __STDC_VERSION__ \
&& !defined __HP_cc \
&& !(defined __SUNPRO_C && __STDC__))) \
&& !defined __APPLE__)
# define _GL_INLINE inline
# define _GL_EXTERN_INLINE extern inline
#elif 2 < __GNUC__ + (7 <= __GNUC_MINOR__) && !defined __APPLE__
# if __GNUC_GNU_INLINE__
/* __gnu_inline__ suppresses a GCC 4.2 diagnostic. */
# define _GL_INLINE extern inline __attribute__ ((__gnu_inline__))
# else
# define _GL_INLINE extern inline
# endif
# define _GL_EXTERN_INLINE extern
#else
# define _GL_INLINE static _GL_UNUSED
# define _GL_EXTERN_INLINE static _GL_UNUSED
#endif
#if 4 < __GNUC__ + (6 <= __GNUC_MINOR__)
# if defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__
# define _GL_INLINE_HEADER_CONST_PRAGMA
# else
# define _GL_INLINE_HEADER_CONST_PRAGMA \
_Pragma ("GCC diagnostic ignored \"-Wsuggest-attribute=const\"")
# endif
# define _GL_INLINE_HEADER_BEGIN \
_Pragma ("GCC diagnostic push") \
_Pragma ("GCC diagnostic ignored \"-Wmissing-prototypes\"") \
_Pragma ("GCC diagnostic ignored \"-Wmissing-declarations\"") \
_GL_INLINE_HEADER_CONST_PRAGMA
# define _GL_INLINE_HEADER_END \
_Pragma ("GCC diagnostic pop")
#else
# define _GL_INLINE_HEADER_BEGIN
# define _GL_INLINE_HEADER_END
#endif
/* Work around a bug in Apple GCC 4.0.1 build 5465: In C99 mode, it supports
the ISO C 99 semantics of 'extern inline' (unlike the GNU C semantics of
earlier versions), but does not display it by setting __GNUC_STDC_INLINE__.
__APPLE__ && __MACH__ test for Mac OS X.
__APPLE_CC__ tests for the Apple compiler and its version.
__STDC_VERSION__ tests for the C99 mode. */
#if defined __APPLE__ && defined __MACH__ && __APPLE_CC__ >= 5465 && !defined __cplusplus && __STDC_VERSION__ >= 199901L && !defined __GNUC_STDC_INLINE__
# define __GNUC_STDC_INLINE__ 1
#endif
/* Define to `int' if does not define. */
#undef mode_t
/* Define to `int' if does not define. */
#undef pid_t
/* Define as a signed type of the same size as size_t. */
#undef ssize_t
/* Define as a marker that can be attached to declarations that might not
be used. This helps to reduce warnings, such as from
GCC -Wunused-parameter. */
#if __GNUC__ >= 3 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7)
# define _GL_UNUSED __attribute__ ((__unused__))
#else
# define _GL_UNUSED
#endif
/* The name _UNUSED_PARAMETER_ is an earlier spelling, although the name
is a misnomer outside of parameter lists. */
#define _UNUSED_PARAMETER_ _GL_UNUSED
/* The __pure__ attribute was added in gcc 2.96. */
#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__))
#else
# define _GL_ATTRIBUTE_PURE /* empty */
#endif
/* The __const__ attribute was added in gcc 2.95. */
#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95)
# define _GL_ATTRIBUTE_CONST __attribute__ ((__const__))
#else
# define _GL_ATTRIBUTE_CONST /* empty */
#endif
tenace-0.13/doc/ 0000775 0004016 0004016 00000000000 12225341155 010440 5 0000000 0000000 tenace-0.13/doc/tenace.6 0000664 0004016 0004016 00000001512 12224075652 011712 0000000 0000000 .TH TENACE 6 2008-01
.SH NAME
tenace \- Bridge hand viewer and editor
.SH SYNOPSIS
.B tenace [\fIfilename\fP]
.SH "DESCRIPTION"
.B Tenace
is a bridge hand viewer and editor.
.SH OPTIONS
.TP
.I filename
Load hand records from \fIfilename\fP.
.SH COPYRIGHT
Copyright (C) 2005-2008 Christoph Berg
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program 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 General Public License for more details.
.SH BUGS
Probably lots.
.SH "SEE ALSO"
dealer(6), dds(6).
tenace-0.13/doc/Makefile.am 0000664 0004016 0004016 00000000031 11500771612 012406 0000000 0000000 dist_man_MANS = tenace.6
tenace-0.13/doc/Makefile.in 0000664 0004016 0004016 00000052330 12225337317 012435 0000000 0000000 # Makefile.in generated by automake 1.13.3 from Makefile.am.
# @configure_input@
# Copyright (C) 1994-2013 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
@SET_MAKE@
VPATH = @srcdir@
am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
am__make_running_with_option = \
case $${target_option-} in \
?) ;; \
*) echo "am__make_running_with_option: internal error: invalid" \
"target option '$${target_option-}' specified" >&2; \
exit 1;; \
esac; \
has_opt=no; \
sane_makeflags=$$MAKEFLAGS; \
if $(am__is_gnu_make); then \
sane_makeflags=$$MFLAGS; \
else \
case $$MAKEFLAGS in \
*\\[\ \ ]*) \
bs=\\; \
sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
| sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
esac; \
fi; \
skip_next=no; \
strip_trailopt () \
{ \
flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
}; \
for flg in $$sane_makeflags; do \
test $$skip_next = yes && { skip_next=no; continue; }; \
case $$flg in \
*=*|--*) continue;; \
-*I) strip_trailopt 'I'; skip_next=yes;; \
-*I?*) strip_trailopt 'I';; \
-*O) strip_trailopt 'O'; skip_next=yes;; \
-*O?*) strip_trailopt 'O';; \
-*l) strip_trailopt 'l'; skip_next=yes;; \
-*l?*) strip_trailopt 'l';; \
-[dEDm]) skip_next=yes;; \
-[JT]) skip_next=yes;; \
esac; \
case $$flg in \
*$$target_option*) has_opt=yes; break;; \
esac; \
done; \
test $$has_opt = yes
am__make_dryrun = (target_option=n; $(am__make_running_with_option))
am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
pkgdatadir = $(datadir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkglibexecdir = $(libexecdir)/@PACKAGE@
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_HEADER = $(INSTALL_DATA)
transform = $(program_transform_name)
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
subdir = doc
DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
$(dist_man_MANS)
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \
$(top_srcdir)/m4/extensions.m4 \
$(top_srcdir)/m4/extern-inline.m4 \
$(top_srcdir)/m4/gnulib-common.m4 \
$(top_srcdir)/m4/gnulib-comp.m4 \
$(top_srcdir)/m4/include_next.m4 $(top_srcdir)/m4/intltool.m4 \
$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nproc.m4 \
$(top_srcdir)/m4/off_t.m4 $(top_srcdir)/m4/onceonly.m4 \
$(top_srcdir)/m4/physmem.m4 $(top_srcdir)/m4/ssize_t.m4 \
$(top_srcdir)/m4/stdbool.m4 $(top_srcdir)/m4/stddef_h.m4 \
$(top_srcdir)/m4/sys_types_h.m4 $(top_srcdir)/m4/unistd_h.m4 \
$(top_srcdir)/m4/warn-on-use.m4 $(top_srcdir)/m4/wchar_t.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
AM_V_P = $(am__v_P_@AM_V@)
am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
am__v_P_0 = false
am__v_P_1 = :
AM_V_GEN = $(am__v_GEN_@AM_V@)
am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
am__v_GEN_0 = @echo " GEN " $@;
am__v_GEN_1 =
AM_V_at = $(am__v_at_@AM_V@)
am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
am__v_at_0 = @
am__v_at_1 =
SOURCES =
DIST_SOURCES =
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
*) (install-info --version) >/dev/null 2>&1;; \
esac
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
am__vpath_adj = case $$p in \
$(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
*) f=$$p;; \
esac;
am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
am__install_max = 40
am__nobase_strip_setup = \
srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
am__nobase_strip = \
for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
am__nobase_list = $(am__nobase_strip_setup); \
for p in $$list; do echo "$$p $$p"; done | \
sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
$(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
if (++n[$$2] == $(am__install_max)) \
{ print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
END { for (dir in files) print dir, files[dir] }'
am__base_list = \
sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
am__uninstall_files_from_dir = { \
test -z "$$files" \
|| { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
|| { echo " ( cd '$$dir' && rm -f" $$files ")"; \
$(am__cd) "$$dir" && rm -f $$files; }; \
}
man6dir = $(mandir)/man6
am__installdirs = "$(DESTDIR)$(man6dir)"
NROFF = nroff
MANS = $(dist_man_MANS)
am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
ALL_LINGUAS = @ALL_LINGUAS@
AMTAR = @AMTAR@
AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
AR = @AR@
ARFLAGS = @ARFLAGS@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
CATALOGS = @CATALOGS@
CATOBJEXT = @CATOBJEXT@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CYGPATH_W = @CYGPATH_W@
DATADIRNAME = @DATADIRNAME@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
FGREP = @FGREP@
GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
GMOFILES = @GMOFILES@
GMSGFMT = @GMSGFMT@
GNULIB_CHDIR = @GNULIB_CHDIR@
GNULIB_CHOWN = @GNULIB_CHOWN@
GNULIB_CLOSE = @GNULIB_CLOSE@
GNULIB_DUP = @GNULIB_DUP@
GNULIB_DUP2 = @GNULIB_DUP2@
GNULIB_DUP3 = @GNULIB_DUP3@
GNULIB_ENVIRON = @GNULIB_ENVIRON@
GNULIB_EUIDACCESS = @GNULIB_EUIDACCESS@
GNULIB_FACCESSAT = @GNULIB_FACCESSAT@
GNULIB_FCHDIR = @GNULIB_FCHDIR@
GNULIB_FCHOWNAT = @GNULIB_FCHOWNAT@
GNULIB_FDATASYNC = @GNULIB_FDATASYNC@
GNULIB_FSYNC = @GNULIB_FSYNC@
GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@
GNULIB_GETCWD = @GNULIB_GETCWD@
GNULIB_GETDOMAINNAME = @GNULIB_GETDOMAINNAME@
GNULIB_GETDTABLESIZE = @GNULIB_GETDTABLESIZE@
GNULIB_GETGROUPS = @GNULIB_GETGROUPS@
GNULIB_GETHOSTNAME = @GNULIB_GETHOSTNAME@
GNULIB_GETLOGIN = @GNULIB_GETLOGIN@
GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@
GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@
GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@
GNULIB_GROUP_MEMBER = @GNULIB_GROUP_MEMBER@
GNULIB_ISATTY = @GNULIB_ISATTY@
GNULIB_LCHOWN = @GNULIB_LCHOWN@
GNULIB_LINK = @GNULIB_LINK@
GNULIB_LINKAT = @GNULIB_LINKAT@
GNULIB_LSEEK = @GNULIB_LSEEK@
GNULIB_PIPE = @GNULIB_PIPE@
GNULIB_PIPE2 = @GNULIB_PIPE2@
GNULIB_PREAD = @GNULIB_PREAD@
GNULIB_PWRITE = @GNULIB_PWRITE@
GNULIB_READ = @GNULIB_READ@
GNULIB_READLINK = @GNULIB_READLINK@
GNULIB_READLINKAT = @GNULIB_READLINKAT@
GNULIB_RMDIR = @GNULIB_RMDIR@
GNULIB_SETHOSTNAME = @GNULIB_SETHOSTNAME@
GNULIB_SLEEP = @GNULIB_SLEEP@
GNULIB_SYMLINK = @GNULIB_SYMLINK@
GNULIB_SYMLINKAT = @GNULIB_SYMLINKAT@
GNULIB_TTYNAME_R = @GNULIB_TTYNAME_R@
GNULIB_UNISTD_H_NONBLOCKING = @GNULIB_UNISTD_H_NONBLOCKING@
GNULIB_UNISTD_H_SIGPIPE = @GNULIB_UNISTD_H_SIGPIPE@
GNULIB_UNLINK = @GNULIB_UNLINK@
GNULIB_UNLINKAT = @GNULIB_UNLINKAT@
GNULIB_USLEEP = @GNULIB_USLEEP@
GNULIB_WRITE = @GNULIB_WRITE@
GREP = @GREP@
HAVE_CHOWN = @HAVE_CHOWN@
HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@
HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@
HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@
HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@
HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@
HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@
HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@
HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@
HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@
HAVE_DUP2 = @HAVE_DUP2@
HAVE_DUP3 = @HAVE_DUP3@
HAVE_EUIDACCESS = @HAVE_EUIDACCESS@
HAVE_FACCESSAT = @HAVE_FACCESSAT@
HAVE_FCHDIR = @HAVE_FCHDIR@
HAVE_FCHOWNAT = @HAVE_FCHOWNAT@
HAVE_FDATASYNC = @HAVE_FDATASYNC@
HAVE_FSYNC = @HAVE_FSYNC@
HAVE_FTRUNCATE = @HAVE_FTRUNCATE@
HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@
HAVE_GETGROUPS = @HAVE_GETGROUPS@
HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@
HAVE_GETLOGIN = @HAVE_GETLOGIN@
HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@
HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@
HAVE_LCHOWN = @HAVE_LCHOWN@
HAVE_LINK = @HAVE_LINK@
HAVE_LINKAT = @HAVE_LINKAT@
HAVE_OS_H = @HAVE_OS_H@
HAVE_PIPE = @HAVE_PIPE@
HAVE_PIPE2 = @HAVE_PIPE2@
HAVE_PREAD = @HAVE_PREAD@
HAVE_PWRITE = @HAVE_PWRITE@
HAVE_READLINK = @HAVE_READLINK@
HAVE_READLINKAT = @HAVE_READLINKAT@
HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@
HAVE_SLEEP = @HAVE_SLEEP@
HAVE_SYMLINK = @HAVE_SYMLINK@
HAVE_SYMLINKAT = @HAVE_SYMLINKAT@
HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@
HAVE_UNISTD_H = @HAVE_UNISTD_H@
HAVE_UNLINKAT = @HAVE_UNLINKAT@
HAVE_USLEEP = @HAVE_USLEEP@
HAVE_WCHAR_T = @HAVE_WCHAR_T@
HAVE__BOOL = @HAVE__BOOL@
INCLUDE_NEXT = @INCLUDE_NEXT@
INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
INSTOBJEXT = @INSTOBJEXT@
INTLLIBS = @INTLLIBS@
INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
INTLTOOL_MERGE = @INTLTOOL_MERGE@
INTLTOOL_PERL = @INTLTOOL_PERL@
INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@
INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@
INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@
INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
MAINT = @MAINT@
MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MKINSTALLDIRS = @MKINSTALLDIRS@
MSGFMT = @MSGFMT@
MSGFMT_OPTS = @MSGFMT_OPTS@
MSGMERGE = @MSGMERGE@
NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@
NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@
NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@
NEXT_STDDEF_H = @NEXT_STDDEF_H@
NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@
NEXT_UNISTD_H = @NEXT_UNISTD_H@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
OBJEXT = @OBJEXT@
OTOOL = @OTOOL@
OTOOL64 = @OTOOL64@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_CFLAGS = @PACKAGE_CFLAGS@
PACKAGE_LIBS = @PACKAGE_LIBS@
PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
POFILES = @POFILES@
POSUB = @POSUB@
PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
PRAGMA_COLUMNS = @PRAGMA_COLUMNS@
PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@
RANLIB = @RANLIB@
REPLACE_CHOWN = @REPLACE_CHOWN@
REPLACE_CLOSE = @REPLACE_CLOSE@
REPLACE_DUP = @REPLACE_DUP@
REPLACE_DUP2 = @REPLACE_DUP2@
REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@
REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@
REPLACE_GETCWD = @REPLACE_GETCWD@
REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@
REPLACE_GETGROUPS = @REPLACE_GETGROUPS@
REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@
REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@
REPLACE_ISATTY = @REPLACE_ISATTY@
REPLACE_LCHOWN = @REPLACE_LCHOWN@
REPLACE_LINK = @REPLACE_LINK@
REPLACE_LINKAT = @REPLACE_LINKAT@
REPLACE_LSEEK = @REPLACE_LSEEK@
REPLACE_NULL = @REPLACE_NULL@
REPLACE_PREAD = @REPLACE_PREAD@
REPLACE_PWRITE = @REPLACE_PWRITE@
REPLACE_READ = @REPLACE_READ@
REPLACE_READLINK = @REPLACE_READLINK@
REPLACE_RMDIR = @REPLACE_RMDIR@
REPLACE_SLEEP = @REPLACE_SLEEP@
REPLACE_SYMLINK = @REPLACE_SYMLINK@
REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@
REPLACE_UNLINK = @REPLACE_UNLINK@
REPLACE_UNLINKAT = @REPLACE_UNLINKAT@
REPLACE_USLEEP = @REPLACE_USLEEP@
REPLACE_WRITE = @REPLACE_WRITE@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STDBOOL_H = @STDBOOL_H@
STDDEF_H = @STDDEF_H@
STRIP = @STRIP@
UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@
UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@
USE_NLS = @USE_NLS@
VERSION = @VERSION@
WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@
XGETTEXT = @XGETTEXT@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
ac_ct_AR = @ac_ct_AR@
ac_ct_CC = @ac_ct_CC@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
builddir = @builddir@
datadir = @datadir@
datarootdir = @datarootdir@
docdir = @docdir@
dvidir = @dvidir@
exec_prefix = @exec_prefix@
gl_LIBOBJS = @gl_LIBOBJS@
gl_LTLIBOBJS = @gl_LTLIBOBJS@
gltests_LIBOBJS = @gltests_LIBOBJS@
gltests_LTLIBOBJS = @gltests_LTLIBOBJS@
gltests_WITNESS = @gltests_WITNESS@
host = @host@
host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
intltool__v_merge_options_ = @intltool__v_merge_options_@
intltool__v_merge_options_0 = @intltool__v_merge_options_0@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
dist_man_MANS = tenace.6
all: all-am
.SUFFIXES:
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
&& { if test -f $@; then exit 0; else break; fi; }; \
exit 1;; \
esac; \
done; \
echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign doc/Makefile'; \
$(am__cd) $(top_srcdir) && \
$(AUTOMAKE) --foreign doc/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
*) \
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
esac;
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):
mostlyclean-libtool:
-rm -f *.lo
clean-libtool:
-rm -rf .libs _libs
install-man6: $(dist_man_MANS)
@$(NORMAL_INSTALL)
@list1=''; \
list2='$(dist_man_MANS)'; \
test -n "$(man6dir)" \
&& test -n "`echo $$list1$$list2`" \
|| exit 0; \
echo " $(MKDIR_P) '$(DESTDIR)$(man6dir)'"; \
$(MKDIR_P) "$(DESTDIR)$(man6dir)" || exit 1; \
{ for i in $$list1; do echo "$$i"; done; \
if test -n "$$list2"; then \
for i in $$list2; do echo "$$i"; done \
| sed -n '/\.6[a-z]*$$/p'; \
fi; \
} | while read p; do \
if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
echo "$$d$$p"; echo "$$p"; \
done | \
sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^6][0-9a-z]*$$,6,;x' \
-e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
sed 'N;N;s,\n, ,g' | { \
list=; while read file base inst; do \
if test "$$base" = "$$inst"; then list="$$list $$file"; else \
echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man6dir)/$$inst'"; \
$(INSTALL_DATA) "$$file" "$(DESTDIR)$(man6dir)/$$inst" || exit $$?; \
fi; \
done; \
for i in $$list; do echo "$$i"; done | $(am__base_list) | \
while read files; do \
test -z "$$files" || { \
echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man6dir)'"; \
$(INSTALL_DATA) $$files "$(DESTDIR)$(man6dir)" || exit $$?; }; \
done; }
uninstall-man6:
@$(NORMAL_UNINSTALL)
@list=''; test -n "$(man6dir)" || exit 0; \
files=`{ for i in $$list; do echo "$$i"; done; \
l2='$(dist_man_MANS)'; for i in $$l2; do echo "$$i"; done | \
sed -n '/\.6[a-z]*$$/p'; \
} | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^6][0-9a-z]*$$,6,;x' \
-e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
dir='$(DESTDIR)$(man6dir)'; $(am__uninstall_files_from_dir)
tags TAGS:
ctags CTAGS:
cscope cscopelist:
distdir: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
list='$(DISTFILES)'; \
dist_files=`for file in $$list; do echo $$file; done | \
sed -e "s|^$$srcdirstrip/||;t" \
-e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
case $$dist_files in \
*/*) $(MKDIR_P) `echo "$$dist_files" | \
sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
sort -u` ;; \
esac; \
for file in $$dist_files; do \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
if test -d $$d/$$file; then \
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
if test -d "$(distdir)/$$file"; then \
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \
cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
else \
test -f "$(distdir)/$$file" \
|| cp -p $$d/$$file "$(distdir)/$$file" \
|| exit 1; \
fi; \
done
check-am: all-am
check: check-am
all-am: Makefile $(MANS)
installdirs:
for dir in "$(DESTDIR)$(man6dir)"; do \
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
done
install: install-am
install-exec: install-exec-am
install-data: install-data-am
uninstall: uninstall-am
install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
installcheck: installcheck-am
install-strip:
if test -z '$(STRIP)'; then \
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
install; \
else \
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
"INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
fi
mostlyclean-generic:
clean-generic:
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
clean: clean-am
clean-am: clean-generic clean-libtool mostlyclean-am
distclean: distclean-am
-rm -f Makefile
distclean-am: clean-am distclean-generic
dvi: dvi-am
dvi-am:
html: html-am
html-am:
info: info-am
info-am:
install-data-am: install-man
install-dvi: install-dvi-am
install-dvi-am:
install-exec-am:
install-html: install-html-am
install-html-am:
install-info: install-info-am
install-info-am:
install-man: install-man6
install-pdf: install-pdf-am
install-pdf-am:
install-ps: install-ps-am
install-ps-am:
installcheck-am:
maintainer-clean: maintainer-clean-am
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
mostlyclean: mostlyclean-am
mostlyclean-am: mostlyclean-generic mostlyclean-libtool
pdf: pdf-am
pdf-am:
ps: ps-am
ps-am:
uninstall-am: uninstall-man
uninstall-man: uninstall-man6
.MAKE: install-am install-strip
.PHONY: all all-am check check-am clean clean-generic clean-libtool \
cscopelist-am ctags-am distclean distclean-generic \
distclean-libtool distdir dvi dvi-am html html-am info info-am \
install install-am install-data install-data-am install-dvi \
install-dvi-am install-exec install-exec-am install-html \
install-html-am install-info install-info-am install-man \
install-man6 install-pdf install-pdf-am install-ps \
install-ps-am install-strip installcheck installcheck-am \
installdirs maintainer-clean maintainer-clean-generic \
mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
ps ps-am tags-am uninstall uninstall-am uninstall-man \
uninstall-man6
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:
tenace-0.13/m4/ 0000775 0004016 0004016 00000000000 12225341154 010212 5 0000000 0000000 tenace-0.13/m4/onceonly.m4 0000644 0004016 0004016 00000010627 12215417301 012223 0000000 0000000 # onceonly.m4 serial 9
dnl Copyright (C) 2002-2003, 2005-2006, 2008-2013 Free Software Foundation,
dnl Inc.
dnl
dnl This file is free software; you can redistribute it and/or modify
dnl it under the terms of the GNU General Public License as published by
dnl the Free Software Foundation; either version 3 of the License, or
dnl (at your option) any later version.
dnl
dnl This file is distributed in the hope that it will be useful,
dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
dnl GNU General Public License for more details.
dnl
dnl You should have received a copy of the GNU General Public License
dnl along with this file. If not, see .
dnl
dnl As a special exception to the GNU General Public License,
dnl this file may be distributed as part of a program
dnl that contains a configuration script generated by Autoconf, under
dnl the same distribution terms as the rest of that program.
dnl This file defines some "once only" variants of standard autoconf macros.
dnl AC_CHECK_HEADERS_ONCE like AC_CHECK_HEADERS
dnl AC_CHECK_FUNCS_ONCE like AC_CHECK_FUNCS
dnl AC_CHECK_DECLS_ONCE like AC_CHECK_DECLS
dnl AC_REQUIRE([AC_FUNC_STRCOLL]) like AC_FUNC_STRCOLL
dnl The advantage is that the check for each of the headers/functions/decls
dnl will be put only once into the 'configure' file. It keeps the size of
dnl the 'configure' file down, and avoids redundant output when 'configure'
dnl is run.
dnl The drawback is that the checks cannot be conditionalized. If you write
dnl if some_condition; then gl_CHECK_HEADERS(stdlib.h); fi
dnl inside an AC_DEFUNed function, the gl_CHECK_HEADERS macro call expands to
dnl empty, and the check will be inserted before the body of the AC_DEFUNed
dnl function.
dnl The original code implemented AC_CHECK_HEADERS_ONCE and AC_CHECK_FUNCS_ONCE
dnl in terms of AC_DEFUN and AC_REQUIRE. This implementation uses diversions to
dnl named sections DEFAULTS and INIT_PREPARE in order to check all requested
dnl headers at once, thus reducing the size of 'configure'. It is known to work
dnl with autoconf 2.57..2.62 at least . The size reduction is ca. 9%.
dnl Autoconf version 2.59 plus gnulib is required; this file is not needed
dnl with Autoconf 2.60 or greater. But note that autoconf's implementation of
dnl AC_CHECK_DECLS_ONCE expects a comma-separated list of symbols as first
dnl argument!
AC_PREREQ([2.59])
# AC_CHECK_HEADERS_ONCE(HEADER1 HEADER2 ...) is a once-only variant of
# AC_CHECK_HEADERS(HEADER1 HEADER2 ...).
AC_DEFUN([AC_CHECK_HEADERS_ONCE], [
:
m4_foreach_w([gl_HEADER_NAME], [$1], [
AC_DEFUN([gl_CHECK_HEADER_]m4_quote(m4_translit(gl_HEADER_NAME,
[./-], [___])), [
m4_divert_text([INIT_PREPARE],
[gl_header_list="$gl_header_list gl_HEADER_NAME"])
gl_HEADERS_EXPANSION
AH_TEMPLATE(AS_TR_CPP([HAVE_]m4_defn([gl_HEADER_NAME])),
[Define to 1 if you have the <]m4_defn([gl_HEADER_NAME])[> header file.])
])
AC_REQUIRE([gl_CHECK_HEADER_]m4_quote(m4_translit(gl_HEADER_NAME,
[./-], [___])))
])
])
m4_define([gl_HEADERS_EXPANSION], [
m4_divert_text([DEFAULTS], [gl_header_list=])
AC_CHECK_HEADERS([$gl_header_list])
m4_define([gl_HEADERS_EXPANSION], [])
])
# AC_CHECK_FUNCS_ONCE(FUNC1 FUNC2 ...) is a once-only variant of
# AC_CHECK_FUNCS(FUNC1 FUNC2 ...).
AC_DEFUN([AC_CHECK_FUNCS_ONCE], [
:
m4_foreach_w([gl_FUNC_NAME], [$1], [
AC_DEFUN([gl_CHECK_FUNC_]m4_defn([gl_FUNC_NAME]), [
m4_divert_text([INIT_PREPARE],
[gl_func_list="$gl_func_list gl_FUNC_NAME"])
gl_FUNCS_EXPANSION
AH_TEMPLATE(AS_TR_CPP([HAVE_]m4_defn([gl_FUNC_NAME])),
[Define to 1 if you have the ']m4_defn([gl_FUNC_NAME])[' function.])
])
AC_REQUIRE([gl_CHECK_FUNC_]m4_defn([gl_FUNC_NAME]))
])
])
m4_define([gl_FUNCS_EXPANSION], [
m4_divert_text([DEFAULTS], [gl_func_list=])
AC_CHECK_FUNCS([$gl_func_list])
m4_define([gl_FUNCS_EXPANSION], [])
])
# AC_CHECK_DECLS_ONCE(DECL1 DECL2 ...) is a once-only variant of
# AC_CHECK_DECLS(DECL1, DECL2, ...).
AC_DEFUN([AC_CHECK_DECLS_ONCE], [
:
m4_foreach_w([gl_DECL_NAME], [$1], [
AC_DEFUN([gl_CHECK_DECL_]m4_defn([gl_DECL_NAME]), [
AC_CHECK_DECLS(m4_defn([gl_DECL_NAME]))
])
AC_REQUIRE([gl_CHECK_DECL_]m4_defn([gl_DECL_NAME]))
])
])
tenace-0.13/m4/gnulib-tool.m4 0000644 0004016 0004016 00000002647 12215417300 012632 0000000 0000000 # gnulib-tool.m4 serial 2
dnl Copyright (C) 2004-2005, 2009-2013 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
dnl The following macros need not be invoked explicitly.
dnl Invoking them does nothing except to declare default arguments
dnl for "gnulib-tool --import".
dnl Usage: gl_LOCAL_DIR([DIR])
AC_DEFUN([gl_LOCAL_DIR], [])
dnl Usage: gl_MODULES([module1 module2 ...])
AC_DEFUN([gl_MODULES], [])
dnl Usage: gl_AVOID([module1 module2 ...])
AC_DEFUN([gl_AVOID], [])
dnl Usage: gl_SOURCE_BASE([DIR])
AC_DEFUN([gl_SOURCE_BASE], [])
dnl Usage: gl_M4_BASE([DIR])
AC_DEFUN([gl_M4_BASE], [])
dnl Usage: gl_PO_BASE([DIR])
AC_DEFUN([gl_PO_BASE], [])
dnl Usage: gl_DOC_BASE([DIR])
AC_DEFUN([gl_DOC_BASE], [])
dnl Usage: gl_TESTS_BASE([DIR])
AC_DEFUN([gl_TESTS_BASE], [])
dnl Usage: gl_WITH_TESTS
AC_DEFUN([gl_WITH_TESTS], [])
dnl Usage: gl_LIB([LIBNAME])
AC_DEFUN([gl_LIB], [])
dnl Usage: gl_LGPL or gl_LGPL([VERSION])
AC_DEFUN([gl_LGPL], [])
dnl Usage: gl_MAKEFILE_NAME([FILENAME])
AC_DEFUN([gl_MAKEFILE_NAME], [])
dnl Usage: gl_LIBTOOL
AC_DEFUN([gl_LIBTOOL], [])
dnl Usage: gl_MACRO_PREFIX([PREFIX])
AC_DEFUN([gl_MACRO_PREFIX], [])
dnl Usage: gl_PO_DOMAIN([DOMAIN])
AC_DEFUN([gl_PO_DOMAIN], [])
dnl Usage: gl_VC_FILES([BOOLEAN])
AC_DEFUN([gl_VC_FILES], [])
tenace-0.13/m4/ltoptions.m4 0000644 0004016 0004016 00000030073 12225337266 012441 0000000 0000000 # Helper functions for option handling. -*- Autoconf -*-
#
# Copyright (C) 2004, 2005, 2007, 2008, 2009 Free Software Foundation,
# Inc.
# Written by Gary V. Vaughan, 2004
#
# This file is free software; the Free Software Foundation gives
# unlimited permission to copy and/or distribute it, with or without
# modifications, as long as this notice is preserved.
# serial 7 ltoptions.m4
# This is to help aclocal find these macros, as it can't see m4_define.
AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])])
# _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME)
# ------------------------------------------
m4_define([_LT_MANGLE_OPTION],
[[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])])
# _LT_SET_OPTION(MACRO-NAME, OPTION-NAME)
# ---------------------------------------
# Set option OPTION-NAME for macro MACRO-NAME, and if there is a
# matching handler defined, dispatch to it. Other OPTION-NAMEs are
# saved as a flag.
m4_define([_LT_SET_OPTION],
[m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl
m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]),
_LT_MANGLE_DEFUN([$1], [$2]),
[m4_warning([Unknown $1 option `$2'])])[]dnl
])
# _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET])
# ------------------------------------------------------------
# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
m4_define([_LT_IF_OPTION],
[m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])])
# _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET)
# -------------------------------------------------------
# Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME
# are set.
m4_define([_LT_UNLESS_OPTIONS],
[m4_foreach([_LT_Option], m4_split(m4_normalize([$2])),
[m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option),
[m4_define([$0_found])])])[]dnl
m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3
])[]dnl
])
# _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST)
# ----------------------------------------
# OPTION-LIST is a space-separated list of Libtool options associated
# with MACRO-NAME. If any OPTION has a matching handler declared with
# LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about
# the unknown option and exit.
m4_defun([_LT_SET_OPTIONS],
[# Set options
m4_foreach([_LT_Option], m4_split(m4_normalize([$2])),
[_LT_SET_OPTION([$1], _LT_Option)])
m4_if([$1],[LT_INIT],[
dnl
dnl Simply set some default values (i.e off) if boolean options were not
dnl specified:
_LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no
])
_LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no
])
dnl
dnl If no reference was made to various pairs of opposing options, then
dnl we run the default mode handler for the pair. For example, if neither
dnl `shared' nor `disable-shared' was passed, we enable building of shared
dnl archives by default:
_LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED])
_LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC])
_LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC])
_LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install],
[_LT_ENABLE_FAST_INSTALL])
])
])# _LT_SET_OPTIONS
## --------------------------------- ##
## Macros to handle LT_INIT options. ##
## --------------------------------- ##
# _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME)
# -----------------------------------------
m4_define([_LT_MANGLE_DEFUN],
[[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])])
# LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE)
# -----------------------------------------------
m4_define([LT_OPTION_DEFINE],
[m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl
])# LT_OPTION_DEFINE
# dlopen
# ------
LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes
])
AU_DEFUN([AC_LIBTOOL_DLOPEN],
[_LT_SET_OPTION([LT_INIT], [dlopen])
AC_DIAGNOSE([obsolete],
[$0: Remove this warning and the call to _LT_SET_OPTION when you
put the `dlopen' option into LT_INIT's first parameter.])
])
dnl aclocal-1.4 backwards compatibility:
dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], [])
# win32-dll
# ---------
# Declare package support for building win32 dll's.
LT_OPTION_DEFINE([LT_INIT], [win32-dll],
[enable_win32_dll=yes
case $host in
*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*)
AC_CHECK_TOOL(AS, as, false)
AC_CHECK_TOOL(DLLTOOL, dlltool, false)
AC_CHECK_TOOL(OBJDUMP, objdump, false)
;;
esac
test -z "$AS" && AS=as
_LT_DECL([], [AS], [1], [Assembler program])dnl
test -z "$DLLTOOL" && DLLTOOL=dlltool
_LT_DECL([], [DLLTOOL], [1], [DLL creation program])dnl
test -z "$OBJDUMP" && OBJDUMP=objdump
_LT_DECL([], [OBJDUMP], [1], [Object dumper program])dnl
])# win32-dll
AU_DEFUN([AC_LIBTOOL_WIN32_DLL],
[AC_REQUIRE([AC_CANONICAL_HOST])dnl
_LT_SET_OPTION([LT_INIT], [win32-dll])
AC_DIAGNOSE([obsolete],
[$0: Remove this warning and the call to _LT_SET_OPTION when you
put the `win32-dll' option into LT_INIT's first parameter.])
])
dnl aclocal-1.4 backwards compatibility:
dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], [])
# _LT_ENABLE_SHARED([DEFAULT])
# ----------------------------
# implement the --enable-shared flag, and supports the `shared' and
# `disable-shared' LT_INIT options.
# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'.
m4_define([_LT_ENABLE_SHARED],
[m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl
AC_ARG_ENABLE([shared],
[AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@],
[build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])],
[p=${PACKAGE-default}
case $enableval in
yes) enable_shared=yes ;;
no) enable_shared=no ;;
*)
enable_shared=no
# Look at the argument we got. We use all the common list separators.
lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
for pkg in $enableval; do
IFS="$lt_save_ifs"
if test "X$pkg" = "X$p"; then
enable_shared=yes
fi
done
IFS="$lt_save_ifs"
;;
esac],
[enable_shared=]_LT_ENABLE_SHARED_DEFAULT)
_LT_DECL([build_libtool_libs], [enable_shared], [0],
[Whether or not to build shared libraries])
])# _LT_ENABLE_SHARED
LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])])
LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])])
# Old names:
AC_DEFUN([AC_ENABLE_SHARED],
[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared])
])
AC_DEFUN([AC_DISABLE_SHARED],
[_LT_SET_OPTION([LT_INIT], [disable-shared])
])
AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)])
AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)])
dnl aclocal-1.4 backwards compatibility:
dnl AC_DEFUN([AM_ENABLE_SHARED], [])
dnl AC_DEFUN([AM_DISABLE_SHARED], [])
# _LT_ENABLE_STATIC([DEFAULT])
# ----------------------------
# implement the --enable-static flag, and support the `static' and
# `disable-static' LT_INIT options.
# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'.
m4_define([_LT_ENABLE_STATIC],
[m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl
AC_ARG_ENABLE([static],
[AS_HELP_STRING([--enable-static@<:@=PKGS@:>@],
[build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])],
[p=${PACKAGE-default}
case $enableval in
yes) enable_static=yes ;;
no) enable_static=no ;;
*)
enable_static=no
# Look at the argument we got. We use all the common list separators.
lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
for pkg in $enableval; do
IFS="$lt_save_ifs"
if test "X$pkg" = "X$p"; then
enable_static=yes
fi
done
IFS="$lt_save_ifs"
;;
esac],
[enable_static=]_LT_ENABLE_STATIC_DEFAULT)
_LT_DECL([build_old_libs], [enable_static], [0],
[Whether or not to build static libraries])
])# _LT_ENABLE_STATIC
LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])])
LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])])
# Old names:
AC_DEFUN([AC_ENABLE_STATIC],
[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static])
])
AC_DEFUN([AC_DISABLE_STATIC],
[_LT_SET_OPTION([LT_INIT], [disable-static])
])
AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)])
AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)])
dnl aclocal-1.4 backwards compatibility:
dnl AC_DEFUN([AM_ENABLE_STATIC], [])
dnl AC_DEFUN([AM_DISABLE_STATIC], [])
# _LT_ENABLE_FAST_INSTALL([DEFAULT])
# ----------------------------------
# implement the --enable-fast-install flag, and support the `fast-install'
# and `disable-fast-install' LT_INIT options.
# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'.
m4_define([_LT_ENABLE_FAST_INSTALL],
[m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl
AC_ARG_ENABLE([fast-install],
[AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@],
[optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])],
[p=${PACKAGE-default}
case $enableval in
yes) enable_fast_install=yes ;;
no) enable_fast_install=no ;;
*)
enable_fast_install=no
# Look at the argument we got. We use all the common list separators.
lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
for pkg in $enableval; do
IFS="$lt_save_ifs"
if test "X$pkg" = "X$p"; then
enable_fast_install=yes
fi
done
IFS="$lt_save_ifs"
;;
esac],
[enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT)
_LT_DECL([fast_install], [enable_fast_install], [0],
[Whether or not to optimize for fast installation])dnl
])# _LT_ENABLE_FAST_INSTALL
LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])])
LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])])
# Old names:
AU_DEFUN([AC_ENABLE_FAST_INSTALL],
[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install])
AC_DIAGNOSE([obsolete],
[$0: Remove this warning and the call to _LT_SET_OPTION when you put
the `fast-install' option into LT_INIT's first parameter.])
])
AU_DEFUN([AC_DISABLE_FAST_INSTALL],
[_LT_SET_OPTION([LT_INIT], [disable-fast-install])
AC_DIAGNOSE([obsolete],
[$0: Remove this warning and the call to _LT_SET_OPTION when you put
the `disable-fast-install' option into LT_INIT's first parameter.])
])
dnl aclocal-1.4 backwards compatibility:
dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], [])
dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], [])
# _LT_WITH_PIC([MODE])
# --------------------
# implement the --with-pic flag, and support the `pic-only' and `no-pic'
# LT_INIT options.
# MODE is either `yes' or `no'. If omitted, it defaults to `both'.
m4_define([_LT_WITH_PIC],
[AC_ARG_WITH([pic],
[AS_HELP_STRING([--with-pic@<:@=PKGS@:>@],
[try to use only PIC/non-PIC objects @<:@default=use both@:>@])],
[lt_p=${PACKAGE-default}
case $withval in
yes|no) pic_mode=$withval ;;
*)
pic_mode=default
# Look at the argument we got. We use all the common list separators.
lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
for lt_pkg in $withval; do
IFS="$lt_save_ifs"
if test "X$lt_pkg" = "X$lt_p"; then
pic_mode=yes
fi
done
IFS="$lt_save_ifs"
;;
esac],
[pic_mode=default])
test -z "$pic_mode" && pic_mode=m4_default([$1], [default])
_LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl
])# _LT_WITH_PIC
LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])])
LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])])
# Old name:
AU_DEFUN([AC_LIBTOOL_PICMODE],
[_LT_SET_OPTION([LT_INIT], [pic-only])
AC_DIAGNOSE([obsolete],
[$0: Remove this warning and the call to _LT_SET_OPTION when you
put the `pic-only' option into LT_INIT's first parameter.])
])
dnl aclocal-1.4 backwards compatibility:
dnl AC_DEFUN([AC_LIBTOOL_PICMODE], [])
## ----------------- ##
## LTDL_INIT Options ##
## ----------------- ##
m4_define([_LTDL_MODE], [])
LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive],
[m4_define([_LTDL_MODE], [nonrecursive])])
LT_OPTION_DEFINE([LTDL_INIT], [recursive],
[m4_define([_LTDL_MODE], [recursive])])
LT_OPTION_DEFINE([LTDL_INIT], [subproject],
[m4_define([_LTDL_MODE], [subproject])])
m4_define([_LTDL_TYPE], [])
LT_OPTION_DEFINE([LTDL_INIT], [installable],
[m4_define([_LTDL_TYPE], [installable])])
LT_OPTION_DEFINE([LTDL_INIT], [convenience],
[m4_define([_LTDL_TYPE], [convenience])])
tenace-0.13/m4/extern-inline.m4 0000644 0004016 0004016 00000005711 12215417300 013153 0000000 0000000 dnl 'extern inline' a la ISO C99.
dnl Copyright 2012-2013 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
AC_DEFUN([gl_EXTERN_INLINE],
[
AH_VERBATIM([extern_inline],
[/* _GL_INLINE is a portable alternative to ISO C99 plain 'inline'.
_GL_EXTERN_INLINE is a portable alternative to 'extern inline'.
_GL_INLINE_HEADER_BEGIN contains useful stuff to put
in an include file, before uses of _GL_INLINE.
It suppresses GCC's bogus "no previous prototype for 'FOO'" diagnostic,
when FOO is an inline function in the header; see
.
_GL_INLINE_HEADER_END contains useful stuff to put
in the same include file, after uses of _GL_INLINE.
Suppress extern inline with HP-UX cc, as it appears to be broken; see
.
Suppress extern inline with Sun C in standards-conformance mode, as it
mishandles inline functions that call each other. E.g., for 'inline void f
(void) { } inline void g (void) { f (); }', c99 incorrectly complains
'reference to static identifier "f" in extern inline function'.
This bug was observed with Sun C 5.12 SunOS_i386 2011/11/16.
Suppress the use of extern inline on Apple's platforms, as Libc at least
through Libc-825.26 (2013-04-09) is incompatible with it; see, e.g.,
.
Perhaps Apple will fix this some day. */
#if ((__GNUC__ \
? defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__ \
: (199901L <= __STDC_VERSION__ \
&& !defined __HP_cc \
&& !(defined __SUNPRO_C && __STDC__))) \
&& !defined __APPLE__)
# define _GL_INLINE inline
# define _GL_EXTERN_INLINE extern inline
#elif 2 < __GNUC__ + (7 <= __GNUC_MINOR__) && !defined __APPLE__
# if __GNUC_GNU_INLINE__
/* __gnu_inline__ suppresses a GCC 4.2 diagnostic. */
# define _GL_INLINE extern inline __attribute__ ((__gnu_inline__))
# else
# define _GL_INLINE extern inline
# endif
# define _GL_EXTERN_INLINE extern
#else
# define _GL_INLINE static _GL_UNUSED
# define _GL_EXTERN_INLINE static _GL_UNUSED
#endif
#if 4 < __GNUC__ + (6 <= __GNUC_MINOR__)
# if defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__
# define _GL_INLINE_HEADER_CONST_PRAGMA
# else
# define _GL_INLINE_HEADER_CONST_PRAGMA \
_Pragma ("GCC diagnostic ignored \"-Wsuggest-attribute=const\"")
# endif
# define _GL_INLINE_HEADER_BEGIN \
_Pragma ("GCC diagnostic push") \
_Pragma ("GCC diagnostic ignored \"-Wmissing-prototypes\"") \
_Pragma ("GCC diagnostic ignored \"-Wmissing-declarations\"") \
_GL_INLINE_HEADER_CONST_PRAGMA
# define _GL_INLINE_HEADER_END \
_Pragma ("GCC diagnostic pop")
#else
# define _GL_INLINE_HEADER_BEGIN
# define _GL_INLINE_HEADER_END
#endif])
])
tenace-0.13/m4/wchar_t.m4 0000644 0004016 0004016 00000001462 12215417301 012021 0000000 0000000 # wchar_t.m4 serial 4 (gettext-0.18.2)
dnl Copyright (C) 2002-2003, 2008-2013 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
dnl From Bruno Haible.
dnl Test whether has the 'wchar_t' type.
dnl Prerequisite: AC_PROG_CC
AC_DEFUN([gt_TYPE_WCHAR_T],
[
AC_CACHE_CHECK([for wchar_t], [gt_cv_c_wchar_t],
[AC_COMPILE_IFELSE(
[AC_LANG_PROGRAM(
[[#include
wchar_t foo = (wchar_t)'\0';]],
[[]])],
[gt_cv_c_wchar_t=yes],
[gt_cv_c_wchar_t=no])])
if test $gt_cv_c_wchar_t = yes; then
AC_DEFINE([HAVE_WCHAR_T], [1], [Define if you have the 'wchar_t' type.])
fi
])
tenace-0.13/m4/stddef_h.m4 0000644 0004016 0004016 00000002755 12215417301 012160 0000000 0000000 dnl A placeholder for POSIX 2008 , for platforms that have issues.
# stddef_h.m4 serial 4
dnl Copyright (C) 2009-2013 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
AC_DEFUN([gl_STDDEF_H],
[
AC_REQUIRE([gl_STDDEF_H_DEFAULTS])
AC_REQUIRE([gt_TYPE_WCHAR_T])
STDDEF_H=
if test $gt_cv_c_wchar_t = no; then
HAVE_WCHAR_T=0
STDDEF_H=stddef.h
fi
AC_CACHE_CHECK([whether NULL can be used in arbitrary expressions],
[gl_cv_decl_null_works],
[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include
int test[2 * (sizeof NULL == sizeof (void *)) -1];
]])],
[gl_cv_decl_null_works=yes],
[gl_cv_decl_null_works=no])])
if test $gl_cv_decl_null_works = no; then
REPLACE_NULL=1
STDDEF_H=stddef.h
fi
AC_SUBST([STDDEF_H])
AM_CONDITIONAL([GL_GENERATE_STDDEF_H], [test -n "$STDDEF_H"])
if test -n "$STDDEF_H"; then
gl_NEXT_HEADERS([stddef.h])
fi
])
AC_DEFUN([gl_STDDEF_MODULE_INDICATOR],
[
dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
AC_REQUIRE([gl_STDDEF_H_DEFAULTS])
gl_MODULE_INDICATOR_SET_VARIABLE([$1])
])
AC_DEFUN([gl_STDDEF_H_DEFAULTS],
[
dnl Assume proper GNU behavior unless another module says otherwise.
REPLACE_NULL=0; AC_SUBST([REPLACE_NULL])
HAVE_WCHAR_T=1; AC_SUBST([HAVE_WCHAR_T])
])
tenace-0.13/m4/ltversion.m4 0000644 0004016 0004016 00000001262 12225337267 012432 0000000 0000000 # ltversion.m4 -- version numbers -*- Autoconf -*-
#
# Copyright (C) 2004 Free Software Foundation, Inc.
# Written by Scott James Remnant, 2004
#
# This file is free software; the Free Software Foundation gives
# unlimited permission to copy and/or distribute it, with or without
# modifications, as long as this notice is preserved.
# @configure_input@
# serial 3337 ltversion.m4
# This file is part of GNU Libtool
m4_define([LT_PACKAGE_VERSION], [2.4.2])
m4_define([LT_PACKAGE_REVISION], [1.3337])
AC_DEFUN([LTVERSION_VERSION],
[macro_version='2.4.2'
macro_revision='1.3337'
_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?])
_LT_DECL(, macro_revision, 0)
])
tenace-0.13/m4/libtool.m4 0000644 0004016 0004016 00001060007 12225337266 012053 0000000 0000000 # libtool.m4 - Configure libtool for the host system. -*-Autoconf-*-
#
# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
# 2006, 2007, 2008, 2009, 2010, 2011 Free Software
# Foundation, Inc.
# Written by Gordon Matzigkeit, 1996
#
# This file is free software; the Free Software Foundation gives
# unlimited permission to copy and/or distribute it, with or without
# modifications, as long as this notice is preserved.
m4_define([_LT_COPYING], [dnl
# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
# 2006, 2007, 2008, 2009, 2010, 2011 Free Software
# Foundation, Inc.
# Written by Gordon Matzigkeit, 1996
#
# This file is part of GNU Libtool.
#
# GNU Libtool is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License as
# published by the Free Software Foundation; either version 2 of
# the License, or (at your option) any later version.
#
# As a special exception to the GNU General Public License,
# if you distribute this file as part of a program or library that
# is built using GNU Libtool, you may include this file under the
# same distribution terms that you use for the rest of that program.
#
# GNU Libtool 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 General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with GNU Libtool; see the file COPYING. If not, a copy
# can be downloaded from http://www.gnu.org/licenses/gpl.html, or
# obtained by writing to the Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
])
# serial 57 LT_INIT
# LT_PREREQ(VERSION)
# ------------------
# Complain and exit if this libtool version is less that VERSION.
m4_defun([LT_PREREQ],
[m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1,
[m4_default([$3],
[m4_fatal([Libtool version $1 or higher is required],
63)])],
[$2])])
# _LT_CHECK_BUILDDIR
# ------------------
# Complain if the absolute build directory name contains unusual characters
m4_defun([_LT_CHECK_BUILDDIR],
[case `pwd` in
*\ * | *\ *)
AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;;
esac
])
# LT_INIT([OPTIONS])
# ------------------
AC_DEFUN([LT_INIT],
[AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT
AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl
AC_BEFORE([$0], [LT_LANG])dnl
AC_BEFORE([$0], [LT_OUTPUT])dnl
AC_BEFORE([$0], [LTDL_INIT])dnl
m4_require([_LT_CHECK_BUILDDIR])dnl
dnl Autoconf doesn't catch unexpanded LT_ macros by default:
m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl
m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl
dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4
dnl unless we require an AC_DEFUNed macro:
AC_REQUIRE([LTOPTIONS_VERSION])dnl
AC_REQUIRE([LTSUGAR_VERSION])dnl
AC_REQUIRE([LTVERSION_VERSION])dnl
AC_REQUIRE([LTOBSOLETE_VERSION])dnl
m4_require([_LT_PROG_LTMAIN])dnl
_LT_SHELL_INIT([SHELL=${CONFIG_SHELL-/bin/sh}])
dnl Parse OPTIONS
_LT_SET_OPTIONS([$0], [$1])
# This can be used to rebuild libtool when needed
LIBTOOL_DEPS="$ltmain"
# Always use our own libtool.
LIBTOOL='$(SHELL) $(top_builddir)/libtool'
AC_SUBST(LIBTOOL)dnl
_LT_SETUP
# Only expand once:
m4_define([LT_INIT])
])# LT_INIT
# Old names:
AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT])
AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT])
dnl aclocal-1.4 backwards compatibility:
dnl AC_DEFUN([AC_PROG_LIBTOOL], [])
dnl AC_DEFUN([AM_PROG_LIBTOOL], [])
# _LT_CC_BASENAME(CC)
# -------------------
# Calculate cc_basename. Skip known compiler wrappers and cross-prefix.
m4_defun([_LT_CC_BASENAME],
[for cc_temp in $1""; do
case $cc_temp in
compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;;
distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;;
\-*) ;;
*) break;;
esac
done
cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"`
])
# _LT_FILEUTILS_DEFAULTS
# ----------------------
# It is okay to use these file commands and assume they have been set
# sensibly after `m4_require([_LT_FILEUTILS_DEFAULTS])'.
m4_defun([_LT_FILEUTILS_DEFAULTS],
[: ${CP="cp -f"}
: ${MV="mv -f"}
: ${RM="rm -f"}
])# _LT_FILEUTILS_DEFAULTS
# _LT_SETUP
# ---------
m4_defun([_LT_SETUP],
[AC_REQUIRE([AC_CANONICAL_HOST])dnl
AC_REQUIRE([AC_CANONICAL_BUILD])dnl
AC_REQUIRE([_LT_PREPARE_SED_QUOTE_VARS])dnl
AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl
_LT_DECL([], [PATH_SEPARATOR], [1], [The PATH separator for the build system])dnl
dnl
_LT_DECL([], [host_alias], [0], [The host system])dnl
_LT_DECL([], [host], [0])dnl
_LT_DECL([], [host_os], [0])dnl
dnl
_LT_DECL([], [build_alias], [0], [The build system])dnl
_LT_DECL([], [build], [0])dnl
_LT_DECL([], [build_os], [0])dnl
dnl
AC_REQUIRE([AC_PROG_CC])dnl
AC_REQUIRE([LT_PATH_LD])dnl
AC_REQUIRE([LT_PATH_NM])dnl
dnl
AC_REQUIRE([AC_PROG_LN_S])dnl
test -z "$LN_S" && LN_S="ln -s"
_LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl
dnl
AC_REQUIRE([LT_CMD_MAX_LEN])dnl
_LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl
_LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl
dnl
m4_require([_LT_FILEUTILS_DEFAULTS])dnl
m4_require([_LT_CHECK_SHELL_FEATURES])dnl
m4_require([_LT_PATH_CONVERSION_FUNCTIONS])dnl
m4_require([_LT_CMD_RELOAD])dnl
m4_require([_LT_CHECK_MAGIC_METHOD])dnl
m4_require([_LT_CHECK_SHAREDLIB_FROM_LINKLIB])dnl
m4_require([_LT_CMD_OLD_ARCHIVE])dnl
m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl
m4_require([_LT_WITH_SYSROOT])dnl
_LT_CONFIG_LIBTOOL_INIT([
# See if we are running on zsh, and set the options which allow our
# commands through without removal of \ escapes INIT.
if test -n "\${ZSH_VERSION+set}" ; then
setopt NO_GLOB_SUBST
fi
])
if test -n "${ZSH_VERSION+set}" ; then
setopt NO_GLOB_SUBST
fi
_LT_CHECK_OBJDIR
m4_require([_LT_TAG_COMPILER])dnl
case $host_os in
aix3*)
# AIX sometimes has problems with the GCC collect2 program. For some
# reason, if we set the COLLECT_NAMES environment variable, the problems
# vanish in a puff of smoke.
if test "X${COLLECT_NAMES+set}" != Xset; then
COLLECT_NAMES=
export COLLECT_NAMES
fi
;;
esac
# Global variables:
ofile=libtool
can_build_shared=yes
# All known linkers require a `.a' archive for static linking (except MSVC,
# which needs '.lib').
libext=a
with_gnu_ld="$lt_cv_prog_gnu_ld"
old_CC="$CC"
old_CFLAGS="$CFLAGS"
# Set sane defaults for various variables
test -z "$CC" && CC=cc
test -z "$LTCC" && LTCC=$CC
test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS
test -z "$LD" && LD=ld
test -z "$ac_objext" && ac_objext=o
_LT_CC_BASENAME([$compiler])
# Only perform the check for file, if the check method requires it
test -z "$MAGIC_CMD" && MAGIC_CMD=file
case $deplibs_check_method in
file_magic*)
if test "$file_magic_cmd" = '$MAGIC_CMD'; then
_LT_PATH_MAGIC
fi
;;
esac
# Use C for the default configuration in the libtool script
LT_SUPPORTED_TAG([CC])
_LT_LANG_C_CONFIG
_LT_LANG_DEFAULT_CONFIG
_LT_CONFIG_COMMANDS
])# _LT_SETUP
# _LT_PREPARE_SED_QUOTE_VARS
# --------------------------
# Define a few sed substitution that help us do robust quoting.
m4_defun([_LT_PREPARE_SED_QUOTE_VARS],
[# Backslashify metacharacters that are still active within
# double-quoted strings.
sed_quote_subst='s/\([["`$\\]]\)/\\\1/g'
# Same as above, but do not quote variable references.
double_quote_subst='s/\([["`\\]]\)/\\\1/g'
# Sed substitution to delay expansion of an escaped shell variable in a
# double_quote_subst'ed string.
delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
# Sed substitution to delay expansion of an escaped single quote.
delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g'
# Sed substitution to avoid accidental globbing in evaled expressions
no_glob_subst='s/\*/\\\*/g'
])
# _LT_PROG_LTMAIN
# ---------------
# Note that this code is called both from `configure', and `config.status'
# now that we use AC_CONFIG_COMMANDS to generate libtool. Notably,
# `config.status' has no value for ac_aux_dir unless we are using Automake,
# so we pass a copy along to make sure it has a sensible value anyway.
m4_defun([_LT_PROG_LTMAIN],
[m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl
_LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir'])
ltmain="$ac_aux_dir/ltmain.sh"
])# _LT_PROG_LTMAIN
## ------------------------------------- ##
## Accumulate code for creating libtool. ##
## ------------------------------------- ##
# So that we can recreate a full libtool script including additional
# tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS
# in macros and then make a single call at the end using the `libtool'
# label.
# _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS])
# ----------------------------------------
# Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later.
m4_define([_LT_CONFIG_LIBTOOL_INIT],
[m4_ifval([$1],
[m4_append([_LT_OUTPUT_LIBTOOL_INIT],
[$1
])])])
# Initialize.
m4_define([_LT_OUTPUT_LIBTOOL_INIT])
# _LT_CONFIG_LIBTOOL([COMMANDS])
# ------------------------------
# Register COMMANDS to be passed to AC_CONFIG_COMMANDS later.
m4_define([_LT_CONFIG_LIBTOOL],
[m4_ifval([$1],
[m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS],
[$1
])])])
# Initialize.
m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS])
# _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS])
# -----------------------------------------------------
m4_defun([_LT_CONFIG_SAVE_COMMANDS],
[_LT_CONFIG_LIBTOOL([$1])
_LT_CONFIG_LIBTOOL_INIT([$2])
])
# _LT_FORMAT_COMMENT([COMMENT])
# -----------------------------
# Add leading comment marks to the start of each line, and a trailing
# full-stop to the whole comment if one is not present already.
m4_define([_LT_FORMAT_COMMENT],
[m4_ifval([$1], [
m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])],
[['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.])
)])
## ------------------------ ##
## FIXME: Eliminate VARNAME ##
## ------------------------ ##
# _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?])
# -------------------------------------------------------------------
# CONFIGNAME is the name given to the value in the libtool script.
# VARNAME is the (base) name used in the configure script.
# VALUE may be 0, 1 or 2 for a computed quote escaped value based on
# VARNAME. Any other value will be used directly.
m4_define([_LT_DECL],
[lt_if_append_uniq([lt_decl_varnames], [$2], [, ],
[lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name],
[m4_ifval([$1], [$1], [$2])])
lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3])
m4_ifval([$4],
[lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])])
lt_dict_add_subkey([lt_decl_dict], [$2],
[tagged?], [m4_ifval([$5], [yes], [no])])])
])
# _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION])
# --------------------------------------------------------
m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])])
# lt_decl_tag_varnames([SEPARATOR], [VARNAME1...])
# ------------------------------------------------
m4_define([lt_decl_tag_varnames],
[_lt_decl_filter([tagged?], [yes], $@)])
# _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..])
# ---------------------------------------------------------
m4_define([_lt_decl_filter],
[m4_case([$#],
[0], [m4_fatal([$0: too few arguments: $#])],
[1], [m4_fatal([$0: too few arguments: $#: $1])],
[2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)],
[3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)],
[lt_dict_filter([lt_decl_dict], $@)])[]dnl
])
# lt_decl_quote_varnames([SEPARATOR], [VARNAME1...])
# --------------------------------------------------
m4_define([lt_decl_quote_varnames],
[_lt_decl_filter([value], [1], $@)])
# lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...])
# ---------------------------------------------------
m4_define([lt_decl_dquote_varnames],
[_lt_decl_filter([value], [2], $@)])
# lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...])
# ---------------------------------------------------
m4_define([lt_decl_varnames_tagged],
[m4_assert([$# <= 2])dnl
_$0(m4_quote(m4_default([$1], [[, ]])),
m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]),
m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))])
m4_define([_lt_decl_varnames_tagged],
[m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])])
# lt_decl_all_varnames([SEPARATOR], [VARNAME1...])
# ------------------------------------------------
m4_define([lt_decl_all_varnames],
[_$0(m4_quote(m4_default([$1], [[, ]])),
m4_if([$2], [],
m4_quote(lt_decl_varnames),
m4_quote(m4_shift($@))))[]dnl
])
m4_define([_lt_decl_all_varnames],
[lt_join($@, lt_decl_varnames_tagged([$1],
lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl
])
# _LT_CONFIG_STATUS_DECLARE([VARNAME])
# ------------------------------------
# Quote a variable value, and forward it to `config.status' so that its
# declaration there will have the same value as in `configure'. VARNAME
# must have a single quote delimited value for this to work.
m4_define([_LT_CONFIG_STATUS_DECLARE],
[$1='`$ECHO "$][$1" | $SED "$delay_single_quote_subst"`'])
# _LT_CONFIG_STATUS_DECLARATIONS
# ------------------------------
# We delimit libtool config variables with single quotes, so when
# we write them to config.status, we have to be sure to quote all
# embedded single quotes properly. In configure, this macro expands
# each variable declared with _LT_DECL (and _LT_TAGDECL) into:
#
# ='`$ECHO "$" | $SED "$delay_single_quote_subst"`'
m4_defun([_LT_CONFIG_STATUS_DECLARATIONS],
[m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames),
[m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])])
# _LT_LIBTOOL_TAGS
# ----------------
# Output comment and list of tags supported by the script
m4_defun([_LT_LIBTOOL_TAGS],
[_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl
available_tags="_LT_TAGS"dnl
])
# _LT_LIBTOOL_DECLARE(VARNAME, [TAG])
# -----------------------------------
# Extract the dictionary values for VARNAME (optionally with TAG) and
# expand to a commented shell variable setting:
#
# # Some comment about what VAR is for.
# visible_name=$lt_internal_name
m4_define([_LT_LIBTOOL_DECLARE],
[_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1],
[description])))[]dnl
m4_pushdef([_libtool_name],
m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl
m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])),
[0], [_libtool_name=[$]$1],
[1], [_libtool_name=$lt_[]$1],
[2], [_libtool_name=$lt_[]$1],
[_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl
m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl
])
# _LT_LIBTOOL_CONFIG_VARS
# -----------------------
# Produce commented declarations of non-tagged libtool config variables
# suitable for insertion in the LIBTOOL CONFIG section of the `libtool'
# script. Tagged libtool config variables (even for the LIBTOOL CONFIG
# section) are produced by _LT_LIBTOOL_TAG_VARS.
m4_defun([_LT_LIBTOOL_CONFIG_VARS],
[m4_foreach([_lt_var],
m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)),
[m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])])
# _LT_LIBTOOL_TAG_VARS(TAG)
# -------------------------
m4_define([_LT_LIBTOOL_TAG_VARS],
[m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames),
[m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])])
# _LT_TAGVAR(VARNAME, [TAGNAME])
# ------------------------------
m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])])
# _LT_CONFIG_COMMANDS
# -------------------
# Send accumulated output to $CONFIG_STATUS. Thanks to the lists of
# variables for single and double quote escaping we saved from calls
# to _LT_DECL, we can put quote escaped variables declarations
# into `config.status', and then the shell code to quote escape them in
# for loops in `config.status'. Finally, any additional code accumulated
# from calls to _LT_CONFIG_LIBTOOL_INIT is expanded.
m4_defun([_LT_CONFIG_COMMANDS],
[AC_PROVIDE_IFELSE([LT_OUTPUT],
dnl If the libtool generation code has been placed in $CONFIG_LT,
dnl instead of duplicating it all over again into config.status,
dnl then we will have config.status run $CONFIG_LT later, so it
dnl needs to know what name is stored there:
[AC_CONFIG_COMMANDS([libtool],
[$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])],
dnl If the libtool generation code is destined for config.status,
dnl expand the accumulated commands and init code now:
[AC_CONFIG_COMMANDS([libtool],
[_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])])
])#_LT_CONFIG_COMMANDS
# Initialize.
m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT],
[
# The HP-UX ksh and POSIX shell print the target directory to stdout
# if CDPATH is set.
(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
sed_quote_subst='$sed_quote_subst'
double_quote_subst='$double_quote_subst'
delay_variable_subst='$delay_variable_subst'
_LT_CONFIG_STATUS_DECLARATIONS
LTCC='$LTCC'
LTCFLAGS='$LTCFLAGS'
compiler='$compiler_DEFAULT'
# A function that is used when there is no print builtin or printf.
func_fallback_echo ()
{
eval 'cat <<_LTECHO_EOF
\$[]1
_LTECHO_EOF'
}
# Quote evaled strings.
for var in lt_decl_all_varnames([[ \
]], lt_decl_quote_varnames); do
case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
*[[\\\\\\\`\\"\\\$]]*)
eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\""
;;
*)
eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
;;
esac
done
# Double-quote double-evaled strings.
for var in lt_decl_all_varnames([[ \
]], lt_decl_dquote_varnames); do
case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
*[[\\\\\\\`\\"\\\$]]*)
eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\""
;;
*)
eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
;;
esac
done
_LT_OUTPUT_LIBTOOL_INIT
])
# _LT_GENERATED_FILE_INIT(FILE, [COMMENT])
# ------------------------------------
# Generate a child script FILE with all initialization necessary to
# reuse the environment learned by the parent script, and make the
# file executable. If COMMENT is supplied, it is inserted after the
# `#!' sequence but before initialization text begins. After this
# macro, additional text can be appended to FILE to form the body of
# the child script. The macro ends with non-zero status if the
# file could not be fully written (such as if the disk is full).
m4_ifdef([AS_INIT_GENERATED],
[m4_defun([_LT_GENERATED_FILE_INIT],[AS_INIT_GENERATED($@)])],
[m4_defun([_LT_GENERATED_FILE_INIT],
[m4_require([AS_PREPARE])]dnl
[m4_pushdef([AS_MESSAGE_LOG_FD])]dnl
[lt_write_fail=0
cat >$1 <<_ASEOF || lt_write_fail=1
#! $SHELL
# Generated by $as_me.
$2
SHELL=\${CONFIG_SHELL-$SHELL}
export SHELL
_ASEOF
cat >>$1 <<\_ASEOF || lt_write_fail=1
AS_SHELL_SANITIZE
_AS_PREPARE
exec AS_MESSAGE_FD>&1
_ASEOF
test $lt_write_fail = 0 && chmod +x $1[]dnl
m4_popdef([AS_MESSAGE_LOG_FD])])])# _LT_GENERATED_FILE_INIT
# LT_OUTPUT
# ---------
# This macro allows early generation of the libtool script (before
# AC_OUTPUT is called), incase it is used in configure for compilation
# tests.
AC_DEFUN([LT_OUTPUT],
[: ${CONFIG_LT=./config.lt}
AC_MSG_NOTICE([creating $CONFIG_LT])
_LT_GENERATED_FILE_INIT(["$CONFIG_LT"],
[# Run this file to recreate a libtool stub with the current configuration.])
cat >>"$CONFIG_LT" <<\_LTEOF
lt_cl_silent=false
exec AS_MESSAGE_LOG_FD>>config.log
{
echo
AS_BOX([Running $as_me.])
} >&AS_MESSAGE_LOG_FD
lt_cl_help="\
\`$as_me' creates a local libtool stub from the current configuration,
for use in further configure time tests before the real libtool is
generated.
Usage: $[0] [[OPTIONS]]
-h, --help print this help, then exit
-V, --version print version number, then exit
-q, --quiet do not print progress messages
-d, --debug don't remove temporary files
Report bugs to ."
lt_cl_version="\
m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl
m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION])
configured by $[0], generated by m4_PACKAGE_STRING.
Copyright (C) 2011 Free Software Foundation, Inc.
This config.lt script is free software; the Free Software Foundation
gives unlimited permision to copy, distribute and modify it."
while test $[#] != 0
do
case $[1] in
--version | --v* | -V )
echo "$lt_cl_version"; exit 0 ;;
--help | --h* | -h )
echo "$lt_cl_help"; exit 0 ;;
--debug | --d* | -d )
debug=: ;;
--quiet | --q* | --silent | --s* | -q )
lt_cl_silent=: ;;
-*) AC_MSG_ERROR([unrecognized option: $[1]
Try \`$[0] --help' for more information.]) ;;
*) AC_MSG_ERROR([unrecognized argument: $[1]
Try \`$[0] --help' for more information.]) ;;
esac
shift
done
if $lt_cl_silent; then
exec AS_MESSAGE_FD>/dev/null
fi
_LTEOF
cat >>"$CONFIG_LT" <<_LTEOF
_LT_OUTPUT_LIBTOOL_COMMANDS_INIT
_LTEOF
cat >>"$CONFIG_LT" <<\_LTEOF
AC_MSG_NOTICE([creating $ofile])
_LT_OUTPUT_LIBTOOL_COMMANDS
AS_EXIT(0)
_LTEOF
chmod +x "$CONFIG_LT"
# configure is writing to config.log, but config.lt does its own redirection,
# appending to config.log, which fails on DOS, as config.log is still kept
# open by configure. Here we exec the FD to /dev/null, effectively closing
# config.log, so it can be properly (re)opened and appended to by config.lt.
lt_cl_success=:
test "$silent" = yes &&
lt_config_lt_args="$lt_config_lt_args --quiet"
exec AS_MESSAGE_LOG_FD>/dev/null
$SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false
exec AS_MESSAGE_LOG_FD>>config.log
$lt_cl_success || AS_EXIT(1)
])# LT_OUTPUT
# _LT_CONFIG(TAG)
# ---------------
# If TAG is the built-in tag, create an initial libtool script with a
# default configuration from the untagged config vars. Otherwise add code
# to config.status for appending the configuration named by TAG from the
# matching tagged config vars.
m4_defun([_LT_CONFIG],
[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
_LT_CONFIG_SAVE_COMMANDS([
m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl
m4_if(_LT_TAG, [C], [
# See if we are running on zsh, and set the options which allow our
# commands through without removal of \ escapes.
if test -n "${ZSH_VERSION+set}" ; then
setopt NO_GLOB_SUBST
fi
cfgfile="${ofile}T"
trap "$RM \"$cfgfile\"; exit 1" 1 2 15
$RM "$cfgfile"
cat <<_LT_EOF >> "$cfgfile"
#! $SHELL
# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION
# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
# NOTE: Changes made to this file will be lost: look at ltmain.sh.
#
_LT_COPYING
_LT_LIBTOOL_TAGS
# ### BEGIN LIBTOOL CONFIG
_LT_LIBTOOL_CONFIG_VARS
_LT_LIBTOOL_TAG_VARS
# ### END LIBTOOL CONFIG
_LT_EOF
case $host_os in
aix3*)
cat <<\_LT_EOF >> "$cfgfile"
# AIX sometimes has problems with the GCC collect2 program. For some
# reason, if we set the COLLECT_NAMES environment variable, the problems
# vanish in a puff of smoke.
if test "X${COLLECT_NAMES+set}" != Xset; then
COLLECT_NAMES=
export COLLECT_NAMES
fi
_LT_EOF
;;
esac
_LT_PROG_LTMAIN
# We use sed instead of cat because bash on DJGPP gets confused if
# if finds mixed CR/LF and LF-only lines. Since sed operates in
# text mode, it properly converts lines to CR/LF. This bash problem
# is reportedly fixed, but why not run on old versions too?
sed '$q' "$ltmain" >> "$cfgfile" \
|| (rm -f "$cfgfile"; exit 1)
_LT_PROG_REPLACE_SHELLFNS
mv -f "$cfgfile" "$ofile" ||
(rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
chmod +x "$ofile"
],
[cat <<_LT_EOF >> "$ofile"
dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded
dnl in a comment (ie after a #).
# ### BEGIN LIBTOOL TAG CONFIG: $1
_LT_LIBTOOL_TAG_VARS(_LT_TAG)
# ### END LIBTOOL TAG CONFIG: $1
_LT_EOF
])dnl /m4_if
],
[m4_if([$1], [], [
PACKAGE='$PACKAGE'
VERSION='$VERSION'
TIMESTAMP='$TIMESTAMP'
RM='$RM'
ofile='$ofile'], [])
])dnl /_LT_CONFIG_SAVE_COMMANDS
])# _LT_CONFIG
# LT_SUPPORTED_TAG(TAG)
# ---------------------
# Trace this macro to discover what tags are supported by the libtool
# --tag option, using:
# autoconf --trace 'LT_SUPPORTED_TAG:$1'
AC_DEFUN([LT_SUPPORTED_TAG], [])
# C support is built-in for now
m4_define([_LT_LANG_C_enabled], [])
m4_define([_LT_TAGS], [])
# LT_LANG(LANG)
# -------------
# Enable libtool support for the given language if not already enabled.
AC_DEFUN([LT_LANG],
[AC_BEFORE([$0], [LT_OUTPUT])dnl
m4_case([$1],
[C], [_LT_LANG(C)],
[C++], [_LT_LANG(CXX)],
[Go], [_LT_LANG(GO)],
[Java], [_LT_LANG(GCJ)],
[Fortran 77], [_LT_LANG(F77)],
[Fortran], [_LT_LANG(FC)],
[Windows Resource], [_LT_LANG(RC)],
[m4_ifdef([_LT_LANG_]$1[_CONFIG],
[_LT_LANG($1)],
[m4_fatal([$0: unsupported language: "$1"])])])dnl
])# LT_LANG
# _LT_LANG(LANGNAME)
# ------------------
m4_defun([_LT_LANG],
[m4_ifdef([_LT_LANG_]$1[_enabled], [],
[LT_SUPPORTED_TAG([$1])dnl
m4_append([_LT_TAGS], [$1 ])dnl
m4_define([_LT_LANG_]$1[_enabled], [])dnl
_LT_LANG_$1_CONFIG($1)])dnl
])# _LT_LANG
m4_ifndef([AC_PROG_GO], [
############################################################
# NOTE: This macro has been submitted for inclusion into #
# GNU Autoconf as AC_PROG_GO. When it is available in #
# a released version of Autoconf we should remove this #
# macro and use it instead. #
############################################################
m4_defun([AC_PROG_GO],
[AC_LANG_PUSH(Go)dnl
AC_ARG_VAR([GOC], [Go compiler command])dnl
AC_ARG_VAR([GOFLAGS], [Go compiler flags])dnl
_AC_ARG_VAR_LDFLAGS()dnl
AC_CHECK_TOOL(GOC, gccgo)
if test -z "$GOC"; then
if test -n "$ac_tool_prefix"; then
AC_CHECK_PROG(GOC, [${ac_tool_prefix}gccgo], [${ac_tool_prefix}gccgo])
fi
fi
if test -z "$GOC"; then
AC_CHECK_PROG(GOC, gccgo, gccgo, false)
fi
])#m4_defun
])#m4_ifndef
# _LT_LANG_DEFAULT_CONFIG
# -----------------------
m4_defun([_LT_LANG_DEFAULT_CONFIG],
[AC_PROVIDE_IFELSE([AC_PROG_CXX],
[LT_LANG(CXX)],
[m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])])
AC_PROVIDE_IFELSE([AC_PROG_F77],
[LT_LANG(F77)],
[m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])])
AC_PROVIDE_IFELSE([AC_PROG_FC],
[LT_LANG(FC)],
[m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])])
dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal
dnl pulling things in needlessly.
AC_PROVIDE_IFELSE([AC_PROG_GCJ],
[LT_LANG(GCJ)],
[AC_PROVIDE_IFELSE([A][M_PROG_GCJ],
[LT_LANG(GCJ)],
[AC_PROVIDE_IFELSE([LT_PROG_GCJ],
[LT_LANG(GCJ)],
[m4_ifdef([AC_PROG_GCJ],
[m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])])
m4_ifdef([A][M_PROG_GCJ],
[m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])])
m4_ifdef([LT_PROG_GCJ],
[m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])])
AC_PROVIDE_IFELSE([AC_PROG_GO],
[LT_LANG(GO)],
[m4_define([AC_PROG_GO], defn([AC_PROG_GO])[LT_LANG(GO)])])
AC_PROVIDE_IFELSE([LT_PROG_RC],
[LT_LANG(RC)],
[m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])])
])# _LT_LANG_DEFAULT_CONFIG
# Obsolete macros:
AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)])
AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)])
AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)])
AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)])
AU_DEFUN([AC_LIBTOOL_RC], [LT_LANG(Windows Resource)])
dnl aclocal-1.4 backwards compatibility:
dnl AC_DEFUN([AC_LIBTOOL_CXX], [])
dnl AC_DEFUN([AC_LIBTOOL_F77], [])
dnl AC_DEFUN([AC_LIBTOOL_FC], [])
dnl AC_DEFUN([AC_LIBTOOL_GCJ], [])
dnl AC_DEFUN([AC_LIBTOOL_RC], [])
# _LT_TAG_COMPILER
# ----------------
m4_defun([_LT_TAG_COMPILER],
[AC_REQUIRE([AC_PROG_CC])dnl
_LT_DECL([LTCC], [CC], [1], [A C compiler])dnl
_LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl
_LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl
_LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl
# If no C compiler was specified, use CC.
LTCC=${LTCC-"$CC"}
# If no C compiler flags were specified, use CFLAGS.
LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
# Allow CC to be a program name with arguments.
compiler=$CC
])# _LT_TAG_COMPILER
# _LT_COMPILER_BOILERPLATE
# ------------------------
# Check for compiler boilerplate output or warnings with
# the simple compiler test code.
m4_defun([_LT_COMPILER_BOILERPLATE],
[m4_require([_LT_DECL_SED])dnl
ac_outfile=conftest.$ac_objext
echo "$lt_simple_compile_test_code" >conftest.$ac_ext
eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
_lt_compiler_boilerplate=`cat conftest.err`
$RM conftest*
])# _LT_COMPILER_BOILERPLATE
# _LT_LINKER_BOILERPLATE
# ----------------------
# Check for linker boilerplate output or warnings with
# the simple link test code.
m4_defun([_LT_LINKER_BOILERPLATE],
[m4_require([_LT_DECL_SED])dnl
ac_outfile=conftest.$ac_objext
echo "$lt_simple_link_test_code" >conftest.$ac_ext
eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
_lt_linker_boilerplate=`cat conftest.err`
$RM -r conftest*
])# _LT_LINKER_BOILERPLATE
# _LT_REQUIRED_DARWIN_CHECKS
# -------------------------
m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[
case $host_os in
rhapsody* | darwin*)
AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:])
AC_CHECK_TOOL([NMEDIT], [nmedit], [:])
AC_CHECK_TOOL([LIPO], [lipo], [:])
AC_CHECK_TOOL([OTOOL], [otool], [:])
AC_CHECK_TOOL([OTOOL64], [otool64], [:])
_LT_DECL([], [DSYMUTIL], [1],
[Tool to manipulate archived DWARF debug symbol files on Mac OS X])
_LT_DECL([], [NMEDIT], [1],
[Tool to change global to local symbols on Mac OS X])
_LT_DECL([], [LIPO], [1],
[Tool to manipulate fat objects and archives on Mac OS X])
_LT_DECL([], [OTOOL], [1],
[ldd/readelf like tool for Mach-O binaries on Mac OS X])
_LT_DECL([], [OTOOL64], [1],
[ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4])
AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod],
[lt_cv_apple_cc_single_mod=no
if test -z "${LT_MULTI_MODULE}"; then
# By default we will add the -single_module flag. You can override
# by either setting the environment variable LT_MULTI_MODULE
# non-empty at configure time, or by adding -multi_module to the
# link flags.
rm -rf libconftest.dylib*
echo "int foo(void){return 1;}" > conftest.c
echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
-dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD
$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
-dynamiclib -Wl,-single_module conftest.c 2>conftest.err
_lt_result=$?
# If there is a non-empty error log, and "single_module"
# appears in it, assume the flag caused a linker warning
if test -s conftest.err && $GREP single_module conftest.err; then
cat conftest.err >&AS_MESSAGE_LOG_FD
# Otherwise, if the output was created with a 0 exit code from
# the compiler, it worked.
elif test -f libconftest.dylib && test $_lt_result -eq 0; then
lt_cv_apple_cc_single_mod=yes
else
cat conftest.err >&AS_MESSAGE_LOG_FD
fi
rm -rf libconftest.dylib*
rm -f conftest.*
fi])
AC_CACHE_CHECK([for -exported_symbols_list linker flag],
[lt_cv_ld_exported_symbols_list],
[lt_cv_ld_exported_symbols_list=no
save_LDFLAGS=$LDFLAGS
echo "_main" > conftest.sym
LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym"
AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])],
[lt_cv_ld_exported_symbols_list=yes],
[lt_cv_ld_exported_symbols_list=no])
LDFLAGS="$save_LDFLAGS"
])
AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load],
[lt_cv_ld_force_load=no
cat > conftest.c << _LT_EOF
int forced_loaded() { return 2;}
_LT_EOF
echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&AS_MESSAGE_LOG_FD
$LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&AS_MESSAGE_LOG_FD
echo "$AR cru libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD
$AR cru libconftest.a conftest.o 2>&AS_MESSAGE_LOG_FD
echo "$RANLIB libconftest.a" >&AS_MESSAGE_LOG_FD
$RANLIB libconftest.a 2>&AS_MESSAGE_LOG_FD
cat > conftest.c << _LT_EOF
int main() { return 0;}
_LT_EOF
echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&AS_MESSAGE_LOG_FD
$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err
_lt_result=$?
if test -s conftest.err && $GREP force_load conftest.err; then
cat conftest.err >&AS_MESSAGE_LOG_FD
elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then
lt_cv_ld_force_load=yes
else
cat conftest.err >&AS_MESSAGE_LOG_FD
fi
rm -f conftest.err libconftest.a conftest conftest.c
rm -rf conftest.dSYM
])
case $host_os in
rhapsody* | darwin1.[[012]])
_lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;;
darwin1.*)
_lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
darwin*) # darwin 5.x on
# if running on 10.5 or later, the deployment target defaults
# to the OS version, if on x86, and 10.4, the deployment
# target defaults to 10.4. Don't you love it?
case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in
10.0,*86*-darwin8*|10.0,*-darwin[[91]]*)
_lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
10.[[012]]*)
_lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
10.*)
_lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
esac
;;
esac
if test "$lt_cv_apple_cc_single_mod" = "yes"; then
_lt_dar_single_mod='$single_module'
fi
if test "$lt_cv_ld_exported_symbols_list" = "yes"; then
_lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym'
else
_lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}'
fi
if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then
_lt_dsymutil='~$DSYMUTIL $lib || :'
else
_lt_dsymutil=
fi
;;
esac
])
# _LT_DARWIN_LINKER_FEATURES([TAG])
# ---------------------------------
# Checks for linker and compiler features on darwin
m4_defun([_LT_DARWIN_LINKER_FEATURES],
[
m4_require([_LT_REQUIRED_DARWIN_CHECKS])
_LT_TAGVAR(archive_cmds_need_lc, $1)=no
_LT_TAGVAR(hardcode_direct, $1)=no
_LT_TAGVAR(hardcode_automatic, $1)=yes
_LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
if test "$lt_cv_ld_force_load" = "yes"; then
_LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`'
m4_case([$1], [F77], [_LT_TAGVAR(compiler_needs_object, $1)=yes],
[FC], [_LT_TAGVAR(compiler_needs_object, $1)=yes])
else
_LT_TAGVAR(whole_archive_flag_spec, $1)=''
fi
_LT_TAGVAR(link_all_deplibs, $1)=yes
_LT_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined"
case $cc_basename in
ifort*) _lt_dar_can_shared=yes ;;
*) _lt_dar_can_shared=$GCC ;;
esac
if test "$_lt_dar_can_shared" = "yes"; then
output_verbose_link_cmd=func_echo_all
_LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
_LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
_LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
_LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
m4_if([$1], [CXX],
[ if test "$lt_cv_apple_cc_single_mod" != "yes"; then
_LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}"
_LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}"
fi
],[])
else
_LT_TAGVAR(ld_shlibs, $1)=no
fi
])
# _LT_SYS_MODULE_PATH_AIX([TAGNAME])
# ----------------------------------
# Links a minimal program and checks the executable
# for the system default hardcoded library path. In most cases,
# this is /usr/lib:/lib, but when the MPI compilers are used
# the location of the communication and MPI libs are included too.
# If we don't find anything, use the default library path according
# to the aix ld manual.
# Store the results from the different compilers for each TAGNAME.
# Allow to override them for all tags through lt_cv_aix_libpath.
m4_defun([_LT_SYS_MODULE_PATH_AIX],
[m4_require([_LT_DECL_SED])dnl
if test "${lt_cv_aix_libpath+set}" = set; then
aix_libpath=$lt_cv_aix_libpath
else
AC_CACHE_VAL([_LT_TAGVAR([lt_cv_aix_libpath_], [$1])],
[AC_LINK_IFELSE([AC_LANG_PROGRAM],[
lt_aix_libpath_sed='[
/Import File Strings/,/^$/ {
/^0/ {
s/^0 *\([^ ]*\) *$/\1/
p
}
}]'
_LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
# Check for a 64-bit object if we didn't find anything.
if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then
_LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
fi],[])
if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then
_LT_TAGVAR([lt_cv_aix_libpath_], [$1])="/usr/lib:/lib"
fi
])
aix_libpath=$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])
fi
])# _LT_SYS_MODULE_PATH_AIX
# _LT_SHELL_INIT(ARG)
# -------------------
m4_define([_LT_SHELL_INIT],
[m4_divert_text([M4SH-INIT], [$1
])])# _LT_SHELL_INIT
# _LT_PROG_ECHO_BACKSLASH
# -----------------------
# Find how we can fake an echo command that does not interpret backslash.
# In particular, with Autoconf 2.60 or later we add some code to the start
# of the generated configure script which will find a shell with a builtin
# printf (which we can use as an echo command).
m4_defun([_LT_PROG_ECHO_BACKSLASH],
[ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO
ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO
AC_MSG_CHECKING([how to print strings])
# Test print first, because it will be a builtin if present.
if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \
test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then
ECHO='print -r --'
elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then
ECHO='printf %s\n'
else
# Use this function as a fallback that always works.
func_fallback_echo ()
{
eval 'cat <<_LTECHO_EOF
$[]1
_LTECHO_EOF'
}
ECHO='func_fallback_echo'
fi
# func_echo_all arg...
# Invoke $ECHO with all args, space-separated.
func_echo_all ()
{
$ECHO "$*"
}
case "$ECHO" in
printf*) AC_MSG_RESULT([printf]) ;;
print*) AC_MSG_RESULT([print -r]) ;;
*) AC_MSG_RESULT([cat]) ;;
esac
m4_ifdef([_AS_DETECT_SUGGESTED],
[_AS_DETECT_SUGGESTED([
test -n "${ZSH_VERSION+set}${BASH_VERSION+set}" || (
ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO
ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO
PATH=/empty FPATH=/empty; export PATH FPATH
test "X`printf %s $ECHO`" = "X$ECHO" \
|| test "X`print -r -- $ECHO`" = "X$ECHO" )])])
_LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts])
_LT_DECL([], [ECHO], [1], [An echo program that protects backslashes])
])# _LT_PROG_ECHO_BACKSLASH
# _LT_WITH_SYSROOT
# ----------------
AC_DEFUN([_LT_WITH_SYSROOT],
[AC_MSG_CHECKING([for sysroot])
AC_ARG_WITH([sysroot],
[ --with-sysroot[=DIR] Search for dependent libraries within DIR
(or the compiler's sysroot if not specified).],
[], [with_sysroot=no])
dnl lt_sysroot will always be passed unquoted. We quote it here
dnl in case the user passed a directory name.
lt_sysroot=
case ${with_sysroot} in #(
yes)
if test "$GCC" = yes; then
lt_sysroot=`$CC --print-sysroot 2>/dev/null`
fi
;; #(
/*)
lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"`
;; #(
no|'')
;; #(
*)
AC_MSG_RESULT([${with_sysroot}])
AC_MSG_ERROR([The sysroot must be an absolute path.])
;;
esac
AC_MSG_RESULT([${lt_sysroot:-no}])
_LT_DECL([], [lt_sysroot], [0], [The root where to search for ]dnl
[dependent libraries, and in which our libraries should be installed.])])
# _LT_ENABLE_LOCK
# ---------------
m4_defun([_LT_ENABLE_LOCK],
[AC_ARG_ENABLE([libtool-lock],
[AS_HELP_STRING([--disable-libtool-lock],
[avoid locking (might break parallel builds)])])
test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
# Some flags need to be propagated to the compiler or linker for good
# libtool support.
case $host in
ia64-*-hpux*)
# Find out which ABI we are using.
echo 'int i;' > conftest.$ac_ext
if AC_TRY_EVAL(ac_compile); then
case `/usr/bin/file conftest.$ac_objext` in
*ELF-32*)
HPUX_IA64_MODE="32"
;;
*ELF-64*)
HPUX_IA64_MODE="64"
;;
esac
fi
rm -rf conftest*
;;
*-*-irix6*)
# Find out which ABI we are using.
echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext
if AC_TRY_EVAL(ac_compile); then
if test "$lt_cv_prog_gnu_ld" = yes; then
case `/usr/bin/file conftest.$ac_objext` in
*32-bit*)
LD="${LD-ld} -melf32bsmip"
;;
*N32*)
LD="${LD-ld} -melf32bmipn32"
;;
*64-bit*)
LD="${LD-ld} -melf64bmip"
;;
esac
else
case `/usr/bin/file conftest.$ac_objext` in
*32-bit*)
LD="${LD-ld} -32"
;;
*N32*)
LD="${LD-ld} -n32"
;;
*64-bit*)
LD="${LD-ld} -64"
;;
esac
fi
fi
rm -rf conftest*
;;
x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \
s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
# Find out which ABI we are using.
echo 'int i;' > conftest.$ac_ext
if AC_TRY_EVAL(ac_compile); then
case `/usr/bin/file conftest.o` in
*32-bit*)
case $host in
x86_64-*kfreebsd*-gnu)
LD="${LD-ld} -m elf_i386_fbsd"
;;
x86_64-*linux*)
case `/usr/bin/file conftest.o` in
*x86-64*)
LD="${LD-ld} -m elf32_x86_64"
;;
*)
LD="${LD-ld} -m elf_i386"
;;
esac
;;
ppc64-*linux*|powerpc64-*linux*)
LD="${LD-ld} -m elf32ppclinux"
;;
s390x-*linux*)
LD="${LD-ld} -m elf_s390"
;;
sparc64-*linux*)
LD="${LD-ld} -m elf32_sparc"
;;
esac
;;
*64-bit*)
case $host in
x86_64-*kfreebsd*-gnu)
LD="${LD-ld} -m elf_x86_64_fbsd"
;;
x86_64-*linux*)
LD="${LD-ld} -m elf_x86_64"
;;
ppc*-*linux*|powerpc*-*linux*)
LD="${LD-ld} -m elf64ppc"
;;
s390*-*linux*|s390*-*tpf*)
LD="${LD-ld} -m elf64_s390"
;;
sparc*-*linux*)
LD="${LD-ld} -m elf64_sparc"
;;
esac
;;
esac
fi
rm -rf conftest*
;;
*-*-sco3.2v5*)
# On SCO OpenServer 5, we need -belf to get full-featured binaries.
SAVE_CFLAGS="$CFLAGS"
CFLAGS="$CFLAGS -belf"
AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf,
[AC_LANG_PUSH(C)
AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no])
AC_LANG_POP])
if test x"$lt_cv_cc_needs_belf" != x"yes"; then
# this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
CFLAGS="$SAVE_CFLAGS"
fi
;;
*-*solaris*)
# Find out which ABI we are using.
echo 'int i;' > conftest.$ac_ext
if AC_TRY_EVAL(ac_compile); then
case `/usr/bin/file conftest.o` in
*64-bit*)
case $lt_cv_prog_gnu_ld in
yes*)
case $host in
i?86-*-solaris*)
LD="${LD-ld} -m elf_x86_64"
;;
sparc*-*-solaris*)
LD="${LD-ld} -m elf64_sparc"
;;
esac
# GNU ld 2.21 introduced _sol2 emulations. Use them if available.
if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then
LD="${LD-ld}_sol2"
fi
;;
*)
if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then
LD="${LD-ld} -64"
fi
;;
esac
;;
esac
fi
rm -rf conftest*
;;
esac
need_locks="$enable_libtool_lock"
])# _LT_ENABLE_LOCK
# _LT_PROG_AR
# -----------
m4_defun([_LT_PROG_AR],
[AC_CHECK_TOOLS(AR, [ar], false)
: ${AR=ar}
: ${AR_FLAGS=cru}
_LT_DECL([], [AR], [1], [The archiver])
_LT_DECL([], [AR_FLAGS], [1], [Flags to create an archive])
AC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file],
[lt_cv_ar_at_file=no
AC_COMPILE_IFELSE([AC_LANG_PROGRAM],
[echo conftest.$ac_objext > conftest.lst
lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&AS_MESSAGE_LOG_FD'
AC_TRY_EVAL([lt_ar_try])
if test "$ac_status" -eq 0; then
# Ensure the archiver fails upon bogus file names.
rm -f conftest.$ac_objext libconftest.a
AC_TRY_EVAL([lt_ar_try])
if test "$ac_status" -ne 0; then
lt_cv_ar_at_file=@
fi
fi
rm -f conftest.* libconftest.a
])
])
if test "x$lt_cv_ar_at_file" = xno; then
archiver_list_spec=
else
archiver_list_spec=$lt_cv_ar_at_file
fi
_LT_DECL([], [archiver_list_spec], [1],
[How to feed a file listing to the archiver])
])# _LT_PROG_AR
# _LT_CMD_OLD_ARCHIVE
# -------------------
m4_defun([_LT_CMD_OLD_ARCHIVE],
[_LT_PROG_AR
AC_CHECK_TOOL(STRIP, strip, :)
test -z "$STRIP" && STRIP=:
_LT_DECL([], [STRIP], [1], [A symbol stripping program])
AC_CHECK_TOOL(RANLIB, ranlib, :)
test -z "$RANLIB" && RANLIB=:
_LT_DECL([], [RANLIB], [1],
[Commands used to install an old-style archive])
# Determine commands to create old-style static archives.
old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs'
old_postinstall_cmds='chmod 644 $oldlib'
old_postuninstall_cmds=
if test -n "$RANLIB"; then
case $host_os in
openbsd*)
old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib"
;;
*)
old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib"
;;
esac
old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib"
fi
case $host_os in
darwin*)
lock_old_archive_extraction=yes ;;
*)
lock_old_archive_extraction=no ;;
esac
_LT_DECL([], [old_postinstall_cmds], [2])
_LT_DECL([], [old_postuninstall_cmds], [2])
_LT_TAGDECL([], [old_archive_cmds], [2],
[Commands used to build an old-style archive])
_LT_DECL([], [lock_old_archive_extraction], [0],
[Whether to use a lock for old archive extraction])
])# _LT_CMD_OLD_ARCHIVE
# _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
# [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE])
# ----------------------------------------------------------------
# Check whether the given compiler option works
AC_DEFUN([_LT_COMPILER_OPTION],
[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
m4_require([_LT_DECL_SED])dnl
AC_CACHE_CHECK([$1], [$2],
[$2=no
m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4])
echo "$lt_simple_compile_test_code" > conftest.$ac_ext
lt_compiler_flag="$3"
# Insert the option either (1) after the last *FLAGS variable, or
# (2) before a word containing "conftest.", or (3) at the end.
# Note that $ac_compile itself does not contain backslashes and begins
# with a dollar sign (not a hyphen), so the echo should work correctly.
# The option is referenced via a variable to avoid confusing sed.
lt_compile=`echo "$ac_compile" | $SED \
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
(eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
(eval "$lt_compile" 2>conftest.err)
ac_status=$?
cat conftest.err >&AS_MESSAGE_LOG_FD
echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
if (exit $ac_status) && test -s "$ac_outfile"; then
# The compiler can only warn and ignore the option if not recognized
# So say no if there are warnings other than the usual output.
$ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp
$SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
$2=yes
fi
fi
$RM conftest*
])
if test x"[$]$2" = xyes; then
m4_if([$5], , :, [$5])
else
m4_if([$6], , :, [$6])
fi
])# _LT_COMPILER_OPTION
# Old name:
AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION])
dnl aclocal-1.4 backwards compatibility:
dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], [])
# _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
# [ACTION-SUCCESS], [ACTION-FAILURE])
# ----------------------------------------------------
# Check whether the given linker option works
AC_DEFUN([_LT_LINKER_OPTION],
[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
m4_require([_LT_DECL_SED])dnl
AC_CACHE_CHECK([$1], [$2],
[$2=no
save_LDFLAGS="$LDFLAGS"
LDFLAGS="$LDFLAGS $3"
echo "$lt_simple_link_test_code" > conftest.$ac_ext
if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
# The linker can only warn and ignore the option if not recognized
# So say no if there are warnings
if test -s conftest.err; then
# Append any errors to the config.log.
cat conftest.err 1>&AS_MESSAGE_LOG_FD
$ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp
$SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
if diff conftest.exp conftest.er2 >/dev/null; then
$2=yes
fi
else
$2=yes
fi
fi
$RM -r conftest*
LDFLAGS="$save_LDFLAGS"
])
if test x"[$]$2" = xyes; then
m4_if([$4], , :, [$4])
else
m4_if([$5], , :, [$5])
fi
])# _LT_LINKER_OPTION
# Old name:
AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION])
dnl aclocal-1.4 backwards compatibility:
dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], [])
# LT_CMD_MAX_LEN
#---------------
AC_DEFUN([LT_CMD_MAX_LEN],
[AC_REQUIRE([AC_CANONICAL_HOST])dnl
# find the maximum length of command line arguments
AC_MSG_CHECKING([the maximum length of command line arguments])
AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl
i=0
teststring="ABCD"
case $build_os in
msdosdjgpp*)
# On DJGPP, this test can blow up pretty badly due to problems in libc
# (any single argument exceeding 2000 bytes causes a buffer overrun
# during glob expansion). Even if it were fixed, the result of this
# check would be larger than it should be.
lt_cv_sys_max_cmd_len=12288; # 12K is about right
;;
gnu*)
# Under GNU Hurd, this test is not required because there is
# no limit to the length of command line arguments.
# Libtool will interpret -1 as no limit whatsoever
lt_cv_sys_max_cmd_len=-1;
;;
cygwin* | mingw* | cegcc*)
# On Win9x/ME, this test blows up -- it succeeds, but takes
# about 5 minutes as the teststring grows exponentially.
# Worse, since 9x/ME are not pre-emptively multitasking,
# you end up with a "frozen" computer, even though with patience
# the test eventually succeeds (with a max line length of 256k).
# Instead, let's just punt: use the minimum linelength reported by
# all of the supported platforms: 8192 (on NT/2K/XP).
lt_cv_sys_max_cmd_len=8192;
;;
mint*)
# On MiNT this can take a long time and run out of memory.
lt_cv_sys_max_cmd_len=8192;
;;
amigaos*)
# On AmigaOS with pdksh, this test takes hours, literally.
# So we just punt and use a minimum line length of 8192.
lt_cv_sys_max_cmd_len=8192;
;;
netbsd* | freebsd* | openbsd* | darwin* | dragonfly*)
# This has been around since 386BSD, at least. Likely further.
if test -x /sbin/sysctl; then
lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`
elif test -x /usr/sbin/sysctl; then
lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax`
else
lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs
fi
# And add a safety zone
lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
;;
interix*)
# We know the value 262144 and hardcode it with a safety zone (like BSD)
lt_cv_sys_max_cmd_len=196608
;;
os2*)
# The test takes a long time on OS/2.
lt_cv_sys_max_cmd_len=8192
;;
osf*)
# Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure
# due to this test when exec_disable_arg_limit is 1 on Tru64. It is not
# nice to cause kernel panics so lets avoid the loop below.
# First set a reasonable default.
lt_cv_sys_max_cmd_len=16384
#
if test -x /sbin/sysconfig; then
case `/sbin/sysconfig -q proc exec_disable_arg_limit` in
*1*) lt_cv_sys_max_cmd_len=-1 ;;
esac
fi
;;
sco3.2v5*)
lt_cv_sys_max_cmd_len=102400
;;
sysv5* | sco5v6* | sysv4.2uw2*)
kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null`
if test -n "$kargmax"; then
lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'`
else
lt_cv_sys_max_cmd_len=32768
fi
;;
*)
lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null`
if test -n "$lt_cv_sys_max_cmd_len" && \
test undefined != "$lt_cv_sys_max_cmd_len"; then
lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
else
# Make teststring a little bigger before we do anything with it.
# a 1K string should be a reasonable start.
for i in 1 2 3 4 5 6 7 8 ; do
teststring=$teststring$teststring
done
SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}
# If test is not a shell built-in, we'll probably end up computing a
# maximum length that is only half of the actual maximum length, but
# we can't tell.
while { test "X"`env echo "$teststring$teststring" 2>/dev/null` \
= "X$teststring$teststring"; } >/dev/null 2>&1 &&
test $i != 17 # 1/2 MB should be enough
do
i=`expr $i + 1`
teststring=$teststring$teststring
done
# Only check the string length outside the loop.
lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1`
teststring=
# Add a significant safety factor because C++ compilers can tack on
# massive amounts of additional arguments before passing them to the
# linker. It appears as though 1/2 is a usable value.
lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
fi
;;
esac
])
if test -n $lt_cv_sys_max_cmd_len ; then
AC_MSG_RESULT($lt_cv_sys_max_cmd_len)
else
AC_MSG_RESULT(none)
fi
max_cmd_len=$lt_cv_sys_max_cmd_len
_LT_DECL([], [max_cmd_len], [0],
[What is the maximum length of a command?])
])# LT_CMD_MAX_LEN
# Old name:
AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN])
dnl aclocal-1.4 backwards compatibility:
dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], [])
# _LT_HEADER_DLFCN
# ----------------
m4_defun([_LT_HEADER_DLFCN],
[AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl
])# _LT_HEADER_DLFCN
# _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE,
# ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING)
# ----------------------------------------------------------------
m4_defun([_LT_TRY_DLOPEN_SELF],
[m4_require([_LT_HEADER_DLFCN])dnl
if test "$cross_compiling" = yes; then :
[$4]
else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
[#line $LINENO "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
#include
#endif
#include
#ifdef RTLD_GLOBAL
# define LT_DLGLOBAL RTLD_GLOBAL
#else
# ifdef DL_GLOBAL
# define LT_DLGLOBAL DL_GLOBAL
# else
# define LT_DLGLOBAL 0
# endif
#endif
/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
find out it does not work in some platform. */
#ifndef LT_DLLAZY_OR_NOW
# ifdef RTLD_LAZY
# define LT_DLLAZY_OR_NOW RTLD_LAZY
# else
# ifdef DL_LAZY
# define LT_DLLAZY_OR_NOW DL_LAZY
# else
# ifdef RTLD_NOW
# define LT_DLLAZY_OR_NOW RTLD_NOW
# else
# ifdef DL_NOW
# define LT_DLLAZY_OR_NOW DL_NOW
# else
# define LT_DLLAZY_OR_NOW 0
# endif
# endif
# endif
# endif
#endif
/* When -fvisbility=hidden is used, assume the code has been annotated
correspondingly for the symbols needed. */
#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
int fnord () __attribute__((visibility("default")));
#endif
int fnord () { return 42; }
int main ()
{
void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
int status = $lt_dlunknown;
if (self)
{
if (dlsym (self,"fnord")) status = $lt_dlno_uscore;
else
{
if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
else puts (dlerror ());
}
/* dlclose (self); */
}
else
puts (dlerror ());
return status;
}]
_LT_EOF
if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then
(./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null
lt_status=$?
case x$lt_status in
x$lt_dlno_uscore) $1 ;;
x$lt_dlneed_uscore) $2 ;;
x$lt_dlunknown|x*) $3 ;;
esac
else :
# compilation failed
$3
fi
fi
rm -fr conftest*
])# _LT_TRY_DLOPEN_SELF
# LT_SYS_DLOPEN_SELF
# ------------------
AC_DEFUN([LT_SYS_DLOPEN_SELF],
[m4_require([_LT_HEADER_DLFCN])dnl
if test "x$enable_dlopen" != xyes; then
enable_dlopen=unknown
enable_dlopen_self=unknown
enable_dlopen_self_static=unknown
else
lt_cv_dlopen=no
lt_cv_dlopen_libs=
case $host_os in
beos*)
lt_cv_dlopen="load_add_on"
lt_cv_dlopen_libs=
lt_cv_dlopen_self=yes
;;
mingw* | pw32* | cegcc*)
lt_cv_dlopen="LoadLibrary"
lt_cv_dlopen_libs=
;;
cygwin*)
lt_cv_dlopen="dlopen"
lt_cv_dlopen_libs=
;;
darwin*)
# if libdl is installed we need to link against it
AC_CHECK_LIB([dl], [dlopen],
[lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[
lt_cv_dlopen="dyld"
lt_cv_dlopen_libs=
lt_cv_dlopen_self=yes
])
;;
*)
AC_CHECK_FUNC([shl_load],
[lt_cv_dlopen="shl_load"],
[AC_CHECK_LIB([dld], [shl_load],
[lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"],
[AC_CHECK_FUNC([dlopen],
[lt_cv_dlopen="dlopen"],
[AC_CHECK_LIB([dl], [dlopen],
[lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],
[AC_CHECK_LIB([svld], [dlopen],
[lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"],
[AC_CHECK_LIB([dld], [dld_link],
[lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"])
])
])
])
])
])
;;
esac
if test "x$lt_cv_dlopen" != xno; then
enable_dlopen=yes
else
enable_dlopen=no
fi
case $lt_cv_dlopen in
dlopen)
save_CPPFLAGS="$CPPFLAGS"
test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
save_LDFLAGS="$LDFLAGS"
wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
save_LIBS="$LIBS"
LIBS="$lt_cv_dlopen_libs $LIBS"
AC_CACHE_CHECK([whether a program can dlopen itself],
lt_cv_dlopen_self, [dnl
_LT_TRY_DLOPEN_SELF(
lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes,
lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross)
])
if test "x$lt_cv_dlopen_self" = xyes; then
wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
AC_CACHE_CHECK([whether a statically linked program can dlopen itself],
lt_cv_dlopen_self_static, [dnl
_LT_TRY_DLOPEN_SELF(
lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes,
lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross)
])
fi
CPPFLAGS="$save_CPPFLAGS"
LDFLAGS="$save_LDFLAGS"
LIBS="$save_LIBS"
;;
esac
case $lt_cv_dlopen_self in
yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
*) enable_dlopen_self=unknown ;;
esac
case $lt_cv_dlopen_self_static in
yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
*) enable_dlopen_self_static=unknown ;;
esac
fi
_LT_DECL([dlopen_support], [enable_dlopen], [0],
[Whether dlopen is supported])
_LT_DECL([dlopen_self], [enable_dlopen_self], [0],
[Whether dlopen of programs is supported])
_LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0],
[Whether dlopen of statically linked programs is supported])
])# LT_SYS_DLOPEN_SELF
# Old name:
AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF])
dnl aclocal-1.4 backwards compatibility:
dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], [])
# _LT_COMPILER_C_O([TAGNAME])
# ---------------------------
# Check to see if options -c and -o are simultaneously supported by compiler.
# This macro does not hard code the compiler like AC_PROG_CC_C_O.
m4_defun([_LT_COMPILER_C_O],
[m4_require([_LT_DECL_SED])dnl
m4_require([_LT_FILEUTILS_DEFAULTS])dnl
m4_require([_LT_TAG_COMPILER])dnl
AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext],
[_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)],
[_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no
$RM -r conftest 2>/dev/null
mkdir conftest
cd conftest
mkdir out
echo "$lt_simple_compile_test_code" > conftest.$ac_ext
lt_compiler_flag="-o out/conftest2.$ac_objext"
# Insert the option either (1) after the last *FLAGS variable, or
# (2) before a word containing "conftest.", or (3) at the end.
# Note that $ac_compile itself does not contain backslashes and begins
# with a dollar sign (not a hyphen), so the echo should work correctly.
lt_compile=`echo "$ac_compile" | $SED \
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
(eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
(eval "$lt_compile" 2>out/conftest.err)
ac_status=$?
cat out/conftest.err >&AS_MESSAGE_LOG_FD
echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
if (exit $ac_status) && test -s out/conftest2.$ac_objext
then
# The compiler can only warn and ignore the option if not recognized
# So say no if there are warnings
$ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp
$SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
fi
fi
chmod u+w . 2>&AS_MESSAGE_LOG_FD
$RM conftest*
# SGI C++ compiler will create directory out/ii_files/ for
# template instantiation
test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
$RM out/* && rmdir out
cd ..
$RM -r conftest
$RM conftest*
])
_LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1],
[Does compiler simultaneously support -c and -o options?])
])# _LT_COMPILER_C_O
# _LT_COMPILER_FILE_LOCKS([TAGNAME])
# ----------------------------------
# Check to see if we can do hard links to lock some files if needed
m4_defun([_LT_COMPILER_FILE_LOCKS],
[m4_require([_LT_ENABLE_LOCK])dnl
m4_require([_LT_FILEUTILS_DEFAULTS])dnl
_LT_COMPILER_C_O([$1])
hard_links="nottested"
if test "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then
# do not overwrite the value of need_locks provided by the user
AC_MSG_CHECKING([if we can lock with hard links])
hard_links=yes
$RM conftest*
ln conftest.a conftest.b 2>/dev/null && hard_links=no
touch conftest.a
ln conftest.a conftest.b 2>&5 || hard_links=no
ln conftest.a conftest.b 2>/dev/null && hard_links=no
AC_MSG_RESULT([$hard_links])
if test "$hard_links" = no; then
AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe])
need_locks=warn
fi
else
need_locks=no
fi
_LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?])
])# _LT_COMPILER_FILE_LOCKS
# _LT_CHECK_OBJDIR
# ----------------
m4_defun([_LT_CHECK_OBJDIR],
[AC_CACHE_CHECK([for objdir], [lt_cv_objdir],
[rm -f .libs 2>/dev/null
mkdir .libs 2>/dev/null
if test -d .libs; then
lt_cv_objdir=.libs
else
# MS-DOS does not allow filenames that begin with a dot.
lt_cv_objdir=_libs
fi
rmdir .libs 2>/dev/null])
objdir=$lt_cv_objdir
_LT_DECL([], [objdir], [0],
[The name of the directory that contains temporary libtool files])dnl
m4_pattern_allow([LT_OBJDIR])dnl
AC_DEFINE_UNQUOTED(LT_OBJDIR, "$lt_cv_objdir/",
[Define to the sub-directory in which libtool stores uninstalled libraries.])
])# _LT_CHECK_OBJDIR
# _LT_LINKER_HARDCODE_LIBPATH([TAGNAME])
# --------------------------------------
# Check hardcoding attributes.
m4_defun([_LT_LINKER_HARDCODE_LIBPATH],
[AC_MSG_CHECKING([how to hardcode library paths into programs])
_LT_TAGVAR(hardcode_action, $1)=
if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" ||
test -n "$_LT_TAGVAR(runpath_var, $1)" ||
test "X$_LT_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then
# We can hardcode non-existent directories.
if test "$_LT_TAGVAR(hardcode_direct, $1)" != no &&
# If the only mechanism to avoid hardcoding is shlibpath_var, we
# have to relink, otherwise we might link with an installed library
# when we should be linking with a yet-to-be-installed one
## test "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" != no &&
test "$_LT_TAGVAR(hardcode_minus_L, $1)" != no; then
# Linking always hardcodes the temporary library directory.
_LT_TAGVAR(hardcode_action, $1)=relink
else
# We can link without hardcoding, and we can hardcode nonexisting dirs.
_LT_TAGVAR(hardcode_action, $1)=immediate
fi
else
# We cannot hardcode anything, or else we can only hardcode existing
# directories.
_LT_TAGVAR(hardcode_action, $1)=unsupported
fi
AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)])
if test "$_LT_TAGVAR(hardcode_action, $1)" = relink ||
test "$_LT_TAGVAR(inherit_rpath, $1)" = yes; then
# Fast installation is not supported
enable_fast_install=no
elif test "$shlibpath_overrides_runpath" = yes ||
test "$enable_shared" = no; then
# Fast installation is not necessary
enable_fast_install=needless
fi
_LT_TAGDECL([], [hardcode_action], [0],
[How to hardcode a shared library path into an executable])
])# _LT_LINKER_HARDCODE_LIBPATH
# _LT_CMD_STRIPLIB
# ----------------
m4_defun([_LT_CMD_STRIPLIB],
[m4_require([_LT_DECL_EGREP])
striplib=
old_striplib=
AC_MSG_CHECKING([whether stripping libraries is possible])
if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then
test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
test -z "$striplib" && striplib="$STRIP --strip-unneeded"
AC_MSG_RESULT([yes])
else
# FIXME - insert some real tests, host_os isn't really good enough
case $host_os in
darwin*)
if test -n "$STRIP" ; then
striplib="$STRIP -x"
old_striplib="$STRIP -S"
AC_MSG_RESULT([yes])
else
AC_MSG_RESULT([no])
fi
;;
*)
AC_MSG_RESULT([no])
;;
esac
fi
_LT_DECL([], [old_striplib], [1], [Commands to strip libraries])
_LT_DECL([], [striplib], [1])
])# _LT_CMD_STRIPLIB
# _LT_SYS_DYNAMIC_LINKER([TAG])
# -----------------------------
# PORTME Fill in your ld.so characteristics
m4_defun([_LT_SYS_DYNAMIC_LINKER],
[AC_REQUIRE([AC_CANONICAL_HOST])dnl
m4_require([_LT_DECL_EGREP])dnl
m4_require([_LT_FILEUTILS_DEFAULTS])dnl
m4_require([_LT_DECL_OBJDUMP])dnl
m4_require([_LT_DECL_SED])dnl
m4_require([_LT_CHECK_SHELL_FEATURES])dnl
AC_MSG_CHECKING([dynamic linker characteristics])
m4_if([$1],
[], [
if test "$GCC" = yes; then
case $host_os in
darwin*) lt_awk_arg="/^libraries:/,/LR/" ;;
*) lt_awk_arg="/^libraries:/" ;;
esac
case $host_os in
mingw* | cegcc*) lt_sed_strip_eq="s,=\([[A-Za-z]]:\),\1,g" ;;
*) lt_sed_strip_eq="s,=/,/,g" ;;
esac
lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq`
case $lt_search_path_spec in
*\;*)
# if the path contains ";" then we assume it to be the separator
# otherwise default to the standard path separator (i.e. ":") - it is
# assumed that no part of a normal pathname contains ";" but that should
# okay in the real world where ";" in dirpaths is itself problematic.
lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'`
;;
*)
lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"`
;;
esac
# Ok, now we have the path, separated by spaces, we can step through it
# and add multilib dir if necessary.
lt_tmp_lt_search_path_spec=
lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null`
for lt_sys_path in $lt_search_path_spec; do
if test -d "$lt_sys_path/$lt_multi_os_dir"; then
lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir"
else
test -d "$lt_sys_path" && \
lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path"
fi
done
lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk '
BEGIN {RS=" "; FS="/|\n";} {
lt_foo="";
lt_count=0;
for (lt_i = NF; lt_i > 0; lt_i--) {
if ($lt_i != "" && $lt_i != ".") {
if ($lt_i == "..") {
lt_count++;
} else {
if (lt_count == 0) {
lt_foo="/" $lt_i lt_foo;
} else {
lt_count--;
}
}
}
}
if (lt_foo != "") { lt_freq[[lt_foo]]++; }
if (lt_freq[[lt_foo]] == 1) { print lt_foo; }
}'`
# AWK program above erroneously prepends '/' to C:/dos/paths
# for these hosts.
case $host_os in
mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\
$SED 's,/\([[A-Za-z]]:\),\1,g'` ;;
esac
sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP`
else
sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
fi])
library_names_spec=
libname_spec='lib$name'
soname_spec=
shrext_cmds=".so"
postinstall_cmds=
postuninstall_cmds=
finish_cmds=
finish_eval=
shlibpath_var=
shlibpath_overrides_runpath=unknown
version_type=none
dynamic_linker="$host_os ld.so"
sys_lib_dlsearch_path_spec="/lib /usr/lib"
need_lib_prefix=unknown
hardcode_into_libs=no
# when you set need_version to no, make sure it does not cause -set_version
# flags to be left without arguments
need_version=unknown
case $host_os in
aix3*)
version_type=linux # correct to gnu/linux during the next big refactor
library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
shlibpath_var=LIBPATH
# AIX 3 has no versioning support, so we append a major version to the name.
soname_spec='${libname}${release}${shared_ext}$major'
;;
aix[[4-9]]*)
version_type=linux # correct to gnu/linux during the next big refactor
need_lib_prefix=no
need_version=no
hardcode_into_libs=yes
if test "$host_cpu" = ia64; then
# AIX 5 supports IA64
library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
shlibpath_var=LD_LIBRARY_PATH
else
# With GCC up to 2.95.x, collect2 would create an import file
# for dependence libraries. The import file would start with
# the line `#! .'. This would cause the generated library to
# depend on `.', always an invalid library. This was fixed in
# development snapshots of GCC prior to 3.0.
case $host_os in
aix4 | aix4.[[01]] | aix4.[[01]].*)
if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
echo ' yes '
echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then
:
else
can_build_shared=no
fi
;;
esac
# AIX (on Power*) has no versioning support, so currently we can not hardcode correct
# soname into executable. Probably we can add versioning support to
# collect2, so additional links can be useful in future.
if test "$aix_use_runtimelinking" = yes; then
# If using run time linking (on AIX 4.2 or later) use lib.so
# instead of lib.a to let people know that these are not
# typical AIX shared libraries.
library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
else
# We preserve .a as extension for shared libraries through AIX4.2
# and later when we are not doing run time linking.
library_names_spec='${libname}${release}.a $libname.a'
soname_spec='${libname}${release}${shared_ext}$major'
fi
shlibpath_var=LIBPATH
fi
;;
amigaos*)
case $host_cpu in
powerpc)
# Since July 2007 AmigaOS4 officially supports .so libraries.
# When compiling the executable, add -use-dynld -Lsobjs: to the compileline.
library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
;;
m68k)
library_names_spec='$libname.ixlibrary $libname.a'
# Create ${libname}_ixlibrary.a entries in /sys/libs.
finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
;;
esac
;;
beos*)
library_names_spec='${libname}${shared_ext}'
dynamic_linker="$host_os ld.so"
shlibpath_var=LIBRARY_PATH
;;
bsdi[[45]]*)
version_type=linux # correct to gnu/linux during the next big refactor
need_version=no
library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
soname_spec='${libname}${release}${shared_ext}$major'
finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
shlibpath_var=LD_LIBRARY_PATH
sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
# the default ld.so.conf also contains /usr/contrib/lib and
# /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
# libtool to hard-code these into programs
;;
cygwin* | mingw* | pw32* | cegcc*)
version_type=windows
shrext_cmds=".dll"
need_version=no
need_lib_prefix=no
case $GCC,$cc_basename in
yes,*)
# gcc
library_names_spec='$libname.dll.a'
# DLL is installed to $(libdir)/../bin by postinstall_cmds
postinstall_cmds='base_file=`basename \${file}`~
dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
dldir=$destdir/`dirname \$dlpath`~
test -d \$dldir || mkdir -p \$dldir~
$install_prog $dir/$dlname \$dldir/$dlname~
chmod a+x \$dldir/$dlname~
if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
fi'
postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
dlpath=$dir/\$dldll~
$RM \$dlpath'
shlibpath_overrides_runpath=yes
case $host_os in
cygwin*)
# Cygwin DLLs use 'cyg' prefix rather than 'lib'
soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
m4_if([$1], [],[
sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"])
;;
mingw* | cegcc*)
# MinGW DLLs use traditional 'lib' prefix
soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
;;
pw32*)
# pw32 DLLs use 'pw' prefix rather than 'lib'
library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
;;
esac
dynamic_linker='Win32 ld.exe'
;;
*,cl*)
# Native MSVC
libname_spec='$name'
soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
library_names_spec='${libname}.dll.lib'
case $build_os in
mingw*)
sys_lib_search_path_spec=
lt_save_ifs=$IFS
IFS=';'
for lt_path in $LIB
do
IFS=$lt_save_ifs
# Let DOS variable expansion print the short 8.3 style file name.
lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"`
sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path"
done
IFS=$lt_save_ifs
# Convert to MSYS style.
sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'`
;;
cygwin*)
# Convert to unix form, then to dos form, then back to unix form
# but this time dos style (no spaces!) so that the unix form looks
# like /cygdrive/c/PROGRA~1:/cygdr...
sys_lib_search_path_spec=`cygpath --path --unix "$LIB"`
sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null`
sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
;;
*)
sys_lib_search_path_spec="$LIB"
if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then
# It is most probably a Windows format PATH.
sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
else
sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
fi
# FIXME: find the short name or the path components, as spaces are
# common. (e.g. "Program Files" -> "PROGRA~1")
;;
esac
# DLL is installed to $(libdir)/../bin by postinstall_cmds
postinstall_cmds='base_file=`basename \${file}`~
dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
dldir=$destdir/`dirname \$dlpath`~
test -d \$dldir || mkdir -p \$dldir~
$install_prog $dir/$dlname \$dldir/$dlname'
postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
dlpath=$dir/\$dldll~
$RM \$dlpath'
shlibpath_overrides_runpath=yes
dynamic_linker='Win32 link.exe'
;;
*)
# Assume MSVC wrapper
library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib'
dynamic_linker='Win32 ld.exe'
;;
esac
# FIXME: first we should search . and the directory the executable is in
shlibpath_var=PATH
;;
darwin* | rhapsody*)
dynamic_linker="$host_os dyld"
version_type=darwin
need_lib_prefix=no
need_version=no
library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext'
soname_spec='${libname}${release}${major}$shared_ext'
shlibpath_overrides_runpath=yes
shlibpath_var=DYLD_LIBRARY_PATH
shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
m4_if([$1], [],[
sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"])
sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
;;
dgux*)
version_type=linux # correct to gnu/linux during the next big refactor
need_lib_prefix=no
need_version=no
library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
soname_spec='${libname}${release}${shared_ext}$major'
shlibpath_var=LD_LIBRARY_PATH
;;
freebsd* | dragonfly*)
# DragonFly does not have aout. When/if they implement a new
# versioning mechanism, adjust this.
if test -x /usr/bin/objformat; then
objformat=`/usr/bin/objformat`
else
case $host_os in
freebsd[[23]].*) objformat=aout ;;
*) objformat=elf ;;
esac
fi
version_type=freebsd-$objformat
case $version_type in
freebsd-elf*)
library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
need_version=no
need_lib_prefix=no
;;
freebsd-*)
library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
need_version=yes
;;
esac
shlibpath_var=LD_LIBRARY_PATH
case $host_os in
freebsd2.*)
shlibpath_overrides_runpath=yes
;;
freebsd3.[[01]]* | freebsdelf3.[[01]]*)
shlibpath_overrides_runpath=yes
hardcode_into_libs=yes
;;
freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \
freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1)
shlibpath_overrides_runpath=no
hardcode_into_libs=yes
;;
*) # from 4.6 on, and DragonFly
shlibpath_overrides_runpath=yes
hardcode_into_libs=yes
;;
esac
;;
haiku*)
version_type=linux # correct to gnu/linux during the next big refactor
need_lib_prefix=no
need_version=no
dynamic_linker="$host_os runtime_loader"
library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
soname_spec='${libname}${release}${shared_ext}$major'
shlibpath_var=LIBRARY_PATH
shlibpath_overrides_runpath=yes
sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib'
hardcode_into_libs=yes
;;
hpux9* | hpux10* | hpux11*)
# Give a soname corresponding to the major version so that dld.sl refuses to
# link against other versions.
version_type=sunos
need_lib_prefix=no
need_version=no
case $host_cpu in
ia64*)
shrext_cmds='.so'
hardcode_into_libs=yes
dynamic_linker="$host_os dld.so"
shlibpath_var=LD_LIBRARY_PATH
shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
soname_spec='${libname}${release}${shared_ext}$major'
if test "X$HPUX_IA64_MODE" = X32; then
sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
else
sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
fi
sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
;;
hppa*64*)
shrext_cmds='.sl'
hardcode_into_libs=yes
dynamic_linker="$host_os dld.sl"
shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
soname_spec='${libname}${release}${shared_ext}$major'
sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
;;
*)
shrext_cmds='.sl'
dynamic_linker="$host_os dld.sl"
shlibpath_var=SHLIB_PATH
shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
soname_spec='${libname}${release}${shared_ext}$major'
;;
esac
# HP-UX runs *really* slowly unless shared libraries are mode 555, ...
postinstall_cmds='chmod 555 $lib'
# or fails outright, so override atomically:
install_override_mode=555
;;
interix[[3-9]]*)
version_type=linux # correct to gnu/linux during the next big refactor
need_lib_prefix=no
need_version=no
library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
soname_spec='${libname}${release}${shared_ext}$major'
dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
shlibpath_var=LD_LIBRARY_PATH
shlibpath_overrides_runpath=no
hardcode_into_libs=yes
;;
irix5* | irix6* | nonstopux*)
case $host_os in
nonstopux*) version_type=nonstopux ;;
*)
if test "$lt_cv_prog_gnu_ld" = yes; then
version_type=linux # correct to gnu/linux during the next big refactor
else
version_type=irix
fi ;;
esac
need_lib_prefix=no
need_version=no
soname_spec='${libname}${release}${shared_ext}$major'
library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
case $host_os in
irix5* | nonstopux*)
libsuff= shlibsuff=
;;
*)
case $LD in # libtool.m4 will add one of these switches to LD
*-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
libsuff= shlibsuff= libmagic=32-bit;;
*-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
libsuff=32 shlibsuff=N32 libmagic=N32;;
*-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
libsuff=64 shlibsuff=64 libmagic=64-bit;;
*) libsuff= shlibsuff= libmagic=never-match;;
esac
;;
esac
shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
shlibpath_overrides_runpath=no
sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
hardcode_into_libs=yes
;;
# No shared lib support for Linux oldld, aout, or coff.
linux*oldld* | linux*aout* | linux*coff*)
dynamic_linker=no
;;
# This must be glibc/ELF.
linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
version_type=linux # correct to gnu/linux during the next big refactor
need_lib_prefix=no
need_version=no
library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
soname_spec='${libname}${release}${shared_ext}$major'
finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
shlibpath_var=LD_LIBRARY_PATH
shlibpath_overrides_runpath=no
# Some binutils ld are patched to set DT_RUNPATH
AC_CACHE_VAL([lt_cv_shlibpath_overrides_runpath],
[lt_cv_shlibpath_overrides_runpath=no
save_LDFLAGS=$LDFLAGS
save_libdir=$libdir
eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \
LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\""
AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])],
[AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null],
[lt_cv_shlibpath_overrides_runpath=yes])])
LDFLAGS=$save_LDFLAGS
libdir=$save_libdir
])
shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath
# This implies no fast_install, which is unacceptable.
# Some rework will be needed to allow for fast_install
# before this can be enabled.
hardcode_into_libs=yes
# Append ld.so.conf contents to the search path
if test -f /etc/ld.so.conf; then
lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '`
sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
fi
# We used to test for /lib/ld.so.1 and disable shared libraries on
# powerpc, because MkLinux only supported shared libraries with the
# GNU dynamic linker. Since this was broken with cross compilers,
# most powerpc-linux boxes support dynamic linking these days and
# people can always --disable-shared, the test was removed, and we
# assume the GNU/Linux dynamic linker is in use.
dynamic_linker='GNU/Linux ld.so'
;;
netbsdelf*-gnu)
version_type=linux
need_lib_prefix=no
need_version=no
library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
soname_spec='${libname}${release}${shared_ext}$major'
shlibpath_var=LD_LIBRARY_PATH
shlibpath_overrides_runpath=no
hardcode_into_libs=yes
dynamic_linker='NetBSD ld.elf_so'
;;
netbsd*)
version_type=sunos
need_lib_prefix=no
need_version=no
if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
dynamic_linker='NetBSD (a.out) ld.so'
else
library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
soname_spec='${libname}${release}${shared_ext}$major'
dynamic_linker='NetBSD ld.elf_so'
fi
shlibpath_var=LD_LIBRARY_PATH
shlibpath_overrides_runpath=yes
hardcode_into_libs=yes
;;
newsos6)
version_type=linux # correct to gnu/linux during the next big refactor
library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
shlibpath_var=LD_LIBRARY_PATH
shlibpath_overrides_runpath=yes
;;
*nto* | *qnx*)
version_type=qnx
need_lib_prefix=no
need_version=no
library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
soname_spec='${libname}${release}${shared_ext}$major'
shlibpath_var=LD_LIBRARY_PATH
shlibpath_overrides_runpath=no
hardcode_into_libs=yes
dynamic_linker='ldqnx.so'
;;
openbsd*)
version_type=sunos
sys_lib_dlsearch_path_spec="/usr/lib"
need_lib_prefix=no
# Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
case $host_os in
openbsd3.3 | openbsd3.3.*) need_version=yes ;;
*) need_version=no ;;
esac
library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
shlibpath_var=LD_LIBRARY_PATH
if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
case $host_os in
openbsd2.[[89]] | openbsd2.[[89]].*)
shlibpath_overrides_runpath=no
;;
*)
shlibpath_overrides_runpath=yes
;;
esac
else
shlibpath_overrides_runpath=yes
fi
;;
os2*)
libname_spec='$name'
shrext_cmds=".dll"
need_lib_prefix=no
library_names_spec='$libname${shared_ext} $libname.a'
dynamic_linker='OS/2 ld.exe'
shlibpath_var=LIBPATH
;;
osf3* | osf4* | osf5*)
version_type=osf
need_lib_prefix=no
need_version=no
soname_spec='${libname}${release}${shared_ext}$major'
library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
shlibpath_var=LD_LIBRARY_PATH
sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
;;
rdos*)
dynamic_linker=no
;;
solaris*)
version_type=linux # correct to gnu/linux during the next big refactor
need_lib_prefix=no
need_version=no
library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
soname_spec='${libname}${release}${shared_ext}$major'
shlibpath_var=LD_LIBRARY_PATH
shlibpath_overrides_runpath=yes
hardcode_into_libs=yes
# ldd complains unless libraries are executable
postinstall_cmds='chmod +x $lib'
;;
sunos4*)
version_type=sunos
library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
shlibpath_var=LD_LIBRARY_PATH
shlibpath_overrides_runpath=yes
if test "$with_gnu_ld" = yes; then
need_lib_prefix=no
fi
need_version=yes
;;
sysv4 | sysv4.3*)
version_type=linux # correct to gnu/linux during the next big refactor
library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
soname_spec='${libname}${release}${shared_ext}$major'
shlibpath_var=LD_LIBRARY_PATH
case $host_vendor in
sni)
shlibpath_overrides_runpath=no
need_lib_prefix=no
runpath_var=LD_RUN_PATH
;;
siemens)
need_lib_prefix=no
;;
motorola)
need_lib_prefix=no
need_version=no
shlibpath_overrides_runpath=no
sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
;;
esac
;;
sysv4*MP*)
if test -d /usr/nec ;then
version_type=linux # correct to gnu/linux during the next big refactor
library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
soname_spec='$libname${shared_ext}.$major'
shlibpath_var=LD_LIBRARY_PATH
fi
;;
sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
version_type=freebsd-elf
need_lib_prefix=no
need_version=no
library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
soname_spec='${libname}${release}${shared_ext}$major'
shlibpath_var=LD_LIBRARY_PATH
shlibpath_overrides_runpath=yes
hardcode_into_libs=yes
if test "$with_gnu_ld" = yes; then
sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
else
sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
case $host_os in
sco3.2v5*)
sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
;;
esac
fi
sys_lib_dlsearch_path_spec='/usr/lib'
;;
tpf*)
# TPF is a cross-target only. Preferred cross-host = GNU/Linux.
version_type=linux # correct to gnu/linux during the next big refactor
need_lib_prefix=no
need_version=no
library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
shlibpath_var=LD_LIBRARY_PATH
shlibpath_overrides_runpath=no
hardcode_into_libs=yes
;;
uts4*)
version_type=linux # correct to gnu/linux during the next big refactor
library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
soname_spec='${libname}${release}${shared_ext}$major'
shlibpath_var=LD_LIBRARY_PATH
;;
*)
dynamic_linker=no
;;
esac
AC_MSG_RESULT([$dynamic_linker])
test "$dynamic_linker" = no && can_build_shared=no
variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
if test "$GCC" = yes; then
variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
fi
if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then
sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec"
fi
if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then
sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec"
fi
_LT_DECL([], [variables_saved_for_relink], [1],
[Variables whose values should be saved in libtool wrapper scripts and
restored at link time])
_LT_DECL([], [need_lib_prefix], [0],
[Do we need the "lib" prefix for modules?])
_LT_DECL([], [need_version], [0], [Do we need a version for libraries?])
_LT_DECL([], [version_type], [0], [Library versioning type])
_LT_DECL([], [runpath_var], [0], [Shared library runtime path variable])
_LT_DECL([], [shlibpath_var], [0],[Shared library path variable])
_LT_DECL([], [shlibpath_overrides_runpath], [0],
[Is shlibpath searched before the hard-coded library search path?])
_LT_DECL([], [libname_spec], [1], [Format of library name prefix])
_LT_DECL([], [library_names_spec], [1],
[[List of archive names. First name is the real one, the rest are links.
The last name is the one that the linker finds with -lNAME]])
_LT_DECL([], [soname_spec], [1],
[[The coded name of the library, if different from the real name]])
_LT_DECL([], [install_override_mode], [1],
[Permission mode override for installation of shared libraries])
_LT_DECL([], [postinstall_cmds], [2],
[Command to use after installation of a shared archive])
_LT_DECL([], [postuninstall_cmds], [2],
[Command to use after uninstallation of a shared archive])
_LT_DECL([], [finish_cmds], [2],
[Commands used to finish a libtool library installation in a directory])
_LT_DECL([], [finish_eval], [1],
[[As "finish_cmds", except a single script fragment to be evaled but
not shown]])
_LT_DECL([], [hardcode_into_libs], [0],
[Whether we should hardcode library paths into libraries])
_LT_DECL([], [sys_lib_search_path_spec], [2],
[Compile-time system search path for libraries])
_LT_DECL([], [sys_lib_dlsearch_path_spec], [2],
[Run-time system search path for libraries])
])# _LT_SYS_DYNAMIC_LINKER
# _LT_PATH_TOOL_PREFIX(TOOL)
# --------------------------
# find a file program which can recognize shared library
AC_DEFUN([_LT_PATH_TOOL_PREFIX],
[m4_require([_LT_DECL_EGREP])dnl
AC_MSG_CHECKING([for $1])
AC_CACHE_VAL(lt_cv_path_MAGIC_CMD,
[case $MAGIC_CMD in
[[\\/*] | ?:[\\/]*])
lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
;;
*)
lt_save_MAGIC_CMD="$MAGIC_CMD"
lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
dnl $ac_dummy forces splitting on constant user-supplied paths.
dnl POSIX.2 word splitting is done only on the output of word expansions,
dnl not every word. This closes a longstanding sh security hole.
ac_dummy="m4_if([$2], , $PATH, [$2])"
for ac_dir in $ac_dummy; do
IFS="$lt_save_ifs"
test -z "$ac_dir" && ac_dir=.
if test -f $ac_dir/$1; then
lt_cv_path_MAGIC_CMD="$ac_dir/$1"
if test -n "$file_magic_test_file"; then
case $deplibs_check_method in
"file_magic "*)
file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
$EGREP "$file_magic_regex" > /dev/null; then
:
else
cat <<_LT_EOF 1>&2
*** Warning: the command libtool uses to detect shared libraries,
*** $file_magic_cmd, produces output that libtool cannot recognize.
*** The result is that libtool may fail to recognize shared libraries
*** as such. This will affect the creation of libtool libraries that
*** depend on shared libraries, but programs linked with such libtool
*** libraries will work regardless of this problem. Nevertheless, you
*** may want to report the problem to your system manager and/or to
*** bug-libtool@gnu.org
_LT_EOF
fi ;;
esac
fi
break
fi
done
IFS="$lt_save_ifs"
MAGIC_CMD="$lt_save_MAGIC_CMD"
;;
esac])
MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
if test -n "$MAGIC_CMD"; then
AC_MSG_RESULT($MAGIC_CMD)
else
AC_MSG_RESULT(no)
fi
_LT_DECL([], [MAGIC_CMD], [0],
[Used to examine libraries when file_magic_cmd begins with "file"])dnl
])# _LT_PATH_TOOL_PREFIX
# Old name:
AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX])
dnl aclocal-1.4 backwards compatibility:
dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], [])
# _LT_PATH_MAGIC
# --------------
# find a file program which can recognize a shared library
m4_defun([_LT_PATH_MAGIC],
[_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH)
if test -z "$lt_cv_path_MAGIC_CMD"; then
if test -n "$ac_tool_prefix"; then
_LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH)
else
MAGIC_CMD=:
fi
fi
])# _LT_PATH_MAGIC
# LT_PATH_LD
# ----------
# find the pathname to the GNU or non-GNU linker
AC_DEFUN([LT_PATH_LD],
[AC_REQUIRE([AC_PROG_CC])dnl
AC_REQUIRE([AC_CANONICAL_HOST])dnl
AC_REQUIRE([AC_CANONICAL_BUILD])dnl
m4_require([_LT_DECL_SED])dnl
m4_require([_LT_DECL_EGREP])dnl
m4_require([_LT_PROG_ECHO_BACKSLASH])dnl
AC_ARG_WITH([gnu-ld],
[AS_HELP_STRING([--with-gnu-ld],
[assume the C compiler uses GNU ld @<:@default=no@:>@])],
[test "$withval" = no || with_gnu_ld=yes],
[with_gnu_ld=no])dnl
ac_prog=ld
if test "$GCC" = yes; then
# Check if gcc -print-prog-name=ld gives a path.
AC_MSG_CHECKING([for ld used by $CC])
case $host in
*-*-mingw*)
# gcc leaves a trailing carriage return which upsets mingw
ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
*)
ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
esac
case $ac_prog in
# Accept absolute paths.
[[\\/]]* | ?:[[\\/]]*)
re_direlt='/[[^/]][[^/]]*/\.\./'
# Canonicalize the pathname of ld
ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'`
while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do
ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"`
done
test -z "$LD" && LD="$ac_prog"
;;
"")
# If it fails, then pretend we aren't using GCC.
ac_prog=ld
;;
*)
# If it is relative, then search for the first ld in PATH.
with_gnu_ld=unknown
;;
esac
elif test "$with_gnu_ld" = yes; then
AC_MSG_CHECKING([for GNU ld])
else
AC_MSG_CHECKING([for non-GNU ld])
fi
AC_CACHE_VAL(lt_cv_path_LD,
[if test -z "$LD"; then
lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
for ac_dir in $PATH; do
IFS="$lt_save_ifs"
test -z "$ac_dir" && ac_dir=.
if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
lt_cv_path_LD="$ac_dir/$ac_prog"
# Check to see if the program is GNU ld. I'd rather use --version,
# but apparently some variants of GNU ld only accept -v.
# Break only if it was the GNU/non-GNU ld that we prefer.
case `"$lt_cv_path_LD" -v 2>&1 &1 /dev/null 2>&1; then
lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
lt_cv_file_magic_cmd='func_win32_libid'
else
# Keep this pattern in sync with the one in func_win32_libid.
lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)'
lt_cv_file_magic_cmd='$OBJDUMP -f'
fi
;;
cegcc*)
# use the weaker test based on 'objdump'. See mingw*.
lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?'
lt_cv_file_magic_cmd='$OBJDUMP -f'
;;
darwin* | rhapsody*)
lt_cv_deplibs_check_method=pass_all
;;
freebsd* | dragonfly*)
if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
case $host_cpu in
i*86 )
# Not sure whether the presence of OpenBSD here was a mistake.
# Let's accept both of them until this is cleared up.
lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library'
lt_cv_file_magic_cmd=/usr/bin/file
lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
;;
esac
else
lt_cv_deplibs_check_method=pass_all
fi
;;
haiku*)
lt_cv_deplibs_check_method=pass_all
;;
hpux10.20* | hpux11*)
lt_cv_file_magic_cmd=/usr/bin/file
case $host_cpu in
ia64*)
lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64'
lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
;;
hppa*64*)
[lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]']
lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
;;
*)
lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]]\.[[0-9]]) shared library'
lt_cv_file_magic_test_file=/usr/lib/libc.sl
;;
esac
;;
interix[[3-9]]*)
# PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here
lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$'
;;
irix5* | irix6* | nonstopux*)
case $LD in
*-32|*"-32 ") libmagic=32-bit;;
*-n32|*"-n32 ") libmagic=N32;;
*-64|*"-64 ") libmagic=64-bit;;
*) libmagic=never-match;;
esac
lt_cv_deplibs_check_method=pass_all
;;
# This must be glibc/ELF.
linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
lt_cv_deplibs_check_method=pass_all
;;
netbsd* | netbsdelf*-gnu)
if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
else
lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$'
fi
;;
newos6*)
lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)'
lt_cv_file_magic_cmd=/usr/bin/file
lt_cv_file_magic_test_file=/usr/lib/libnls.so
;;
*nto* | *qnx*)
lt_cv_deplibs_check_method=pass_all
;;
openbsd*)
if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$'
else
lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
fi
;;
osf3* | osf4* | osf5*)
lt_cv_deplibs_check_method=pass_all
;;
rdos*)
lt_cv_deplibs_check_method=pass_all
;;
solaris*)
lt_cv_deplibs_check_method=pass_all
;;
sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
lt_cv_deplibs_check_method=pass_all
;;
sysv4 | sysv4.3*)
case $host_vendor in
motorola)
lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]'
lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
;;
ncr)
lt_cv_deplibs_check_method=pass_all
;;
sequent)
lt_cv_file_magic_cmd='/bin/file'
lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )'
;;
sni)
lt_cv_file_magic_cmd='/bin/file'
lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib"
lt_cv_file_magic_test_file=/lib/libc.so
;;
siemens)
lt_cv_deplibs_check_method=pass_all
;;
pc)
lt_cv_deplibs_check_method=pass_all
;;
esac
;;
tpf*)
lt_cv_deplibs_check_method=pass_all
;;
esac
])
file_magic_glob=
want_nocaseglob=no
if test "$build" = "$host"; then
case $host_os in
mingw* | pw32*)
if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then
want_nocaseglob=yes
else
file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[[\1]]\/[[\1]]\/g;/g"`
fi
;;
esac
fi
file_magic_cmd=$lt_cv_file_magic_cmd
deplibs_check_method=$lt_cv_deplibs_check_method
test -z "$deplibs_check_method" && deplibs_check_method=unknown
_LT_DECL([], [deplibs_check_method], [1],
[Method to check whether dependent libraries are shared objects])
_LT_DECL([], [file_magic_cmd], [1],
[Command to use when deplibs_check_method = "file_magic"])
_LT_DECL([], [file_magic_glob], [1],
[How to find potential files when deplibs_check_method = "file_magic"])
_LT_DECL([], [want_nocaseglob], [1],
[Find potential files using nocaseglob when deplibs_check_method = "file_magic"])
])# _LT_CHECK_MAGIC_METHOD
# LT_PATH_NM
# ----------
# find the pathname to a BSD- or MS-compatible name lister
AC_DEFUN([LT_PATH_NM],
[AC_REQUIRE([AC_PROG_CC])dnl
AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM,
[if test -n "$NM"; then
# Let the user override the test.
lt_cv_path_NM="$NM"
else
lt_nm_to_check="${ac_tool_prefix}nm"
if test -n "$ac_tool_prefix" && test "$build" = "$host"; then
lt_nm_to_check="$lt_nm_to_check nm"
fi
for lt_tmp_nm in $lt_nm_to_check; do
lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
IFS="$lt_save_ifs"
test -z "$ac_dir" && ac_dir=.
tmp_nm="$ac_dir/$lt_tmp_nm"
if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then
# Check to see if the nm accepts a BSD-compat flag.
# Adding the `sed 1q' prevents false positives on HP-UX, which says:
# nm: unknown option "B" ignored
# Tru64's nm complains that /dev/null is an invalid object file
case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in
*/dev/null* | *'Invalid file or object type'*)
lt_cv_path_NM="$tmp_nm -B"
break
;;
*)
case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
*/dev/null*)
lt_cv_path_NM="$tmp_nm -p"
break
;;
*)
lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
continue # so that we can try to find one that supports BSD flags
;;
esac
;;
esac
fi
done
IFS="$lt_save_ifs"
done
: ${lt_cv_path_NM=no}
fi])
if test "$lt_cv_path_NM" != "no"; then
NM="$lt_cv_path_NM"
else
# Didn't find any BSD compatible name lister, look for dumpbin.
if test -n "$DUMPBIN"; then :
# Let the user override the test.
else
AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :)
case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in
*COFF*)
DUMPBIN="$DUMPBIN -symbols"
;;
*)
DUMPBIN=:
;;
esac
fi
AC_SUBST([DUMPBIN])
if test "$DUMPBIN" != ":"; then
NM="$DUMPBIN"
fi
fi
test -z "$NM" && NM=nm
AC_SUBST([NM])
_LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl
AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface],
[lt_cv_nm_interface="BSD nm"
echo "int some_variable = 0;" > conftest.$ac_ext
(eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&AS_MESSAGE_LOG_FD)
(eval "$ac_compile" 2>conftest.err)
cat conftest.err >&AS_MESSAGE_LOG_FD
(eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD)
(eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
cat conftest.err >&AS_MESSAGE_LOG_FD
(eval echo "\"\$as_me:$LINENO: output\"" >&AS_MESSAGE_LOG_FD)
cat conftest.out >&AS_MESSAGE_LOG_FD
if $GREP 'External.*some_variable' conftest.out > /dev/null; then
lt_cv_nm_interface="MS dumpbin"
fi
rm -f conftest*])
])# LT_PATH_NM
# Old names:
AU_ALIAS([AM_PROG_NM], [LT_PATH_NM])
AU_ALIAS([AC_PROG_NM], [LT_PATH_NM])
dnl aclocal-1.4 backwards compatibility:
dnl AC_DEFUN([AM_PROG_NM], [])
dnl AC_DEFUN([AC_PROG_NM], [])
# _LT_CHECK_SHAREDLIB_FROM_LINKLIB
# --------------------------------
# how to determine the name of the shared library
# associated with a specific link library.
# -- PORTME fill in with the dynamic library characteristics
m4_defun([_LT_CHECK_SHAREDLIB_FROM_LINKLIB],
[m4_require([_LT_DECL_EGREP])
m4_require([_LT_DECL_OBJDUMP])
m4_require([_LT_DECL_DLLTOOL])
AC_CACHE_CHECK([how to associate runtime and link libraries],
lt_cv_sharedlib_from_linklib_cmd,
[lt_cv_sharedlib_from_linklib_cmd='unknown'
case $host_os in
cygwin* | mingw* | pw32* | cegcc*)
# two different shell functions defined in ltmain.sh
# decide which to use based on capabilities of $DLLTOOL
case `$DLLTOOL --help 2>&1` in
*--identify-strict*)
lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib
;;
*)
lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback
;;
esac
;;
*)
# fallback: assume linklib IS sharedlib
lt_cv_sharedlib_from_linklib_cmd="$ECHO"
;;
esac
])
sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd
test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO
_LT_DECL([], [sharedlib_from_linklib_cmd], [1],
[Command to associate shared and link libraries])
])# _LT_CHECK_SHAREDLIB_FROM_LINKLIB
# _LT_PATH_MANIFEST_TOOL
# ----------------------
# locate the manifest tool
m4_defun([_LT_PATH_MANIFEST_TOOL],
[AC_CHECK_TOOL(MANIFEST_TOOL, mt, :)
test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt
AC_CACHE_CHECK([if $MANIFEST_TOOL is a manifest tool], [lt_cv_path_mainfest_tool],
[lt_cv_path_mainfest_tool=no
echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&AS_MESSAGE_LOG_FD
$MANIFEST_TOOL '-?' 2>conftest.err > conftest.out
cat conftest.err >&AS_MESSAGE_LOG_FD
if $GREP 'Manifest Tool' conftest.out > /dev/null; then
lt_cv_path_mainfest_tool=yes
fi
rm -f conftest*])
if test "x$lt_cv_path_mainfest_tool" != xyes; then
MANIFEST_TOOL=:
fi
_LT_DECL([], [MANIFEST_TOOL], [1], [Manifest tool])dnl
])# _LT_PATH_MANIFEST_TOOL
# LT_LIB_M
# --------
# check for math library
AC_DEFUN([LT_LIB_M],
[AC_REQUIRE([AC_CANONICAL_HOST])dnl
LIBM=
case $host in
*-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-pw32* | *-*-darwin*)
# These system don't have libm, or don't need it
;;
*-ncr-sysv4.3*)
AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw")
AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm")
;;
*)
AC_CHECK_LIB(m, cos, LIBM="-lm")
;;
esac
AC_SUBST([LIBM])
])# LT_LIB_M
# Old name:
AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M])
dnl aclocal-1.4 backwards compatibility:
dnl AC_DEFUN([AC_CHECK_LIBM], [])
# _LT_COMPILER_NO_RTTI([TAGNAME])
# -------------------------------
m4_defun([_LT_COMPILER_NO_RTTI],
[m4_require([_LT_TAG_COMPILER])dnl
_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
if test "$GCC" = yes; then
case $cc_basename in
nvcc*)
_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -Xcompiler -fno-builtin' ;;
*)
_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' ;;
esac
_LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions],
lt_cv_prog_compiler_rtti_exceptions,
[-fno-rtti -fno-exceptions], [],
[_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"])
fi
_LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1],
[Compiler flag to turn off builtin functions])
])# _LT_COMPILER_NO_RTTI
# _LT_CMD_GLOBAL_SYMBOLS
# ----------------------
m4_defun([_LT_CMD_GLOBAL_SYMBOLS],
[AC_REQUIRE([AC_CANONICAL_HOST])dnl
AC_REQUIRE([AC_PROG_CC])dnl
AC_REQUIRE([AC_PROG_AWK])dnl
AC_REQUIRE([LT_PATH_NM])dnl
AC_REQUIRE([LT_PATH_LD])dnl
m4_require([_LT_DECL_SED])dnl
m4_require([_LT_DECL_EGREP])dnl
m4_require([_LT_TAG_COMPILER])dnl
# Check for command to grab the raw symbol name followed by C symbol from nm.
AC_MSG_CHECKING([command to parse $NM output from $compiler object])
AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe],
[
# These are sane defaults that work on at least a few old systems.
# [They come from Ultrix. What could be older than Ultrix?!! ;)]
# Character class describing NM global symbol codes.
symcode='[[BCDEGRST]]'
# Regexp to match symbols that can be accessed directly from C.
sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)'
# Define system-specific variables.
case $host_os in
aix*)
symcode='[[BCDT]]'
;;
cygwin* | mingw* | pw32* | cegcc*)
symcode='[[ABCDGISTW]]'
;;
hpux*)
if test "$host_cpu" = ia64; then
symcode='[[ABCDEGRST]]'
fi
;;
irix* | nonstopux*)
symcode='[[BCDEGRST]]'
;;
osf*)
symcode='[[BCDEGQRST]]'
;;
solaris*)
symcode='[[BDRT]]'
;;
sco3.2v5*)
symcode='[[DT]]'
;;
sysv4.2uw2*)
symcode='[[DT]]'
;;
sysv5* | sco5v6* | unixware* | OpenUNIX*)
symcode='[[ABDT]]'
;;
sysv4)
symcode='[[DFNSTU]]'
;;
esac
# If we're using GNU nm, then use its standard symbol codes.
case `$NM -V 2>&1` in
*GNU* | *'with BFD'*)
symcode='[[ABCDGIRSTW]]' ;;
esac
# Transform an extracted symbol line into a proper C declaration.
# Some systems (esp. on ia64) link data and code symbols differently,
# so use this general approach.
lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
# Transform an extracted symbol line into symbol name and symbol address
lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p'"
lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"lib\2\", (void *) \&\2},/p'"
# Handle CRLF in mingw tool chain
opt_cr=
case $build_os in
mingw*)
opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp
;;
esac
# Try without a prefix underscore, then with it.
for ac_symprfx in "" "_"; do
# Transform symcode, sympat, and symprfx into a raw symbol and a C symbol.
symxfrm="\\1 $ac_symprfx\\2 \\2"
# Write the raw and C identifiers.
if test "$lt_cv_nm_interface" = "MS dumpbin"; then
# Fake it for dumpbin and say T for any non-static function
# and D for any global variable.
# Also find C++ and __fastcall symbols from MSVC++,
# which start with @ or ?.
lt_cv_sys_global_symbol_pipe="$AWK ['"\
" {last_section=section; section=\$ 3};"\
" /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\
" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\
" \$ 0!~/External *\|/{next};"\
" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\
" {if(hide[section]) next};"\
" {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\
" {split(\$ 0, a, /\||\r/); split(a[2], s)};"\
" s[1]~/^[@?]/{print s[1], s[1]; next};"\
" s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\
" ' prfx=^$ac_symprfx]"
else
lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
fi
lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'"
# Check to see that the pipe works correctly.
pipe_works=no
rm -f conftest*
cat > conftest.$ac_ext <<_LT_EOF
#ifdef __cplusplus
extern "C" {
#endif
char nm_test_var;
void nm_test_func(void);
void nm_test_func(void){}
#ifdef __cplusplus
}
#endif
int main(){nm_test_var='a';nm_test_func();return(0);}
_LT_EOF
if AC_TRY_EVAL(ac_compile); then
# Now try to grab the symbols.
nlist=conftest.nm
if AC_TRY_EVAL(NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) && test -s "$nlist"; then
# Try sorting and uniquifying the output.
if sort "$nlist" | uniq > "$nlist"T; then
mv -f "$nlist"T "$nlist"
else
rm -f "$nlist"T
fi
# Make sure that we snagged all the symbols we need.
if $GREP ' nm_test_var$' "$nlist" >/dev/null; then
if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
cat <<_LT_EOF > conftest.$ac_ext
/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */
#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE)
/* DATA imports from DLLs on WIN32 con't be const, because runtime
relocations are performed -- see ld's documentation on pseudo-relocs. */
# define LT@&t@_DLSYM_CONST
#elif defined(__osf__)
/* This system does not cope well with relocations in const data. */
# define LT@&t@_DLSYM_CONST
#else
# define LT@&t@_DLSYM_CONST const
#endif
#ifdef __cplusplus
extern "C" {
#endif
_LT_EOF
# Now generate the symbol file.
eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext'
cat <<_LT_EOF >> conftest.$ac_ext
/* The mapping between symbol names and symbols. */
LT@&t@_DLSYM_CONST struct {
const char *name;
void *address;
}
lt__PROGRAM__LTX_preloaded_symbols[[]] =
{
{ "@PROGRAM@", (void *) 0 },
_LT_EOF
$SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext
cat <<\_LT_EOF >> conftest.$ac_ext
{0, (void *) 0}
};
/* This works around a problem in FreeBSD linker */
#ifdef FREEBSD_WORKAROUND
static const void *lt_preloaded_setup() {
return lt__PROGRAM__LTX_preloaded_symbols;
}
#endif
#ifdef __cplusplus
}
#endif
_LT_EOF
# Now try linking the two files.
mv conftest.$ac_objext conftstm.$ac_objext
lt_globsym_save_LIBS=$LIBS
lt_globsym_save_CFLAGS=$CFLAGS
LIBS="conftstm.$ac_objext"
CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)"
if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then
pipe_works=yes
fi
LIBS=$lt_globsym_save_LIBS
CFLAGS=$lt_globsym_save_CFLAGS
else
echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD
fi
else
echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD
fi
else
echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD
fi
else
echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD
cat conftest.$ac_ext >&5
fi
rm -rf conftest* conftst*
# Do not use the global_symbol_pipe unless it works.
if test "$pipe_works" = yes; then
break
else
lt_cv_sys_global_symbol_pipe=
fi
done
])
if test -z "$lt_cv_sys_global_symbol_pipe"; then
lt_cv_sys_global_symbol_to_cdecl=
fi
if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
AC_MSG_RESULT(failed)
else
AC_MSG_RESULT(ok)
fi
# Response file support.
if test "$lt_cv_nm_interface" = "MS dumpbin"; then
nm_file_list_spec='@'
elif $NM --help 2>/dev/null | grep '[[@]]FILE' >/dev/null; then
nm_file_list_spec='@'
fi
_LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1],
[Take the output of nm and produce a listing of raw symbols and C names])
_LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1],
[Transform the output of nm in a proper C declaration])
_LT_DECL([global_symbol_to_c_name_address],
[lt_cv_sys_global_symbol_to_c_name_address], [1],
[Transform the output of nm in a C name address pair])
_LT_DECL([global_symbol_to_c_name_address_lib_prefix],
[lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1],
[Transform the output of nm in a C name address pair when lib prefix is needed])
_LT_DECL([], [nm_file_list_spec], [1],
[Specify filename containing input files for $NM])
]) # _LT_CMD_GLOBAL_SYMBOLS
# _LT_COMPILER_PIC([TAGNAME])
# ---------------------------
m4_defun([_LT_COMPILER_PIC],
[m4_require([_LT_TAG_COMPILER])dnl
_LT_TAGVAR(lt_prog_compiler_wl, $1)=
_LT_TAGVAR(lt_prog_compiler_pic, $1)=
_LT_TAGVAR(lt_prog_compiler_static, $1)=
m4_if([$1], [CXX], [
# C++ specific cases for pic, static, wl, etc.
if test "$GXX" = yes; then
_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
_LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
case $host_os in
aix*)
# All AIX code is PIC.
if test "$host_cpu" = ia64; then
# AIX 5 now supports IA64 processor
_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
fi
;;
amigaos*)
case $host_cpu in
powerpc)
# see comment about AmigaOS4 .so support
_LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
;;
m68k)
# FIXME: we need at least 68020 code to build shared libraries, but
# adding the `-m68020' flag to GCC prevents building anything better,
# like `-m68040'.
_LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
;;
esac
;;
beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
# PIC is the default for these OSes.
;;
mingw* | cygwin* | os2* | pw32* | cegcc*)
# This hack is so that the source file can tell whether it is being
# built for inclusion in a dll (and should export symbols for example).
# Although the cygwin gcc ignores -fPIC, still need this for old-style
# (--disable-auto-import) libraries
m4_if([$1], [GCJ], [],
[_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
;;
darwin* | rhapsody*)
# PIC is the default on this platform
# Common symbols not allowed in MH_DYLIB files
_LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
;;
*djgpp*)
# DJGPP does not support shared libraries at all
_LT_TAGVAR(lt_prog_compiler_pic, $1)=
;;
haiku*)
# PIC is the default for Haiku.
# The "-static" flag exists, but is broken.
_LT_TAGVAR(lt_prog_compiler_static, $1)=
;;
interix[[3-9]]*)
# Interix 3.x gcc -fpic/-fPIC options generate broken code.
# Instead, we relocate shared libraries at runtime.
;;
sysv4*MP*)
if test -d /usr/nec; then
_LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
fi
;;
hpux*)
# PIC is the default for 64-bit PA HP-UX, but not for 32-bit
# PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag
# sets the default TLS model and affects inlining.
case $host_cpu in
hppa*64*)
;;
*)
_LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
;;
esac
;;
*qnx* | *nto*)
# QNX uses GNU C++, but need to define -shared option too, otherwise
# it will coredump.
_LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
;;
*)
_LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
;;
esac
else
case $host_os in
aix[[4-9]]*)
# All AIX code is PIC.
if test "$host_cpu" = ia64; then
# AIX 5 now supports IA64 processor
_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
else
_LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
fi
;;
chorus*)
case $cc_basename in
cxch68*)
# Green Hills C++ Compiler
# _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a"
;;
esac
;;
mingw* | cygwin* | os2* | pw32* | cegcc*)
# This hack is so that the source file can tell whether it is being
# built for inclusion in a dll (and should export symbols for example).
m4_if([$1], [GCJ], [],
[_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
;;
dgux*)
case $cc_basename in
ec++*)
_LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
;;
ghcx*)
# Green Hills C++ Compiler
_LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
;;
*)
;;
esac
;;
freebsd* | dragonfly*)
# FreeBSD uses GNU C++
;;
hpux9* | hpux10* | hpux11*)
case $cc_basename in
CC*)
_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
_LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
if test "$host_cpu" != ia64; then
_LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
fi
;;
aCC*)
_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
_LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
case $host_cpu in
hppa*64*|ia64*)
# +Z the default
;;
*)
_LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
;;
esac
;;
*)
;;
esac
;;
interix*)
# This is c89, which is MS Visual C++ (no shared libs)
# Anyone wants to do a port?
;;
irix5* | irix6* | nonstopux*)
case $cc_basename in
CC*)
_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
_LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
# CC pic flag -KPIC is the default.
;;
*)
;;
esac
;;
linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
case $cc_basename in
KCC*)
# KAI C++ Compiler
_LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
_LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
;;
ecpc* )
# old Intel C++ for x86_64 which still supported -KPIC.
_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
_LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
_LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
;;
icpc* )
# Intel C++, used to be incompatible with GCC.
# ICC 10 doesn't accept -KPIC any more.
_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
_LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
_LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
;;
pgCC* | pgcpp*)
# Portland Group C++ compiler
_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
_LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
;;
cxx*)
# Compaq C++
# Make sure the PIC flag is empty. It appears that all Alpha
# Linux and Compaq Tru64 Unix objects are PIC.
_LT_TAGVAR(lt_prog_compiler_pic, $1)=
_LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
;;
xlc* | xlC* | bgxl[[cC]]* | mpixl[[cC]]*)
# IBM XL 8.0, 9.0 on PPC and BlueGene
_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
_LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic'
_LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink'
;;
*)
case `$CC -V 2>&1 | sed 5q` in
*Sun\ C*)
# Sun C++ 5.9
_LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
;;
esac
;;
esac
;;
lynxos*)
;;
m88k*)
;;
mvs*)
case $cc_basename in
cxx*)
_LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall'
;;
*)
;;
esac
;;
netbsd* | netbsdelf*-gnu)
;;
*qnx* | *nto*)
# QNX uses GNU C++, but need to define -shared option too, otherwise
# it will coredump.
_LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
;;
osf3* | osf4* | osf5*)
case $cc_basename in
KCC*)
_LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
;;
RCC*)
# Rational C++ 2.4.1
_LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
;;
cxx*)
# Digital/Compaq C++
_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
# Make sure the PIC flag is empty. It appears that all Alpha
# Linux and Compaq Tru64 Unix objects are PIC.
_LT_TAGVAR(lt_prog_compiler_pic, $1)=
_LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
;;
*)
;;
esac
;;
psos*)
;;
solaris*)
case $cc_basename in
CC* | sunCC*)
# Sun C++ 4.2, 5.x and Centerline C++
_LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
;;
gcx*)
# Green Hills C++ Compiler
_LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
;;
*)
;;
esac
;;
sunos4*)
case $cc_basename in
CC*)
# Sun C++ 4.x
_LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
;;
lcc*)
# Lucid
_LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
;;
*)
;;
esac
;;
sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
case $cc_basename in
CC*)
_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
_LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
;;
esac
;;
tandem*)
case $cc_basename in
NCC*)
# NonStop-UX NCC 3.20
_LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
;;
*)
;;
esac
;;
vxworks*)
;;
*)
_LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
;;
esac
fi
],
[
if test "$GCC" = yes; then
_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
_LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
case $host_os in
aix*)
# All AIX code is PIC.
if test "$host_cpu" = ia64; then
# AIX 5 now supports IA64 processor
_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
fi
;;
amigaos*)
case $host_cpu in
powerpc)
# see comment about AmigaOS4 .so support
_LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
;;
m68k)
# FIXME: we need at least 68020 code to build shared libraries, but
# adding the `-m68020' flag to GCC prevents building anything better,
# like `-m68040'.
_LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
;;
esac
;;
beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
# PIC is the default for these OSes.
;;
mingw* | cygwin* | pw32* | os2* | cegcc*)
# This hack is so that the source file can tell whether it is being
# built for inclusion in a dll (and should export symbols for example).
# Although the cygwin gcc ignores -fPIC, still need this for old-style
# (--disable-auto-import) libraries
m4_if([$1], [GCJ], [],
[_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
;;
darwin* | rhapsody*)
# PIC is the default on this platform
# Common symbols not allowed in MH_DYLIB files
_LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
;;
haiku*)
# PIC is the default for Haiku.
# The "-static" flag exists, but is broken.
_LT_TAGVAR(lt_prog_compiler_static, $1)=
;;
hpux*)
# PIC is the default for 64-bit PA HP-UX, but not for 32-bit
# PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag
# sets the default TLS model and affects inlining.
case $host_cpu in
hppa*64*)
# +Z the default
;;
*)
_LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
;;
esac
;;
interix[[3-9]]*)
# Interix 3.x gcc -fpic/-fPIC options generate broken code.
# Instead, we relocate shared libraries at runtime.
;;
msdosdjgpp*)
# Just because we use GCC doesn't mean we suddenly get shared libraries
# on systems that don't support them.
_LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
enable_shared=no
;;
*nto* | *qnx*)
# QNX uses GNU C++, but need to define -shared option too, otherwise
# it will coredump.
_LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
;;
sysv4*MP*)
if test -d /usr/nec; then
_LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
fi
;;
*)
_LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
;;
esac
case $cc_basename in
nvcc*) # Cuda Compiler Driver 2.2
_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Xlinker '
if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then
_LT_TAGVAR(lt_prog_compiler_pic, $1)="-Xcompiler $_LT_TAGVAR(lt_prog_compiler_pic, $1)"
fi
;;
esac
else
# PORTME Check for flag to pass linker flags through the system compiler.
case $host_os in
aix*)
_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
if test "$host_cpu" = ia64; then
# AIX 5 now supports IA64 processor
_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
else
_LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
fi
;;
mingw* | cygwin* | pw32* | os2* | cegcc*)
# This hack is so that the source file can tell whether it is being
# built for inclusion in a dll (and should export symbols for example).
m4_if([$1], [GCJ], [],
[_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
;;
hpux9* | hpux10* | hpux11*)
_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
# PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
# not for PA HP-UX.
case $host_cpu in
hppa*64*|ia64*)
# +Z the default
;;
*)
_LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
;;
esac
# Is there a better lt_prog_compiler_static that works with the bundled CC?
_LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
;;
irix5* | irix6* | nonstopux*)
_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
# PIC (with -KPIC) is the default.
_LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
;;
linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
case $cc_basename in
# old Intel for x86_64 which still supported -KPIC.
ecc*)
_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
_LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
_LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
;;
# icc used to be incompatible with GCC.
# ICC 10 doesn't accept -KPIC any more.
icc* | ifort*)
_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
_LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
_LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
;;
# Lahey Fortran 8.1.
lf95*)
_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
_LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared'
_LT_TAGVAR(lt_prog_compiler_static, $1)='--static'
;;
nagfor*)
# NAG Fortran compiler
_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,'
_LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
;;
pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*)
# Portland Group compilers (*not* the Pentium gcc compiler,
# which looks to be a dead project)
_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
_LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
;;
ccc*)
_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
# All Alpha code is PIC.
_LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
;;
xl* | bgxl* | bgf* | mpixl*)
# IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene
_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
_LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic'
_LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink'
;;
*)
case `$CC -V 2>&1 | sed 5q` in
*Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [[1-7]].* | *Sun*Fortran*\ 8.[[0-3]]*)
# Sun Fortran 8.3 passes all unrecognized flags to the linker
_LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
_LT_TAGVAR(lt_prog_compiler_wl, $1)=''
;;
*Sun\ F* | *Sun*Fortran*)
_LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
;;
*Sun\ C*)
# Sun C 5.9
_LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
;;
*Intel*\ [[CF]]*Compiler*)
_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
_LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
_LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
;;
*Portland\ Group*)
_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
_LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
;;
esac
;;
esac
;;
newsos6)
_LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
;;
*nto* | *qnx*)
# QNX uses GNU C++, but need to define -shared option too, otherwise
# it will coredump.
_LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
;;
osf3* | osf4* | osf5*)
_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
# All OSF/1 code is PIC.
_LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
;;
rdos*)
_LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
;;
solaris*)
_LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
case $cc_basename in
f77* | f90* | f95* | sunf77* | sunf90* | sunf95*)
_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';;
*)
_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';;
esac
;;
sunos4*)
_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
_LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
;;
sysv4 | sysv4.2uw2* | sysv4.3*)
_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
_LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
;;
sysv4*MP*)
if test -d /usr/nec ;then
_LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic'
_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
fi
;;
sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
_LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
;;
unicos*)
_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
_LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
;;
uts4*)
_LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
;;
*)
_LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
;;
esac
fi
])
case $host_os in
# For platforms which do not support PIC, -DPIC is meaningless:
*djgpp*)
_LT_TAGVAR(lt_prog_compiler_pic, $1)=
;;
*)
_LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])"
;;
esac
AC_CACHE_CHECK([for $compiler option to produce PIC],
[_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)],
[_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_prog_compiler_pic, $1)])
_LT_TAGVAR(lt_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)
#
# Check to make sure the PIC flag actually works.
#
if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then
_LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works],
[_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)],
[$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [],
[case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in
"" | " "*) ;;
*) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;;
esac],
[_LT_TAGVAR(lt_prog_compiler_pic, $1)=
_LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no])
fi
_LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1],
[Additional compiler flags for building library objects])
_LT_TAGDECL([wl], [lt_prog_compiler_wl], [1],
[How to pass a linker flag through the compiler])
#
# Check to make sure the static flag actually works.
#
wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\"
_LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works],
_LT_TAGVAR(lt_cv_prog_compiler_static_works, $1),
$lt_tmp_static_flag,
[],
[_LT_TAGVAR(lt_prog_compiler_static, $1)=])
_LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1],
[Compiler flag to prevent dynamic linking])
])# _LT_COMPILER_PIC
# _LT_LINKER_SHLIBS([TAGNAME])
# ----------------------------
# See if the linker supports building shared libraries.
m4_defun([_LT_LINKER_SHLIBS],
[AC_REQUIRE([LT_PATH_LD])dnl
AC_REQUIRE([LT_PATH_NM])dnl
m4_require([_LT_PATH_MANIFEST_TOOL])dnl
m4_require([_LT_FILEUTILS_DEFAULTS])dnl
m4_require([_LT_DECL_EGREP])dnl
m4_require([_LT_DECL_SED])dnl
m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl
m4_require([_LT_TAG_COMPILER])dnl
AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
m4_if([$1], [CXX], [
_LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
_LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*']
case $host_os in
aix[[4-9]]*)
# If we're using GNU nm, then we don't want the "-C" option.
# -C means demangle to AIX nm, but means don't demangle with GNU nm
# Also, AIX nm treats weak defined symbols like other global defined
# symbols, whereas GNU nm marks them as "W".
if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
_LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
else
_LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
fi
;;
pw32*)
_LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds"
;;
cygwin* | mingw* | cegcc*)
case $cc_basename in
cl*)
_LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*'
;;
*)
_LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols'
_LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname']
;;
esac
;;
linux* | k*bsd*-gnu | gnu*)
_LT_TAGVAR(link_all_deplibs, $1)=no
;;
*)
_LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
;;
esac
], [
runpath_var=
_LT_TAGVAR(allow_undefined_flag, $1)=
_LT_TAGVAR(always_export_symbols, $1)=no
_LT_TAGVAR(archive_cmds, $1)=
_LT_TAGVAR(archive_expsym_cmds, $1)=
_LT_TAGVAR(compiler_needs_object, $1)=no
_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
_LT_TAGVAR(export_dynamic_flag_spec, $1)=
_LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
_LT_TAGVAR(hardcode_automatic, $1)=no
_LT_TAGVAR(hardcode_direct, $1)=no
_LT_TAGVAR(hardcode_direct_absolute, $1)=no
_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
_LT_TAGVAR(hardcode_libdir_separator, $1)=
_LT_TAGVAR(hardcode_minus_L, $1)=no
_LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
_LT_TAGVAR(inherit_rpath, $1)=no
_LT_TAGVAR(link_all_deplibs, $1)=unknown
_LT_TAGVAR(module_cmds, $1)=
_LT_TAGVAR(module_expsym_cmds, $1)=
_LT_TAGVAR(old_archive_from_new_cmds, $1)=
_LT_TAGVAR(old_archive_from_expsyms_cmds, $1)=
_LT_TAGVAR(thread_safe_flag_spec, $1)=
_LT_TAGVAR(whole_archive_flag_spec, $1)=
# include_expsyms should be a list of space-separated symbols to be *always*
# included in the symbol list
_LT_TAGVAR(include_expsyms, $1)=
# exclude_expsyms can be an extended regexp of symbols to exclude
# it will be wrapped by ` (' and `)$', so one must not match beginning or
# end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
# as well as any symbol that contains `d'.
_LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*']
# Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
# platforms (ab)use it in PIC code, but their linkers get confused if
# the symbol is explicitly referenced. Since portable code cannot
# rely on this symbol name, it's probably fine to never include it in
# preloaded symbol tables.
# Exclude shared library initialization/finalization symbols.
dnl Note also adjust exclude_expsyms for C++ above.
extract_expsyms_cmds=
case $host_os in
cygwin* | mingw* | pw32* | cegcc*)
# FIXME: the MSVC++ port hasn't been tested in a loooong time
# When not using gcc, we currently assume that we are using
# Microsoft Visual C++.
if test "$GCC" != yes; then
with_gnu_ld=no
fi
;;
interix*)
# we just hope/assume this is gcc and not c89 (= MSVC++)
with_gnu_ld=yes
;;
openbsd*)
with_gnu_ld=no
;;
linux* | k*bsd*-gnu | gnu*)
_LT_TAGVAR(link_all_deplibs, $1)=no
;;
esac
_LT_TAGVAR(ld_shlibs, $1)=yes
# On some targets, GNU ld is compatible enough with the native linker
# that we're better off using the native interface for both.
lt_use_gnu_ld_interface=no
if test "$with_gnu_ld" = yes; then
case $host_os in
aix*)
# The AIX port of GNU ld has always aspired to compatibility
# with the native linker. However, as the warning in the GNU ld
# block says, versions before 2.19.5* couldn't really create working
# shared libraries, regardless of the interface used.
case `$LD -v 2>&1` in
*\ \(GNU\ Binutils\)\ 2.19.5*) ;;
*\ \(GNU\ Binutils\)\ 2.[[2-9]]*) ;;
*\ \(GNU\ Binutils\)\ [[3-9]]*) ;;
*)
lt_use_gnu_ld_interface=yes
;;
esac
;;
*)
lt_use_gnu_ld_interface=yes
;;
esac
fi
if test "$lt_use_gnu_ld_interface" = yes; then
# If archive_cmds runs LD, not CC, wlarc should be empty
wlarc='${wl}'
# Set some defaults for GNU ld with shared library support. These
# are reset later if shared libraries are not supported. Putting them
# here allows them to be overridden if necessary.
runpath_var=LD_RUN_PATH
_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
_LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
# ancient GNU ld didn't support --whole-archive et. al.
if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then
_LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
else
_LT_TAGVAR(whole_archive_flag_spec, $1)=
fi
supports_anon_versioning=no
case `$LD -v 2>&1` in
*GNU\ gold*) supports_anon_versioning=yes ;;
*\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11
*\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
*\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
*\ 2.11.*) ;; # other 2.11 versions
*) supports_anon_versioning=yes ;;
esac
# See if GNU ld supports shared libraries.
case $host_os in
aix[[3-9]]*)
# On AIX/PPC, the GNU linker is very broken
if test "$host_cpu" != ia64; then
_LT_TAGVAR(ld_shlibs, $1)=no
cat <<_LT_EOF 1>&2
*** Warning: the GNU linker, at least up to release 2.19, is reported
*** to be unable to reliably create shared libraries on AIX.
*** Therefore, libtool is disabling shared libraries support. If you
*** really care for shared libraries, you may want to install binutils
*** 2.20 or above, or modify your PATH so that a non-GNU linker is found.
*** You will then need to restart the configuration process.
_LT_EOF
fi
;;
amigaos*)
case $host_cpu in
powerpc)
# see comment about AmigaOS4 .so support
_LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
_LT_TAGVAR(archive_expsym_cmds, $1)=''
;;
m68k)
_LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
_LT_TAGVAR(hardcode_minus_L, $1)=yes
;;
esac
;;
beos*)
if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
_LT_TAGVAR(allow_undefined_flag, $1)=unsupported
# Joseph Beckenbach says some releases of gcc
# support --undefined. This deserves some investigation. FIXME
_LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
else
_LT_TAGVAR(ld_shlibs, $1)=no
fi
;;
cygwin* | mingw* | pw32* | cegcc*)
# _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
# as there is no search path for DLLs.
_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
_LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols'
_LT_TAGVAR(allow_undefined_flag, $1)=unsupported
_LT_TAGVAR(always_export_symbols, $1)=no
_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
_LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols'
_LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname']
if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
_LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
# If the export-symbols file already is a .def file (1st line
# is EXPORTS), use it as is; otherwise, prepend...
_LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
cp $export_symbols $output_objdir/$soname.def;
else
echo EXPORTS > $output_objdir/$soname.def;
cat $export_symbols >> $output_objdir/$soname.def;
fi~
$CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
else
_LT_TAGVAR(ld_shlibs, $1)=no
fi
;;
haiku*)
_LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
_LT_TAGVAR(link_all_deplibs, $1)=yes
;;
interix[[3-9]]*)
_LT_TAGVAR(hardcode_direct, $1)=no
_LT_TAGVAR(hardcode_shlibpath_var, $1)=no
_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
_LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
# Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
# Instead, shared libraries are loaded at an image base (0x10000000 by
# default) and relocated if they conflict, which is a slow very memory
# consuming and fragmenting process. To avoid this, we pick a random,
# 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
# time. Moving up from 0x10000000 also allows more sbrk(2) space.
_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
_LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
;;
gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu)
tmp_diet=no
if test "$host_os" = linux-dietlibc; then
case $cc_basename in
diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn)
esac
fi
if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \
&& test "$tmp_diet" = no
then
tmp_addflag=' $pic_flag'
tmp_sharedflag='-shared'
case $cc_basename,$host_cpu in
pgcc*) # Portland Group C compiler
_LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
tmp_addflag=' $pic_flag'
;;
pgf77* | pgf90* | pgf95* | pgfortran*)
# Portland Group f77 and f90 compilers
_LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
tmp_addflag=' $pic_flag -Mnomain' ;;
ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64
tmp_addflag=' -i_dynamic' ;;
efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64
tmp_addflag=' -i_dynamic -nofor_main' ;;
ifc* | ifort*) # Intel Fortran compiler
tmp_addflag=' -nofor_main' ;;
lf95*) # Lahey Fortran 8.1
_LT_TAGVAR(whole_archive_flag_spec, $1)=
tmp_sharedflag='--shared' ;;
xl[[cC]]* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below)
tmp_sharedflag='-qmkshrobj'
tmp_addflag= ;;
nvcc*) # Cuda Compiler Driver 2.2
_LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
_LT_TAGVAR(compiler_needs_object, $1)=yes
;;
esac
case `$CC -V 2>&1 | sed 5q` in
*Sun\ C*) # Sun C 5.9
_LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
_LT_TAGVAR(compiler_needs_object, $1)=yes
tmp_sharedflag='-G' ;;
*Sun\ F*) # Sun Fortran 8.3
tmp_sharedflag='-G' ;;
esac
_LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
if test "x$supports_anon_versioning" = xyes; then
_LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
echo "local: *; };" >> $output_objdir/$libname.ver~
$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
fi
case $cc_basename in
xlf* | bgf* | bgxlf* | mpixlf*)
# IBM XL Fortran 10.1 on PPC cannot create shared libs itself
_LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive'
_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
_LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib'
if test "x$supports_anon_versioning" = xyes; then
_LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
echo "local: *; };" >> $output_objdir/$libname.ver~
$LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
fi
;;
esac
else
_LT_TAGVAR(ld_shlibs, $1)=no
fi
;;
netbsd* | netbsdelf*-gnu)
if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
_LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
wlarc=
else
_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
fi
;;
solaris*)
if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then
_LT_TAGVAR(ld_shlibs, $1)=no
cat <<_LT_EOF 1>&2
*** Warning: The releases 2.8.* of the GNU linker cannot reliably
*** create shared libraries on Solaris systems. Therefore, libtool
*** is disabling shared libraries support. We urge you to upgrade GNU
*** binutils to release 2.9.1 or newer. Another option is to modify
*** your PATH or compiler configuration so that the native linker is
*** used, and then restart.
_LT_EOF
elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
else
_LT_TAGVAR(ld_shlibs, $1)=no
fi
;;
sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
case `$LD -v 2>&1` in
*\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*)
_LT_TAGVAR(ld_shlibs, $1)=no
cat <<_LT_EOF 1>&2
*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not
*** reliably create shared libraries on SCO systems. Therefore, libtool
*** is disabling shared libraries support. We urge you to upgrade GNU
*** binutils to release 2.16.91.0.3 or newer. Another option is to modify
*** your PATH or compiler configuration so that the native linker is
*** used, and then restart.
_LT_EOF
;;
*)
# For security reasons, it is highly recommended that you always
# use absolute paths for naming shared libraries, and exclude the
# DT_RUNPATH tag from executables and libraries. But doing so
# requires that you compile everything twice, which is a pain.
if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
_LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
else
_LT_TAGVAR(ld_shlibs, $1)=no
fi
;;
esac
;;
sunos4*)
_LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
wlarc=
_LT_TAGVAR(hardcode_direct, $1)=yes
_LT_TAGVAR(hardcode_shlibpath_var, $1)=no
;;
*)
if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
else
_LT_TAGVAR(ld_shlibs, $1)=no
fi
;;
esac
if test "$_LT_TAGVAR(ld_shlibs, $1)" = no; then
runpath_var=
_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
_LT_TAGVAR(export_dynamic_flag_spec, $1)=
_LT_TAGVAR(whole_archive_flag_spec, $1)=
fi
else
# PORTME fill in a description of your system's linker (not GNU ld)
case $host_os in
aix3*)
_LT_TAGVAR(allow_undefined_flag, $1)=unsupported
_LT_TAGVAR(always_export_symbols, $1)=yes
_LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
# Note: this linker hardcodes the directories in LIBPATH if there
# are no directories specified by -L.
_LT_TAGVAR(hardcode_minus_L, $1)=yes
if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then
# Neither direct hardcoding nor static linking is supported with a
# broken collect2.
_LT_TAGVAR(hardcode_direct, $1)=unsupported
fi
;;
aix[[4-9]]*)
if test "$host_cpu" = ia64; then
# On IA64, the linker does run time linking by default, so we don't
# have to do anything special.
aix_use_runtimelinking=no
exp_sym_flag='-Bexport'
no_entry_flag=""
else
# If we're using GNU nm, then we don't want the "-C" option.
# -C means demangle to AIX nm, but means don't demangle with GNU nm
# Also, AIX nm treats weak defined symbols like other global
# defined symbols, whereas GNU nm marks them as "W".
if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
_LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
else
_LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
fi
aix_use_runtimelinking=no
# Test if we are trying to use run time linking or normal
# AIX style linking. If -brtl is somewhere in LDFLAGS, we
# need to do runtime linking.
case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*)
for ld_flag in $LDFLAGS; do
if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
aix_use_runtimelinking=yes
break
fi
done
;;
esac
exp_sym_flag='-bexport'
no_entry_flag='-bnoentry'
fi
# When large executables or shared objects are built, AIX ld can
# have problems creating the table of contents. If linking a library
# or program results in "error TOC overflow" add -mminimal-toc to
# CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not
# enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
_LT_TAGVAR(archive_cmds, $1)=''
_LT_TAGVAR(hardcode_direct, $1)=yes
_LT_TAGVAR(hardcode_direct_absolute, $1)=yes
_LT_TAGVAR(hardcode_libdir_separator, $1)=':'
_LT_TAGVAR(link_all_deplibs, $1)=yes
_LT_TAGVAR(file_list_spec, $1)='${wl}-f,'
if test "$GCC" = yes; then
case $host_os in aix4.[[012]]|aix4.[[012]].*)
# We only want to do this on AIX 4.2 and lower, the check
# below for broken collect2 doesn't work under 4.3+
collect2name=`${CC} -print-prog-name=collect2`
if test -f "$collect2name" &&
strings "$collect2name" | $GREP resolve_lib_name >/dev/null
then
# We have reworked collect2
:
else
# We have old collect2
_LT_TAGVAR(hardcode_direct, $1)=unsupported
# It fails to find uninstalled libraries when the uninstalled
# path is not listed in the libpath. Setting hardcode_minus_L
# to unsupported forces relinking
_LT_TAGVAR(hardcode_minus_L, $1)=yes
_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
_LT_TAGVAR(hardcode_libdir_separator, $1)=
fi
;;
esac
shared_flag='-shared'
if test "$aix_use_runtimelinking" = yes; then
shared_flag="$shared_flag "'${wl}-G'
fi
_LT_TAGVAR(link_all_deplibs, $1)=no
else
# not using gcc
if test "$host_cpu" = ia64; then
# VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
# chokes on -Wl,-G. The following line is correct:
shared_flag='-G'
else
if test "$aix_use_runtimelinking" = yes; then
shared_flag='${wl}-G'
else
shared_flag='${wl}-bM:SRE'
fi
fi
fi
_LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall'
# It seems that -bexpall does not export symbols beginning with
# underscore (_), so it is better to generate a list of symbols to export.
_LT_TAGVAR(always_export_symbols, $1)=yes
if test "$aix_use_runtimelinking" = yes; then
# Warning - without using the other runtime loading flags (-brtl),
# -berok will link without error, but may produce a broken library.
_LT_TAGVAR(allow_undefined_flag, $1)='-berok'
# Determine the default libpath from the value encoded in an
# empty executable.
_LT_SYS_MODULE_PATH_AIX([$1])
_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
else
if test "$host_cpu" = ia64; then
_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
_LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
_LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
else
# Determine the default libpath from the value encoded in an
# empty executable.
_LT_SYS_MODULE_PATH_AIX([$1])
_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
# Warning - without using the other run time loading flags,
# -berok will link without error, but may produce a broken library.
_LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
_LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
if test "$with_gnu_ld" = yes; then
# We only use this code for GNU lds that support --whole-archive.
_LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
else
# Exported symbols can be pulled into shared objects from archives
_LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
fi
_LT_TAGVAR(archive_cmds_need_lc, $1)=yes
# This is similar to how AIX traditionally builds its shared libraries.
_LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
fi
fi
;;
amigaos*)
case $host_cpu in
powerpc)
# see comment about AmigaOS4 .so support
_LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
_LT_TAGVAR(archive_expsym_cmds, $1)=''
;;
m68k)
_LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
_LT_TAGVAR(hardcode_minus_L, $1)=yes
;;
esac
;;
bsdi[[45]]*)
_LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic
;;
cygwin* | mingw* | pw32* | cegcc*)
# When not using gcc, we currently assume that we are using
# Microsoft Visual C++.
# hardcode_libdir_flag_spec is actually meaningless, as there is
# no search path for DLLs.
case $cc_basename in
cl*)
# Native MSVC
_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
_LT_TAGVAR(allow_undefined_flag, $1)=unsupported
_LT_TAGVAR(always_export_symbols, $1)=yes
_LT_TAGVAR(file_list_spec, $1)='@'
# Tell ltmain to make .lib files, not .a files.
libext=lib
# Tell ltmain to make .dll files, not .so files.
shrext_cmds=".dll"
# FIXME: Setting linknames here is a bad hack.
_LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames='
_LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp;
else
sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp;
fi~
$CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
linknames='
# The linker will not automatically build a static lib if we build a DLL.
# _LT_TAGVAR(old_archive_from_new_cmds, $1)='true'
_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
_LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*'
_LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1,DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols'
# Don't use ranlib
_LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib'
_LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~
lt_tool_outputfile="@TOOL_OUTPUT@"~
case $lt_outputfile in
*.exe|*.EXE) ;;
*)
lt_outputfile="$lt_outputfile.exe"
lt_tool_outputfile="$lt_tool_outputfile.exe"
;;
esac~
if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then
$MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
$RM "$lt_outputfile.manifest";
fi'
;;
*)
# Assume MSVC wrapper
_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
_LT_TAGVAR(allow_undefined_flag, $1)=unsupported
# Tell ltmain to make .lib files, not .a files.
libext=lib
# Tell ltmain to make .dll files, not .so files.
shrext_cmds=".dll"
# FIXME: Setting linknames here is a bad hack.
_LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames='
# The linker will automatically build a .lib file if we build a DLL.
_LT_TAGVAR(old_archive_from_new_cmds, $1)='true'
# FIXME: Should let the user specify the lib program.
_LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs'
_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
;;
esac
;;
darwin* | rhapsody*)
_LT_DARWIN_LINKER_FEATURES($1)
;;
dgux*)
_LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
_LT_TAGVAR(hardcode_shlibpath_var, $1)=no
;;
# FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
# support. Future versions do this automatically, but an explicit c++rt0.o
# does not break anything, and helps significantly (at the cost of a little
# extra space).
freebsd2.2*)
_LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
_LT_TAGVAR(hardcode_direct, $1)=yes
_LT_TAGVAR(hardcode_shlibpath_var, $1)=no
;;
# Unfortunately, older versions of FreeBSD 2 do not have this feature.
freebsd2.*)
_LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
_LT_TAGVAR(hardcode_direct, $1)=yes
_LT_TAGVAR(hardcode_minus_L, $1)=yes
_LT_TAGVAR(hardcode_shlibpath_var, $1)=no
;;
# FreeBSD 3 and greater uses gcc -shared to do shared libraries.
freebsd* | dragonfly*)
_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
_LT_TAGVAR(hardcode_direct, $1)=yes
_LT_TAGVAR(hardcode_shlibpath_var, $1)=no
;;
hpux9*)
if test "$GCC" = yes; then
_LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
else
_LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
fi
_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
_LT_TAGVAR(hardcode_libdir_separator, $1)=:
_LT_TAGVAR(hardcode_direct, $1)=yes
# hardcode_minus_L: Not really in the search PATH,
# but as the default location of the library.
_LT_TAGVAR(hardcode_minus_L, $1)=yes
_LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
;;
hpux10*)
if test "$GCC" = yes && test "$with_gnu_ld" = no; then
_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
else
_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
fi
if test "$with_gnu_ld" = no; then
_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
_LT_TAGVAR(hardcode_libdir_separator, $1)=:
_LT_TAGVAR(hardcode_direct, $1)=yes
_LT_TAGVAR(hardcode_direct_absolute, $1)=yes
_LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
# hardcode_minus_L: Not really in the search PATH,
# but as the default location of the library.
_LT_TAGVAR(hardcode_minus_L, $1)=yes
fi
;;
hpux11*)
if test "$GCC" = yes && test "$with_gnu_ld" = no; then
case $host_cpu in
hppa*64*)
_LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
;;
ia64*)
_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
;;
*)
_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
;;
esac
else
case $host_cpu in
hppa*64*)
_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
;;
ia64*)
_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
;;
*)
m4_if($1, [], [
# Older versions of the 11.00 compiler do not understand -b yet
# (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does)
_LT_LINKER_OPTION([if $CC understands -b],
_LT_TAGVAR(lt_cv_prog_compiler__b, $1), [-b],
[_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'],
[_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'])],
[_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'])
;;
esac
fi
if test "$with_gnu_ld" = no; then
_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
_LT_TAGVAR(hardcode_libdir_separator, $1)=:
case $host_cpu in
hppa*64*|ia64*)
_LT_TAGVAR(hardcode_direct, $1)=no
_LT_TAGVAR(hardcode_shlibpath_var, $1)=no
;;
*)
_LT_TAGVAR(hardcode_direct, $1)=yes
_LT_TAGVAR(hardcode_direct_absolute, $1)=yes
_LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
# hardcode_minus_L: Not really in the search PATH,
# but as the default location of the library.
_LT_TAGVAR(hardcode_minus_L, $1)=yes
;;
esac
fi
;;
irix5* | irix6* | nonstopux*)
if test "$GCC" = yes; then
_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
# Try to use the -exported_symbol ld option, if it does not
# work, assume that -exports_file does not work either and
# implicitly export all symbols.
# This should be the same for all languages, so no per-tag cache variable.
AC_CACHE_CHECK([whether the $host_os linker accepts -exported_symbol],
[lt_cv_irix_exported_symbol],
[save_LDFLAGS="$LDFLAGS"
LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
AC_LINK_IFELSE(
[AC_LANG_SOURCE(
[AC_LANG_CASE([C], [[int foo (void) { return 0; }]],
[C++], [[int foo (void) { return 0; }]],
[Fortran 77], [[
subroutine foo
end]],
[Fortran], [[
subroutine foo
end]])])],
[lt_cv_irix_exported_symbol=yes],
[lt_cv_irix_exported_symbol=no])
LDFLAGS="$save_LDFLAGS"])
if test "$lt_cv_irix_exported_symbol" = yes; then
_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
fi
else
_LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
fi
_LT_TAGVAR(archive_cmds_need_lc, $1)='no'
_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
_LT_TAGVAR(hardcode_libdir_separator, $1)=:
_LT_TAGVAR(inherit_rpath, $1)=yes
_LT_TAGVAR(link_all_deplibs, $1)=yes
;;
netbsd* | netbsdelf*-gnu)
if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
_LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out
else
_LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF
fi
_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
_LT_TAGVAR(hardcode_direct, $1)=yes
_LT_TAGVAR(hardcode_shlibpath_var, $1)=no
;;
newsos6)
_LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
_LT_TAGVAR(hardcode_direct, $1)=yes
_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
_LT_TAGVAR(hardcode_libdir_separator, $1)=:
_LT_TAGVAR(hardcode_shlibpath_var, $1)=no
;;
*nto* | *qnx*)
;;
openbsd*)
if test -f /usr/libexec/ld.so; then
_LT_TAGVAR(hardcode_direct, $1)=yes
_LT_TAGVAR(hardcode_shlibpath_var, $1)=no
_LT_TAGVAR(hardcode_direct_absolute, $1)=yes
if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'
_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
_LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
else
case $host_os in
openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*)
_LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
;;
*)
_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
;;
esac
fi
else
_LT_TAGVAR(ld_shlibs, $1)=no
fi
;;
os2*)
_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
_LT_TAGVAR(hardcode_minus_L, $1)=yes
_LT_TAGVAR(allow_undefined_flag, $1)=unsupported
_LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
_LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
;;
osf3*)
if test "$GCC" = yes; then
_LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
else
_LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
fi
_LT_TAGVAR(archive_cmds_need_lc, $1)='no'
_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
_LT_TAGVAR(hardcode_libdir_separator, $1)=:
;;
osf4* | osf5*) # as osf3* with the addition of -msym flag
if test "$GCC" = yes; then
_LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
else
_LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
_LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~
$CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp'
# Both c and cxx compiler support -rpath directly
_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
fi
_LT_TAGVAR(archive_cmds_need_lc, $1)='no'
_LT_TAGVAR(hardcode_libdir_separator, $1)=:
;;
solaris*)
_LT_TAGVAR(no_undefined_flag, $1)=' -z defs'
if test "$GCC" = yes; then
wlarc='${wl}'
_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
_LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
else
case `$CC -V 2>&1` in
*"Compilers 5.0"*)
wlarc=''
_LT_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
_LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
$LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp'
;;
*)
wlarc='${wl}'
_LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags'
_LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
$CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
;;
esac
fi
_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
_LT_TAGVAR(hardcode_shlibpath_var, $1)=no
case $host_os in
solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
*)
# The compiler driver will combine and reorder linker options,
# but understands `-z linker_flag'. GCC discards it without `$wl',
# but is careful enough not to reorder.
# Supported since Solaris 2.6 (maybe 2.5.1?)
if test "$GCC" = yes; then
_LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
else
_LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract'
fi
;;
esac
_LT_TAGVAR(link_all_deplibs, $1)=yes
;;
sunos4*)
if test "x$host_vendor" = xsequent; then
# Use $CC to link under sequent, because it throws in some extra .o
# files that make .init and .fini sections work.
_LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
else
_LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
fi
_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
_LT_TAGVAR(hardcode_direct, $1)=yes
_LT_TAGVAR(hardcode_minus_L, $1)=yes
_LT_TAGVAR(hardcode_shlibpath_var, $1)=no
;;
sysv4)
case $host_vendor in
sni)
_LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
_LT_TAGVAR(hardcode_direct, $1)=yes # is this really true???
;;
siemens)
## LD is ld it makes a PLAMLIB
## CC just makes a GrossModule.
_LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags'
_LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs'
_LT_TAGVAR(hardcode_direct, $1)=no
;;
motorola)
_LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
_LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie
;;
esac
runpath_var='LD_RUN_PATH'
_LT_TAGVAR(hardcode_shlibpath_var, $1)=no
;;
sysv4.3*)
_LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
_LT_TAGVAR(hardcode_shlibpath_var, $1)=no
_LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport'
;;
sysv4*MP*)
if test -d /usr/nec; then
_LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
_LT_TAGVAR(hardcode_shlibpath_var, $1)=no
runpath_var=LD_RUN_PATH
hardcode_runpath_var=yes
_LT_TAGVAR(ld_shlibs, $1)=yes
fi
;;
sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*)
_LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
_LT_TAGVAR(archive_cmds_need_lc, $1)=no
_LT_TAGVAR(hardcode_shlibpath_var, $1)=no
runpath_var='LD_RUN_PATH'
if test "$GCC" = yes; then
_LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
else
_LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
fi
;;
sysv5* | sco3.2v5* | sco5v6*)
# Note: We can NOT use -z defs as we might desire, because we do not
# link with -lc, and that would cause any symbols used from libc to
# always be unresolved, which means just about no library would
# ever link correctly. If we're not using GNU ld we use -z text
# though, which does catch some bad symbols but isn't as heavy-handed
# as -z defs.
_LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
_LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs'
_LT_TAGVAR(archive_cmds_need_lc, $1)=no
_LT_TAGVAR(hardcode_shlibpath_var, $1)=no
_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir'
_LT_TAGVAR(hardcode_libdir_separator, $1)=':'
_LT_TAGVAR(link_all_deplibs, $1)=yes
_LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport'
runpath_var='LD_RUN_PATH'
if test "$GCC" = yes; then
_LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
else
_LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
fi
;;
uts4*)
_LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
_LT_TAGVAR(hardcode_shlibpath_var, $1)=no
;;
*)
_LT_TAGVAR(ld_shlibs, $1)=no
;;
esac
if test x$host_vendor = xsni; then
case $host in
sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
_LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Blargedynsym'
;;
esac
fi
fi
])
AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)])
test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
_LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld
_LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl
_LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl
_LT_DECL([], [extract_expsyms_cmds], [2],
[The commands to extract the exported symbol list from a shared archive])
#
# Do we need to explicitly link libc?
#
case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in
x|xyes)
# Assume -lc should be added
_LT_TAGVAR(archive_cmds_need_lc, $1)=yes
if test "$enable_shared" = yes && test "$GCC" = yes; then
case $_LT_TAGVAR(archive_cmds, $1) in
*'~'*)
# FIXME: we may have to deal with multi-command sequences.
;;
'$CC '*)
# Test whether the compiler implicitly links with -lc since on some
# systems, -lgcc has to come before -lc. If gcc already passes -lc
# to ld, don't add -lc before -lgcc.
AC_CACHE_CHECK([whether -lc should be explicitly linked in],
[lt_cv_]_LT_TAGVAR(archive_cmds_need_lc, $1),
[$RM conftest*
echo "$lt_simple_compile_test_code" > conftest.$ac_ext
if AC_TRY_EVAL(ac_compile) 2>conftest.err; then
soname=conftest
lib=conftest
libobjs=conftest.$ac_objext
deplibs=
wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1)
pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1)
compiler_flags=-v
linker_flags=-v
verstring=
output_objdir=.
libname=conftest
lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1)
_LT_TAGVAR(allow_undefined_flag, $1)=
if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1)
then
lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=no
else
lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=yes
fi
_LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag
else
cat conftest.err 1>&5
fi
$RM conftest*
])
_LT_TAGVAR(archive_cmds_need_lc, $1)=$lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)
;;
esac
fi
;;
esac
_LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0],
[Whether or not to add -lc for building shared libraries])
_LT_TAGDECL([allow_libtool_libs_with_static_runtimes],
[enable_shared_with_static_runtimes], [0],
[Whether or not to disallow shared libs when runtime libs are static])
_LT_TAGDECL([], [export_dynamic_flag_spec], [1],
[Compiler flag to allow reflexive dlopens])
_LT_TAGDECL([], [whole_archive_flag_spec], [1],
[Compiler flag to generate shared objects directly from archives])
_LT_TAGDECL([], [compiler_needs_object], [1],
[Whether the compiler copes with passing no objects directly])
_LT_TAGDECL([], [old_archive_from_new_cmds], [2],
[Create an old-style archive from a shared archive])
_LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2],
[Create a temporary old-style archive to link instead of a shared archive])
_LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive])
_LT_TAGDECL([], [archive_expsym_cmds], [2])
_LT_TAGDECL([], [module_cmds], [2],
[Commands used to build a loadable module if different from building
a shared archive.])
_LT_TAGDECL([], [module_expsym_cmds], [2])
_LT_TAGDECL([], [with_gnu_ld], [1],
[Whether we are building with GNU ld or not])
_LT_TAGDECL([], [allow_undefined_flag], [1],
[Flag that allows shared libraries with undefined symbols to be built])
_LT_TAGDECL([], [no_undefined_flag], [1],
[Flag that enforces no undefined symbols])
_LT_TAGDECL([], [hardcode_libdir_flag_spec], [1],
[Flag to hardcode $libdir into a binary during linking.
This must work even if $libdir does not exist])
_LT_TAGDECL([], [hardcode_libdir_separator], [1],
[Whether we need a single "-rpath" flag with a separated argument])
_LT_TAGDECL([], [hardcode_direct], [0],
[Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes
DIR into the resulting binary])
_LT_TAGDECL([], [hardcode_direct_absolute], [0],
[Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes
DIR into the resulting binary and the resulting library dependency is
"absolute", i.e impossible to change by setting ${shlibpath_var} if the
library is relocated])
_LT_TAGDECL([], [hardcode_minus_L], [0],
[Set to "yes" if using the -LDIR flag during linking hardcodes DIR
into the resulting binary])
_LT_TAGDECL([], [hardcode_shlibpath_var], [0],
[Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR
into the resulting binary])
_LT_TAGDECL([], [hardcode_automatic], [0],
[Set to "yes" if building a shared library automatically hardcodes DIR
into the library and all subsequent libraries and executables linked
against it])
_LT_TAGDECL([], [inherit_rpath], [0],
[Set to yes if linker adds runtime paths of dependent libraries
to runtime path list])
_LT_TAGDECL([], [link_all_deplibs], [0],
[Whether libtool must link a program against all its dependency libraries])
_LT_TAGDECL([], [always_export_symbols], [0],
[Set to "yes" if exported symbols are required])
_LT_TAGDECL([], [export_symbols_cmds], [2],
[The commands to list exported symbols])
_LT_TAGDECL([], [exclude_expsyms], [1],
[Symbols that should not be listed in the preloaded symbols])
_LT_TAGDECL([], [include_expsyms], [1],
[Symbols that must always be exported])
_LT_TAGDECL([], [prelink_cmds], [2],
[Commands necessary for linking programs (against libraries) with templates])
_LT_TAGDECL([], [postlink_cmds], [2],
[Commands necessary for finishing linking programs])
_LT_TAGDECL([], [file_list_spec], [1],
[Specify filename containing input files])
dnl FIXME: Not yet implemented
dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1],
dnl [Compiler flag to generate thread safe objects])
])# _LT_LINKER_SHLIBS
# _LT_LANG_C_CONFIG([TAG])
# ------------------------
# Ensure that the configuration variables for a C compiler are suitably
# defined. These variables are subsequently used by _LT_CONFIG to write
# the compiler configuration to `libtool'.
m4_defun([_LT_LANG_C_CONFIG],
[m4_require([_LT_DECL_EGREP])dnl
lt_save_CC="$CC"
AC_LANG_PUSH(C)
# Source file extension for C test sources.
ac_ext=c
# Object file extension for compiled C test sources.
objext=o
_LT_TAGVAR(objext, $1)=$objext
# Code to be used in simple compile tests
lt_simple_compile_test_code="int some_variable = 0;"
# Code to be used in simple link tests
lt_simple_link_test_code='int main(){return(0);}'
_LT_TAG_COMPILER
# Save the default compiler, since it gets overwritten when the other
# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP.
compiler_DEFAULT=$CC
# save warnings/boilerplate of simple test code
_LT_COMPILER_BOILERPLATE
_LT_LINKER_BOILERPLATE
## CAVEAT EMPTOR:
## There is no encapsulation within the following macros, do not change
## the running order or otherwise move them around unless you know exactly
## what you are doing...
if test -n "$compiler"; then
_LT_COMPILER_NO_RTTI($1)
_LT_COMPILER_PIC($1)
_LT_COMPILER_C_O($1)
_LT_COMPILER_FILE_LOCKS($1)
_LT_LINKER_SHLIBS($1)
_LT_SYS_DYNAMIC_LINKER($1)
_LT_LINKER_HARDCODE_LIBPATH($1)
LT_SYS_DLOPEN_SELF
_LT_CMD_STRIPLIB
# Report which library types will actually be built
AC_MSG_CHECKING([if libtool supports shared libraries])
AC_MSG_RESULT([$can_build_shared])
AC_MSG_CHECKING([whether to build shared libraries])
test "$can_build_shared" = "no" && enable_shared=no
# On AIX, shared libraries and static libraries use the same namespace, and
# are all built from PIC.
case $host_os in
aix3*)
test "$enable_shared" = yes && enable_static=no
if test -n "$RANLIB"; then
archive_cmds="$archive_cmds~\$RANLIB \$lib"
postinstall_cmds='$RANLIB $lib'
fi
;;
aix[[4-9]]*)
if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
test "$enable_shared" = yes && enable_static=no
fi
;;
esac
AC_MSG_RESULT([$enable_shared])
AC_MSG_CHECKING([whether to build static libraries])
# Make sure either enable_shared or enable_static is yes.
test "$enable_shared" = yes || enable_static=yes
AC_MSG_RESULT([$enable_static])
_LT_CONFIG($1)
fi
AC_LANG_POP
CC="$lt_save_CC"
])# _LT_LANG_C_CONFIG
# _LT_LANG_CXX_CONFIG([TAG])
# --------------------------
# Ensure that the configuration variables for a C++ compiler are suitably
# defined. These variables are subsequently used by _LT_CONFIG to write
# the compiler configuration to `libtool'.
m4_defun([_LT_LANG_CXX_CONFIG],
[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
m4_require([_LT_DECL_EGREP])dnl
m4_require([_LT_PATH_MANIFEST_TOOL])dnl
if test -n "$CXX" && ( test "X$CXX" != "Xno" &&
( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) ||
(test "X$CXX" != "Xg++"))) ; then
AC_PROG_CXXCPP
else
_lt_caught_CXX_error=yes
fi
AC_LANG_PUSH(C++)
_LT_TAGVAR(archive_cmds_need_lc, $1)=no
_LT_TAGVAR(allow_undefined_flag, $1)=
_LT_TAGVAR(always_export_symbols, $1)=no
_LT_TAGVAR(archive_expsym_cmds, $1)=
_LT_TAGVAR(compiler_needs_object, $1)=no
_LT_TAGVAR(export_dynamic_flag_spec, $1)=
_LT_TAGVAR(hardcode_direct, $1)=no
_LT_TAGVAR(hardcode_direct_absolute, $1)=no
_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
_LT_TAGVAR(hardcode_libdir_separator, $1)=
_LT_TAGVAR(hardcode_minus_L, $1)=no
_LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
_LT_TAGVAR(hardcode_automatic, $1)=no
_LT_TAGVAR(inherit_rpath, $1)=no
_LT_TAGVAR(module_cmds, $1)=
_LT_TAGVAR(module_expsym_cmds, $1)=
_LT_TAGVAR(link_all_deplibs, $1)=unknown
_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
_LT_TAGVAR(reload_flag, $1)=$reload_flag
_LT_TAGVAR(reload_cmds, $1)=$reload_cmds
_LT_TAGVAR(no_undefined_flag, $1)=
_LT_TAGVAR(whole_archive_flag_spec, $1)=
_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
# Source file extension for C++ test sources.
ac_ext=cpp
# Object file extension for compiled C++ test sources.
objext=o
_LT_TAGVAR(objext, $1)=$objext
# No sense in running all these tests if we already determined that
# the CXX compiler isn't working. Some variables (like enable_shared)
# are currently assumed to apply to all compilers on this platform,
# and will be corrupted by setting them based on a non-working compiler.
if test "$_lt_caught_CXX_error" != yes; then
# Code to be used in simple compile tests
lt_simple_compile_test_code="int some_variable = 0;"
# Code to be used in simple link tests
lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }'
# ltmain only uses $CC for tagged configurations so make sure $CC is set.
_LT_TAG_COMPILER
# save warnings/boilerplate of simple test code
_LT_COMPILER_BOILERPLATE
_LT_LINKER_BOILERPLATE
# Allow CC to be a program name with arguments.
lt_save_CC=$CC
lt_save_CFLAGS=$CFLAGS
lt_save_LD=$LD
lt_save_GCC=$GCC
GCC=$GXX
lt_save_with_gnu_ld=$with_gnu_ld
lt_save_path_LD=$lt_cv_path_LD
if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then
lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx
else
$as_unset lt_cv_prog_gnu_ld
fi
if test -n "${lt_cv_path_LDCXX+set}"; then
lt_cv_path_LD=$lt_cv_path_LDCXX
else
$as_unset lt_cv_path_LD
fi
test -z "${LDCXX+set}" || LD=$LDCXX
CC=${CXX-"c++"}
CFLAGS=$CXXFLAGS
compiler=$CC
_LT_TAGVAR(compiler, $1)=$CC
_LT_CC_BASENAME([$compiler])
if test -n "$compiler"; then
# We don't want -fno-exception when compiling C++ code, so set the
# no_builtin_flag separately
if test "$GXX" = yes; then
_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'
else
_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
fi
if test "$GXX" = yes; then
# Set up default GNU C++ configuration
LT_PATH_LD
# Check if GNU C++ uses GNU ld as the underlying linker, since the
# archiving commands below assume that GNU ld is being used.
if test "$with_gnu_ld" = yes; then
_LT_TAGVAR(archive_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
_LT_TAGVAR(archive_expsym_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
_LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
# If archive_cmds runs LD, not CC, wlarc should be empty
# XXX I think wlarc can be eliminated in ltcf-cxx, but I need to
# investigate it a little bit more. (MM)
wlarc='${wl}'
# ancient GNU ld didn't support --whole-archive et. al.
if eval "`$CC -print-prog-name=ld` --help 2>&1" |
$GREP 'no-whole-archive' > /dev/null; then
_LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
else
_LT_TAGVAR(whole_archive_flag_spec, $1)=
fi
else
with_gnu_ld=no
wlarc=
# A generic and very simple default shared library creation
# command for GNU C++ for the case where it uses the native
# linker, instead of GNU ld. If possible, this setting should
# overridden to take advantage of the native linker features on
# the platform it is being used on.
_LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
fi
# Commands to make compiler produce verbose output that lists
# what "hidden" libraries, object files and flags are used when
# linking a shared library.
output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
else
GXX=no
with_gnu_ld=no
wlarc=
fi
# PORTME: fill in a description of your system's C++ link characteristics
AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
_LT_TAGVAR(ld_shlibs, $1)=yes
case $host_os in
aix3*)
# FIXME: insert proper C++ library support
_LT_TAGVAR(ld_shlibs, $1)=no
;;
aix[[4-9]]*)
if test "$host_cpu" = ia64; then
# On IA64, the linker does run time linking by default, so we don't
# have to do anything special.
aix_use_runtimelinking=no
exp_sym_flag='-Bexport'
no_entry_flag=""
else
aix_use_runtimelinking=no
# Test if we are trying to use run time linking or normal
# AIX style linking. If -brtl is somewhere in LDFLAGS, we
# need to do runtime linking.
case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*)
for ld_flag in $LDFLAGS; do
case $ld_flag in
*-brtl*)
aix_use_runtimelinking=yes
break
;;
esac
done
;;
esac
exp_sym_flag='-bexport'
no_entry_flag='-bnoentry'
fi
# When large executables or shared objects are built, AIX ld can
# have problems creating the table of contents. If linking a library
# or program results in "error TOC overflow" add -mminimal-toc to
# CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not
# enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
_LT_TAGVAR(archive_cmds, $1)=''
_LT_TAGVAR(hardcode_direct, $1)=yes
_LT_TAGVAR(hardcode_direct_absolute, $1)=yes
_LT_TAGVAR(hardcode_libdir_separator, $1)=':'
_LT_TAGVAR(link_all_deplibs, $1)=yes
_LT_TAGVAR(file_list_spec, $1)='${wl}-f,'
if test "$GXX" = yes; then
case $host_os in aix4.[[012]]|aix4.[[012]].*)
# We only want to do this on AIX 4.2 and lower, the check
# below for broken collect2 doesn't work under 4.3+
collect2name=`${CC} -print-prog-name=collect2`
if test -f "$collect2name" &&
strings "$collect2name" | $GREP resolve_lib_name >/dev/null
then
# We have reworked collect2
:
else
# We have old collect2
_LT_TAGVAR(hardcode_direct, $1)=unsupported
# It fails to find uninstalled libraries when the uninstalled
# path is not listed in the libpath. Setting hardcode_minus_L
# to unsupported forces relinking
_LT_TAGVAR(hardcode_minus_L, $1)=yes
_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
_LT_TAGVAR(hardcode_libdir_separator, $1)=
fi
esac
shared_flag='-shared'
if test "$aix_use_runtimelinking" = yes; then
shared_flag="$shared_flag "'${wl}-G'
fi
else
# not using gcc
if test "$host_cpu" = ia64; then
# VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
# chokes on -Wl,-G. The following line is correct:
shared_flag='-G'
else
if test "$aix_use_runtimelinking" = yes; then
shared_flag='${wl}-G'
else
shared_flag='${wl}-bM:SRE'
fi
fi
fi
_LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall'
# It seems that -bexpall does not export symbols beginning with
# underscore (_), so it is better to generate a list of symbols to
# export.
_LT_TAGVAR(always_export_symbols, $1)=yes
if test "$aix_use_runtimelinking" = yes; then
# Warning - without using the other runtime loading flags (-brtl),
# -berok will link without error, but may produce a broken library.
_LT_TAGVAR(allow_undefined_flag, $1)='-berok'
# Determine the default libpath from the value encoded in an empty
# executable.
_LT_SYS_MODULE_PATH_AIX([$1])
_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
else
if test "$host_cpu" = ia64; then
_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
_LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
_LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
else
# Determine the default libpath from the value encoded in an
# empty executable.
_LT_SYS_MODULE_PATH_AIX([$1])
_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
# Warning - without using the other run time loading flags,
# -berok will link without error, but may produce a broken library.
_LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
_LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
if test "$with_gnu_ld" = yes; then
# We only use this code for GNU lds that support --whole-archive.
_LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
else
# Exported symbols can be pulled into shared objects from archives
_LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
fi
_LT_TAGVAR(archive_cmds_need_lc, $1)=yes
# This is similar to how AIX traditionally builds its shared
# libraries.
_LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
fi
fi
;;
beos*)
if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
_LT_TAGVAR(allow_undefined_flag, $1)=unsupported
# Joseph Beckenbach says some releases of gcc
# support --undefined. This deserves some investigation. FIXME
_LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
else
_LT_TAGVAR(ld_shlibs, $1)=no
fi
;;
chorus*)
case $cc_basename in
*)
# FIXME: insert proper C++ library support
_LT_TAGVAR(ld_shlibs, $1)=no
;;
esac
;;
cygwin* | mingw* | pw32* | cegcc*)
case $GXX,$cc_basename in
,cl* | no,cl*)
# Native MSVC
# hardcode_libdir_flag_spec is actually meaningless, as there is
# no search path for DLLs.
_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
_LT_TAGVAR(allow_undefined_flag, $1)=unsupported
_LT_TAGVAR(always_export_symbols, $1)=yes
_LT_TAGVAR(file_list_spec, $1)='@'
# Tell ltmain to make .lib files, not .a files.
libext=lib
# Tell ltmain to make .dll files, not .so files.
shrext_cmds=".dll"
# FIXME: Setting linknames here is a bad hack.
_LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames='
_LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
$SED -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp;
else
$SED -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp;
fi~
$CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
linknames='
# The linker will not automatically build a static lib if we build a DLL.
# _LT_TAGVAR(old_archive_from_new_cmds, $1)='true'
_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
# Don't use ranlib
_LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib'
_LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~
lt_tool_outputfile="@TOOL_OUTPUT@"~
case $lt_outputfile in
*.exe|*.EXE) ;;
*)
lt_outputfile="$lt_outputfile.exe"
lt_tool_outputfile="$lt_tool_outputfile.exe"
;;
esac~
func_to_tool_file "$lt_outputfile"~
if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then
$MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
$RM "$lt_outputfile.manifest";
fi'
;;
*)
# g++
# _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
# as there is no search path for DLLs.
_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
_LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols'
_LT_TAGVAR(allow_undefined_flag, $1)=unsupported
_LT_TAGVAR(always_export_symbols, $1)=no
_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
_LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
# If the export-symbols file already is a .def file (1st line
# is EXPORTS), use it as is; otherwise, prepend...
_LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
cp $export_symbols $output_objdir/$soname.def;
else
echo EXPORTS > $output_objdir/$soname.def;
cat $export_symbols >> $output_objdir/$soname.def;
fi~
$CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
else
_LT_TAGVAR(ld_shlibs, $1)=no
fi
;;
esac
;;
darwin* | rhapsody*)
_LT_DARWIN_LINKER_FEATURES($1)
;;
dgux*)
case $cc_basename in
ec++*)
# FIXME: insert proper C++ library support
_LT_TAGVAR(ld_shlibs, $1)=no
;;
ghcx*)
# Green Hills C++ Compiler
# FIXME: insert proper C++ library support
_LT_TAGVAR(ld_shlibs, $1)=no
;;
*)
# FIXME: insert proper C++ library support
_LT_TAGVAR(ld_shlibs, $1)=no
;;
esac
;;
freebsd2.*)
# C++ shared libraries reported to be fairly broken before
# switch to ELF
_LT_TAGVAR(ld_shlibs, $1)=no
;;
freebsd-elf*)
_LT_TAGVAR(archive_cmds_need_lc, $1)=no
;;
freebsd* | dragonfly*)
# FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF
# conventions
_LT_TAGVAR(ld_shlibs, $1)=yes
;;
haiku*)
_LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
_LT_TAGVAR(link_all_deplibs, $1)=yes
;;
hpux9*)
_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
_LT_TAGVAR(hardcode_libdir_separator, $1)=:
_LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
_LT_TAGVAR(hardcode_direct, $1)=yes
_LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
# but as the default
# location of the library.
case $cc_basename in
CC*)
# FIXME: insert proper C++ library support
_LT_TAGVAR(ld_shlibs, $1)=no
;;
aCC*)
_LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
# Commands to make compiler produce verbose output that lists
# what "hidden" libraries, object files and flags are used when
# linking a shared library.
#
# There doesn't appear to be a way to prevent this compiler from
# explicitly linking system object files so we need to strip them
# from the output so that they don't get included in the library
# dependencies.
output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
;;
*)
if test "$GXX" = yes; then
_LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
else
# FIXME: insert proper C++ library support
_LT_TAGVAR(ld_shlibs, $1)=no
fi
;;
esac
;;
hpux10*|hpux11*)
if test $with_gnu_ld = no; then
_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
_LT_TAGVAR(hardcode_libdir_separator, $1)=:
case $host_cpu in
hppa*64*|ia64*)
;;
*)
_LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
;;
esac
fi
case $host_cpu in
hppa*64*|ia64*)
_LT_TAGVAR(hardcode_direct, $1)=no
_LT_TAGVAR(hardcode_shlibpath_var, $1)=no
;;
*)
_LT_TAGVAR(hardcode_direct, $1)=yes
_LT_TAGVAR(hardcode_direct_absolute, $1)=yes
_LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
# but as the default
# location of the library.
;;
esac
case $cc_basename in
CC*)
# FIXME: insert proper C++ library support
_LT_TAGVAR(ld_shlibs, $1)=no
;;
aCC*)
case $host_cpu in
hppa*64*)
_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
;;
ia64*)
_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
;;
*)
_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
;;
esac
# Commands to make compiler produce verbose output that lists
# what "hidden" libraries, object files and flags are used when
# linking a shared library.
#
# There doesn't appear to be a way to prevent this compiler from
# explicitly linking system object files so we need to strip them
# from the output so that they don't get included in the library
# dependencies.
output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
;;
*)
if test "$GXX" = yes; then
if test $with_gnu_ld = no; then
case $host_cpu in
hppa*64*)
_LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
;;
ia64*)
_LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
;;
*)
_LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
;;
esac
fi
else
# FIXME: insert proper C++ library support
_LT_TAGVAR(ld_shlibs, $1)=no
fi
;;
esac
;;
interix[[3-9]]*)
_LT_TAGVAR(hardcode_direct, $1)=no
_LT_TAGVAR(hardcode_shlibpath_var, $1)=no
_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
_LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
# Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
# Instead, shared libraries are loaded at an image base (0x10000000 by
# default) and relocated if they conflict, which is a slow very memory
# consuming and fragmenting process. To avoid this, we pick a random,
# 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
# time. Moving up from 0x10000000 also allows more sbrk(2) space.
_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
_LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
;;
irix5* | irix6*)
case $cc_basename in
CC*)
# SGI C++
_LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
# Archives containing C++ object files must be created using
# "CC -ar", where "CC" is the IRIX C++ compiler. This is
# necessary to make sure instantiated templates are included
# in the archive.
_LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs'
;;
*)
if test "$GXX" = yes; then
if test "$with_gnu_ld" = no; then
_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
else
_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib'
fi
fi
_LT_TAGVAR(link_all_deplibs, $1)=yes
;;
esac
_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
_LT_TAGVAR(hardcode_libdir_separator, $1)=:
_LT_TAGVAR(inherit_rpath, $1)=yes
;;
linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
case $cc_basename in
KCC*)
# Kuck and Associates, Inc. (KAI) C++ Compiler
# KCC will only create a shared library if the output file
# ends with ".so" (or ".sl" for HP-UX), so rename the library
# to its proper name (with version) after linking.
_LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
_LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib'
# Commands to make compiler produce verbose output that lists
# what "hidden" libraries, object files and flags are used when
# linking a shared library.
#
# There doesn't appear to be a way to prevent this compiler from
# explicitly linking system object files so we need to strip them
# from the output so that they don't get included in the library
# dependencies.
output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
_LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
# Archives containing C++ object files must be created using
# "CC -Bstatic", where "CC" is the KAI C++ compiler.
_LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs'
;;
icpc* | ecpc* )
# Intel C++
with_gnu_ld=yes
# version 8.0 and above of icpc choke on multiply defined symbols
# if we add $predep_objects and $postdep_objects, however 7.1 and
# earlier do not add the objects themselves.
case `$CC -V 2>&1` in
*"Version 7."*)
_LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
;;
*) # Version 8.0 or newer
tmp_idyn=
case $host_cpu in
ia64*) tmp_idyn=' -i_dynamic';;
esac
_LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
;;
esac
_LT_TAGVAR(archive_cmds_need_lc, $1)=no
_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
_LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
_LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
;;
pgCC* | pgcpp*)
# Portland Group C++ compiler
case `$CC -V` in
*pgCC\ [[1-5]].* | *pgcpp\ [[1-5]].*)
_LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~
rm -rf $tpldir~
$CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~
compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"'
_LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~
rm -rf $tpldir~
$CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~
$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~
$RANLIB $oldlib'
_LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~
rm -rf $tpldir~
$CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
$CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
_LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~
rm -rf $tpldir~
$CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
$CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
;;
*) # Version 6 and above use weak symbols
_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
;;
esac
_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir'
_LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
_LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
;;
cxx*)
# Compaq C++
_LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols'
runpath_var=LD_RUN_PATH
_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
_LT_TAGVAR(hardcode_libdir_separator, $1)=:
# Commands to make compiler produce verbose output that lists
# what "hidden" libraries, object files and flags are used when
# linking a shared library.
#
# There doesn't appear to be a way to prevent this compiler from
# explicitly linking system object files so we need to strip them
# from the output so that they don't get included in the library
# dependencies.
output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed'
;;
xl* | mpixl* | bgxl*)
# IBM XL 8.0 on PPC, with GNU ld
_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
_LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
_LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
if test "x$supports_anon_versioning" = xyes; then
_LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
echo "local: *; };" >> $output_objdir/$libname.ver~
$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
fi
;;
*)
case `$CC -V 2>&1 | sed 5q` in
*Sun\ C*)
# Sun C++ 5.9
_LT_TAGVAR(no_undefined_flag, $1)=' -zdefs'
_LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols'
_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
_LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
_LT_TAGVAR(compiler_needs_object, $1)=yes
# Not sure whether something based on
# $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1
# would be better.
output_verbose_link_cmd='func_echo_all'
# Archives containing C++ object files must be created using
# "CC -xar", where "CC" is the Sun C++ compiler. This is
# necessary to make sure instantiated templates are included
# in the archive.
_LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'
;;
esac
;;
esac
;;
lynxos*)
# FIXME: insert proper C++ library support
_LT_TAGVAR(ld_shlibs, $1)=no
;;
m88k*)
# FIXME: insert proper C++ library support
_LT_TAGVAR(ld_shlibs, $1)=no
;;
mvs*)
case $cc_basename in
cxx*)
# FIXME: insert proper C++ library support
_LT_TAGVAR(ld_shlibs, $1)=no
;;
*)
# FIXME: insert proper C++ library support
_LT_TAGVAR(ld_shlibs, $1)=no
;;
esac
;;
netbsd*)
if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
_LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags'
wlarc=
_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
_LT_TAGVAR(hardcode_direct, $1)=yes
_LT_TAGVAR(hardcode_shlibpath_var, $1)=no
fi
# Workaround some broken pre-1.5 toolchains
output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"'
;;
*nto* | *qnx*)
_LT_TAGVAR(ld_shlibs, $1)=yes
;;
openbsd2*)
# C++ shared libraries are fairly broken
_LT_TAGVAR(ld_shlibs, $1)=no
;;
openbsd*)
if test -f /usr/libexec/ld.so; then
_LT_TAGVAR(hardcode_direct, $1)=yes
_LT_TAGVAR(hardcode_shlibpath_var, $1)=no
_LT_TAGVAR(hardcode_direct_absolute, $1)=yes
_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib'
_LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
_LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
fi
output_verbose_link_cmd=func_echo_all
else
_LT_TAGVAR(ld_shlibs, $1)=no
fi
;;
osf3* | osf4* | osf5*)
case $cc_basename in
KCC*)
# Kuck and Associates, Inc. (KAI) C++ Compiler
# KCC will only create a shared library if the output file
# ends with ".so" (or ".sl" for HP-UX), so rename the library
# to its proper name (with version) after linking.
_LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
_LT_TAGVAR(hardcode_libdir_separator, $1)=:
# Archives containing C++ object files must be created using
# the KAI C++ compiler.
case $host in
osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;;
*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;;
esac
;;
RCC*)
# Rational C++ 2.4.1
# FIXME: insert proper C++ library support
_LT_TAGVAR(ld_shlibs, $1)=no
;;
cxx*)
case $host in
osf3*)
_LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && func_echo_all "${wl}-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
;;
*)
_LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
_LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~
echo "-hidden">> $lib.exp~
$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~
$RM $lib.exp'
_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
;;
esac
_LT_TAGVAR(hardcode_libdir_separator, $1)=:
# Commands to make compiler produce verbose output that lists
# what "hidden" libraries, object files and flags are used when
# linking a shared library.
#
# There doesn't appear to be a way to prevent this compiler from
# explicitly linking system object files so we need to strip them
# from the output so that they don't get included in the library
# dependencies.
output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
;;
*)
if test "$GXX" = yes && test "$with_gnu_ld" = no; then
_LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
case $host in
osf3*)
_LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
;;
*)
_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
;;
esac
_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
_LT_TAGVAR(hardcode_libdir_separator, $1)=:
# Commands to make compiler produce verbose output that lists
# what "hidden" libraries, object files and flags are used when
# linking a shared library.
output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
else
# FIXME: insert proper C++ library support
_LT_TAGVAR(ld_shlibs, $1)=no
fi
;;
esac
;;
psos*)
# FIXME: insert proper C++ library support
_LT_TAGVAR(ld_shlibs, $1)=no
;;
sunos4*)
case $cc_basename in
CC*)
# Sun C++ 4.x
# FIXME: insert proper C++ library support
_LT_TAGVAR(ld_shlibs, $1)=no
;;
lcc*)
# Lucid
# FIXME: insert proper C++ library support
_LT_TAGVAR(ld_shlibs, $1)=no
;;
*)
# FIXME: insert proper C++ library support
_LT_TAGVAR(ld_shlibs, $1)=no
;;
esac
;;
solaris*)
case $cc_basename in
CC* | sunCC*)
# Sun C++ 4.2, 5.x and Centerline C++
_LT_TAGVAR(archive_cmds_need_lc,$1)=yes
_LT_TAGVAR(no_undefined_flag, $1)=' -zdefs'
_LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
_LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
$CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
_LT_TAGVAR(hardcode_shlibpath_var, $1)=no
case $host_os in
solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
*)
# The compiler driver will combine and reorder linker options,
# but understands `-z linker_flag'.
# Supported since Solaris 2.6 (maybe 2.5.1?)
_LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract'
;;
esac
_LT_TAGVAR(link_all_deplibs, $1)=yes
output_verbose_link_cmd='func_echo_all'
# Archives containing C++ object files must be created using
# "CC -xar", where "CC" is the Sun C++ compiler. This is
# necessary to make sure instantiated templates are included
# in the archive.
_LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'
;;
gcx*)
# Green Hills C++ Compiler
_LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
# The C++ compiler must be used to create the archive.
_LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs'
;;
*)
# GNU C++ compiler with Solaris linker
if test "$GXX" = yes && test "$with_gnu_ld" = no; then
_LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs'
if $CC --version | $GREP -v '^2\.7' > /dev/null; then
_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
_LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
$CC -shared $pic_flag -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
# Commands to make compiler produce verbose output that lists
# what "hidden" libraries, object files and flags are used when
# linking a shared library.
output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
else
# g++ 2.7 appears to require `-G' NOT `-shared' on this
# platform.
_LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
_LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
$CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
# Commands to make compiler produce verbose output that lists
# what "hidden" libraries, object files and flags are used when
# linking a shared library.
output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
fi
_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir'
case $host_os in
solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
*)
_LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
;;
esac
fi
;;
esac
;;
sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*)
_LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
_LT_TAGVAR(archive_cmds_need_lc, $1)=no
_LT_TAGVAR(hardcode_shlibpath_var, $1)=no
runpath_var='LD_RUN_PATH'
case $cc_basename in
CC*)
_LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
;;
*)
_LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
;;
esac
;;
sysv5* | sco3.2v5* | sco5v6*)
# Note: We can NOT use -z defs as we might desire, because we do not
# link with -lc, and that would cause any symbols used from libc to
# always be unresolved, which means just about no library would
# ever link correctly. If we're not using GNU ld we use -z text
# though, which does catch some bad symbols but isn't as heavy-handed
# as -z defs.
_LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
_LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs'
_LT_TAGVAR(archive_cmds_need_lc, $1)=no
_LT_TAGVAR(hardcode_shlibpath_var, $1)=no
_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir'
_LT_TAGVAR(hardcode_libdir_separator, $1)=':'
_LT_TAGVAR(link_all_deplibs, $1)=yes
_LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport'
runpath_var='LD_RUN_PATH'
case $cc_basename in
CC*)
_LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
_LT_TAGVAR(old_archive_cmds, $1)='$CC -Tprelink_objects $oldobjs~
'"$_LT_TAGVAR(old_archive_cmds, $1)"
_LT_TAGVAR(reload_cmds, $1)='$CC -Tprelink_objects $reload_objs~
'"$_LT_TAGVAR(reload_cmds, $1)"
;;
*)
_LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
;;
esac
;;
tandem*)
case $cc_basename in
NCC*)
# NonStop-UX NCC 3.20
# FIXME: insert proper C++ library support
_LT_TAGVAR(ld_shlibs, $1)=no
;;
*)
# FIXME: insert proper C++ library support
_LT_TAGVAR(ld_shlibs, $1)=no
;;
esac
;;
vxworks*)
# FIXME: insert proper C++ library support
_LT_TAGVAR(ld_shlibs, $1)=no
;;
*)
# FIXME: insert proper C++ library support
_LT_TAGVAR(ld_shlibs, $1)=no
;;
esac
AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)])
test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
_LT_TAGVAR(GCC, $1)="$GXX"
_LT_TAGVAR(LD, $1)="$LD"
## CAVEAT EMPTOR:
## There is no encapsulation within the following macros, do not change
## the running order or otherwise move them around unless you know exactly
## what you are doing...
_LT_SYS_HIDDEN_LIBDEPS($1)
_LT_COMPILER_PIC($1)
_LT_COMPILER_C_O($1)
_LT_COMPILER_FILE_LOCKS($1)
_LT_LINKER_SHLIBS($1)
_LT_SYS_DYNAMIC_LINKER($1)
_LT_LINKER_HARDCODE_LIBPATH($1)
_LT_CONFIG($1)
fi # test -n "$compiler"
CC=$lt_save_CC
CFLAGS=$lt_save_CFLAGS
LDCXX=$LD
LD=$lt_save_LD
GCC=$lt_save_GCC
with_gnu_ld=$lt_save_with_gnu_ld
lt_cv_path_LDCXX=$lt_cv_path_LD
lt_cv_path_LD=$lt_save_path_LD
lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld
lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld
fi # test "$_lt_caught_CXX_error" != yes
AC_LANG_POP
])# _LT_LANG_CXX_CONFIG
# _LT_FUNC_STRIPNAME_CNF
# ----------------------
# func_stripname_cnf prefix suffix name
# strip PREFIX and SUFFIX off of NAME.
# PREFIX and SUFFIX must not contain globbing or regex special
# characters, hashes, percent signs, but SUFFIX may contain a leading
# dot (in which case that matches only a dot).
#
# This function is identical to the (non-XSI) version of func_stripname,
# except this one can be used by m4 code that may be executed by configure,
# rather than the libtool script.
m4_defun([_LT_FUNC_STRIPNAME_CNF],[dnl
AC_REQUIRE([_LT_DECL_SED])
AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])
func_stripname_cnf ()
{
case ${2} in
.*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;;
*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;;
esac
} # func_stripname_cnf
])# _LT_FUNC_STRIPNAME_CNF
# _LT_SYS_HIDDEN_LIBDEPS([TAGNAME])
# ---------------------------------
# Figure out "hidden" library dependencies from verbose
# compiler output when linking a shared library.
# Parse the compiler output and extract the necessary
# objects, libraries and library flags.
m4_defun([_LT_SYS_HIDDEN_LIBDEPS],
[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
AC_REQUIRE([_LT_FUNC_STRIPNAME_CNF])dnl
# Dependencies to place before and after the object being linked:
_LT_TAGVAR(predep_objects, $1)=
_LT_TAGVAR(postdep_objects, $1)=
_LT_TAGVAR(predeps, $1)=
_LT_TAGVAR(postdeps, $1)=
_LT_TAGVAR(compiler_lib_search_path, $1)=
dnl we can't use the lt_simple_compile_test_code here,
dnl because it contains code intended for an executable,
dnl not a library. It's possible we should let each
dnl tag define a new lt_????_link_test_code variable,
dnl but it's only used here...
m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF
int a;
void foo (void) { a = 0; }
_LT_EOF
], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF
class Foo
{
public:
Foo (void) { a = 0; }
private:
int a;
};
_LT_EOF
], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF
subroutine foo
implicit none
integer*4 a
a=0
return
end
_LT_EOF
], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF
subroutine foo
implicit none
integer a
a=0
return
end
_LT_EOF
], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF
public class foo {
private int a;
public void bar (void) {
a = 0;
}
};
_LT_EOF
], [$1], [GO], [cat > conftest.$ac_ext <<_LT_EOF
package foo
func foo() {
}
_LT_EOF
])
_lt_libdeps_save_CFLAGS=$CFLAGS
case "$CC $CFLAGS " in #(
*\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;;
*\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;;
*\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;;
esac
dnl Parse the compiler output and extract the necessary
dnl objects, libraries and library flags.
if AC_TRY_EVAL(ac_compile); then
# Parse the compiler output and extract the necessary
# objects, libraries and library flags.
# Sentinel used to keep track of whether or not we are before
# the conftest object file.
pre_test_object_deps_done=no
for p in `eval "$output_verbose_link_cmd"`; do
case ${prev}${p} in
-L* | -R* | -l*)
# Some compilers place space between "-{L,R}" and the path.
# Remove the space.
if test $p = "-L" ||
test $p = "-R"; then
prev=$p
continue
fi
# Expand the sysroot to ease extracting the directories later.
if test -z "$prev"; then
case $p in
-L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;;
-R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;;
-l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;;
esac
fi
case $p in
=*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;;
esac
if test "$pre_test_object_deps_done" = no; then
case ${prev} in
-L | -R)
# Internal compiler library paths should come after those
# provided the user. The postdeps already come after the
# user supplied libs so there is no need to process them.
if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then
_LT_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}"
else
_LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}"
fi
;;
# The "-l" case would never come before the object being
# linked, so don't bother handling this case.
esac
else
if test -z "$_LT_TAGVAR(postdeps, $1)"; then
_LT_TAGVAR(postdeps, $1)="${prev}${p}"
else
_LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} ${prev}${p}"
fi
fi
prev=
;;
*.lto.$objext) ;; # Ignore GCC LTO objects
*.$objext)
# This assumes that the test object file only shows up
# once in the compiler output.
if test "$p" = "conftest.$objext"; then
pre_test_object_deps_done=yes
continue
fi
if test "$pre_test_object_deps_done" = no; then
if test -z "$_LT_TAGVAR(predep_objects, $1)"; then
_LT_TAGVAR(predep_objects, $1)="$p"
else
_LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p"
fi
else
if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then
_LT_TAGVAR(postdep_objects, $1)="$p"
else
_LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p"
fi
fi
;;
*) ;; # Ignore the rest.
esac
done
# Clean up.
rm -f a.out a.exe
else
echo "libtool.m4: error: problem compiling $1 test program"
fi
$RM -f confest.$objext
CFLAGS=$_lt_libdeps_save_CFLAGS
# PORTME: override above test on systems where it is broken
m4_if([$1], [CXX],
[case $host_os in
interix[[3-9]]*)
# Interix 3.5 installs completely hosed .la files for C++, so rather than
# hack all around it, let's just trust "g++" to DTRT.
_LT_TAGVAR(predep_objects,$1)=
_LT_TAGVAR(postdep_objects,$1)=
_LT_TAGVAR(postdeps,$1)=
;;
linux*)
case `$CC -V 2>&1 | sed 5q` in
*Sun\ C*)
# Sun C++ 5.9
# The more standards-conforming stlport4 library is
# incompatible with the Cstd library. Avoid specifying
# it if it's in CXXFLAGS. Ignore libCrun as
# -library=stlport4 depends on it.
case " $CXX $CXXFLAGS " in
*" -library=stlport4 "*)
solaris_use_stlport4=yes
;;
esac
if test "$solaris_use_stlport4" != yes; then
_LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun'
fi
;;
esac
;;
solaris*)
case $cc_basename in
CC* | sunCC*)
# The more standards-conforming stlport4 library is
# incompatible with the Cstd library. Avoid specifying
# it if it's in CXXFLAGS. Ignore libCrun as
# -library=stlport4 depends on it.
case " $CXX $CXXFLAGS " in
*" -library=stlport4 "*)
solaris_use_stlport4=yes
;;
esac
# Adding this requires a known-good setup of shared libraries for
# Sun compiler versions before 5.6, else PIC objects from an old
# archive will be linked into the output, leading to subtle bugs.
if test "$solaris_use_stlport4" != yes; then
_LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun'
fi
;;
esac
;;
esac
])
case " $_LT_TAGVAR(postdeps, $1) " in
*" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;;
esac
_LT_TAGVAR(compiler_lib_search_dirs, $1)=
if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then
_LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | ${SED} -e 's! -L! !g' -e 's!^ !!'`
fi
_LT_TAGDECL([], [compiler_lib_search_dirs], [1],
[The directories searched by this compiler when creating a shared library])
_LT_TAGDECL([], [predep_objects], [1],
[Dependencies to place before and after the objects being linked to
create a shared library])
_LT_TAGDECL([], [postdep_objects], [1])
_LT_TAGDECL([], [predeps], [1])
_LT_TAGDECL([], [postdeps], [1])
_LT_TAGDECL([], [compiler_lib_search_path], [1],
[The library search path used internally by the compiler when linking
a shared library])
])# _LT_SYS_HIDDEN_LIBDEPS
# _LT_LANG_F77_CONFIG([TAG])
# --------------------------
# Ensure that the configuration variables for a Fortran 77 compiler are
# suitably defined. These variables are subsequently used by _LT_CONFIG
# to write the compiler configuration to `libtool'.
m4_defun([_LT_LANG_F77_CONFIG],
[AC_LANG_PUSH(Fortran 77)
if test -z "$F77" || test "X$F77" = "Xno"; then
_lt_disable_F77=yes
fi
_LT_TAGVAR(archive_cmds_need_lc, $1)=no
_LT_TAGVAR(allow_undefined_flag, $1)=
_LT_TAGVAR(always_export_symbols, $1)=no
_LT_TAGVAR(archive_expsym_cmds, $1)=
_LT_TAGVAR(export_dynamic_flag_spec, $1)=
_LT_TAGVAR(hardcode_direct, $1)=no
_LT_TAGVAR(hardcode_direct_absolute, $1)=no
_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
_LT_TAGVAR(hardcode_libdir_separator, $1)=
_LT_TAGVAR(hardcode_minus_L, $1)=no
_LT_TAGVAR(hardcode_automatic, $1)=no
_LT_TAGVAR(inherit_rpath, $1)=no
_LT_TAGVAR(module_cmds, $1)=
_LT_TAGVAR(module_expsym_cmds, $1)=
_LT_TAGVAR(link_all_deplibs, $1)=unknown
_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
_LT_TAGVAR(reload_flag, $1)=$reload_flag
_LT_TAGVAR(reload_cmds, $1)=$reload_cmds
_LT_TAGVAR(no_undefined_flag, $1)=
_LT_TAGVAR(whole_archive_flag_spec, $1)=
_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
# Source file extension for f77 test sources.
ac_ext=f
# Object file extension for compiled f77 test sources.
objext=o
_LT_TAGVAR(objext, $1)=$objext
# No sense in running all these tests if we already determined that
# the F77 compiler isn't working. Some variables (like enable_shared)
# are currently assumed to apply to all compilers on this platform,
# and will be corrupted by setting them based on a non-working compiler.
if test "$_lt_disable_F77" != yes; then
# Code to be used in simple compile tests
lt_simple_compile_test_code="\
subroutine t
return
end
"
# Code to be used in simple link tests
lt_simple_link_test_code="\
program t
end
"
# ltmain only uses $CC for tagged configurations so make sure $CC is set.
_LT_TAG_COMPILER
# save warnings/boilerplate of simple test code
_LT_COMPILER_BOILERPLATE
_LT_LINKER_BOILERPLATE
# Allow CC to be a program name with arguments.
lt_save_CC="$CC"
lt_save_GCC=$GCC
lt_save_CFLAGS=$CFLAGS
CC=${F77-"f77"}
CFLAGS=$FFLAGS
compiler=$CC
_LT_TAGVAR(compiler, $1)=$CC
_LT_CC_BASENAME([$compiler])
GCC=$G77
if test -n "$compiler"; then
AC_MSG_CHECKING([if libtool supports shared libraries])
AC_MSG_RESULT([$can_build_shared])
AC_MSG_CHECKING([whether to build shared libraries])
test "$can_build_shared" = "no" && enable_shared=no
# On AIX, shared libraries and static libraries use the same namespace, and
# are all built from PIC.
case $host_os in
aix3*)
test "$enable_shared" = yes && enable_static=no
if test -n "$RANLIB"; then
archive_cmds="$archive_cmds~\$RANLIB \$lib"
postinstall_cmds='$RANLIB $lib'
fi
;;
aix[[4-9]]*)
if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
test "$enable_shared" = yes && enable_static=no
fi
;;
esac
AC_MSG_RESULT([$enable_shared])
AC_MSG_CHECKING([whether to build static libraries])
# Make sure either enable_shared or enable_static is yes.
test "$enable_shared" = yes || enable_static=yes
AC_MSG_RESULT([$enable_static])
_LT_TAGVAR(GCC, $1)="$G77"
_LT_TAGVAR(LD, $1)="$LD"
## CAVEAT EMPTOR:
## There is no encapsulation within the following macros, do not change
## the running order or otherwise move them around unless you know exactly
## what you are doing...
_LT_COMPILER_PIC($1)
_LT_COMPILER_C_O($1)
_LT_COMPILER_FILE_LOCKS($1)
_LT_LINKER_SHLIBS($1)
_LT_SYS_DYNAMIC_LINKER($1)
_LT_LINKER_HARDCODE_LIBPATH($1)
_LT_CONFIG($1)
fi # test -n "$compiler"
GCC=$lt_save_GCC
CC="$lt_save_CC"
CFLAGS="$lt_save_CFLAGS"
fi # test "$_lt_disable_F77" != yes
AC_LANG_POP
])# _LT_LANG_F77_CONFIG
# _LT_LANG_FC_CONFIG([TAG])
# -------------------------
# Ensure that the configuration variables for a Fortran compiler are
# suitably defined. These variables are subsequently used by _LT_CONFIG
# to write the compiler configuration to `libtool'.
m4_defun([_LT_LANG_FC_CONFIG],
[AC_LANG_PUSH(Fortran)
if test -z "$FC" || test "X$FC" = "Xno"; then
_lt_disable_FC=yes
fi
_LT_TAGVAR(archive_cmds_need_lc, $1)=no
_LT_TAGVAR(allow_undefined_flag, $1)=
_LT_TAGVAR(always_export_symbols, $1)=no
_LT_TAGVAR(archive_expsym_cmds, $1)=
_LT_TAGVAR(export_dynamic_flag_spec, $1)=
_LT_TAGVAR(hardcode_direct, $1)=no
_LT_TAGVAR(hardcode_direct_absolute, $1)=no
_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
_LT_TAGVAR(hardcode_libdir_separator, $1)=
_LT_TAGVAR(hardcode_minus_L, $1)=no
_LT_TAGVAR(hardcode_automatic, $1)=no
_LT_TAGVAR(inherit_rpath, $1)=no
_LT_TAGVAR(module_cmds, $1)=
_LT_TAGVAR(module_expsym_cmds, $1)=
_LT_TAGVAR(link_all_deplibs, $1)=unknown
_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
_LT_TAGVAR(reload_flag, $1)=$reload_flag
_LT_TAGVAR(reload_cmds, $1)=$reload_cmds
_LT_TAGVAR(no_undefined_flag, $1)=
_LT_TAGVAR(whole_archive_flag_spec, $1)=
_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
# Source file extension for fc test sources.
ac_ext=${ac_fc_srcext-f}
# Object file extension for compiled fc test sources.
objext=o
_LT_TAGVAR(objext, $1)=$objext
# No sense in running all these tests if we already determined that
# the FC compiler isn't working. Some variables (like enable_shared)
# are currently assumed to apply to all compilers on this platform,
# and will be corrupted by setting them based on a non-working compiler.
if test "$_lt_disable_FC" != yes; then
# Code to be used in simple compile tests
lt_simple_compile_test_code="\
subroutine t
return
end
"
# Code to be used in simple link tests
lt_simple_link_test_code="\
program t
end
"
# ltmain only uses $CC for tagged configurations so make sure $CC is set.
_LT_TAG_COMPILER
# save warnings/boilerplate of simple test code
_LT_COMPILER_BOILERPLATE
_LT_LINKER_BOILERPLATE
# Allow CC to be a program name with arguments.
lt_save_CC="$CC"
lt_save_GCC=$GCC
lt_save_CFLAGS=$CFLAGS
CC=${FC-"f95"}
CFLAGS=$FCFLAGS
compiler=$CC
GCC=$ac_cv_fc_compiler_gnu
_LT_TAGVAR(compiler, $1)=$CC
_LT_CC_BASENAME([$compiler])
if test -n "$compiler"; then
AC_MSG_CHECKING([if libtool supports shared libraries])
AC_MSG_RESULT([$can_build_shared])
AC_MSG_CHECKING([whether to build shared libraries])
test "$can_build_shared" = "no" && enable_shared=no
# On AIX, shared libraries and static libraries use the same namespace, and
# are all built from PIC.
case $host_os in
aix3*)
test "$enable_shared" = yes && enable_static=no
if test -n "$RANLIB"; then
archive_cmds="$archive_cmds~\$RANLIB \$lib"
postinstall_cmds='$RANLIB $lib'
fi
;;
aix[[4-9]]*)
if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
test "$enable_shared" = yes && enable_static=no
fi
;;
esac
AC_MSG_RESULT([$enable_shared])
AC_MSG_CHECKING([whether to build static libraries])
# Make sure either enable_shared or enable_static is yes.
test "$enable_shared" = yes || enable_static=yes
AC_MSG_RESULT([$enable_static])
_LT_TAGVAR(GCC, $1)="$ac_cv_fc_compiler_gnu"
_LT_TAGVAR(LD, $1)="$LD"
## CAVEAT EMPTOR:
## There is no encapsulation within the following macros, do not change
## the running order or otherwise move them around unless you know exactly
## what you are doing...
_LT_SYS_HIDDEN_LIBDEPS($1)
_LT_COMPILER_PIC($1)
_LT_COMPILER_C_O($1)
_LT_COMPILER_FILE_LOCKS($1)
_LT_LINKER_SHLIBS($1)
_LT_SYS_DYNAMIC_LINKER($1)
_LT_LINKER_HARDCODE_LIBPATH($1)
_LT_CONFIG($1)
fi # test -n "$compiler"
GCC=$lt_save_GCC
CC=$lt_save_CC
CFLAGS=$lt_save_CFLAGS
fi # test "$_lt_disable_FC" != yes
AC_LANG_POP
])# _LT_LANG_FC_CONFIG
# _LT_LANG_GCJ_CONFIG([TAG])
# --------------------------
# Ensure that the configuration variables for the GNU Java Compiler compiler
# are suitably defined. These variables are subsequently used by _LT_CONFIG
# to write the compiler configuration to `libtool'.
m4_defun([_LT_LANG_GCJ_CONFIG],
[AC_REQUIRE([LT_PROG_GCJ])dnl
AC_LANG_SAVE
# Source file extension for Java test sources.
ac_ext=java
# Object file extension for compiled Java test sources.
objext=o
_LT_TAGVAR(objext, $1)=$objext
# Code to be used in simple compile tests
lt_simple_compile_test_code="class foo {}"
# Code to be used in simple link tests
lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }'
# ltmain only uses $CC for tagged configurations so make sure $CC is set.
_LT_TAG_COMPILER
# save warnings/boilerplate of simple test code
_LT_COMPILER_BOILERPLATE
_LT_LINKER_BOILERPLATE
# Allow CC to be a program name with arguments.
lt_save_CC=$CC
lt_save_CFLAGS=$CFLAGS
lt_save_GCC=$GCC
GCC=yes
CC=${GCJ-"gcj"}
CFLAGS=$GCJFLAGS
compiler=$CC
_LT_TAGVAR(compiler, $1)=$CC
_LT_TAGVAR(LD, $1)="$LD"
_LT_CC_BASENAME([$compiler])
# GCJ did not exist at the time GCC didn't implicitly link libc in.
_LT_TAGVAR(archive_cmds_need_lc, $1)=no
_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
_LT_TAGVAR(reload_flag, $1)=$reload_flag
_LT_TAGVAR(reload_cmds, $1)=$reload_cmds
## CAVEAT EMPTOR:
## There is no encapsulation within the following macros, do not change
## the running order or otherwise move them around unless you know exactly
## what you are doing...
if test -n "$compiler"; then
_LT_COMPILER_NO_RTTI($1)
_LT_COMPILER_PIC($1)
_LT_COMPILER_C_O($1)
_LT_COMPILER_FILE_LOCKS($1)
_LT_LINKER_SHLIBS($1)
_LT_LINKER_HARDCODE_LIBPATH($1)
_LT_CONFIG($1)
fi
AC_LANG_RESTORE
GCC=$lt_save_GCC
CC=$lt_save_CC
CFLAGS=$lt_save_CFLAGS
])# _LT_LANG_GCJ_CONFIG
# _LT_LANG_GO_CONFIG([TAG])
# --------------------------
# Ensure that the configuration variables for the GNU Go compiler
# are suitably defined. These variables are subsequently used by _LT_CONFIG
# to write the compiler configuration to `libtool'.
m4_defun([_LT_LANG_GO_CONFIG],
[AC_REQUIRE([LT_PROG_GO])dnl
AC_LANG_SAVE
# Source file extension for Go test sources.
ac_ext=go
# Object file extension for compiled Go test sources.
objext=o
_LT_TAGVAR(objext, $1)=$objext
# Code to be used in simple compile tests
lt_simple_compile_test_code="package main; func main() { }"
# Code to be used in simple link tests
lt_simple_link_test_code='package main; func main() { }'
# ltmain only uses $CC for tagged configurations so make sure $CC is set.
_LT_TAG_COMPILER
# save warnings/boilerplate of simple test code
_LT_COMPILER_BOILERPLATE
_LT_LINKER_BOILERPLATE
# Allow CC to be a program name with arguments.
lt_save_CC=$CC
lt_save_CFLAGS=$CFLAGS
lt_save_GCC=$GCC
GCC=yes
CC=${GOC-"gccgo"}
CFLAGS=$GOFLAGS
compiler=$CC
_LT_TAGVAR(compiler, $1)=$CC
_LT_TAGVAR(LD, $1)="$LD"
_LT_CC_BASENAME([$compiler])
# Go did not exist at the time GCC didn't implicitly link libc in.
_LT_TAGVAR(archive_cmds_need_lc, $1)=no
_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
_LT_TAGVAR(reload_flag, $1)=$reload_flag
_LT_TAGVAR(reload_cmds, $1)=$reload_cmds
## CAVEAT EMPTOR:
## There is no encapsulation within the following macros, do not change
## the running order or otherwise move them around unless you know exactly
## what you are doing...
if test -n "$compiler"; then
_LT_COMPILER_NO_RTTI($1)
_LT_COMPILER_PIC($1)
_LT_COMPILER_C_O($1)
_LT_COMPILER_FILE_LOCKS($1)
_LT_LINKER_SHLIBS($1)
_LT_LINKER_HARDCODE_LIBPATH($1)
_LT_CONFIG($1)
fi
AC_LANG_RESTORE
GCC=$lt_save_GCC
CC=$lt_save_CC
CFLAGS=$lt_save_CFLAGS
])# _LT_LANG_GO_CONFIG
# _LT_LANG_RC_CONFIG([TAG])
# -------------------------
# Ensure that the configuration variables for the Windows resource compiler
# are suitably defined. These variables are subsequently used by _LT_CONFIG
# to write the compiler configuration to `libtool'.
m4_defun([_LT_LANG_RC_CONFIG],
[AC_REQUIRE([LT_PROG_RC])dnl
AC_LANG_SAVE
# Source file extension for RC test sources.
ac_ext=rc
# Object file extension for compiled RC test sources.
objext=o
_LT_TAGVAR(objext, $1)=$objext
# Code to be used in simple compile tests
lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }'
# Code to be used in simple link tests
lt_simple_link_test_code="$lt_simple_compile_test_code"
# ltmain only uses $CC for tagged configurations so make sure $CC is set.
_LT_TAG_COMPILER
# save warnings/boilerplate of simple test code
_LT_COMPILER_BOILERPLATE
_LT_LINKER_BOILERPLATE
# Allow CC to be a program name with arguments.
lt_save_CC="$CC"
lt_save_CFLAGS=$CFLAGS
lt_save_GCC=$GCC
GCC=
CC=${RC-"windres"}
CFLAGS=
compiler=$CC
_LT_TAGVAR(compiler, $1)=$CC
_LT_CC_BASENAME([$compiler])
_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
if test -n "$compiler"; then
:
_LT_CONFIG($1)
fi
GCC=$lt_save_GCC
AC_LANG_RESTORE
CC=$lt_save_CC
CFLAGS=$lt_save_CFLAGS
])# _LT_LANG_RC_CONFIG
# LT_PROG_GCJ
# -----------
AC_DEFUN([LT_PROG_GCJ],
[m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ],
[m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ],
[AC_CHECK_TOOL(GCJ, gcj,)
test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2"
AC_SUBST(GCJFLAGS)])])[]dnl
])
# Old name:
AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ])
dnl aclocal-1.4 backwards compatibility:
dnl AC_DEFUN([LT_AC_PROG_GCJ], [])
# LT_PROG_GO
# ----------
AC_DEFUN([LT_PROG_GO],
[AC_CHECK_TOOL(GOC, gccgo,)
])
# LT_PROG_RC
# ----------
AC_DEFUN([LT_PROG_RC],
[AC_CHECK_TOOL(RC, windres,)
])
# Old name:
AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC])
dnl aclocal-1.4 backwards compatibility:
dnl AC_DEFUN([LT_AC_PROG_RC], [])
# _LT_DECL_EGREP
# --------------
# If we don't have a new enough Autoconf to choose the best grep
# available, choose the one first in the user's PATH.
m4_defun([_LT_DECL_EGREP],
[AC_REQUIRE([AC_PROG_EGREP])dnl
AC_REQUIRE([AC_PROG_FGREP])dnl
test -z "$GREP" && GREP=grep
_LT_DECL([], [GREP], [1], [A grep program that handles long lines])
_LT_DECL([], [EGREP], [1], [An ERE matcher])
_LT_DECL([], [FGREP], [1], [A literal string matcher])
dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too
AC_SUBST([GREP])
])
# _LT_DECL_OBJDUMP
# --------------
# If we don't have a new enough Autoconf to choose the best objdump
# available, choose the one first in the user's PATH.
m4_defun([_LT_DECL_OBJDUMP],
[AC_CHECK_TOOL(OBJDUMP, objdump, false)
test -z "$OBJDUMP" && OBJDUMP=objdump
_LT_DECL([], [OBJDUMP], [1], [An object symbol dumper])
AC_SUBST([OBJDUMP])
])
# _LT_DECL_DLLTOOL
# ----------------
# Ensure DLLTOOL variable is set.
m4_defun([_LT_DECL_DLLTOOL],
[AC_CHECK_TOOL(DLLTOOL, dlltool, false)
test -z "$DLLTOOL" && DLLTOOL=dlltool
_LT_DECL([], [DLLTOOL], [1], [DLL creation program])
AC_SUBST([DLLTOOL])
])
# _LT_DECL_SED
# ------------
# Check for a fully-functional sed program, that truncates
# as few characters as possible. Prefer GNU sed if found.
m4_defun([_LT_DECL_SED],
[AC_PROG_SED
test -z "$SED" && SED=sed
Xsed="$SED -e 1s/^X//"
_LT_DECL([], [SED], [1], [A sed program that does not truncate output])
_LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"],
[Sed that helps us avoid accidentally triggering echo(1) options like -n])
])# _LT_DECL_SED
m4_ifndef([AC_PROG_SED], [
############################################################
# NOTE: This macro has been submitted for inclusion into #
# GNU Autoconf as AC_PROG_SED. When it is available in #
# a released version of Autoconf we should remove this #
# macro and use it instead. #
############################################################
m4_defun([AC_PROG_SED],
[AC_MSG_CHECKING([for a sed that does not truncate output])
AC_CACHE_VAL(lt_cv_path_SED,
[# Loop through the user's path and test for sed and gsed.
# Then use that list of sed's as ones to test for truncation.
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for lt_ac_prog in sed gsed; do
for ac_exec_ext in '' $ac_executable_extensions; do
if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then
lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext"
fi
done
done
done
IFS=$as_save_IFS
lt_ac_max=0
lt_ac_count=0
# Add /usr/xpg4/bin/sed as it is typically found on Solaris
# along with /bin/sed that truncates output.
for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do
test ! -f $lt_ac_sed && continue
cat /dev/null > conftest.in
lt_ac_count=0
echo $ECHO_N "0123456789$ECHO_C" >conftest.in
# Check for GNU sed and select it if it is found.
if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then
lt_cv_path_SED=$lt_ac_sed
break
fi
while true; do
cat conftest.in conftest.in >conftest.tmp
mv conftest.tmp conftest.in
cp conftest.in conftest.nl
echo >>conftest.nl
$lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break
cmp -s conftest.out conftest.nl || break
# 10000 chars as input seems more than enough
test $lt_ac_count -gt 10 && break
lt_ac_count=`expr $lt_ac_count + 1`
if test $lt_ac_count -gt $lt_ac_max; then
lt_ac_max=$lt_ac_count
lt_cv_path_SED=$lt_ac_sed
fi
done
done
])
SED=$lt_cv_path_SED
AC_SUBST([SED])
AC_MSG_RESULT([$SED])
])#AC_PROG_SED
])#m4_ifndef
# Old name:
AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED])
dnl aclocal-1.4 backwards compatibility:
dnl AC_DEFUN([LT_AC_PROG_SED], [])
# _LT_CHECK_SHELL_FEATURES
# ------------------------
# Find out whether the shell is Bourne or XSI compatible,
# or has some other useful features.
m4_defun([_LT_CHECK_SHELL_FEATURES],
[AC_MSG_CHECKING([whether the shell understands some XSI constructs])
# Try some XSI features
xsi_shell=no
( _lt_dummy="a/b/c"
test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \
= c,a/b,b/c, \
&& eval 'test $(( 1 + 1 )) -eq 2 \
&& test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \
&& xsi_shell=yes
AC_MSG_RESULT([$xsi_shell])
_LT_CONFIG_LIBTOOL_INIT([xsi_shell='$xsi_shell'])
AC_MSG_CHECKING([whether the shell understands "+="])
lt_shell_append=no
( foo=bar; set foo baz; eval "$[1]+=\$[2]" && test "$foo" = barbaz ) \
>/dev/null 2>&1 \
&& lt_shell_append=yes
AC_MSG_RESULT([$lt_shell_append])
_LT_CONFIG_LIBTOOL_INIT([lt_shell_append='$lt_shell_append'])
if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
lt_unset=unset
else
lt_unset=false
fi
_LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl
# test EBCDIC or ASCII
case `echo X|tr X '\101'` in
A) # ASCII based system
# \n is not interpreted correctly by Solaris 8 /usr/ucb/tr
lt_SP2NL='tr \040 \012'
lt_NL2SP='tr \015\012 \040\040'
;;
*) # EBCDIC based system
lt_SP2NL='tr \100 \n'
lt_NL2SP='tr \r\n \100\100'
;;
esac
_LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl
_LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl
])# _LT_CHECK_SHELL_FEATURES
# _LT_PROG_FUNCTION_REPLACE (FUNCNAME, REPLACEMENT-BODY)
# ------------------------------------------------------
# In `$cfgfile', look for function FUNCNAME delimited by `^FUNCNAME ()$' and
# '^} FUNCNAME ', and replace its body with REPLACEMENT-BODY.
m4_defun([_LT_PROG_FUNCTION_REPLACE],
[dnl {
sed -e '/^$1 ()$/,/^} # $1 /c\
$1 ()\
{\
m4_bpatsubsts([$2], [$], [\\], [^\([ ]\)], [\\\1])
} # Extended-shell $1 implementation' "$cfgfile" > $cfgfile.tmp \
&& mv -f "$cfgfile.tmp" "$cfgfile" \
|| (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
test 0 -eq $? || _lt_function_replace_fail=:
])
# _LT_PROG_REPLACE_SHELLFNS
# -------------------------
# Replace existing portable implementations of several shell functions with
# equivalent extended shell implementations where those features are available..
m4_defun([_LT_PROG_REPLACE_SHELLFNS],
[if test x"$xsi_shell" = xyes; then
_LT_PROG_FUNCTION_REPLACE([func_dirname], [dnl
case ${1} in
*/*) func_dirname_result="${1%/*}${2}" ;;
* ) func_dirname_result="${3}" ;;
esac])
_LT_PROG_FUNCTION_REPLACE([func_basename], [dnl
func_basename_result="${1##*/}"])
_LT_PROG_FUNCTION_REPLACE([func_dirname_and_basename], [dnl
case ${1} in
*/*) func_dirname_result="${1%/*}${2}" ;;
* ) func_dirname_result="${3}" ;;
esac
func_basename_result="${1##*/}"])
_LT_PROG_FUNCTION_REPLACE([func_stripname], [dnl
# pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
# positional parameters, so assign one to ordinary parameter first.
func_stripname_result=${3}
func_stripname_result=${func_stripname_result#"${1}"}
func_stripname_result=${func_stripname_result%"${2}"}])
_LT_PROG_FUNCTION_REPLACE([func_split_long_opt], [dnl
func_split_long_opt_name=${1%%=*}
func_split_long_opt_arg=${1#*=}])
_LT_PROG_FUNCTION_REPLACE([func_split_short_opt], [dnl
func_split_short_opt_arg=${1#??}
func_split_short_opt_name=${1%"$func_split_short_opt_arg"}])
_LT_PROG_FUNCTION_REPLACE([func_lo2o], [dnl
case ${1} in
*.lo) func_lo2o_result=${1%.lo}.${objext} ;;
*) func_lo2o_result=${1} ;;
esac])
_LT_PROG_FUNCTION_REPLACE([func_xform], [ func_xform_result=${1%.*}.lo])
_LT_PROG_FUNCTION_REPLACE([func_arith], [ func_arith_result=$(( $[*] ))])
_LT_PROG_FUNCTION_REPLACE([func_len], [ func_len_result=${#1}])
fi
if test x"$lt_shell_append" = xyes; then
_LT_PROG_FUNCTION_REPLACE([func_append], [ eval "${1}+=\\${2}"])
_LT_PROG_FUNCTION_REPLACE([func_append_quoted], [dnl
func_quote_for_eval "${2}"
dnl m4 expansion turns \\\\ into \\, and then the shell eval turns that into \
eval "${1}+=\\\\ \\$func_quote_for_eval_result"])
# Save a `func_append' function call where possible by direct use of '+='
sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \
&& mv -f "$cfgfile.tmp" "$cfgfile" \
|| (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
test 0 -eq $? || _lt_function_replace_fail=:
else
# Save a `func_append' function call even when '+=' is not available
sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \
&& mv -f "$cfgfile.tmp" "$cfgfile" \
|| (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
test 0 -eq $? || _lt_function_replace_fail=:
fi
if test x"$_lt_function_replace_fail" = x":"; then
AC_MSG_WARN([Unable to substitute extended shell functions in $ofile])
fi
])
# _LT_PATH_CONVERSION_FUNCTIONS
# -----------------------------
# Determine which file name conversion functions should be used by
# func_to_host_file (and, implicitly, by func_to_host_path). These are needed
# for certain cross-compile configurations and native mingw.
m4_defun([_LT_PATH_CONVERSION_FUNCTIONS],
[AC_REQUIRE([AC_CANONICAL_HOST])dnl
AC_REQUIRE([AC_CANONICAL_BUILD])dnl
AC_MSG_CHECKING([how to convert $build file names to $host format])
AC_CACHE_VAL(lt_cv_to_host_file_cmd,
[case $host in
*-*-mingw* )
case $build in
*-*-mingw* ) # actually msys
lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32
;;
*-*-cygwin* )
lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32
;;
* ) # otherwise, assume *nix
lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32
;;
esac
;;
*-*-cygwin* )
case $build in
*-*-mingw* ) # actually msys
lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin
;;
*-*-cygwin* )
lt_cv_to_host_file_cmd=func_convert_file_noop
;;
* ) # otherwise, assume *nix
lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin
;;
esac
;;
* ) # unhandled hosts (and "normal" native builds)
lt_cv_to_host_file_cmd=func_convert_file_noop
;;
esac
])
to_host_file_cmd=$lt_cv_to_host_file_cmd
AC_MSG_RESULT([$lt_cv_to_host_file_cmd])
_LT_DECL([to_host_file_cmd], [lt_cv_to_host_file_cmd],
[0], [convert $build file names to $host format])dnl
AC_MSG_CHECKING([how to convert $build file names to toolchain format])
AC_CACHE_VAL(lt_cv_to_tool_file_cmd,
[#assume ordinary cross tools, or native build.
lt_cv_to_tool_file_cmd=func_convert_file_noop
case $host in
*-*-mingw* )
case $build in
*-*-mingw* ) # actually msys
lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32
;;
esac
;;
esac
])
to_tool_file_cmd=$lt_cv_to_tool_file_cmd
AC_MSG_RESULT([$lt_cv_to_tool_file_cmd])
_LT_DECL([to_tool_file_cmd], [lt_cv_to_tool_file_cmd],
[0], [convert $build files to toolchain format])dnl
])# _LT_PATH_CONVERSION_FUNCTIONS
tenace-0.13/m4/unistd_h.m4 0000644 0004016 0004016 00000021434 12215417301 012210 0000000 0000000 # unistd_h.m4 serial 66
dnl Copyright (C) 2006-2013 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
dnl Written by Simon Josefsson, Bruno Haible.
AC_DEFUN([gl_UNISTD_H],
[
dnl Use AC_REQUIRE here, so that the default behavior below is expanded
dnl once only, before all statements that occur in other macros.
AC_REQUIRE([gl_UNISTD_H_DEFAULTS])
gl_CHECK_NEXT_HEADERS([unistd.h])
if test $ac_cv_header_unistd_h = yes; then
HAVE_UNISTD_H=1
else
HAVE_UNISTD_H=0
fi
AC_SUBST([HAVE_UNISTD_H])
dnl Ensure the type pid_t gets defined.
AC_REQUIRE([AC_TYPE_PID_T])
dnl Determine WINDOWS_64_BIT_OFF_T.
AC_REQUIRE([gl_TYPE_OFF_T])
dnl Check for declarations of anything we want to poison if the
dnl corresponding gnulib module is not in use.
gl_WARN_ON_USE_PREPARE([[
#if HAVE_UNISTD_H
# include
#endif
/* Some systems declare various items in the wrong headers. */
#if !(defined __GLIBC__ && !defined __UCLIBC__)
# include
# include
# include
# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
# include
# endif
#endif
]], [chdir chown dup dup2 dup3 environ euidaccess faccessat fchdir fchownat
fdatasync fsync ftruncate getcwd getdomainname getdtablesize getgroups
gethostname getlogin getlogin_r getpagesize
getusershell setusershell endusershell
group_member isatty lchown link linkat lseek pipe pipe2 pread pwrite
readlink readlinkat rmdir sethostname sleep symlink symlinkat ttyname_r
unlink unlinkat usleep])
])
AC_DEFUN([gl_UNISTD_MODULE_INDICATOR],
[
dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
AC_REQUIRE([gl_UNISTD_H_DEFAULTS])
gl_MODULE_INDICATOR_SET_VARIABLE([$1])
dnl Define it also as a C macro, for the benefit of the unit tests.
gl_MODULE_INDICATOR_FOR_TESTS([$1])
])
AC_DEFUN([gl_UNISTD_H_DEFAULTS],
[
GNULIB_CHDIR=0; AC_SUBST([GNULIB_CHDIR])
GNULIB_CHOWN=0; AC_SUBST([GNULIB_CHOWN])
GNULIB_CLOSE=0; AC_SUBST([GNULIB_CLOSE])
GNULIB_DUP=0; AC_SUBST([GNULIB_DUP])
GNULIB_DUP2=0; AC_SUBST([GNULIB_DUP2])
GNULIB_DUP3=0; AC_SUBST([GNULIB_DUP3])
GNULIB_ENVIRON=0; AC_SUBST([GNULIB_ENVIRON])
GNULIB_EUIDACCESS=0; AC_SUBST([GNULIB_EUIDACCESS])
GNULIB_FACCESSAT=0; AC_SUBST([GNULIB_FACCESSAT])
GNULIB_FCHDIR=0; AC_SUBST([GNULIB_FCHDIR])
GNULIB_FCHOWNAT=0; AC_SUBST([GNULIB_FCHOWNAT])
GNULIB_FDATASYNC=0; AC_SUBST([GNULIB_FDATASYNC])
GNULIB_FSYNC=0; AC_SUBST([GNULIB_FSYNC])
GNULIB_FTRUNCATE=0; AC_SUBST([GNULIB_FTRUNCATE])
GNULIB_GETCWD=0; AC_SUBST([GNULIB_GETCWD])
GNULIB_GETDOMAINNAME=0; AC_SUBST([GNULIB_GETDOMAINNAME])
GNULIB_GETDTABLESIZE=0; AC_SUBST([GNULIB_GETDTABLESIZE])
GNULIB_GETGROUPS=0; AC_SUBST([GNULIB_GETGROUPS])
GNULIB_GETHOSTNAME=0; AC_SUBST([GNULIB_GETHOSTNAME])
GNULIB_GETLOGIN=0; AC_SUBST([GNULIB_GETLOGIN])
GNULIB_GETLOGIN_R=0; AC_SUBST([GNULIB_GETLOGIN_R])
GNULIB_GETPAGESIZE=0; AC_SUBST([GNULIB_GETPAGESIZE])
GNULIB_GETUSERSHELL=0; AC_SUBST([GNULIB_GETUSERSHELL])
GNULIB_GROUP_MEMBER=0; AC_SUBST([GNULIB_GROUP_MEMBER])
GNULIB_ISATTY=0; AC_SUBST([GNULIB_ISATTY])
GNULIB_LCHOWN=0; AC_SUBST([GNULIB_LCHOWN])
GNULIB_LINK=0; AC_SUBST([GNULIB_LINK])
GNULIB_LINKAT=0; AC_SUBST([GNULIB_LINKAT])
GNULIB_LSEEK=0; AC_SUBST([GNULIB_LSEEK])
GNULIB_PIPE=0; AC_SUBST([GNULIB_PIPE])
GNULIB_PIPE2=0; AC_SUBST([GNULIB_PIPE2])
GNULIB_PREAD=0; AC_SUBST([GNULIB_PREAD])
GNULIB_PWRITE=0; AC_SUBST([GNULIB_PWRITE])
GNULIB_READ=0; AC_SUBST([GNULIB_READ])
GNULIB_READLINK=0; AC_SUBST([GNULIB_READLINK])
GNULIB_READLINKAT=0; AC_SUBST([GNULIB_READLINKAT])
GNULIB_RMDIR=0; AC_SUBST([GNULIB_RMDIR])
GNULIB_SETHOSTNAME=0; AC_SUBST([GNULIB_SETHOSTNAME])
GNULIB_SLEEP=0; AC_SUBST([GNULIB_SLEEP])
GNULIB_SYMLINK=0; AC_SUBST([GNULIB_SYMLINK])
GNULIB_SYMLINKAT=0; AC_SUBST([GNULIB_SYMLINKAT])
GNULIB_TTYNAME_R=0; AC_SUBST([GNULIB_TTYNAME_R])
GNULIB_UNISTD_H_NONBLOCKING=0; AC_SUBST([GNULIB_UNISTD_H_NONBLOCKING])
GNULIB_UNISTD_H_SIGPIPE=0; AC_SUBST([GNULIB_UNISTD_H_SIGPIPE])
GNULIB_UNLINK=0; AC_SUBST([GNULIB_UNLINK])
GNULIB_UNLINKAT=0; AC_SUBST([GNULIB_UNLINKAT])
GNULIB_USLEEP=0; AC_SUBST([GNULIB_USLEEP])
GNULIB_WRITE=0; AC_SUBST([GNULIB_WRITE])
dnl Assume proper GNU behavior unless another module says otherwise.
HAVE_CHOWN=1; AC_SUBST([HAVE_CHOWN])
HAVE_DUP2=1; AC_SUBST([HAVE_DUP2])
HAVE_DUP3=1; AC_SUBST([HAVE_DUP3])
HAVE_EUIDACCESS=1; AC_SUBST([HAVE_EUIDACCESS])
HAVE_FACCESSAT=1; AC_SUBST([HAVE_FACCESSAT])
HAVE_FCHDIR=1; AC_SUBST([HAVE_FCHDIR])
HAVE_FCHOWNAT=1; AC_SUBST([HAVE_FCHOWNAT])
HAVE_FDATASYNC=1; AC_SUBST([HAVE_FDATASYNC])
HAVE_FSYNC=1; AC_SUBST([HAVE_FSYNC])
HAVE_FTRUNCATE=1; AC_SUBST([HAVE_FTRUNCATE])
HAVE_GETDTABLESIZE=1; AC_SUBST([HAVE_GETDTABLESIZE])
HAVE_GETGROUPS=1; AC_SUBST([HAVE_GETGROUPS])
HAVE_GETHOSTNAME=1; AC_SUBST([HAVE_GETHOSTNAME])
HAVE_GETLOGIN=1; AC_SUBST([HAVE_GETLOGIN])
HAVE_GETPAGESIZE=1; AC_SUBST([HAVE_GETPAGESIZE])
HAVE_GROUP_MEMBER=1; AC_SUBST([HAVE_GROUP_MEMBER])
HAVE_LCHOWN=1; AC_SUBST([HAVE_LCHOWN])
HAVE_LINK=1; AC_SUBST([HAVE_LINK])
HAVE_LINKAT=1; AC_SUBST([HAVE_LINKAT])
HAVE_PIPE=1; AC_SUBST([HAVE_PIPE])
HAVE_PIPE2=1; AC_SUBST([HAVE_PIPE2])
HAVE_PREAD=1; AC_SUBST([HAVE_PREAD])
HAVE_PWRITE=1; AC_SUBST([HAVE_PWRITE])
HAVE_READLINK=1; AC_SUBST([HAVE_READLINK])
HAVE_READLINKAT=1; AC_SUBST([HAVE_READLINKAT])
HAVE_SETHOSTNAME=1; AC_SUBST([HAVE_SETHOSTNAME])
HAVE_SLEEP=1; AC_SUBST([HAVE_SLEEP])
HAVE_SYMLINK=1; AC_SUBST([HAVE_SYMLINK])
HAVE_SYMLINKAT=1; AC_SUBST([HAVE_SYMLINKAT])
HAVE_UNLINKAT=1; AC_SUBST([HAVE_UNLINKAT])
HAVE_USLEEP=1; AC_SUBST([HAVE_USLEEP])
HAVE_DECL_ENVIRON=1; AC_SUBST([HAVE_DECL_ENVIRON])
HAVE_DECL_FCHDIR=1; AC_SUBST([HAVE_DECL_FCHDIR])
HAVE_DECL_FDATASYNC=1; AC_SUBST([HAVE_DECL_FDATASYNC])
HAVE_DECL_GETDOMAINNAME=1; AC_SUBST([HAVE_DECL_GETDOMAINNAME])
HAVE_DECL_GETLOGIN_R=1; AC_SUBST([HAVE_DECL_GETLOGIN_R])
HAVE_DECL_GETPAGESIZE=1; AC_SUBST([HAVE_DECL_GETPAGESIZE])
HAVE_DECL_GETUSERSHELL=1; AC_SUBST([HAVE_DECL_GETUSERSHELL])
HAVE_DECL_SETHOSTNAME=1; AC_SUBST([HAVE_DECL_SETHOSTNAME])
HAVE_DECL_TTYNAME_R=1; AC_SUBST([HAVE_DECL_TTYNAME_R])
HAVE_OS_H=0; AC_SUBST([HAVE_OS_H])
HAVE_SYS_PARAM_H=0; AC_SUBST([HAVE_SYS_PARAM_H])
REPLACE_CHOWN=0; AC_SUBST([REPLACE_CHOWN])
REPLACE_CLOSE=0; AC_SUBST([REPLACE_CLOSE])
REPLACE_DUP=0; AC_SUBST([REPLACE_DUP])
REPLACE_DUP2=0; AC_SUBST([REPLACE_DUP2])
REPLACE_FCHOWNAT=0; AC_SUBST([REPLACE_FCHOWNAT])
REPLACE_FTRUNCATE=0; AC_SUBST([REPLACE_FTRUNCATE])
REPLACE_GETCWD=0; AC_SUBST([REPLACE_GETCWD])
REPLACE_GETDOMAINNAME=0; AC_SUBST([REPLACE_GETDOMAINNAME])
REPLACE_GETLOGIN_R=0; AC_SUBST([REPLACE_GETLOGIN_R])
REPLACE_GETGROUPS=0; AC_SUBST([REPLACE_GETGROUPS])
REPLACE_GETPAGESIZE=0; AC_SUBST([REPLACE_GETPAGESIZE])
REPLACE_ISATTY=0; AC_SUBST([REPLACE_ISATTY])
REPLACE_LCHOWN=0; AC_SUBST([REPLACE_LCHOWN])
REPLACE_LINK=0; AC_SUBST([REPLACE_LINK])
REPLACE_LINKAT=0; AC_SUBST([REPLACE_LINKAT])
REPLACE_LSEEK=0; AC_SUBST([REPLACE_LSEEK])
REPLACE_PREAD=0; AC_SUBST([REPLACE_PREAD])
REPLACE_PWRITE=0; AC_SUBST([REPLACE_PWRITE])
REPLACE_READ=0; AC_SUBST([REPLACE_READ])
REPLACE_READLINK=0; AC_SUBST([REPLACE_READLINK])
REPLACE_RMDIR=0; AC_SUBST([REPLACE_RMDIR])
REPLACE_SLEEP=0; AC_SUBST([REPLACE_SLEEP])
REPLACE_SYMLINK=0; AC_SUBST([REPLACE_SYMLINK])
REPLACE_TTYNAME_R=0; AC_SUBST([REPLACE_TTYNAME_R])
REPLACE_UNLINK=0; AC_SUBST([REPLACE_UNLINK])
REPLACE_UNLINKAT=0; AC_SUBST([REPLACE_UNLINKAT])
REPLACE_USLEEP=0; AC_SUBST([REPLACE_USLEEP])
REPLACE_WRITE=0; AC_SUBST([REPLACE_WRITE])
UNISTD_H_HAVE_WINSOCK2_H=0; AC_SUBST([UNISTD_H_HAVE_WINSOCK2_H])
UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS=0;
AC_SUBST([UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS])
])
tenace-0.13/m4/nproc.m4 0000644 0004016 0004016 00000003427 12215417301 011516 0000000 0000000 # nproc.m4 serial 4
dnl Copyright (C) 2009-2013 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
AC_DEFUN([gl_NPROC],
[
gl_PREREQ_NPROC
])
# Prerequisites of lib/nproc.c.
AC_DEFUN([gl_PREREQ_NPROC],
[
dnl Persuade glibc to declare CPU_SETSIZE, CPU_ISSET etc.
AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])
AC_CHECK_HEADERS([sys/pstat.h sys/sysmp.h sys/param.h],,,
[AC_INCLUDES_DEFAULT])
dnl requires on OpenBSD 4.0.
AC_CHECK_HEADERS([sys/sysctl.h],,,
[AC_INCLUDES_DEFAULT
#if HAVE_SYS_PARAM_H
# include
#endif
])
AC_CHECK_FUNCS([sched_getaffinity sched_getaffinity_np \
pstat_getdynamic sysmp sysctl])
dnl Test whether sched_getaffinity has the expected declaration.
dnl glibc 2.3.[0-2]:
dnl int sched_getaffinity (pid_t, unsigned int, unsigned long int *);
dnl glibc 2.3.3:
dnl int sched_getaffinity (pid_t, cpu_set_t *);
dnl glibc >= 2.3.4:
dnl int sched_getaffinity (pid_t, size_t, cpu_set_t *);
if test $ac_cv_func_sched_getaffinity = yes; then
AC_CACHE_CHECK([for glibc compatible sched_getaffinity],
[gl_cv_func_sched_getaffinity3],
[AC_COMPILE_IFELSE(
[AC_LANG_PROGRAM(
[[#include ]],
[[sched_getaffinity (0, 0, (cpu_set_t *) 0);]])],
[gl_cv_func_sched_getaffinity3=yes],
[gl_cv_func_sched_getaffinity3=no])
])
if test $gl_cv_func_sched_getaffinity3 = yes; then
AC_DEFINE([HAVE_SCHED_GETAFFINITY_LIKE_GLIBC], [1],
[Define to 1 if sched_getaffinity has a glibc compatible declaration.])
fi
fi
])
tenace-0.13/m4/warn-on-use.m4 0000644 0004016 0004016 00000004154 12215417301 012546 0000000 0000000 # warn-on-use.m4 serial 5
dnl Copyright (C) 2010-2013 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
# gl_WARN_ON_USE_PREPARE(INCLUDES, NAMES)
# ---------------------------------------
# For each whitespace-separated element in the list of NAMES, define
# HAVE_RAW_DECL_name if the function has a declaration among INCLUDES
# even after being undefined as a macro.
#
# See warn-on-use.h for some hints on how to poison function names, as
# well as ideas on poisoning global variables and macros. NAMES may
# include global variables, but remember that only functions work with
# _GL_WARN_ON_USE. Typically, INCLUDES only needs to list a single
# header, but if the replacement header pulls in other headers because
# some systems declare functions in the wrong header, then INCLUDES
# should do likewise.
#
# It is generally safe to assume declarations for functions declared
# in the intersection of C89 and C11 (such as printf) without
# needing gl_WARN_ON_USE_PREPARE.
AC_DEFUN([gl_WARN_ON_USE_PREPARE],
[
m4_foreach_w([gl_decl], [$2],
[AH_TEMPLATE([HAVE_RAW_DECL_]AS_TR_CPP(m4_defn([gl_decl])),
[Define to 1 if ]m4_defn([gl_decl])[ is declared even after
undefining macros.])])dnl
dnl FIXME: gl_Symbol must be used unquoted until we can assume
dnl autoconf 2.64 or newer.
for gl_func in m4_flatten([$2]); do
AS_VAR_PUSHDEF([gl_Symbol], [gl_cv_have_raw_decl_$gl_func])dnl
AC_CACHE_CHECK([whether $gl_func is declared without a macro],
gl_Symbol,
[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([$1],
[@%:@undef $gl_func
(void) $gl_func;])],
[AS_VAR_SET(gl_Symbol, [yes])], [AS_VAR_SET(gl_Symbol, [no])])])
AS_VAR_IF(gl_Symbol, [yes],
[AC_DEFINE_UNQUOTED(AS_TR_CPP([HAVE_RAW_DECL_$gl_func]), [1])
dnl shortcut - if the raw declaration exists, then set a cache
dnl variable to allow skipping any later AC_CHECK_DECL efforts
eval ac_cv_have_decl_$gl_func=yes])
AS_VAR_POPDEF([gl_Symbol])dnl
done
])
tenace-0.13/m4/00gnulib.m4 0000644 0004016 0004016 00000002522 12215417300 012007 0000000 0000000 # 00gnulib.m4 serial 2
dnl Copyright (C) 2009-2013 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
dnl This file must be named something that sorts before all other
dnl gnulib-provided .m4 files. It is needed until such time as we can
dnl assume Autoconf 2.64, with its improved AC_DEFUN_ONCE semantics.
# AC_DEFUN_ONCE([NAME], VALUE)
# ----------------------------
# Define NAME to expand to VALUE on the first use (whether by direct
# expansion, or by AC_REQUIRE), and to nothing on all subsequent uses.
# Avoid bugs in AC_REQUIRE in Autoconf 2.63 and earlier. This
# definition is slower than the version in Autoconf 2.64, because it
# can only use interfaces that existed since 2.59; but it achieves the
# same effect. Quoting is necessary to avoid confusing Automake.
m4_version_prereq([2.63.263], [],
[m4_define([AC][_DEFUN_ONCE],
[AC][_DEFUN([$1],
[AC_REQUIRE([_gl_DEFUN_ONCE([$1])],
[m4_indir([_gl_DEFUN_ONCE([$1])])])])]dnl
[AC][_DEFUN([_gl_DEFUN_ONCE([$1])], [$2])])])
# gl_00GNULIB
# -----------
# Witness macro that this file has been included. Needed to force
# Automake to include this file prior to all other gnulib .m4 files.
AC_DEFUN([gl_00GNULIB])
tenace-0.13/m4/ltsugar.m4 0000644 0004016 0004016 00000010424 12225337266 012065 0000000 0000000 # ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*-
#
# Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc.
# Written by Gary V. Vaughan, 2004
#
# This file is free software; the Free Software Foundation gives
# unlimited permission to copy and/or distribute it, with or without
# modifications, as long as this notice is preserved.
# serial 6 ltsugar.m4
# This is to help aclocal find these macros, as it can't see m4_define.
AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])])
# lt_join(SEP, ARG1, [ARG2...])
# -----------------------------
# Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their
# associated separator.
# Needed until we can rely on m4_join from Autoconf 2.62, since all earlier
# versions in m4sugar had bugs.
m4_define([lt_join],
[m4_if([$#], [1], [],
[$#], [2], [[$2]],
[m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])])
m4_define([_lt_join],
[m4_if([$#$2], [2], [],
[m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])])
# lt_car(LIST)
# lt_cdr(LIST)
# ------------
# Manipulate m4 lists.
# These macros are necessary as long as will still need to support
# Autoconf-2.59 which quotes differently.
m4_define([lt_car], [[$1]])
m4_define([lt_cdr],
[m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])],
[$#], 1, [],
[m4_dquote(m4_shift($@))])])
m4_define([lt_unquote], $1)
# lt_append(MACRO-NAME, STRING, [SEPARATOR])
# ------------------------------------------
# Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'.
# Note that neither SEPARATOR nor STRING are expanded; they are appended
# to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked).
# No SEPARATOR is output if MACRO-NAME was previously undefined (different
# than defined and empty).
#
# This macro is needed until we can rely on Autoconf 2.62, since earlier
# versions of m4sugar mistakenly expanded SEPARATOR but not STRING.
m4_define([lt_append],
[m4_define([$1],
m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])])
# lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...])
# ----------------------------------------------------------
# Produce a SEP delimited list of all paired combinations of elements of
# PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list
# has the form PREFIXmINFIXSUFFIXn.
# Needed until we can rely on m4_combine added in Autoconf 2.62.
m4_define([lt_combine],
[m4_if(m4_eval([$# > 3]), [1],
[m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl
[[m4_foreach([_Lt_prefix], [$2],
[m4_foreach([_Lt_suffix],
]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[,
[_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])])
# lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ])
# -----------------------------------------------------------------------
# Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited
# by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ.
m4_define([lt_if_append_uniq],
[m4_ifdef([$1],
[m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1],
[lt_append([$1], [$2], [$3])$4],
[$5])],
[lt_append([$1], [$2], [$3])$4])])
# lt_dict_add(DICT, KEY, VALUE)
# -----------------------------
m4_define([lt_dict_add],
[m4_define([$1($2)], [$3])])
# lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE)
# --------------------------------------------
m4_define([lt_dict_add_subkey],
[m4_define([$1($2:$3)], [$4])])
# lt_dict_fetch(DICT, KEY, [SUBKEY])
# ----------------------------------
m4_define([lt_dict_fetch],
[m4_ifval([$3],
m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]),
m4_ifdef([$1($2)], [m4_defn([$1($2)])]))])
# lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE])
# -----------------------------------------------------------------
m4_define([lt_if_dict_fetch],
[m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4],
[$5],
[$6])])
# lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...])
# --------------------------------------------------------------
m4_define([lt_dict_filter],
[m4_if([$5], [], [],
[lt_join(m4_quote(m4_default([$4], [[, ]])),
lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]),
[lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl
])
tenace-0.13/m4/gnulib-cache.m4 0000664 0004016 0004016 00000003455 12215417304 012724 0000000 0000000 # Copyright (C) 2002-2013 Free Software Foundation, Inc.
#
# This file is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# This file 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 General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this file. If not, see .
#
# As a special exception to the GNU General Public License,
# this file may be distributed as part of a program that
# contains a configuration script generated by Autoconf, under
# the same distribution terms as the rest of that program.
#
# Generated by gnulib-tool.
#
# This file represents the specification of how gnulib-tool is used.
# It acts as a cache: It is written and read by gnulib-tool.
# In projects that use version control, this file is meant to be put under
# version control, like the configure.ac and various Makefile.am files.
# Specification in the form of a command-line invocation:
# gnulib-tool --import --dir=. --lib=libgnu --source-base=lib --m4-base=m4 --doc-base=doc --tests-base=tests --aux-dir=config --no-conditional-dependencies --libtool --macro-prefix=gl nproc physmem
# Specification in the form of a few gnulib-tool.m4 macro invocations:
gl_LOCAL_DIR([])
gl_MODULES([
nproc
physmem
])
gl_AVOID([])
gl_SOURCE_BASE([lib])
gl_M4_BASE([m4])
gl_PO_BASE([])
gl_DOC_BASE([doc])
gl_TESTS_BASE([tests])
gl_LIB([libgnu])
gl_MAKEFILE_NAME([])
gl_LIBTOOL
gl_MACRO_PREFIX([gl])
gl_PO_DOMAIN([])
gl_WITNESS_C_MACRO([])
tenace-0.13/m4/gnulib-common.m4 0000644 0004016 0004016 00000033321 12215417300 013136 0000000 0000000 # gnulib-common.m4 serial 33
dnl Copyright (C) 2007-2013 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
# gl_COMMON
# is expanded unconditionally through gnulib-tool magic.
AC_DEFUN([gl_COMMON], [
dnl Use AC_REQUIRE here, so that the code is expanded once only.
AC_REQUIRE([gl_00GNULIB])
AC_REQUIRE([gl_COMMON_BODY])
])
AC_DEFUN([gl_COMMON_BODY], [
AH_VERBATIM([_Noreturn],
[/* The _Noreturn keyword of C11. */
#if ! (defined _Noreturn \
|| (defined __STDC_VERSION__ && 201112 <= __STDC_VERSION__))
# if (3 <= __GNUC__ || (__GNUC__ == 2 && 8 <= __GNUC_MINOR__) \
|| 0x5110 <= __SUNPRO_C)
# define _Noreturn __attribute__ ((__noreturn__))
# elif defined _MSC_VER && 1200 <= _MSC_VER
# define _Noreturn __declspec (noreturn)
# else
# define _Noreturn
# endif
#endif
])
AH_VERBATIM([isoc99_inline],
[/* Work around a bug in Apple GCC 4.0.1 build 5465: In C99 mode, it supports
the ISO C 99 semantics of 'extern inline' (unlike the GNU C semantics of
earlier versions), but does not display it by setting __GNUC_STDC_INLINE__.
__APPLE__ && __MACH__ test for Mac OS X.
__APPLE_CC__ tests for the Apple compiler and its version.
__STDC_VERSION__ tests for the C99 mode. */
#if defined __APPLE__ && defined __MACH__ && __APPLE_CC__ >= 5465 && !defined __cplusplus && __STDC_VERSION__ >= 199901L && !defined __GNUC_STDC_INLINE__
# define __GNUC_STDC_INLINE__ 1
#endif])
AH_VERBATIM([unused_parameter],
[/* Define as a marker that can be attached to declarations that might not
be used. This helps to reduce warnings, such as from
GCC -Wunused-parameter. */
#if __GNUC__ >= 3 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7)
# define _GL_UNUSED __attribute__ ((__unused__))
#else
# define _GL_UNUSED
#endif
/* The name _UNUSED_PARAMETER_ is an earlier spelling, although the name
is a misnomer outside of parameter lists. */
#define _UNUSED_PARAMETER_ _GL_UNUSED
/* The __pure__ attribute was added in gcc 2.96. */
#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__))
#else
# define _GL_ATTRIBUTE_PURE /* empty */
#endif
/* The __const__ attribute was added in gcc 2.95. */
#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95)
# define _GL_ATTRIBUTE_CONST __attribute__ ((__const__))
#else
# define _GL_ATTRIBUTE_CONST /* empty */
#endif
])
dnl Preparation for running test programs:
dnl Tell glibc to write diagnostics from -D_FORTIFY_SOURCE=2 to stderr, not
dnl to /dev/tty, so they can be redirected to log files. Such diagnostics
dnl arise e.g., in the macros gl_PRINTF_DIRECTIVE_N, gl_SNPRINTF_DIRECTIVE_N.
LIBC_FATAL_STDERR_=1
export LIBC_FATAL_STDERR_
])
# gl_MODULE_INDICATOR_CONDITION
# expands to a C preprocessor expression that evaluates to 1 or 0, depending
# whether a gnulib module that has been requested shall be considered present
# or not.
m4_define([gl_MODULE_INDICATOR_CONDITION], [1])
# gl_MODULE_INDICATOR_SET_VARIABLE([modulename])
# sets the shell variable that indicates the presence of the given module to
# a C preprocessor expression that will evaluate to 1.
AC_DEFUN([gl_MODULE_INDICATOR_SET_VARIABLE],
[
gl_MODULE_INDICATOR_SET_VARIABLE_AUX(
[GNULIB_[]m4_translit([[$1]],
[abcdefghijklmnopqrstuvwxyz./-],
[ABCDEFGHIJKLMNOPQRSTUVWXYZ___])],
[gl_MODULE_INDICATOR_CONDITION])
])
# gl_MODULE_INDICATOR_SET_VARIABLE_AUX([variable])
# modifies the shell variable to include the gl_MODULE_INDICATOR_CONDITION.
# The shell variable's value is a C preprocessor expression that evaluates
# to 0 or 1.
AC_DEFUN([gl_MODULE_INDICATOR_SET_VARIABLE_AUX],
[
m4_if(m4_defn([gl_MODULE_INDICATOR_CONDITION]), [1],
[
dnl Simplify the expression VALUE || 1 to 1.
$1=1
],
[gl_MODULE_INDICATOR_SET_VARIABLE_AUX_OR([$1],
[gl_MODULE_INDICATOR_CONDITION])])
])
# gl_MODULE_INDICATOR_SET_VARIABLE_AUX_OR([variable], [condition])
# modifies the shell variable to include the given condition. The shell
# variable's value is a C preprocessor expression that evaluates to 0 or 1.
AC_DEFUN([gl_MODULE_INDICATOR_SET_VARIABLE_AUX_OR],
[
dnl Simplify the expression 1 || CONDITION to 1.
if test "$[]$1" != 1; then
dnl Simplify the expression 0 || CONDITION to CONDITION.
if test "$[]$1" = 0; then
$1=$2
else
$1="($[]$1 || $2)"
fi
fi
])
# gl_MODULE_INDICATOR([modulename])
# defines a C macro indicating the presence of the given module
# in a location where it can be used.
# | Value | Value |
# | in lib/ | in tests/ |
# --------------------------------------------+---------+-----------+
# Module present among main modules: | 1 | 1 |
# --------------------------------------------+---------+-----------+
# Module present among tests-related modules: | 0 | 1 |
# --------------------------------------------+---------+-----------+
# Module not present at all: | 0 | 0 |
# --------------------------------------------+---------+-----------+
AC_DEFUN([gl_MODULE_INDICATOR],
[
AC_DEFINE_UNQUOTED([GNULIB_]m4_translit([[$1]],
[abcdefghijklmnopqrstuvwxyz./-],
[ABCDEFGHIJKLMNOPQRSTUVWXYZ___]),
[gl_MODULE_INDICATOR_CONDITION],
[Define to a C preprocessor expression that evaluates to 1 or 0,
depending whether the gnulib module $1 shall be considered present.])
])
# gl_MODULE_INDICATOR_FOR_TESTS([modulename])
# defines a C macro indicating the presence of the given module
# in lib or tests. This is useful to determine whether the module
# should be tested.
# | Value | Value |
# | in lib/ | in tests/ |
# --------------------------------------------+---------+-----------+
# Module present among main modules: | 1 | 1 |
# --------------------------------------------+---------+-----------+
# Module present among tests-related modules: | 1 | 1 |
# --------------------------------------------+---------+-----------+
# Module not present at all: | 0 | 0 |
# --------------------------------------------+---------+-----------+
AC_DEFUN([gl_MODULE_INDICATOR_FOR_TESTS],
[
AC_DEFINE([GNULIB_TEST_]m4_translit([[$1]],
[abcdefghijklmnopqrstuvwxyz./-],
[ABCDEFGHIJKLMNOPQRSTUVWXYZ___]), [1],
[Define to 1 when the gnulib module $1 should be tested.])
])
# gl_ASSERT_NO_GNULIB_POSIXCHECK
# asserts that there will never be a need to #define GNULIB_POSIXCHECK.
# and thereby enables an optimization of configure and config.h.
# Used by Emacs.
AC_DEFUN([gl_ASSERT_NO_GNULIB_POSIXCHECK],
[
dnl Override gl_WARN_ON_USE_PREPARE.
dnl But hide this definition from 'aclocal'.
AC_DEFUN([gl_W][ARN_ON_USE_PREPARE], [])
])
# gl_ASSERT_NO_GNULIB_TESTS
# asserts that there will be no gnulib tests in the scope of the configure.ac
# and thereby enables an optimization of config.h.
# Used by Emacs.
AC_DEFUN([gl_ASSERT_NO_GNULIB_TESTS],
[
dnl Override gl_MODULE_INDICATOR_FOR_TESTS.
AC_DEFUN([gl_MODULE_INDICATOR_FOR_TESTS], [])
])
# Test whether exists.
# Set HAVE_FEATURES_H.
AC_DEFUN([gl_FEATURES_H],
[
AC_CHECK_HEADERS_ONCE([features.h])
if test $ac_cv_header_features_h = yes; then
HAVE_FEATURES_H=1
else
HAVE_FEATURES_H=0
fi
AC_SUBST([HAVE_FEATURES_H])
])
# m4_foreach_w
# is a backport of autoconf-2.59c's m4_foreach_w.
# Remove this macro when we can assume autoconf >= 2.60.
m4_ifndef([m4_foreach_w],
[m4_define([m4_foreach_w],
[m4_foreach([$1], m4_split(m4_normalize([$2]), [ ]), [$3])])])
# AS_VAR_IF(VAR, VALUE, [IF-MATCH], [IF-NOT-MATCH])
# ----------------------------------------------------
# Backport of autoconf-2.63b's macro.
# Remove this macro when we can assume autoconf >= 2.64.
m4_ifndef([AS_VAR_IF],
[m4_define([AS_VAR_IF],
[AS_IF([test x"AS_VAR_GET([$1])" = x""$2], [$3], [$4])])])
# gl_PROG_CC_C99
# Modifies the value of the shell variable CC in an attempt to make $CC
# understand ISO C99 source code.
# This is like AC_PROG_CC_C99, except that
# - AC_PROG_CC_C99 did not exist in Autoconf versions < 2.60,
# - AC_PROG_CC_C99 does not mix well with AC_PROG_CC_STDC
# ,
# but many more packages use AC_PROG_CC_STDC than AC_PROG_CC_C99
# .
# Remaining problems:
# - When AC_PROG_CC_STDC is invoked twice, it adds the C99 enabling options
# to CC twice
# .
# - AC_PROG_CC_STDC is likely to change now that C11 is an ISO standard.
AC_DEFUN([gl_PROG_CC_C99],
[
dnl Change that version number to the minimum Autoconf version that supports
dnl mixing AC_PROG_CC_C99 calls with AC_PROG_CC_STDC calls.
m4_version_prereq([9.0],
[AC_REQUIRE([AC_PROG_CC_C99])],
[AC_REQUIRE([AC_PROG_CC_STDC])])
])
# gl_PROG_AR_RANLIB
# Determines the values for AR, ARFLAGS, RANLIB that fit with the compiler.
# The user can set the variables AR, ARFLAGS, RANLIB if he wants to override
# the values.
AC_DEFUN([gl_PROG_AR_RANLIB],
[
dnl Minix 3 comes with two toolchains: The Amsterdam Compiler Kit compiler
dnl as "cc", and GCC as "gcc". They have different object file formats and
dnl library formats. In particular, the GNU binutils programs ar, ranlib
dnl produce libraries that work only with gcc, not with cc.
AC_REQUIRE([AC_PROG_CC])
AC_CACHE_CHECK([for Minix Amsterdam compiler], [gl_cv_c_amsterdam_compiler],
[
AC_EGREP_CPP([Amsterdam],
[
#ifdef __ACK__
Amsterdam
#endif
],
[gl_cv_c_amsterdam_compiler=yes],
[gl_cv_c_amsterdam_compiler=no])
])
if test -z "$AR"; then
if test $gl_cv_c_amsterdam_compiler = yes; then
AR='cc -c.a'
if test -z "$ARFLAGS"; then
ARFLAGS='-o'
fi
else
dnl Use the Automake-documented default values for AR and ARFLAGS,
dnl but prefer ${host}-ar over ar (useful for cross-compiling).
AC_CHECK_TOOL([AR], [ar], [ar])
if test -z "$ARFLAGS"; then
ARFLAGS='cru'
fi
fi
else
if test -z "$ARFLAGS"; then
ARFLAGS='cru'
fi
fi
AC_SUBST([AR])
AC_SUBST([ARFLAGS])
if test -z "$RANLIB"; then
if test $gl_cv_c_amsterdam_compiler = yes; then
RANLIB=':'
else
dnl Use the ranlib program if it is available.
AC_PROG_RANLIB
fi
fi
AC_SUBST([RANLIB])
])
# AC_PROG_MKDIR_P
# is a backport of autoconf-2.60's AC_PROG_MKDIR_P, with a fix
# for interoperability with automake-1.9.6 from autoconf-2.62.
# Remove this macro when we can assume autoconf >= 2.62 or
# autoconf >= 2.60 && automake >= 1.10.
# AC_AUTOCONF_VERSION was introduced in 2.62, so use that as the witness.
m4_ifndef([AC_AUTOCONF_VERSION],[
m4_ifdef([AC_PROG_MKDIR_P], [
dnl For automake-1.9.6 && autoconf < 2.62: Ensure MKDIR_P is AC_SUBSTed.
m4_define([AC_PROG_MKDIR_P],
m4_defn([AC_PROG_MKDIR_P])[
AC_SUBST([MKDIR_P])])], [
dnl For autoconf < 2.60: Backport of AC_PROG_MKDIR_P.
AC_DEFUN_ONCE([AC_PROG_MKDIR_P],
[AC_REQUIRE([AM_PROG_MKDIR_P])dnl defined by automake
MKDIR_P='$(mkdir_p)'
AC_SUBST([MKDIR_P])])])
])
# AC_C_RESTRICT
# This definition overrides the AC_C_RESTRICT macro from autoconf 2.60..2.61,
# so that mixed use of GNU C and GNU C++ and mixed use of Sun C and Sun C++
# works.
# This definition can be removed once autoconf >= 2.62 can be assumed.
# AC_AUTOCONF_VERSION was introduced in 2.62, so use that as the witness.
m4_ifndef([AC_AUTOCONF_VERSION],[
AC_DEFUN([AC_C_RESTRICT],
[AC_CACHE_CHECK([for C/C++ restrict keyword], [ac_cv_c_restrict],
[ac_cv_c_restrict=no
# The order here caters to the fact that C++ does not require restrict.
for ac_kw in __restrict __restrict__ _Restrict restrict; do
AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
[[typedef int * int_ptr;
int foo (int_ptr $ac_kw ip) {
return ip[0];
}]],
[[int s[1];
int * $ac_kw t = s;
t[0] = 0;
return foo(t)]])],
[ac_cv_c_restrict=$ac_kw])
test "$ac_cv_c_restrict" != no && break
done
])
AH_VERBATIM([restrict],
[/* Define to the equivalent of the C99 'restrict' keyword, or to
nothing if this is not supported. Do not define if restrict is
supported directly. */
#undef restrict
/* Work around a bug in Sun C++: it does not support _Restrict, even
though the corresponding Sun C compiler does, which causes
"#define restrict _Restrict" in the previous line. Perhaps some future
version of Sun C++ will work with _Restrict; if so, it'll probably
define __RESTRICT, just as Sun C does. */
#if defined __SUNPRO_CC && !defined __RESTRICT
# define _Restrict
#endif])
case $ac_cv_c_restrict in
restrict) ;;
no) AC_DEFINE([restrict], []) ;;
*) AC_DEFINE_UNQUOTED([restrict], [$ac_cv_c_restrict]) ;;
esac
])
])
# gl_BIGENDIAN
# is like AC_C_BIGENDIAN, except that it can be AC_REQUIREd.
# Note that AC_REQUIRE([AC_C_BIGENDIAN]) does not work reliably because some
# macros invoke AC_C_BIGENDIAN with arguments.
AC_DEFUN([gl_BIGENDIAN],
[
AC_C_BIGENDIAN
])
# gl_CACHE_VAL_SILENT(cache-id, command-to-set-it)
# is like AC_CACHE_VAL(cache-id, command-to-set-it), except that it does not
# output a spurious "(cached)" mark in the midst of other configure output.
# This macro should be used instead of AC_CACHE_VAL when it is not surrounded
# by an AC_MSG_CHECKING/AC_MSG_RESULT pair.
AC_DEFUN([gl_CACHE_VAL_SILENT],
[
saved_as_echo_n="$as_echo_n"
as_echo_n=':'
AC_CACHE_VAL([$1], [$2])
as_echo_n="$saved_as_echo_n"
])
tenace-0.13/m4/lt~obsolete.m4 0000644 0004016 0004016 00000013756 12225337267 012772 0000000 0000000 # lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*-
#
# Copyright (C) 2004, 2005, 2007, 2009 Free Software Foundation, Inc.
# Written by Scott James Remnant, 2004.
#
# This file is free software; the Free Software Foundation gives
# unlimited permission to copy and/or distribute it, with or without
# modifications, as long as this notice is preserved.
# serial 5 lt~obsolete.m4
# These exist entirely to fool aclocal when bootstrapping libtool.
#
# In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN)
# which have later been changed to m4_define as they aren't part of the
# exported API, or moved to Autoconf or Automake where they belong.
#
# The trouble is, aclocal is a bit thick. It'll see the old AC_DEFUN
# in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us
# using a macro with the same name in our local m4/libtool.m4 it'll
# pull the old libtool.m4 in (it doesn't see our shiny new m4_define
# and doesn't know about Autoconf macros at all.)
#
# So we provide this file, which has a silly filename so it's always
# included after everything else. This provides aclocal with the
# AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything
# because those macros already exist, or will be overwritten later.
# We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6.
#
# Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here.
# Yes, that means every name once taken will need to remain here until
# we give up compatibility with versions before 1.7, at which point
# we need to keep only those names which we still refer to.
# This is to help aclocal find these macros, as it can't see m4_define.
AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])])
m4_ifndef([AC_LIBTOOL_LINKER_OPTION], [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])])
m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP])])
m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])])
m4_ifndef([_LT_AC_SHELL_INIT], [AC_DEFUN([_LT_AC_SHELL_INIT])])
m4_ifndef([_LT_AC_SYS_LIBPATH_AIX], [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])])
m4_ifndef([_LT_PROG_LTMAIN], [AC_DEFUN([_LT_PROG_LTMAIN])])
m4_ifndef([_LT_AC_TAGVAR], [AC_DEFUN([_LT_AC_TAGVAR])])
m4_ifndef([AC_LTDL_ENABLE_INSTALL], [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])])
m4_ifndef([AC_LTDL_PREOPEN], [AC_DEFUN([AC_LTDL_PREOPEN])])
m4_ifndef([_LT_AC_SYS_COMPILER], [AC_DEFUN([_LT_AC_SYS_COMPILER])])
m4_ifndef([_LT_AC_LOCK], [AC_DEFUN([_LT_AC_LOCK])])
m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE], [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])])
m4_ifndef([_LT_AC_TRY_DLOPEN_SELF], [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])])
m4_ifndef([AC_LIBTOOL_PROG_CC_C_O], [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])])
m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])])
m4_ifndef([AC_LIBTOOL_OBJDIR], [AC_DEFUN([AC_LIBTOOL_OBJDIR])])
m4_ifndef([AC_LTDL_OBJDIR], [AC_DEFUN([AC_LTDL_OBJDIR])])
m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])])
m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP], [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])])
m4_ifndef([AC_PATH_MAGIC], [AC_DEFUN([AC_PATH_MAGIC])])
m4_ifndef([AC_PROG_LD_GNU], [AC_DEFUN([AC_PROG_LD_GNU])])
m4_ifndef([AC_PROG_LD_RELOAD_FLAG], [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])])
m4_ifndef([AC_DEPLIBS_CHECK_METHOD], [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])])
m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])])
m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])])
m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])])
m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])])
m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])])
m4_ifndef([LT_AC_PROG_EGREP], [AC_DEFUN([LT_AC_PROG_EGREP])])
m4_ifndef([LT_AC_PROG_SED], [AC_DEFUN([LT_AC_PROG_SED])])
m4_ifndef([_LT_CC_BASENAME], [AC_DEFUN([_LT_CC_BASENAME])])
m4_ifndef([_LT_COMPILER_BOILERPLATE], [AC_DEFUN([_LT_COMPILER_BOILERPLATE])])
m4_ifndef([_LT_LINKER_BOILERPLATE], [AC_DEFUN([_LT_LINKER_BOILERPLATE])])
m4_ifndef([_AC_PROG_LIBTOOL], [AC_DEFUN([_AC_PROG_LIBTOOL])])
m4_ifndef([AC_LIBTOOL_SETUP], [AC_DEFUN([AC_LIBTOOL_SETUP])])
m4_ifndef([_LT_AC_CHECK_DLFCN], [AC_DEFUN([_LT_AC_CHECK_DLFCN])])
m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])])
m4_ifndef([_LT_AC_TAGCONFIG], [AC_DEFUN([_LT_AC_TAGCONFIG])])
m4_ifndef([AC_DISABLE_FAST_INSTALL], [AC_DEFUN([AC_DISABLE_FAST_INSTALL])])
m4_ifndef([_LT_AC_LANG_CXX], [AC_DEFUN([_LT_AC_LANG_CXX])])
m4_ifndef([_LT_AC_LANG_F77], [AC_DEFUN([_LT_AC_LANG_F77])])
m4_ifndef([_LT_AC_LANG_GCJ], [AC_DEFUN([_LT_AC_LANG_GCJ])])
m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])])
m4_ifndef([_LT_AC_LANG_C_CONFIG], [AC_DEFUN([_LT_AC_LANG_C_CONFIG])])
m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])])
m4_ifndef([_LT_AC_LANG_CXX_CONFIG], [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])])
m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])])
m4_ifndef([_LT_AC_LANG_F77_CONFIG], [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])])
m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])])
m4_ifndef([_LT_AC_LANG_GCJ_CONFIG], [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])])
m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])])
m4_ifndef([_LT_AC_LANG_RC_CONFIG], [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])])
m4_ifndef([AC_LIBTOOL_CONFIG], [AC_DEFUN([AC_LIBTOOL_CONFIG])])
m4_ifndef([_LT_AC_FILE_LTDLL_C], [AC_DEFUN([_LT_AC_FILE_LTDLL_C])])
m4_ifndef([_LT_REQUIRED_DARWIN_CHECKS], [AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS])])
m4_ifndef([_LT_AC_PROG_CXXCPP], [AC_DEFUN([_LT_AC_PROG_CXXCPP])])
m4_ifndef([_LT_PREPARE_SED_QUOTE_VARS], [AC_DEFUN([_LT_PREPARE_SED_QUOTE_VARS])])
m4_ifndef([_LT_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_PROG_ECHO_BACKSLASH])])
m4_ifndef([_LT_PROG_F77], [AC_DEFUN([_LT_PROG_F77])])
m4_ifndef([_LT_PROG_FC], [AC_DEFUN([_LT_PROG_FC])])
m4_ifndef([_LT_PROG_CXX], [AC_DEFUN([_LT_PROG_CXX])])
tenace-0.13/m4/stdbool.m4 0000644 0004016 0004016 00000006371 12215417301 012044 0000000 0000000 # Check for stdbool.h that conforms to C99.
dnl Copyright (C) 2002-2006, 2009-2013 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
#serial 5
# Prepare for substituting if it is not supported.
AC_DEFUN([AM_STDBOOL_H],
[
AC_REQUIRE([AC_CHECK_HEADER_STDBOOL])
# Define two additional variables used in the Makefile substitution.
if test "$ac_cv_header_stdbool_h" = yes; then
STDBOOL_H=''
else
STDBOOL_H='stdbool.h'
fi
AC_SUBST([STDBOOL_H])
AM_CONDITIONAL([GL_GENERATE_STDBOOL_H], [test -n "$STDBOOL_H"])
if test "$ac_cv_type__Bool" = yes; then
HAVE__BOOL=1
else
HAVE__BOOL=0
fi
AC_SUBST([HAVE__BOOL])
])
# AM_STDBOOL_H will be renamed to gl_STDBOOL_H in the future.
AC_DEFUN([gl_STDBOOL_H], [AM_STDBOOL_H])
# This version of the macro is needed in autoconf <= 2.68.
AC_DEFUN([AC_CHECK_HEADER_STDBOOL],
[AC_CACHE_CHECK([for stdbool.h that conforms to C99],
[ac_cv_header_stdbool_h],
[AC_COMPILE_IFELSE(
[AC_LANG_PROGRAM(
[[
#include
#ifndef bool
"error: bool is not defined"
#endif
#ifndef false
"error: false is not defined"
#endif
#if false
"error: false is not 0"
#endif
#ifndef true
"error: true is not defined"
#endif
#if true != 1
"error: true is not 1"
#endif
#ifndef __bool_true_false_are_defined
"error: __bool_true_false_are_defined is not defined"
#endif
struct s { _Bool s: 1; _Bool t; } s;
char a[true == 1 ? 1 : -1];
char b[false == 0 ? 1 : -1];
char c[__bool_true_false_are_defined == 1 ? 1 : -1];
char d[(bool) 0.5 == true ? 1 : -1];
/* See body of main program for 'e'. */
char f[(_Bool) 0.0 == false ? 1 : -1];
char g[true];
char h[sizeof (_Bool)];
char i[sizeof s.t];
enum { j = false, k = true, l = false * true, m = true * 256 };
/* The following fails for
HP aC++/ANSI C B3910B A.05.55 [Dec 04 2003]. */
_Bool n[m];
char o[sizeof n == m * sizeof n[0] ? 1 : -1];
char p[-1 - (_Bool) 0 < 0 && -1 - (bool) 0 < 0 ? 1 : -1];
/* Catch a bug in an HP-UX C compiler. See
http://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html
http://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html
*/
_Bool q = true;
_Bool *pq = &q;
]],
[[
bool e = &s;
*pq |= q;
*pq |= ! q;
/* Refer to every declared value, to avoid compiler optimizations. */
return (!a + !b + !c + !d + !e + !f + !g + !h + !i + !!j + !k + !!l
+ !m + !n + !o + !p + !q + !pq);
]])],
[ac_cv_header_stdbool_h=yes],
[ac_cv_header_stdbool_h=no])])
AC_CHECK_TYPES([_Bool])
])
tenace-0.13/m4/gnulib-comp.m4 0000664 0004016 0004016 00000020606 12215417306 012616 0000000 0000000 # DO NOT EDIT! GENERATED AUTOMATICALLY!
# Copyright (C) 2002-2013 Free Software Foundation, Inc.
#
# This file is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# This file 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 General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this file. If not, see .
#
# As a special exception to the GNU General Public License,
# this file may be distributed as part of a program that
# contains a configuration script generated by Autoconf, under
# the same distribution terms as the rest of that program.
#
# Generated by gnulib-tool.
#
# This file represents the compiled summary of the specification in
# gnulib-cache.m4. It lists the computed macro invocations that need
# to be invoked from configure.ac.
# In projects that use version control, this file can be treated like
# other built files.
# This macro should be invoked from ./configure.ac, in the section
# "Checks for programs", right after AC_PROG_CC, and certainly before
# any checks for libraries, header files, types and library functions.
AC_DEFUN([gl_EARLY],
[
m4_pattern_forbid([^gl_[A-Z]])dnl the gnulib macro namespace
m4_pattern_allow([^gl_ES$])dnl a valid locale name
m4_pattern_allow([^gl_LIBOBJS$])dnl a variable
m4_pattern_allow([^gl_LTLIBOBJS$])dnl a variable
AC_REQUIRE([gl_PROG_AR_RANLIB])
# Code from module c-ctype:
# Code from module extensions:
AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
# Code from module extern-inline:
# Code from module include_next:
# Code from module nproc:
# Code from module physmem:
# Code from module snippet/arg-nonnull:
# Code from module snippet/c++defs:
# Code from module snippet/warn-on-use:
# Code from module ssize_t:
# Code from module stdbool:
# Code from module stddef:
# Code from module sys_types:
# Code from module unistd:
])
# This macro should be invoked from ./configure.ac, in the section
# "Check for header files, types and library functions".
AC_DEFUN([gl_INIT],
[
AM_CONDITIONAL([GL_COND_LIBTOOL], [true])
gl_cond_libtool=true
gl_m4_base='m4'
m4_pushdef([AC_LIBOBJ], m4_defn([gl_LIBOBJ]))
m4_pushdef([AC_REPLACE_FUNCS], m4_defn([gl_REPLACE_FUNCS]))
m4_pushdef([AC_LIBSOURCES], m4_defn([gl_LIBSOURCES]))
m4_pushdef([gl_LIBSOURCES_LIST], [])
m4_pushdef([gl_LIBSOURCES_DIR], [])
gl_COMMON
gl_source_base='lib'
AC_REQUIRE([gl_EXTERN_INLINE])
gl_NPROC
gl_PHYSMEM
gt_TYPE_SSIZE_T
AM_STDBOOL_H
gl_STDDEF_H
gl_SYS_TYPES_H
AC_PROG_MKDIR_P
gl_UNISTD_H
# End of code from modules
m4_ifval(gl_LIBSOURCES_LIST, [
m4_syscmd([test ! -d ]m4_defn([gl_LIBSOURCES_DIR])[ ||
for gl_file in ]gl_LIBSOURCES_LIST[ ; do
if test ! -r ]m4_defn([gl_LIBSOURCES_DIR])[/$gl_file ; then
echo "missing file ]m4_defn([gl_LIBSOURCES_DIR])[/$gl_file" >&2
exit 1
fi
done])dnl
m4_if(m4_sysval, [0], [],
[AC_FATAL([expected source file, required through AC_LIBSOURCES, not found])])
])
m4_popdef([gl_LIBSOURCES_DIR])
m4_popdef([gl_LIBSOURCES_LIST])
m4_popdef([AC_LIBSOURCES])
m4_popdef([AC_REPLACE_FUNCS])
m4_popdef([AC_LIBOBJ])
AC_CONFIG_COMMANDS_PRE([
gl_libobjs=
gl_ltlibobjs=
if test -n "$gl_LIBOBJS"; then
# Remove the extension.
sed_drop_objext='s/\.o$//;s/\.obj$//'
for i in `for i in $gl_LIBOBJS; do echo "$i"; done | sed -e "$sed_drop_objext" | sort | uniq`; do
gl_libobjs="$gl_libobjs $i.$ac_objext"
gl_ltlibobjs="$gl_ltlibobjs $i.lo"
done
fi
AC_SUBST([gl_LIBOBJS], [$gl_libobjs])
AC_SUBST([gl_LTLIBOBJS], [$gl_ltlibobjs])
])
gltests_libdeps=
gltests_ltlibdeps=
m4_pushdef([AC_LIBOBJ], m4_defn([gltests_LIBOBJ]))
m4_pushdef([AC_REPLACE_FUNCS], m4_defn([gltests_REPLACE_FUNCS]))
m4_pushdef([AC_LIBSOURCES], m4_defn([gltests_LIBSOURCES]))
m4_pushdef([gltests_LIBSOURCES_LIST], [])
m4_pushdef([gltests_LIBSOURCES_DIR], [])
gl_COMMON
gl_source_base='tests'
changequote(,)dnl
gltests_WITNESS=IN_`echo "${PACKAGE-$PACKAGE_TARNAME}" | LC_ALL=C tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ | LC_ALL=C sed -e 's/[^A-Z0-9_]/_/g'`_GNULIB_TESTS
changequote([, ])dnl
AC_SUBST([gltests_WITNESS])
gl_module_indicator_condition=$gltests_WITNESS
m4_pushdef([gl_MODULE_INDICATOR_CONDITION], [$gl_module_indicator_condition])
m4_popdef([gl_MODULE_INDICATOR_CONDITION])
m4_ifval(gltests_LIBSOURCES_LIST, [
m4_syscmd([test ! -d ]m4_defn([gltests_LIBSOURCES_DIR])[ ||
for gl_file in ]gltests_LIBSOURCES_LIST[ ; do
if test ! -r ]m4_defn([gltests_LIBSOURCES_DIR])[/$gl_file ; then
echo "missing file ]m4_defn([gltests_LIBSOURCES_DIR])[/$gl_file" >&2
exit 1
fi
done])dnl
m4_if(m4_sysval, [0], [],
[AC_FATAL([expected source file, required through AC_LIBSOURCES, not found])])
])
m4_popdef([gltests_LIBSOURCES_DIR])
m4_popdef([gltests_LIBSOURCES_LIST])
m4_popdef([AC_LIBSOURCES])
m4_popdef([AC_REPLACE_FUNCS])
m4_popdef([AC_LIBOBJ])
AC_CONFIG_COMMANDS_PRE([
gltests_libobjs=
gltests_ltlibobjs=
if test -n "$gltests_LIBOBJS"; then
# Remove the extension.
sed_drop_objext='s/\.o$//;s/\.obj$//'
for i in `for i in $gltests_LIBOBJS; do echo "$i"; done | sed -e "$sed_drop_objext" | sort | uniq`; do
gltests_libobjs="$gltests_libobjs $i.$ac_objext"
gltests_ltlibobjs="$gltests_ltlibobjs $i.lo"
done
fi
AC_SUBST([gltests_LIBOBJS], [$gltests_libobjs])
AC_SUBST([gltests_LTLIBOBJS], [$gltests_ltlibobjs])
])
])
# Like AC_LIBOBJ, except that the module name goes
# into gl_LIBOBJS instead of into LIBOBJS.
AC_DEFUN([gl_LIBOBJ], [
AS_LITERAL_IF([$1], [gl_LIBSOURCES([$1.c])])dnl
gl_LIBOBJS="$gl_LIBOBJS $1.$ac_objext"
])
# Like AC_REPLACE_FUNCS, except that the module name goes
# into gl_LIBOBJS instead of into LIBOBJS.
AC_DEFUN([gl_REPLACE_FUNCS], [
m4_foreach_w([gl_NAME], [$1], [AC_LIBSOURCES(gl_NAME[.c])])dnl
AC_CHECK_FUNCS([$1], , [gl_LIBOBJ($ac_func)])
])
# Like AC_LIBSOURCES, except the directory where the source file is
# expected is derived from the gnulib-tool parameterization,
# and alloca is special cased (for the alloca-opt module).
# We could also entirely rely on EXTRA_lib..._SOURCES.
AC_DEFUN([gl_LIBSOURCES], [
m4_foreach([_gl_NAME], [$1], [
m4_if(_gl_NAME, [alloca.c], [], [
m4_define([gl_LIBSOURCES_DIR], [lib])
m4_append([gl_LIBSOURCES_LIST], _gl_NAME, [ ])
])
])
])
# Like AC_LIBOBJ, except that the module name goes
# into gltests_LIBOBJS instead of into LIBOBJS.
AC_DEFUN([gltests_LIBOBJ], [
AS_LITERAL_IF([$1], [gltests_LIBSOURCES([$1.c])])dnl
gltests_LIBOBJS="$gltests_LIBOBJS $1.$ac_objext"
])
# Like AC_REPLACE_FUNCS, except that the module name goes
# into gltests_LIBOBJS instead of into LIBOBJS.
AC_DEFUN([gltests_REPLACE_FUNCS], [
m4_foreach_w([gl_NAME], [$1], [AC_LIBSOURCES(gl_NAME[.c])])dnl
AC_CHECK_FUNCS([$1], , [gltests_LIBOBJ($ac_func)])
])
# Like AC_LIBSOURCES, except the directory where the source file is
# expected is derived from the gnulib-tool parameterization,
# and alloca is special cased (for the alloca-opt module).
# We could also entirely rely on EXTRA_lib..._SOURCES.
AC_DEFUN([gltests_LIBSOURCES], [
m4_foreach([_gl_NAME], [$1], [
m4_if(_gl_NAME, [alloca.c], [], [
m4_define([gltests_LIBSOURCES_DIR], [tests])
m4_append([gltests_LIBSOURCES_LIST], _gl_NAME, [ ])
])
])
])
# This macro records the list of files which have been installed by
# gnulib-tool and may be removed by future gnulib-tool invocations.
AC_DEFUN([gl_FILE_LIST], [
build-aux/snippet/arg-nonnull.h
build-aux/snippet/c++defs.h
build-aux/snippet/warn-on-use.h
lib/c-ctype.c
lib/c-ctype.h
lib/nproc.c
lib/nproc.h
lib/physmem.c
lib/physmem.h
lib/stdbool.in.h
lib/stddef.in.h
lib/sys_types.in.h
lib/unistd.c
lib/unistd.in.h
m4/00gnulib.m4
m4/extensions.m4
m4/extern-inline.m4
m4/gnulib-common.m4
m4/include_next.m4
m4/nproc.m4
m4/off_t.m4
m4/onceonly.m4
m4/physmem.m4
m4/ssize_t.m4
m4/stdbool.m4
m4/stddef_h.m4
m4/sys_types_h.m4
m4/unistd_h.m4
m4/warn-on-use.m4
m4/wchar_t.m4
])
tenace-0.13/m4/include_next.m4 0000644 0004016 0004016 00000025424 12215417301 013057 0000000 0000000 # include_next.m4 serial 23
dnl Copyright (C) 2006-2013 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
dnl From Paul Eggert and Derek Price.
dnl Sets INCLUDE_NEXT and PRAGMA_SYSTEM_HEADER.
dnl
dnl INCLUDE_NEXT expands to 'include_next' if the compiler supports it, or to
dnl 'include' otherwise.
dnl
dnl INCLUDE_NEXT_AS_FIRST_DIRECTIVE expands to 'include_next' if the compiler
dnl supports it in the special case that it is the first include directive in
dnl the given file, or to 'include' otherwise.
dnl
dnl PRAGMA_SYSTEM_HEADER can be used in files that contain #include_next,
dnl so as to avoid GCC warnings when the gcc option -pedantic is used.
dnl '#pragma GCC system_header' has the same effect as if the file was found
dnl through the include search path specified with '-isystem' options (as
dnl opposed to the search path specified with '-I' options). Namely, gcc
dnl does not warn about some things, and on some systems (Solaris and Interix)
dnl __STDC__ evaluates to 0 instead of to 1. The latter is an undesired side
dnl effect; we are therefore careful to use 'defined __STDC__' or '1' instead
dnl of plain '__STDC__'.
dnl
dnl PRAGMA_COLUMNS can be used in files that override system header files, so
dnl as to avoid compilation errors on HP NonStop systems when the gnulib file
dnl is included by a system header file that does a "#pragma COLUMNS 80" (which
dnl has the effect of truncating the lines of that file and all files that it
dnl includes to 80 columns) and the gnulib file has lines longer than 80
dnl columns.
AC_DEFUN([gl_INCLUDE_NEXT],
[
AC_LANG_PREPROC_REQUIRE()
AC_CACHE_CHECK([whether the preprocessor supports include_next],
[gl_cv_have_include_next],
[rm -rf conftestd1a conftestd1b conftestd2
mkdir conftestd1a conftestd1b conftestd2
dnl IBM C 9.0, 10.1 (original versions, prior to the 2009-01 updates) on
dnl AIX 6.1 support include_next when used as first preprocessor directive
dnl in a file, but not when preceded by another include directive. Check
dnl for this bug by including .
dnl Additionally, with this same compiler, include_next is a no-op when
dnl used in a header file that was included by specifying its absolute
dnl file name. Despite these two bugs, include_next is used in the
dnl compiler's . By virtue of the second bug, we need to use
dnl include_next as well in this case.
cat <