gpgme/src/gpgme-config.in
Andre Heinecke 09b6455432 core: Use gpgrt locking for thread safeness
* configure.ac: Require libgpg-error 1.17. No longer
check for pthread.
* doc/gpgme.texi: Document removed neccessity for thread
safe gpgme flavours.
* src/sema.h (DEFINE_GLOBAL_LOCK),
(DEFINE_STATIC_LOCK, INIT_LOCK, DECLARE_LOCK)
(DESTROY_LOCK, LOCK, UNLOCK): Change to gpgrt equivalents.
* src/posix-sema.c, src/w32-sema.c: Removed.
* src/Makefile.am: Remove libpthread and
Update accordingly.
* src/ath.c, src/ath.h (ath_mutex_init)
(ath_mutex_destroy, ath_mutex_lock, ath_mutex_unlock): Removed.
* src/ath.h (ATH_MUTEX_INITIALIZER): Removed.
* src/version.c (do_subsystem_inits): sema_subsystem_init is
no longer required.
* tests/gpg/Makefile.am: Add new threading tests.
(t_thread1_LDADD, t_cancel_LDADD):
Use just gpgme.
* tests/gpg/t-thread-keylist-verify.c,
tests/gpg/t-thread-keylist.c: New.
* src/gpgme-config.in: Use -lgpgme for thread-model pthread.

--
Using gpgrt locks instead of pthread locks removes
the neccessity to link pthread directly to gpgme and
have a different, thread safe flavor of gpgme. Now
gpgme is thread-safe if the conditions mentioned
in the doc are met.

As the cpp bindings linked against libgpgme
and not libgpgme-pthread this fixes threading problems
with them.

libgpgme-pthread is removed but gpgme-config still supports
--thread=pthread for compatibility with find scripts.
2016-11-10 13:33:13 +01:00

212 lines
4.8 KiB
Bash

#!/bin/sh
# Copyright (C) 1999, 2002, 2003 Free Software Foundation, Inc.
#
# This file is free software; as a special exception the author gives
# unlimited permission to copy and/or distribute it, with or without
# modifications, as long as this notice is preserved.
#
# This file 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.
prefix=@prefix@
exec_prefix=@exec_prefix@
# Make sure that no weird locale setting messes up our sed regexps etc.
LC_COLLATE=C
LC_ALL=C
LANG=C
# GPGME's own cflags and libs
cflags="-I@includedir@"
libs="-L@libdir@"
# Network libraries.
assuan_cflags="@LIBASSUAN_CFLAGS@"
assuan_libs="@LIBASSUAN_LIBS@"
# Configure libgpg-error.
gpg_error_cflags="@GPG_ERROR_CFLAGS@"
gpg_error_libs="@GPG_ERROR_LIBS@"
# Configure thread packages.
thread_modules=""
# For compatibility we keep proving the
# thread modules variable.
thread_modules="$thread_modules pthread"
libs_pthread="-lpthread"
cflags_pthread=""
avail_lang='c @GPGME_CONFIG_AVAIL_LANG@'
# Configure glib.
libs_glib="@GLIB_LIBS@"
cflags_glib="@GLIB_CFLAGS@"
with_glib=
output=""
usage()
{
cat <<EOF
Usage: gpgme-config [OPTIONS]
Options:
--prefix
--exec-prefix
--version
--api-version
--host
--libs
--cflags
--print-lang Print available language bindings
--have-lang=LANG Return success if LANG is available
EOF
exit $1
}
if test $# -eq 0; then
usage 1 1>&2
fi
while test $# -gt 0; do
case "$1" in
-*=*)
optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'`
;;
*)
optarg=
;;
esac
case $1 in
--prefix=*)
# For compatibility reasons with old M4 macros, we ignore
# setting of prefix.
;;
--prefix)
output="$output $prefix"
;;
--exec-prefix=*)
;;
--exec-prefix)
output="$output $exec_prefix"
;;
--glib)
with_glib=yes
;;
--version)
echo "@VERSION@"
exit 0
;;
--api-version)
echo "@GPGME_CONFIG_API_VERSION@"
exit 0
;;
--host)
echo "@GPGME_CONFIG_HOST@"
exit 0
;;
--cflags)
result=
tmp_c=
tmp_g=
case "$thread_module" in
pthread) tmp_c="$cflags_pthread" ;;
esac
test "x$with_glib" = "xyes" && tmp_g="$cflags_glib"
for i in $cflags $tmp_c $assuan_cflags $gpg_error_cflags $tmp_g ; do
skip=no
case $i in
-I/usr/include|-I/include)
skip=yes
;;
-I*)
for j in $result ; do
if test x"$j" = x"$i" ; then
skip=yes
break;
fi
done
;;
esac
if test $skip = no ; then
result="$result $i"
fi
done
output="$output $result"
;;
--libs)
result=
tmp_x=
case "$thread_module" in
# deprecated
pthread) tmp_l="-lgpgme" ;;
*)
if test "x$with_glib" = "xyes" ; then
tmp_l="-lgpgme-glib"
tmp_x="$libs_glib"
else
tmp_l="-lgpgme"
fi
;;
esac
for i in $libs $tmp_l $assuan_libs $gpg_error_libs $tmp_x; do
skip=no
case $i in
-L/usr/lib|-L/lib)
skip=yes
;;
-L*|-l*)
for j in $result ; do
if test x"$j" = x"$i" ; then
skip=yes
break;
fi
done
;;
esac
if test $skip = no ; then
result="$result $i"
fi
done
output="$output $result"
;;
--thread=*)
for thread_mod in $thread_modules; do
if test "$thread_mod" = "$optarg"; then
thread_module="$optarg";
fi
done
if test "x$thread_module" = "x"; then
usage 1 1>&2
fi
;;
--print-lang)
output="$avail_lang"
;;
--have-lang=*)
for lang in $avail_lang; do
if test x"$lang" = x"$optarg"; then
exit 0
fi
done
exit 1
;;
--get-gpg)
# Deprecated
output="$output @GPG@"
;;
--get-gpgsm)
# Deprecated
output="$output @GPGSM@"
;;
*)
usage 1 1>&2
;;
esac
shift
done
echo $output