Convert to pkg-config support to match changes done to
the libassuan recipe for libassuan.pc generation.

Upstream-Status: Inappropriate [OE specific]

Signed-off-by: Armin Kuster <akuster@mvista.com>

Index: pinentry-1.0.0/m4/libassuan.m4
===================================================================
--- pinentry-1.0.0.orig/m4/libassuan.m4
+++ pinentry-1.0.0/m4/libassuan.m4
@@ -13,34 +13,8 @@ dnl
 dnl Common code used for libassuan detection [internal]
 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,
-              AC_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
-    libassuan_config_args="$libassuan_config_args --prefix=$libassuan_config_prefix"
-    if test x${LIBASSUAN_CONFIG+set} != xset ; then
-      LIBASSUAN_CONFIG=$libassuan_config_prefix/bin/libassuan-config
-    fi
-  else
-    case "${SYSROOT}" in
-       /*)
-         if test -x "${SYSROOT}/bin/libassuan-config" ; then
-           LIBASSUAN_CONFIG="${SYSROOT}/bin/libassuan-config"
-         fi
-         ;;
-       '')
-         ;;
-        *)
-         AC_MSG_WARN([Ignoring \$SYSROOT as it is not an absolute path.])
-         ;;
-     esac
-  fi
-
-  AC_PATH_TOOL(LIBASSUAN_CONFIG, libassuan-config, no)
-
+AC_DEFUN([AM_PATH_LIBASSUAN_COMMON],
+[
   tmp=ifelse([$1], ,1:0.9.2,$1)
   if echo "$tmp" | grep ':' >/dev/null 2>/dev/null ; then
     req_libassuan_api=`echo "$tmp"     | sed 's/\(.*\):\(.*\)/\1/'`
@@ -50,51 +24,11 @@ AC_DEFUN([_AM_PATH_LIBASSUAN_COMMON],
     min_libassuan_version="$tmp"
   fi
 
-  AC_MSG_CHECKING(for LIBASSUAN - version >= $min_libassuan_version)
-  ok=no
-  if test "$LIBASSUAN_CONFIG" != "no" \
-     && test -f "$LIBASSUAN_CONFIG" ; 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/'`
-
-    libassuan_config_version=`$LIBASSUAN_CONFIG --version`
-    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_COMMON, [libassuan >= $min_libassuan_version libassuan], [ok=yes], [ok=no])
 
   if test $ok = yes; then
     if test "$req_libassuan_api" -gt 0 ; then
-      tmp=`$LIBASSUAN_CONFIG --api-version 2>/dev/null || echo 0`
+      tmp=`$PKG_CONFIG --variable=api_version libassuan 2>/dev/null || echo 0`
       if test "$tmp" -gt 0 ; then
         AC_MSG_CHECKING([LIBASSUAN API version])
         if test "$req_libassuan_api" -eq "$tmp" ; then
@@ -109,7 +43,7 @@ AC_DEFUN([_AM_PATH_LIBASSUAN_COMMON],
 
   if test $ok = yes; then
     if test x"$host" != x ; then
-      libassuan_config_host=`$LIBASSUAN_CONFIG --host 2>/dev/null || echo none`
+      libassuan_config_host=`$PKG_CONFIG --host libassuan 2>/dev/null || echo 0`
       if test x"$libassuan_config_host" != xnone ; then
         if test x"$libassuan_config_host" != x"$host" ; then
   AC_MSG_WARN([[
@@ -132,7 +66,7 @@ dnl Test whether libassuan has at least
 dnl used to test for features only available in newer versions.
 dnl
 AC_DEFUN([AM_CHECK_LIBASSUAN],
-[ _AM_PATH_LIBASSUAN_COMMON($1)
+[ AM_PATH_LIBASSUAN_COMMON($1)
   if test $ok = yes; then
     ifelse([$2], , :, [$2])
   else
@@ -148,16 +82,10 @@ dnl                   [ACTION-IF-FOUND [
 dnl Test for libassuan and define LIBASSUAN_CFLAGS and LIBASSUAN_LIBS
 dnl
 AC_DEFUN([AM_PATH_LIBASSUAN],
-[ _AM_PATH_LIBASSUAN_COMMON($1)
+[ AM_PATH_LIBASSUAN_COMMON($1)
   if test $ok = yes; then
-    LIBASSUAN_CFLAGS=`$LIBASSUAN_CONFIG $libassuan_config_args --cflags`
-    LIBASSUAN_LIBS=`$LIBASSUAN_CONFIG $libassuan_config_args --libs`
     ifelse([$2], , :, [$2])
   else
-    LIBASSUAN_CFLAGS=""
-    LIBASSUAN_LIBS=""
     ifelse([$3], , :, [$3])
   fi
-  AC_SUBST(LIBASSUAN_CFLAGS)
-  AC_SUBST(LIBASSUAN_LIBS)
 ])
Index: pinentry-1.0.0/configure.ac
===================================================================
--- pinentry-1.0.0.orig/configure.ac
+++ pinentry-1.0.0/configure.ac
@@ -266,8 +266,8 @@ if test "$have_libassuan" = "yes"; then
                      [version of the libassuan library])
 fi
 
-COMMON_CFLAGS="$LIBASSUAN_CFLAGS $COMMON_CFLAGS"
-COMMON_LIBS="$LIBASSUAN_LIBS $COMMON_LIBS"
+COMMON_CFLAGS="$LIBASSUAN_COMMON_CFLAGS $COMMON_CFLAGS"
+COMMON_LIBS="$LIBASSUAN_COMMON_LIBS $COMMON_LIBS"
 
 
 dnl Checks for libsecmem.
