From ec309e20b5a27d42a5fb915c328d61e924ab5f19 Mon Sep 17 00:00:00 2001
From: Hongxu Jia <hongxu.jia@windriver.com>
Date: Thu, 29 Mar 2018 15:12:17 +0800
Subject: [PATCH] support pkgconfig

Upstream-Status: Pending

Rebase to 1.28

Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>

Refactored for 1.33
Signed-off-by: Armin Kuster <akuster808@gmail.com>

---
 configure.ac        |  1 +
 src/gpg-error.m4    | 71 +++--------------------------------------------------
 4 files changed, 18 insertions(+), 69 deletions(-)
 create mode 100644 src/gpg-error.pc.in

Index: libgpg-error-1.33/src/gpg-error.m4
===================================================================
--- libgpg-error-1.33.orig/src/gpg-error.m4
+++ libgpg-error-1.33/src/gpg-error.m4
@@ -26,139 +26,13 @@ dnl is added to the gpg_config_script_wa
 dnl
 AC_DEFUN([AM_PATH_GPG_ERROR],
 [ AC_REQUIRE([AC_CANONICAL_HOST])
-  gpg_error_config_prefix=""
-  dnl --with-libgpg-error-prefix=PFX is the preferred name for this option,
-  dnl since that is consistent with how our three siblings use the directory/
-  dnl package name in --with-$dir_name-prefix=PFX.
-  AC_ARG_WITH(libgpg-error-prefix,
-              AC_HELP_STRING([--with-libgpg-error-prefix=PFX],
-                             [prefix where GPG Error is installed (optional)]),
-              [gpg_error_config_prefix="$withval"])
+  min_gpg_error_version=ifelse([$1], ,0.0,$1)
+  PKG_CHECK_MODULES(GPG_ERROR, [gpg-error >= $min_gpg_error_version], [ok=yes], [ok=no])
 
-  dnl Accept --with-gpg-error-prefix and make it work the same as
-  dnl --with-libgpg-error-prefix above, for backwards compatibility,
-  dnl but do not document this old, inconsistently-named option.
-  AC_ARG_WITH(gpg-error-prefix,,
-              [gpg_error_config_prefix="$withval"])
-
-  if test x"${GPG_ERROR_CONFIG}" = x ; then
-     if test x"${gpg_error_config_prefix}" != x ; then
-        GPG_ERROR_CONFIG="${gpg_error_config_prefix}/bin/gpg-error-config"
-     else
-       case "${SYSROOT}" in
-         /*)
-           if test -x "${SYSROOT}/bin/gpg-error-config" ; then
-             GPG_ERROR_CONFIG="${SYSROOT}/bin/gpg-error-config"
-           fi
-           ;;
-         '')
-           ;;
-          *)
-           AC_MSG_WARN([Ignoring \$SYSROOT as it is not an absolute path.])
-           ;;
-       esac
-     fi
-  fi
-
-  AC_PATH_PROG(GPG_ERROR_CONFIG, gpg-error-config, no)
-  min_gpg_error_version=ifelse([$1], ,1.33,$1)
-  ok=no
-
-  if test "$prefix" = NONE ; then
-    prefix_option_expanded=/usr/local
-  else
-    prefix_option_expanded="$prefix"
-  fi
-  if test "$exec_prefix" = NONE ; then
-    exec_prefix_option_expanded=$prefix_option_expanded
-  else
-    exec_prefix_option_expanded=$(prefix=$prefix_option_expanded eval echo $exec_prefix)
-  fi
-  libdir_option_expanded=$(prefix=$prefix_option_expanded exec_prefix=$exec_prefix_option_expanded eval echo $libdir)
-
-  if test -f $libdir_option_expanded/pkgconfig/gpg-error.pc; then
-    gpgrt_libdir=$libdir_option_expanded
-  else
-    if crt1_path=$(${CC:-cc} -print-file-name=crt1.o 2>/dev/null); then
-      if possible_libdir=$(cd ${crt1_path%/*} && pwd 2>/dev/null); then
-        if test -f $possible_libdir/pkgconfig/gpg-error.pc; then
-          gpgrt_libdir=$possible_libdir
-        fi
-      fi
-    fi
-  fi
-
-  if test "$GPG_ERROR_CONFIG" = "no" -a -n "$gpgrt_libdir"; then
-    AC_PATH_PROG(GPGRT_CONFIG, gpgrt-config, no)
-    if test "$GPGRT_CONFIG" = "no"; then
-      unset GPGRT_CONFIG
-    else
-      GPGRT_CONFIG="$GPGRT_CONFIG --libdir=$gpgrt_libdir"
-      if $GPGRT_CONFIG gpg-error >/dev/null 2>&1; then
-        GPG_ERROR_CONFIG="$GPGRT_CONFIG gpg-error"
-        AC_MSG_NOTICE([Use gpgrt-config with $gpgrt_libdir as gpg-error-config])
-        gpg_error_config_version=`$GPG_ERROR_CONFIG --modversion`
-      else
-        unset GPGRT_CONFIG
-      fi
-    fi
-  else
-    gpg_error_config_version=`$GPG_ERROR_CONFIG --version`
-  fi
-  if test "$GPG_ERROR_CONFIG" != "no"; then
-    req_major=`echo $min_gpg_error_version | \
-               sed 's/\([[0-9]]*\)\.\([[0-9]]*\)/\1/'`
-    req_minor=`echo $min_gpg_error_version | \
-               sed 's/\([[0-9]]*\)\.\([[0-9]]*\)/\2/'`
-    major=`echo $gpg_error_config_version | \
-               sed 's/\([[0-9]]*\)\.\([[0-9]]*\).*/\1/'`
-    minor=`echo $gpg_error_config_version | \
-               sed 's/\([[0-9]]*\)\.\([[0-9]]*\).*/\2/'`
-    if test "$major" -gt "$req_major"; then
-        ok=yes
-    else
-        if test "$major" -eq "$req_major"; then
-            if test "$minor" -ge "$req_minor"; then
-               ok=yes
-            fi
-        fi
-    fi
-    if test -z "$GPGRT_CONFIG" -a -n "$gpgrt_libdir"; then
-      if test "$major" -gt 1 -o "$major" -eq 1 -a "$minor" -ge 33; then
-        AC_PATH_PROG(GPGRT_CONFIG, gpgrt-config, no)
-        if test "$GPGRT_CONFIG" = "no"; then
-          unset GPGRT_CONFIG
-        else
-          GPGRT_CONFIG="$GPGRT_CONFIG --libdir=$gpgrt_libdir"
-          if $GPGRT_CONFIG gpg-error >/dev/null 2>&1; then
-            GPG_ERROR_CONFIG="$GPGRT_CONFIG gpg-error"
-            AC_MSG_NOTICE([Use gpgrt-config with $gpgrt_libdir as gpg-error-config])
-          else
-            unset GPGRT_CONFIG
-          fi
-        fi
-      fi
-    fi
-  fi
-  AC_MSG_CHECKING(for GPG Error - version >= $min_gpg_error_version)
   if test $ok = yes; then
-    GPG_ERROR_CFLAGS=`$GPG_ERROR_CONFIG --cflags`
-    GPG_ERROR_LIBS=`$GPG_ERROR_CONFIG --libs`
-    if test -z "$GPGRT_CONFIG"; then
-      GPG_ERROR_MT_CFLAGS=`$GPG_ERROR_CONFIG --mt --cflags 2>/dev/null`
-      GPG_ERROR_MT_LIBS=`$GPG_ERROR_CONFIG --mt --libs 2>/dev/null`
-    else
-      GPG_ERROR_MT_CFLAGS=`$GPG_ERROR_CONFIG --variable=mtcflags 2>/dev/null`
-      GPG_ERROR_MT_CFLAGS="$GPG_ERROR_CFLAGS${GPG_ERROR_CFLAGS:+ }$GPG_ERROR_MT_CFLAGS"
-      GPG_ERROR_MT_LIBS=`$GPG_ERROR_CONFIG --variable=mtlibs 2>/dev/null`
-      GPG_ERROR_MT_LIBS="$GPG_ERROR_LIBS${GPG_ERROR_LIBS:+ }$GPG_ERROR_MT_LIBS"
-    fi
-    AC_MSG_RESULT([yes ($gpg_error_config_version)])
     ifelse([$2], , :, [$2])
     if test -z "$GPGRT_CONFIG"; then
-      gpg_error_config_host=`$GPG_ERROR_CONFIG --host 2>/dev/null || echo none`
-    else
-      gpg_error_config_host=`$GPG_ERROR_CONFIG --variable=host 2>/dev/null || echo none`
+      gpg_error_config_host=`$PKG_CONFIG --variable=host gpg-error`
     fi
     if test x"$gpg_error_config_host" != xnone ; then
       if test x"$gpg_error_config_host" != x"$host" ; then
@@ -174,15 +48,6 @@ AC_DEFUN([AM_PATH_GPG_ERROR],
       fi
     fi
   else
-    GPG_ERROR_CFLAGS=""
-    GPG_ERROR_LIBS=""
-    GPG_ERROR_MT_CFLAGS=""
-    GPG_ERROR_MT_LIBS=""
-    AC_MSG_RESULT(no)
     ifelse([$3], , :, [$3])
   fi
-  AC_SUBST(GPG_ERROR_CFLAGS)
-  AC_SUBST(GPG_ERROR_LIBS)
-  AC_SUBST(GPG_ERROR_MT_CFLAGS)
-  AC_SUBST(GPG_ERROR_MT_LIBS)
 ])
