Add pkgconfig support to libassuan.
This patch is rejected by upstream for the reason below:
They think pkgconfig adds no portability and maintaining them is not worthwhile.

Upstream-Status: Denied
Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
Signed-off-by: Constantin Musca <constantinx.musca@intel.com>

forward ported to 2.4.4
Signed-off-by: Armin Kuster <akuster@mvista.com>
---
 src/libassuan.m4 | 81 ++----------------------------------------------
 1 file changed, 3 insertions(+), 78 deletions(-)

diff --git a/src/libassuan.m4 b/src/libassuan.m4
index df50484..380a48a 100644
--- a/src/libassuan.m4
+++ b/src/libassuan.m4
@@ -17,27 +17,6 @@ dnl Returns ok set to yes or no.
 dnl
 AC_DEFUN([_AM_PATH_LIBASSUAN_COMMON],
 [ AC_REQUIRE([AC_CANONICAL_HOST])
-  AC_ARG_WITH(libassuan-prefix,
-              AS_HELP_STRING([--with-libassuan-prefix=PFX],
-                             [prefix where LIBASSUAN is installed (optional)]),
-     libassuan_config_prefix="$withval", libassuan_config_prefix="")
-  if test x$libassuan_config_prefix != x ; then
-    if test x${LIBASSUAN_CONFIG+set} != xset ; then
-      LIBASSUAN_CONFIG=$libassuan_config_prefix/bin/libassuan-config
-    fi
-  fi
-
-  use_gpgrt_config=""
-  if test x"${LIBASSUAN_CONFIG}" = x -a x"$GPGRT_CONFIG" != x -a "$GPGRT_CONFIG" != "no"; then
-    if $GPGRT_CONFIG libassuan --exists; then
-      LIBASSUAN_CONFIG="$GPGRT_CONFIG libassuan"
-      AC_MSG_NOTICE([Use gpgrt-config as libassuan-config])
-      use_gpgrt_config=yes
-    fi
-  fi
-  if test -z "$use_gpgrt_config"; then
-    AC_PATH_PROG(LIBASSUAN_CONFIG, libassuan-config, no)
-  fi
 
   tmp=ifelse([$1], ,1:0.9.2,$1)
   if echo "$tmp" | grep ':' >/dev/null 2>/dev/null ; then
@@ -47,59 +26,11 @@ AC_DEFUN([_AM_PATH_LIBASSUAN_COMMON],
     req_libassuan_api=0
     min_libassuan_version="$tmp"
   fi
-
-  AC_MSG_CHECKING(for LIBASSUAN - version >= $min_libassuan_version)
-  ok=no
-  if test "$LIBASSUAN_CONFIG" != "no"; then
-    req_major=`echo $min_libassuan_version | \
-               sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\1/'`
-    req_minor=`echo $min_libassuan_version | \
-               sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\2/'`
-    req_micro=`echo $min_libassuan_version | \
-               sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\3/'`
-
-    if test -z "$use_gpgrt_config"; then
-      libassuan_config_version=`$LIBASSUAN_CONFIG --version`
-    else
-      libassuan_config_version=`$LIBASSUAN_CONFIG --modversion`
-    fi
-    major=`echo $libassuan_config_version | \
-               sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\).*/\1/'`
-    minor=`echo $libassuan_config_version | \
-               sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\).*/\2/'`
-    micro=`echo $libassuan_config_version | \
-               sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\).*/\3/'`
-
-    if test "$major" -gt "$req_major"; then
-        ok=yes
-    else
-        if test "$major" -eq "$req_major"; then
-            if test "$minor" -gt "$req_minor"; then
-               ok=yes
-            else
-               if test "$minor" -eq "$req_minor"; then
-                   if test "$micro" -ge "$req_micro"; then
-                     ok=yes
-                   fi
-               fi
-            fi
-        fi
-    fi
-  fi
-
-  if test $ok = yes; then
-    AC_MSG_RESULT([yes ($libassuan_config_version)])
-  else
-    AC_MSG_RESULT(no)
-  fi
+  PKG_CHECK_MODULES(LIBASSUAN, [libassuan >= $min_libassuan_version], [ok=yes], [ok=no])
 
   if test $ok = yes; then
     if test "$req_libassuan_api" -gt 0 ; then
-      if test -z "$use_gpgrt_config"; then
-        tmp=`$LIBASSUAN_CONFIG --api-version 2>/dev/null || echo 0`
-      else
-        tmp=`$LIBASSUAN_CONFIG --variable=api_version 2>/dev/null || echo 0`
-      fi
+      tmp=`$PKG_CONFIG --variable=api_version libassuan`
       if test "$tmp" -gt 0 ; then
         AC_MSG_CHECKING([LIBASSUAN API version])
         if test "$req_libassuan_api" -eq "$tmp" ; then
@@ -115,9 +46,7 @@ AC_DEFUN([_AM_PATH_LIBASSUAN_COMMON],
   if test $ok = yes; then
     if test x"$host" != x ; then
       if test -z "$use_gpgrt_config"; then
-        libassuan_config_host=`$LIBASSUAN_CONFIG --host 2>/dev/null || echo none`
-      else
-        libassuan_config_host=`$LIBASSUAN_CONFIG --variable=host 2>/dev/null || echo none`
+        libassuan_config_host=`$PKG_CONFIG --variable=host libassuan`
       fi
       if test x"$libassuan_config_host" != xnone ; then
         if test x"$libassuan_config_host" != x"$host" ; then
@@ -159,12 +88,8 @@ dnl
 AC_DEFUN([AM_PATH_LIBASSUAN],
 [ _AM_PATH_LIBASSUAN_COMMON($1)
   if test $ok = yes; then
-    LIBASSUAN_CFLAGS=`$LIBASSUAN_CONFIG --cflags`
-    LIBASSUAN_LIBS=`$LIBASSUAN_CONFIG --libs`
     ifelse([$2], , :, [$2])
   else
-    LIBASSUAN_CFLAGS=""
-    LIBASSUAN_LIBS=""
     ifelse([$3], , :, [$3])
   fi
   AC_SUBST(LIBASSUAN_CFLAGS)
-- 
2.25.1

