2003-09-03 Marcus Brinkmann <marcus@g10code.de>

* 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.
This commit is contained in:
Marcus Brinkmann 2003-09-03 01:15:56 +00:00
parent be89abd137
commit d772a96a62
8 changed files with 259 additions and 117 deletions

View File

@ -1,3 +1,7 @@
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> 2003-09-02 Marcus Brinkmann <marcus@g10code.de>
* configure.ac: Move invocation of AC_CANONICAL_HOST up to * configure.ac: Move invocation of AC_CANONICAL_HOST up to

7
NEWS
View File

@ -11,6 +11,13 @@ Noteworthy changes in version 0.4.3 (unreleased)
The old code for automagically detecting the thread library is The old code for automagically detecting the thread library is
still part of libgpgme, but it is DEPRECATED. 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 * gpgme_get_key fails with GPG_ERR_AMBIGUOUS_NAME if the key ID
provided was not unique, instead returning the first matching key. provided was not unique, instead returning the first matching key.

View File

@ -1,3 +1,8 @@
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> 2003-08-14 Marcus Brinkmann <marcus@g10code.de>
* gpgme.texi (Creating a Signature): Change type of member class * gpgme.texi (Creating a Signature): Change type of member class

View File

@ -105,6 +105,7 @@ Preparation
* Header:: What header file you need to include. * Header:: What header file you need to include.
* Building the Source:: Compiler options to be used. * Building the Source:: Compiler options to be used.
* Using Automake:: Compiler options to be used the easy way. * 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. * Library Version Check:: Getting and verifying the library version.
* Multi Threading:: How @acronym{GPGME} can be used in an MT environment. * Multi Threading:: How @acronym{GPGME} can be used in an MT environment.
@ -318,6 +319,7 @@ of the library are verified.
* Header:: What header file you need to include. * Header:: What header file you need to include.
* Building the Source:: Compiler options to be used. * Building the Source:: Compiler options to be used.
* Using Automake:: Compiler options to be used the easy way. * 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. * Library Version Check:: Getting and verifying the library version.
* Multi Threading:: How @acronym{GPGME} can be used in an MT environment. * Multi Threading:: How @acronym{GPGME} can be used in an MT environment.
@end menu @end menu
@ -341,10 +343,6 @@ The name space of @acronym{GPGME} is @code{gpgme_*} for function names
and data types and @code{GPGME_*} for other symbols. Symbols internal and data types and @code{GPGME_*} for other symbols. Symbols internal
to @acronym{GPGME} take the form @code{_gpgme_*} and @code{_GPGME_*}. 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 Because @acronym{GPGME} makes use of the GPG Error library, using
@acronym{GPGME} will also use the @code{GPG_ERR_*} name space @acronym{GPGME} will also use the @code{GPG_ERR_*} name space
directly, and the @code{gpg_err*} and @code{gpg_str*} name space directly, and the @code{gpg_err*} and @code{gpg_str*} name space
@ -399,6 +397,12 @@ specifying both options to @command{gpgme-config}:
gcc -o foo foo.c `gpgme-config --cflags --libs` gcc -o foo foo.c `gpgme-config --cflags --libs`
@end example @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 @node Using Automake
@section Using Automake @section Using Automake
@ -415,6 +419,8 @@ provides an extension to Automake that does all the work for you.
@r{[}@var{\varname\}@r{]} @r{[}@var{\varname\}@r{]}
@end macro @end macro
@defmac AM_PATH_GPGME (@ovar{minimum-version}, @ovar{action-if-found}, @ovar{action-if-not-found}) @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}, Check whether @acronym{GPGME} (at least version @var{minimum-version},
if given) exists on the host system. If it is found, execute if given) exists on the host system. If it is found, execute
@var{action-if-found}, otherwise do @var{action-if-not-found}, if @var{action-if-found}, otherwise do @var{action-if-not-found}, if
@ -424,6 +430,14 @@ Additionally, the function defines @code{GPGME_CFLAGS} to the flags
needed for compilation of the program to find the @file{gpgme.h} 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 header file, and @code{GPGME_LIBS} to the linker flags needed to link
the program to the @acronym{GPGME} library. 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 @end defmac
You can use the defined Autoconf variables like this in your You can use the defined Autoconf variables like this in your
@ -435,6 +449,16 @@ LDADD = $(GPGME_LIBS)
@end example @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 @node Library Version Check
@section Library Version Check @section Library Version Check
@cindex version check, of the library @cindex version check, of the library

View File

