+++ /dev/null
-dnl ##
-dnl ## GNU Pth - The GNU Portable Threads
-dnl ## Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
-dnl ##
-dnl ## This file is part of GNU Pth, a non-preemptive thread scheduling
-dnl ## library which can be found at http://www.gnu.org/software/pth/.
-dnl ##
-dnl ## This library is free software; you can redistribute it and/or
-dnl ## modify it under the terms of the GNU Lesser General Public
-dnl ## License as published by the Free Software Foundation; either
-dnl ## version 2.1 of the License, or (at your option) any later version.
-dnl ##
-dnl ## This library 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 GNU
-dnl ## Lesser General Public License for more details.
-dnl ##
-dnl ## You should have received a copy of the GNU Lesser General Public
-dnl ## License along with this library; if not, write to the Free Software
-dnl ## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-dnl ## USA, or contact Ralf S. Engelschall <rse@engelschall.com>.
-dnl ##
-dnl ## pth.m4: Autoconf macro for locating GNU Pth from within
-dnl ## configure.in of third-party software packages
-dnl ##
-
-dnl ##
-dnl ## Synopsis:
-dnl ## AC_CHECK_PTH([MIN-VERSION [, # minimum Pth version, e.g. 1.2.0
-dnl ## DEFAULT-WITH-PTH [, # default value for --with-pth option
-dnl ## DEFAULT-WITH-PTH-TEST [,# default value for --with-pth-test option
-dnl ## EXTEND-VARS [, # whether CFLAGS/LDFLAGS/etc are extended
-dnl ## ACTION-IF-FOUND [, # action to perform if Pth was found
-dnl ## ACTION-IF-NOT-FOUND # action to perform if Pth was not found
-dnl ## ]]]]]])
-dnl ## Examples:
-dnl ## AC_CHECK_PTH(1.2.0)
-dnl ## AC_CHECK_PTH(1.2.0,,,no,CFLAGS="$CFLAGS -DHAVE_PTH $PTH_CFLAGS")
-dnl ## AC_CHECK_PTH(1.2.0,yes,yes,yes,CFLAGS="$CFLAGS -DHAVE_PTH")
-dnl ##
-dnl
-dnl # auxilliary macros
-AC_DEFUN([_AC_PTH_ERROR], [dnl
-AC_MSG_RESULT([*FAILED*])
-dnl define(_ac_pth_line,dnl
-dnl "+------------------------------------------------------------------------+")
-dnl echo " _ac_pth_line" 1>&2
-cat <<EOT | sed -e 's/^[[ ]]*/ | /' -e 's/>>/ /' 1>&2
-$1
-EOT
-dnl echo " _ac_pth_line" 1>&2
-dnl undefine(_ac_pth_line)
-exit 1
-])
-AC_DEFUN([_AC_PTH_VERBOSE], [dnl
-if test ".$verbose" = .yes; then
- AC_MSG_RESULT([ $1])
-fi
-])
-dnl # the user macro
-AC_DEFUN([AC_CHECK_PTH], [dnl
-dnl
-dnl # prerequisites
-AC_REQUIRE([AC_PROG_CC])dnl
-AC_REQUIRE([AC_PROG_CPP])dnl
-dnl
-PTH_CPPFLAGS=''
-PTH_CFLAGS=''
-PTH_LDFLAGS=''
-PTH_LIBS=''
-AC_SUBST(PTH_CPPFLAGS)
-AC_SUBST(PTH_CFLAGS)
-AC_SUBST(PTH_LDFLAGS)
-AC_SUBST(PTH_LIBS)
-dnl # command line options
-AC_MSG_CHECKING(for GNU Pth)
-_AC_PTH_VERBOSE([])
-AC_ARG_WITH(pth,dnl
-[ --with-pth[=ARG] Build with GNU Pth Library (default=]ifelse([$2],,yes,$2)[)],dnl
-,dnl
-with_pth="ifelse([$2],,yes,$2)"
-)dnl
-AC_ARG_WITH(pth-test,dnl
-[ --with-pth-test Perform GNU Pth Sanity Test (default=]ifelse([$3],,yes,$3)[)],dnl
-,dnl
-with_pth_test="ifelse([$3],,yes,$3)"
-)dnl
-_AC_PTH_VERBOSE([+ Command Line Options:])
-_AC_PTH_VERBOSE([ o --with-pth=$with_pth])
-_AC_PTH_VERBOSE([ o --with-pth-test=$with_pth_test])
-dnl
-dnl # configuration
-if test ".$with_pth" != .no; then
- _pth_subdir=no
- _pth_subdir_opts=''
- case "$with_pth" in
- subdir:* )
- _pth_subdir=yes
- changequote(, )dnl
- _pth_subdir_opts=`echo $with_pth | sed -e 's/^subdir:[^ ]*[ ]*//'`
- with_pth=`echo $with_pth | sed -e 's/^subdir:\([^ ]*\).*$/\1/'`
- changequote([, ])dnl
- ;;
- esac
- _pth_version=""
- _pth_location=""
- _pth_type=""
- _pth_cppflags=""
- _pth_cflags=""
- _pth_ldflags=""
- _pth_libs=""
- if test ".$with_pth" = .yes; then
- # via config script in $PATH
- changequote(, )dnl
- _pth_version=`(pth-config --version) 2>/dev/null |\
- sed -e 's/^.*\([0-9]\.[0-9]*[ab.][0-9]*\).*$/\1/'`
- changequote([, ])dnl
- if test ".$_pth_version" != .; then
- _pth_location=`pth-config --prefix`
- _pth_type='installed'
- _pth_cppflags=`pth-config --cflags`
- _pth_cflags=`pth-config --cflags`
- _pth_ldflags=`pth-config --ldflags`
- _pth_libs=`pth-config --libs --all`
- fi
- elif test -d "$with_pth"; then
- with_pth=`echo $with_pth | sed -e 's;/*$;;'`
- _pth_found=no
- # via locally included source tree
- if test ".$_pth_subdir" = .yes; then
- _pth_location="$with_pth"
- _pth_type='local'
- _pth_cppflags="-I$with_pth"
- _pth_cflags="-I$with_pth"
- if test -f "$with_pth/ltconfig"; then
- _pth_ldflags="-L$with_pth/.libs"
- else
- _pth_ldflags="-L$with_pth"
- fi
- _pth_libs="-lpth"
- changequote(, )dnl
- _pth_version=`grep '^const char PTH_Hello' $with_pth/pth_vers.c |\
- sed -e 's;^.*Version[ ]*\([0-9]*\.[0-9]*[.ab][0-9]*\)[ ].*$;\1;'`
- changequote([, ])dnl
- _pth_found=yes
- ac_configure_args="$ac_configure_args --enable-subdir $_pth_subdir_opts"
- with_pth_test=no
- fi
- # via config script under a specified directory
- # (a standard installation, but not a source tree)
- if test ".$_pth_found" = .no; then
- for _dir in $with_pth/bin $with_pth; do
- if test -f "$_dir/pth-config"; then
- test -f "$_dir/pth-config.in" && continue # pth-config in source tree!
- changequote(, )dnl
- _pth_version=`($_dir/pth-config --version) 2>/dev/null |\
- sed -e 's/^.*\([0-9]\.[0-9]*[ab.][0-9]*\).*$/\1/'`
- changequote([, ])dnl
- if test ".$_pth_version" != .; then
- _pth_location=`$_dir/pth-config --prefix`
- _pth_type="installed"
- _pth_cppflags=`$_dir/pth-config --cflags`
- _pth_cflags=`$_dir/pth-config --cflags`
- _pth_ldflags=`$_dir/pth-config --ldflags`
- _pth_libs=`$_dir/pth-config --libs --all`
- _pth_found=yes
- break
- fi
- fi
- done
- fi
- # in any subarea under a specified directory
- # (either a special installation or a Pth source tree)
- if test ".$_pth_found" = .no; then
- changequote(, )dnl
- _pth_found=0
- for _file in x `find $with_pth -name "pth.h" -type f -print`; do
- test .$_file = .x && continue
- _dir=`echo $_file | sed -e 's;[^/]*$;;' -e 's;\(.\)/$;\1;'`
- _pth_version=`($_dir/pth-config --version) 2>/dev/null |\
- sed -e 's/^.*\([0-9]\.[0-9]*[ab.][0-9]*\).*$/\1/'`
- if test ".$_pth_version" = .; then
- _pth_version=`grep '^#define PTH_VERSION_STR' $_file |\
- sed -e 's;^#define[ ]*PTH_VERSION_STR[ ]*"\([0-9]*\.[0-9]*[.ab][0-9]*\)[ ].*$;\1;'`
- fi
- _pth_cppflags="-I$_dir"
- _pth_cflags="-I$_dir"
- _pth_found=`expr $_pth_found + 1`
- done
- for _file in x `find $with_pth -name "libpth.[aso]" -type f -print`; do
- test .$_file = .x && continue
- _dir=`echo $_file | sed -e 's;[^/]*$;;' -e 's;\(.\)/$;\1;'`
- _pth_ldflags="-L$_dir"
- _pth_libs="-lpth"
- _pth_found=`expr $_pth_found + 1`
- done
- changequote([, ])dnl
- if test ".$_pth_found" = .2; then
- _pth_location="$with_pth"
- _pth_type="uninstalled"
- else
- _pth_version=''
- fi
- fi
- fi
- _AC_PTH_VERBOSE([+ Determined Location:])
- _AC_PTH_VERBOSE([ o path: $_pth_location])
- _AC_PTH_VERBOSE([ o type: $_pth_type])
- if test ".$_pth_version" = .; then
- with_pth=no
- else
-dnl if test ".$with_pth" != .yes; then
-dnl _AC_PTH_ERROR([dnl
-dnl Unable to locate GNU Pth under $with_pth.
-dnl Please specify the correct path to either a GNU Pth installation tree
-dnl (use --with-pth=DIR if you used --prefix=DIR for installing GNU Pth in
-dnl the past) or to a GNU Pth source tree (use --with-pth=DIR if DIR is a
-dnl path to a pth-X.Y.Z/ directory; but make sure the package is already
-dnl built, i.e., the "configure; make" step was already performed there).])
-dnl else
-dnl _AC_PTH_ERROR([dnl
-dnl Unable to locate GNU Pth in any system-wide location (see \$PATH).
-dnl Please specify the correct path to either a GNU Pth installation tree
-dnl (use --with-pth=DIR if you used --prefix=DIR for installing GNU Pth in
-dnl the past) or to a GNU Pth source tree (use --with-pth=DIR if DIR is a
-dnl path to a pth-X.Y.Z/ directory; but make sure the package is already
-dnl built, i.e., the "configure; make" step was already performed there).])
-dnl fi
-dnl fi
- dnl #
- dnl # Check whether the found version is sufficiently new
- dnl #
- _req_version="ifelse([$1],,1.0.0,$1)"
- for _var in _pth_version _req_version; do
- eval "_val=\"\$${_var}\""
- _major=`echo $_val | sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\([[ab.]]\)\([[0-9]]*\)/\1/'`
- _minor=`echo $_val | sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\([[ab.]]\)\([[0-9]]*\)/\2/'`
- _rtype=`echo $_val | sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\([[ab.]]\)\([[0-9]]*\)/\3/'`
- _micro=`echo $_val | sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\([[ab.]]\)\([[0-9]]*\)/\4/'`
- case $_rtype in
- "a" ) _rtype=0 ;;
- "b" ) _rtype=1 ;;
- "." ) _rtype=2 ;;
- esac
- _hex=`echo dummy | awk '{ printf("%d%02d%1d%02d", major, minor, rtype, micro); }' \
- "major=$_major" "minor=$_minor" "rtype=$_rtype" "micro=$_micro"`
- eval "${_var}_hex=\"\$_hex\""
- done
- _AC_PTH_VERBOSE([+ Determined Versions:])
- _AC_PTH_VERBOSE([ o existing: $_pth_version -> 0x$_pth_version_hex])
- _AC_PTH_VERBOSE([ o required: $_req_version -> 0x$_req_version_hex])
- _ok=0
- if test ".$_pth_version_hex" != .; then
- if test ".$_req_version_hex" != .; then
- if test $_pth_version_hex -ge $_req_version_hex; then
- _ok=1
- fi
- fi
- fi
- if test ".$_ok" = .0; then
- _AC_PTH_ERROR([dnl
- Found Pth version $_pth_version, but required at least version $_req_version.
- Upgrade Pth under $_pth_location to $_req_version or higher first, please.])
- fi
- dnl #
- dnl # Perform Pth Sanity Compile Check
- dnl #
- if test ".$with_pth_test" = .yes; then
- _ac_save_CPPFLAGS="$CPPFLAGS"
- _ac_save_CFLAGS="$CFLAGS"
- _ac_save_LDFLAGS="$LDFLAGS"
- _ac_save_LIBS="$LIBS"
- CPPFLAGS="$CPPFLAGS $_pth_cppflags"
- CFLAGS="$CFLAGS $_pth_cflags"
- LDFLAGS="$LDFLAGS $_pth_ldflags"
- LIBS="$LIBS $_pth_libs"
- _AC_PTH_VERBOSE([+ Test Build Environment:])
- _AC_PTH_VERBOSE([ o CPPFLAGS=\"$CPPFLAGS\"])
- _AC_PTH_VERBOSE([ o CFLAGS=\"$CFLAGS\"])
- _AC_PTH_VERBOSE([ o LDFLAGS=\"$LDFLAGS\"])
- _AC_PTH_VERBOSE([ o LIBS=\"$LIBS\"])
- cross_compile=no
- define(_code1, [dnl
- #include <stdio.h>
- #include <pth.h>
- ])
- define(_code2, [dnl
- FILE *fp;
- if (!(fp = fopen("conftestval", "w")))
- exit(1);
- fprintf(fp, "hmm");
- fclose(fp);
- pth_init();
- pth_kill();
- if (!(fp = fopen("conftestval", "w")))
- exit(1);
- fprintf(fp, "yes");
- fclose(fp);
- exit(0);
- ])
- _AC_PTH_VERBOSE([+ Performing Sanity Checks:])
- _AC_PTH_VERBOSE([ o pre-processor test])
- AC_TRY_CPP(_code1, _ok=yes, _ok=no)
- if test ".$_ok" != .yes; then
- _AC_PTH_ERROR([dnl
- Found GNU Pth $_pth_version under $_pth_location, but
- was unable to perform a sanity pre-processor check. This means
- the GNU Pth header pth.h was not found.
- We used the following build environment:
- >> CPP="$CPP"
- >> CPPFLAGS="$CPPFLAGS"
- See config.log for possibly more details.])
- fi
- _AC_PTH_VERBOSE([ o link check])
- AC_TRY_LINK(_code1, _code2, _ok=yes, _ok=no)
- if test ".$_ok" != .yes; then
- _AC_PTH_ERROR([dnl
- Found GNU Pth $_pth_version under $_pth_location, but
- was unable to perform a sanity linker check. This means
- the GNU Pth library libpth.a was not found.
- We used the following build environment:
- >> CC="$CC"
- >> CFLAGS="$CFLAGS"
- >> LDFLAGS="$LDFLAGS"
- >> LIBS="$LIBS"
- See config.log for possibly more details.])
- fi
- _AC_PTH_VERBOSE([ o run-time check])
- AC_TRY_RUN(AC_LANG_PROGRAM(_code1, _code2), _ok=`cat conftestval`, _ok=no, _ok=no)
- if test ".$_ok" != .yes; then
- if test ".$_ok" = .no; then
- _AC_PTH_ERROR([dnl
- Found GNU Pth $_pth_version under $_pth_location, but
- was unable to perform a sanity execution check. This usually
- means that the GNU Pth shared library libpth.so is present
- but \$LD_LIBRARY_PATH is incomplete to execute a Pth test.
- In this case either disable this test via --without-pth-test,
- or extend \$LD_LIBRARY_PATH, or build GNU Pth as a static
- library only via its --disable-shared Autoconf option.
- We used the following build environment:
- >> CC="$CC"
- >> CFLAGS="$CFLAGS"
- >> LDFLAGS="$LDFLAGS"
- >> LIBS="$LIBS"
- See config.log for possibly more details.])
- else
- _AC_PTH_ERROR([dnl
- Found GNU Pth $_pth_version under $_pth_location, but
- was unable to perform a sanity run-time check. This usually
- means that the GNU Pth library failed to work and possibly
- caused a core dump in the test program. In this case it
- is strongly recommended that you re-install GNU Pth and this
- time make sure that it really passes its "make test" procedure.
- We used the following build environment:
- >> CC="$CC"
- >> CFLAGS="$CFLAGS"
- >> LDFLAGS="$LDFLAGS"
- >> LIBS="$LIBS"
- See config.log for possibly more details.])
- fi
- fi
- _extendvars="ifelse([$4],,yes,$4)"
- if test ".$_extendvars" != .yes; then
- CPPFLAGS="$_ac_save_CPPFLAGS"
- CFLAGS="$_ac_save_CFLAGS"
- LDFLAGS="$_ac_save_LDFLAGS"
- LIBS="$_ac_save_LIBS"
- fi
- else
- _extendvars="ifelse([$4],,yes,$4)"
- if test ".$_extendvars" = .yes; then
- if test ".$_pth_subdir" = .yes; then
- CPPFLAGS="$CPPFLAGS $_pth_cppflags"
- CFLAGS="$CFLAGS $_pth_cflags"
- LDFLAGS="$LDFLAGS $_pth_ldflags"
- LIBS="$LIBS $_pth_libs"
- fi
- fi
- fi
- PTH_CPPFLAGS="$_pth_cppflags"
- PTH_CFLAGS="$_pth_cflags"
- PTH_LDFLAGS="$_pth_ldflags"
- PTH_LIBS="$_pth_libs"
- AC_SUBST(PTH_CPPFLAGS)
- AC_SUBST(PTH_CFLAGS)
- AC_SUBST(PTH_LDFLAGS)
- AC_SUBST(PTH_LIBS)
- _AC_PTH_VERBOSE([+ Final Results:])
- _AC_PTH_VERBOSE([ o PTH_CPPFLAGS=\"$PTH_CPPFLAGS\"])
- _AC_PTH_VERBOSE([ o PTH_CFLAGS=\"$PTH_CFLAGS\"])
- _AC_PTH_VERBOSE([ o PTH_LDFLAGS=\"$PTH_LDFLAGS\"])
- _AC_PTH_VERBOSE([ o PTH_LIBS=\"$PTH_LIBS\"])
-fi
-fi
-if test ".$with_pth" != .no; then
- AC_MSG_RESULT([version $_pth_version, $_pth_type under $_pth_location])
- ifelse([$5], , :, [$5])
-else
- AC_MSG_RESULT([no])
- ifelse([$6], , :, [$6])
-fi
-])
+++ /dev/null
-/* ath-pth.c - Pth module for self-adapting thread-safeness library
- Copyright (C) 2002, 2003, 2004 g10 Code GmbH
-
- This file is part of GPGME.
-
- GPGME is free software; you can redistribute it and/or modify it
- under the terms of the GNU Lesser General Public License as
- published by the Free Software Foundation; either version 2.1 of
- the License, or (at your option) any later version.
-
- GPGME 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
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
- 02111-1307, USA. */
-
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdlib.h>
-#include <errno.h>
-
-#include <pth.h>
-
-#include "ath.h"
-
-
-/* The lock we take while checking for lazy lock initialization. */
-static pth_mutex_t check_init_lock = PTH_MUTEX_INIT;
-
-
-uintptr_t
-ath_self (void)
-{
- return (uintptr_t) pth_self ();
-}
-
-
-/* Initialize the mutex *PRIV. If JUST_CHECK is true, only do this if
- it is not already initialized. */
-static int
-mutex_pth_init (ath_mutex_t *priv, int just_check)
-{
- int err = 0;
-
- if (just_check)
- pth_mutex_acquire (&check_init_lock, 0, NULL);
- if (!*priv || !just_check)
- {
- pth_mutex_t *lock = malloc (sizeof (pth_mutex_t));
- if (!lock)
- err = ENOMEM;
- if (!err)
- {
- err = pth_mutex_init (lock);
- if (err == FALSE)
- err = errno;
- else
- err = 0;
-
- if (err)
- free (lock);
- else
- *priv = (ath_mutex_t) lock;
- }
- }
- if (just_check)
- pth_mutex_release (&check_init_lock);
- return err;
-}
-
-
-void
-ath_init (void)
-{
- /* Nothing to do. */
-}
-
-
-int
-ath_mutex_init (ath_mutex_t *lock)
-{
- return mutex_pth_init (lock, 0);
-}
-
-
-int
-ath_mutex_destroy (ath_mutex_t *lock)
-{
- int err = mutex_pth_init (lock, 1);
- if (!err)
- {
- /* GNU Pth has no destructor function. */
- free (*lock);
- }
- return err;
-}
-
-
-int
-ath_mutex_lock (ath_mutex_t *lock)
-{
- int ret = mutex_pth_init (lock, 1);
- if (ret)
- return ret;
-
- ret = pth_mutex_acquire ((pth_mutex_t *) *lock, 0, NULL);
- return ret == FALSE ? errno : 0;
-}
-
-
-int
-ath_mutex_unlock (ath_mutex_t *lock)
-{
- int ret = mutex_pth_init (lock, 1);
- if (ret)
- return ret;
-
- ret = pth_mutex_release ((pth_mutex_t *) *lock);
- return ret == FALSE ? errno : 0;
-}
-
-
-ssize_t
-ath_read (int fd, void *buf, size_t nbytes)
-{
- return pth_read (fd, buf, nbytes);
-}
-
-
-ssize_t
-ath_write (int fd, const void *buf, size_t nbytes)
-{
- return pth_write (fd, buf, nbytes);
-}
-
-
-ssize_t
-ath_select (int nfd, fd_set *rset, fd_set *wset, fd_set *eset,
- struct timeval *timeout)
-{
- return pth_select (nfd, rset, wset, eset, timeout);
-}
-
-
-ssize_t
-ath_waitpid (pid_t pid, int *status, int options)
-{
- return pth_waitpid (pid, status, options);
-}
-
-
-int
-ath_accept (int s, struct sockaddr *addr, socklen_t *length_ptr)
-{
- return pth_accept (s, addr, length_ptr);
-}
-
-
-int
-ath_connect (int s, const struct sockaddr *addr, socklen_t length)
-{
- return pth_connect (s, addr, length);
-}
-
-int
-ath_sendmsg (int s, const struct msghdr *msg, int flags)
-{
- /* FIXME: GNU Pth is missing pth_sendmsg. */
- return sendmsg (s, msg, flags);
-}
-
-
-int
-ath_recvmsg (int s, struct msghdr *msg, int flags)
-{
- /* FIXME: GNU Pth is missing pth_recvmsg. */
- return recvmsg (s, msg, flags);
-}
-