* configure.ac: Remove GPGME_CONFIG_LIBS and GPGME_CONFIG_CFLAGS.
doc/
2003-09-03 Marcus Brinkmann <marcus@g10code.de>
* gpgme.texi (Header): We don't use the assuan namespace anymore.
Document new thread options.
gpgme/
2003-09-03 Marcus Brinkmann <marcus@g10code.de>
* gpgme-config.in: Rewritten.
* gpgme.m4: Rewritten.
+2003-09-03 Marcus Brinkmann <marcus@g10code.de>
+
+ * configure.ac: Remove GPGME_CONFIG_LIBS and GPGME_CONFIG_CFLAGS.
+
2003-09-02 Marcus Brinkmann <marcus@g10code.de>
* configure.ac: Move invocation of AC_CANONICAL_HOST up to
The old code for automagically detecting the thread library is
still part of libgpgme, but it is DEPRECATED.
+ * There are new automake macros AM_PATH_GPGME_PTH and
+ AM_PATH_GPGME_PTHREAD, which support checking for thread-enabled
+ versions of GPGME. They define GPGME_PTH_CFLAGS, GPGME_PTH_LIBS,
+ GPGME_PTHREAD_CFLAGS and GPGME_PTHREAD_LIBS respectively. These
+ variables of course also include the configuration for the thread
+ package itself. Alternatively, use libtool.
+
* gpgme_get_key fails with GPG_ERR_AMBIGUOUS_NAME if the key ID
provided was not unique, instead returning the first matching key.
+2003-09-03 Marcus Brinkmann <marcus@g10code.de>
+
+ * gpgme.texi (Header): We don't use the assuan namespace anymore.
+ Document new thread options.
+
2003-08-14 Marcus Brinkmann <marcus@g10code.de>
* gpgme.texi (Creating a Signature): Change type of member class
* Header:: What header file you need to include.
* Building the Source:: Compiler options to be used.
* Using Automake:: Compiler options to be used the easy way.
+* Using Libtool:: Avoiding compiler options entirely.
* Library Version Check:: Getting and verifying the library version.
* Multi Threading:: How @acronym{GPGME} can be used in an MT environment.
* Header:: What header file you need to include.
* Building the Source:: Compiler options to be used.
* Using Automake:: Compiler options to be used the easy way.
+* Using Libtool:: Avoiding compiler options entirely.
* Library Version Check:: Getting and verifying the library version.
* Multi Threading:: How @acronym{GPGME} can be used in an MT environment.
@end menu
and data types and @code{GPGME_*} for other symbols. Symbols internal
to @acronym{GPGME} take the form @code{_gpgme_*} and @code{_GPGME_*}.
-Because @acronym{GPGME} links to the Assuan library, linking to
-@acronym{GPGME} will also use the @code{assuan_*} and @code{_assuan_*}
-name space indirectly.
-
Because @acronym{GPGME} makes use of the GPG Error library, using
@acronym{GPGME} will also use the @code{GPG_ERR_*} name space
directly, and the @code{gpg_err*} and @code{gpg_str*} name space
gcc -o foo foo.c `gpgme-config --cflags --libs`
@end example
+If you want to link to one of the thread-safe versions of
+@acronym{GPGME}, you must specify the @option{--thread} option before
+any other option to select the thread package you want to link with.
+Supported thread packages are @option{--thread=pth} and
+@option{--thread=pthread}.
+
@node Using Automake
@section Using Automake
@r{[}@var{\varname\}@r{]}
@end macro
@defmac AM_PATH_GPGME (@ovar{minimum-version}, @ovar{action-if-found}, @ovar{action-if-not-found})
+@defmacx AM_PATH_GPGME_PTH (@ovar{minimum-version}, @ovar{action-if-found}, @ovar{action-if-not-found})
+@defmacx AM_PATH_GPGME_PTHREAD (@ovar{minimum-version}, @ovar{action-if-found}, @ovar{action-if-not-found})
Check whether @acronym{GPGME} (at least version @var{minimum-version},
if given) exists on the host system. If it is found, execute
@var{action-if-found}, otherwise do @var{action-if-not-found}, if
needed for compilation of the program to find the @file{gpgme.h}
header file, and @code{GPGME_LIBS} to the linker flags needed to link
the program to the @acronym{GPGME} library.
+
+@code{AM_PATH_GPGME_PTH} checks for the version of @acronym{GPGME}
+that can be used with GNU Pth, and defines @code{GPGME_PTH_CFLAGS} and
+@code{GPGME_PTH_LIBS}.
+
+@code{AM_PATH_GPGME_PTHREAD} checks for the version of @acronym{GPGME}
+that can be used with the native pthread implementation, and defines
+@code{GPGME_PTHREAD_CFLAGS} and @code{GPGME_PTHREAD_LIBS}.
@end defmac
You can use the defined Autoconf variables like this in your
@end example
+@node Using Libtool
+@section Using Libtool
+@cindex libtool
+
+The easiest way is to just use GNU Libtool. If you use libtool, and
+link to @code{libgpgme.la}, @code{libgpgme-pth.la} or
+@code{libgpgme-pthread.la} respectively, everything will be done
+automatically by Libtool.
+
+
@node Library Version Check
@section Library Version Check
@cindex version check, of the library
+2003-09-03 Marcus Brinkmann <marcus@g10code.de>
+
+ * gpgme-config.in: Rewritten.
+ * gpgme.m4: Rewritten.
+
2003-08-19 Marcus Brinkmann <marcus@g10code.de>
The ath files (ath.h, ath.c, ath-pth.c, ath-pthread.c,
# WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-PGM=gpgme-config
-libs="@GPGME_CONFIG_LIBS@"
-cflags="@GPGME_CONFIG_CFLAGS@"
prefix=@prefix@
exec_prefix=@exec_prefix@
-includes=""
-libdirs=""
-exec_prefix_set=no
-echo_libs=no
-echo_cflags=no
-echo_prefix=no
-echo_exec_prefix=no
+includedir=@includedir@
+libdir=@libdir@
+# Configure libgpg-error.
gpg_error_cflags="@GPG_ERROR_CFLAGS@"
gpg_error_libs="@GPG_ERROR_LIBS@"
+# Configure thread packages.
+thread_modules=""
+
+@HAVE_PTH_TRUE@thread_modules="$thread_modules pth"
+libs_pth="@PTH_LDFLAGS@ @PTH_LIBS@"
+cflags_pth="@PTH_CFLAGS@"
+
+@HAVE_PTHREAD_TRUE@thread_modules="$thread_modules pthread"
+libs_pthread="-lpthread"
+cflags_pthread=""
+
+output=""
usage()
{
- cat <<EOF
-Usage: $PGM [OPTIONS]
+ cat <<EOF
+Usage: gpgme-config [OPTIONS]
Options:
- [--prefix[=DIR]]
- [--exec-prefix[=DIR]]
+ [--prefix]
+ [--exec-prefix]
[--version]
[--libs]
[--cflags]
+ [--thread={${thread_modules}}]
EOF
- exit $1
+ exit $1
}
if test $# -eq 0; then
- usage 1 1>&2
+ 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
+ -*=*)
+ optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'`
+ ;;
+ *)
+ optarg=
+ ;;
+ esac
- case $1 in
- --prefix=*)
- prefix=$optarg
- if test $exec_prefix_set = no ; then
- exec_prefix=$optarg
- fi
- ;;
- --prefix)
- echo_prefix=yes
- ;;
- --exec-prefix=*)
- exec_prefix=$optarg
- exec_prefix_set=yes
- ;;
- --exec-prefix)
- echo_exec_prefix=yes
- ;;
- --version)
- echo "@VERSION@"
- exit 0
- ;;
- --cflags)
- echo_cflags=yes
- ;;
- --libs)
- echo_libs=yes
- ;;
- *)
- usage 1 1>&2
- ;;
- esac
- shift
+ case $1 in
+ --prefix)
+ output="$output $prefix"
+ ;;
+ --exec-prefix)
+ output="$output $exec_prefix"
+ ;;
+ --version)
+ echo "@VERSION@"
+ exit 0
+ ;;
+ --cflags)
+ output="$output -I$includedir"
+ case "$thread_module" in
+ pthread)
+ output="$output $cflags_pthread"
+ ;;
+ pth)
+ output="$output $cflags_pth"
+ ;;
+ esac
+ output="$output $gpg_error_cflags"
+ ;;
+ --libs)
+ output="$output -L@libdir@"
+ case "$thread_module" in
+ pthread)
+ output="$output -lgpgme-pthread $libs_pthread"
+ ;;
+ pth)
+ output="$output -lgpgme-pth $libs_pth"
+ ;;
+ *)
+ output="$output -lgpgme"
+ esac
+ output="$output $gpg_error_libs"
+ ;;
+ --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
+ ;;
+ *)
+ usage 1 1>&2
+ ;;
+ esac
+ shift
done
-if test "$echo_prefix" = "yes"; then
- echo $prefix
-fi
-
-if test "$echo_exec_prefix" = "yes"; then
- echo $exec_prefix
-fi
-
-if test "$echo_cflags" = "yes"; then
- if test "@includedir@" != "/usr/include" ; then
- includes="-I@includedir@"
- for i in $cflags ; do
- if test "$i" = "-I@includedir@" ; then
- includes=""
- fi
- done
- fi
- echo $includes $cflags $gpg_error_cflags
-fi
-
-if test "$echo_libs" = "yes"; then
- if test "@libdir@" != "/usr/lib" ; then
- libdirs="-L@libdir@"
- for i in $libs ; do
- if test "$i" = "-L@libdir@" ; then
- libdirs=""
- fi
- done
- fi
- echo $libdirs $libs $gpg_error_libs
-fi
-
+echo $output
}
-/* The user can define GPG_ERR_SOURCE_DEFAULT before including this
- file to specify a default source for gpg_error. */
+/* The user can define GPGME_ERR_SOURCE_DEFAULT before including this
+ file to specify a default source for gpgme_error. */
#ifndef GPGME_ERR_SOURCE_DEFAULT
#define GPGME_ERR_SOURCE_DEFAULT GPG_ERR_SOURCE_USER_1
#endif
dnl Autoconf macros for libgpgme
dnl $Id$
-
-dnl AM_PATH_GPGME([MINIMUM-VERSION,
-dnl [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND ]]])
-dnl Test for libgpgme and define GPGME_CFLAGS and GPGME_LIBS
-dnl
-AC_DEFUN(AM_PATH_GPGME,
+AC_DEFUN(_AM_PATH_GPGME_CONFIG,
[ AC_ARG_WITH(gpgme-prefix,
AC_HELP_STRING([--with-gpgme-prefix=PFX],
[prefix where GPGME is installed (optional)]),
gpgme_config_prefix="$withval", gpgme_config_prefix="")
- if test x$gpgme_config_prefix != x ; then
- gpgme_config_args="$gpgme_config_args --prefix=$gpgme_config_prefix"
- if test x${GPGME_CONFIG+set} != xset ; then
- GPGME_CONFIG=$gpgme_config_prefix/bin/gpgme-config
- fi
+ if test "x$gpgme_config_prefix" != x ; then
+ GPGME_CONFIG="$gpgme_config_prefix/bin/gpgme-config"
fi
-
AC_PATH_PROG(GPGME_CONFIG, gpgme-config, no)
- min_gpgme_version=ifelse([$1], ,0.3.9,$1)
+
+ gpgme_version=`$GPGME_CONFIG --version`
+ gpgme_version_major=`echo $gpgme_version | \
+ sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\).*/\1/'`
+ gpgme_version_minor=`echo $gpgme_version | \
+ sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\).*/\2/'`
+ gpgme_version_micro=`echo $gpgme_version | \
+ sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\).*/\3/'`
+])
+
+dnl AM_PATH_GPGME([MINIMUM-VERSION,
+dnl [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND ]]])
+dnl Test for libgpgme and define GPGME_CFLAGS and GPGME_LIBS.
+dnl
+AC_DEFUN([AM_PATH_GPGME],
+[ AC_REQUIRE([_AM_PATH_GPGME_CONFIG])dnl
+ min_gpgme_version=ifelse([$1], ,0.4.2,$1)
AC_MSG_CHECKING(for GPGME - version >= $min_gpgme_version)
ok=no
if test "$GPGME_CONFIG" != "no" ; then
sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\2/'`
req_micro=`echo $min_gpgme_version | \
sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\3/'`
- gpgme_config_version=`$GPGME_CONFIG $gpgme_config_args --version`
- major=`echo $gpgme_config_version | \
- sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\).*/\1/'`
- minor=`echo $gpgme_config_version | \
- sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\).*/\2/'`
- micro=`echo $gpgme_config_version | \
- sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\).*/\3/'`
- if test "$major" -gt "$req_major"; then
+ if test "$gpgme_version_major" -gt "$req_major"; then
ok=yes
else
- if test "$major" -eq "$req_major"; then
- if test "$minor" -gt "$req_minor"; then
+ if test "$gpgme_version_major" -eq "$req_major"; then
+ if test "$gpgme_version_minor" -gt "$req_minor"; then
ok=yes
else
- if test "$minor" -eq "$req_minor"; then
- if test "$micro" -ge "$req_micro"; then
+ if test "$gpgme_version_minor" -eq "$req_minor"; then
+ if test "$gpgme_version_micro" -ge "$req_micro"; then
ok=yes
fi
fi
fi
fi
if test $ok = yes; then
- GPGME_CFLAGS=`$GPGME_CONFIG $gpgme_config_args --cflags`
- GPGME_LIBS=`$GPGME_CONFIG $gpgme_config_args --libs`
+ GPGME_CFLAGS=`$GPGME_CONFIG --cflags`
+ GPGME_LIBS=`$GPGME_CONFIG --libs`
AC_MSG_RESULT(yes)
ifelse([$2], , :, [$2])
else
AC_SUBST(GPGME_LIBS)
])
+dnl AM_PATH_GPGME_PTH([MINIMUM-VERSION,
+dnl [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND ]]])
+dnl Test for libgpgme and define GPGME_PTH_CFLAGS and GPGME_PTH_LIBS.
+dnl
+AC_DEFUN([AM_PATH_GPGME_PTH],
+[ AC_REQUIRE([_AM_PATH_GPGME_CONFIG])dnl
+ min_gpgme_version=ifelse([$1], ,0.4.2,$1)
+ AC_MSG_CHECKING(for GPGME Pth - version >= $min_gpgme_version)
+ ok=no
+ if test "$GPGME_CONFIG" != "no" ; then
+ if `$GPGME_CONFIG --thread=pth 2> /dev/null` ; then
+ req_major=`echo $min_gpgme_version | \
+ sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\1/'`
+ req_minor=`echo $min_gpgme_version | \
+ sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\2/'`
+ req_micro=`echo $min_gpgme_version | \
+ sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\3/'`
+ if test "$gpgme_version_major" -gt "$req_major"; then
+ ok=yes
+ else
+ if test "$gpgme_version_major" -eq "$req_major"; then
+ if test "$gpgme_version_minor" -gt "$req_minor"; then
+ ok=yes
+ else
+ if test "$gpgme_version_minor" -eq "$req_minor"; then
+ if test "$gpgme_version_micro" -ge "$req_micro"; then
+ ok=yes
+ fi
+ fi
+ fi
+ fi
+ fi
+ fi
+ fi
+ if test $ok = yes; then
+ GPGME_PTH_CFLAGS=`$GPGME_CONFIG --thread=pth --cflags`
+ GPGME_PTH_LIBS=`$GPGME_CONFIG --thread=pth --libs`
+ AC_MSG_RESULT(yes)
+ ifelse([$2], , :, [$2])
+ else
+ GPGME_PTH_CFLAGS=""
+ GPGME_PTH_LIBS=""
+ AC_MSG_RESULT(no)
+ ifelse([$3], , :, [$3])
+ fi
+ AC_SUBST(GPGME_PTH_CFLAGS)
+ AC_SUBST(GPGME_PTH_LIBS)
+])
+
+dnl AM_PATH_GPGME_PTHREAD([MINIMUM-VERSION,
+dnl [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND ]]])
+dnl Test for libgpgme and define GPGME_PTHREAD_CFLAGS
+dnl and GPGME_PTHREAD_LIBS.
+dnl
+AC_DEFUN([AM_PATH_GPGME_PTHREAD],
+[ AC_REQUIRE([_AM_PATH_GPGME_CONFIG])dnl
+ min_gpgme_version=ifelse([$1], ,0.4.2,$1)
+ AC_MSG_CHECKING(for GPGME pthread - version >= $min_gpgme_version)
+ ok=no
+ if test "$GPGME_CONFIG" != "no" ; then
+ if `$GPGME_CONFIG --thread=pthread 2> /dev/null` ; then
+ req_major=`echo $min_gpgme_version | \
+ sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\1/'`
+ req_minor=`echo $min_gpgme_version | \
+ sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\2/'`
+ req_micro=`echo $min_gpgme_version | \
+ sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\3/'`
+ if test "$gpgme_version_major" -gt "$req_major"; then
+ ok=yes
+ else
+ if test "$gpgme_version_major" -eq "$req_major"; then
+ if test "$gpgme_version_minor" -gt "$req_minor"; then
+ ok=yes
+ else
+ if test "$gpgme_version_minor" -eq "$req_minor"; then
+ if test "$gpgme_version_micro" -ge "$req_micro"; then
+ ok=yes
+ fi
+ fi
+ fi
+ fi
+ fi
+ fi
+ fi
+ if test $ok = yes; then
+ GPGME_PTHREAD_CFLAGS=`$GPGME_CONFIG --thread=pthread --cflags`
+ GPGME_PTHREAD_LIBS=`$GPGME_CONFIG --thread=pthread --libs`
+ AC_MSG_RESULT(yes)
+ ifelse([$2], , :, [$2])
+ else
+ GPGME_PTHREAD_CFLAGS=""
+ GPGME_PTHREAD_LIBS=""
+ AC_MSG_RESULT(no)
+ ifelse([$3], , :, [$3])
+ fi
+ AC_SUBST(GPGME_PTHREAD_CFLAGS)
+ AC_SUBST(GPGME_PTHREAD_LIBS)
+])