@ -1,3 +1,8 @@
2003-09-03 Marcus Brinkmann <marcus@g10code.de>
* gpgme-config.in: Rewritten.
* gpgme.m4: Rewritten.
2003-08-19 Marcus Brinkmann <marcus@g10code.de> 2003-08-19 Marcus Brinkmann <marcus@g10code.de>
The ath files (ath.h, ath.c, ath-pth.c, ath-pthread.c, The ath files (ath.h, ath.c, ath-pth.c, ath-pthread.c,

View File

@ -9,33 +9,39 @@
# WITHOUT ANY WARRANTY, to the extent permitted by law; without even the # WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
PGM=gpgme-config
libs="@GPGME_CONFIG_LIBS@"
cflags="@GPGME_CONFIG_CFLAGS@"
prefix=@prefix@ prefix=@prefix@
exec_prefix=@exec_prefix@ exec_prefix=@exec_prefix@
includes="" includedir=@includedir@
libdirs="" libdir=@libdir@
exec_prefix_set=no
echo_libs=no
echo_cflags=no
echo_prefix=no
echo_exec_prefix=no
# Configure libgpg-error.
gpg_error_cflags="@GPG_ERROR_CFLAGS@" gpg_error_cflags="@GPG_ERROR_CFLAGS@"
gpg_error_libs="@GPG_ERROR_LIBS@" 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() usage()
{ {
cat <<EOF cat <<EOF
Usage: $PGM [OPTIONS] Usage: gpgme-config [OPTIONS]
Options: Options:
[--prefix[=DIR]] [--prefix]
[--exec-prefix[=DIR]] [--exec-prefix]
[--version] [--version]
[--libs] [--libs]
[--cflags] [--cflags]
[--thread={${thread_modules}}]
EOF EOF
exit $1 exit $1
} }
@ -46,36 +52,60 @@ fi
while test $# -gt 0; do while test $# -gt 0; do
case "$1" in case "$1" in
-*=*) optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;; -*=*)
*) optarg= ;; optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'`
;;
*)
optarg=
;;
esac esac
case $1 in case $1 in
--prefix=*)
prefix=$optarg
if test $exec_prefix_set = no ; then
exec_prefix=$optarg
fi
;;
--prefix) --prefix)
echo_prefix=yes output="$output $prefix"
;;
--exec-prefix=*)
exec_prefix=$optarg
exec_prefix_set=yes
;; ;;
--exec-prefix) --exec-prefix)
echo_exec_prefix=yes output="$output $exec_prefix"
;; ;;
--version) --version)
echo "@VERSION@" echo "@VERSION@"
exit 0 exit 0
;; ;;
--cflags) --cflags)
echo_cflags=yes 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) --libs)
echo_libs=yes 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 usage 1 1>&2
@ -84,35 +114,4 @@ while test $# -gt 0; do
shift shift
done done
if test "$echo_prefix" = "yes"; then echo $output
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

View File

@ -92,8 +92,8 @@ gpgme_err_make (gpgme_err_source_t source, gpgme_err_code_t code)
} }
/* The user can define GPG_ERR_SOURCE_DEFAULT before including this /* The user can define GPGME_ERR_SOURCE_DEFAULT before including this
file to specify a default source for gpg_error. */ file to specify a default source for gpgme_error. */
#ifndef GPGME_ERR_SOURCE_DEFAULT #ifndef GPGME_ERR_SOURCE_DEFAULT
#define GPGME_ERR_SOURCE_DEFAULT GPG_ERR_SOURCE_USER_1 #define GPGME_ERR_SOURCE_DEFAULT GPG_ERR_SOURCE_USER_1
#endif #endif

View File

@ -1,25 +1,32 @@
dnl Autoconf macros for libgpgme dnl Autoconf macros for libgpgme
dnl $Id$ dnl $Id$
AC_DEFUN(_AM_PATH_GPGME_CONFIG,
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_ARG_WITH(gpgme-prefix, [ AC_ARG_WITH(gpgme-prefix,
AC_HELP_STRING([--with-gpgme-prefix=PFX], AC_HELP_STRING([--with-gpgme-prefix=PFX],
[prefix where GPGME is installed (optional)]), [prefix where GPGME is installed (optional)]),
gpgme_config_prefix="$withval", gpgme_config_prefix="") gpgme_config_prefix="$withval", gpgme_config_prefix="")
if test x$gpgme_config_prefix != x ; then if test "x$gpgme_config_prefix" != x ; then
gpgme_config_args="$gpgme_config_args --prefix=$gpgme_config_prefix" GPGME_CONFIG="$gpgme_config_prefix/bin/gpgme-config"
if test x${GPGME_CONFIG+set} != xset ; then
GPGME_CONFIG=$gpgme_config_prefix/bin/gpgme-config
fi fi
fi
AC_PATH_PROG(GPGME_CONFIG, gpgme-config, no) 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) AC_MSG_CHECKING(for GPGME - version >= $min_gpgme_version)
ok=no ok=no
if test "$GPGME_CONFIG" != "no" ; then if test "$GPGME_CONFIG" != "no" ; then
@ -29,22 +36,15 @@ AC_DEFUN(AM_PATH_GPGME,
sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\2/'` sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\2/'`
req_micro=`echo $min_gpgme_version | \ req_micro=`echo $min_gpgme_version | \
sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\3/'` sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\3/'`
gpgme_config_version=`$GPGME_CONFIG $gpgme_config_args --version` if test "$gpgme_version_major" -gt "$req_major"; then
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
ok=yes ok=yes
else else
if test "$major" -eq "$req_major"; then if test "$gpgme_version_major" -eq "$req_major"; then
if test "$minor" -gt "$req_minor"; then if test "$gpgme_version_minor" -gt "$req_minor"; then
ok=yes ok=yes
else else
if test "$minor" -eq "$req_minor"; then if test "$gpgme_version_minor" -eq "$req_minor"; then
if test "$micro" -ge "$req_micro"; then if test "$gpgme_version_micro" -ge "$req_micro"; then
ok=yes ok=yes
fi fi
fi fi
@ -53,8 +53,8 @@ AC_DEFUN(AM_PATH_GPGME,
fi fi
fi fi
if test $ok = yes; then if test $ok = yes; then
GPGME_CFLAGS=`$GPGME_CONFIG $gpgme_config_args --cflags` GPGME_CFLAGS=`$GPGME_CONFIG --cflags`
GPGME_LIBS=`$GPGME_CONFIG $gpgme_config_args --libs` GPGME_LIBS=`$GPGME_CONFIG --libs`
AC_MSG_RESULT(yes) AC_MSG_RESULT(yes)
ifelse([$2], , :, [$2]) ifelse([$2], , :, [$2])
else else
@ -67,3 +67,101 @@ AC_DEFUN(AM_PATH_GPGME,
AC_SUBST(GPGME_LIBS) 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)
])