[pacman-dev] [PATCH] build: check for gpgme with pkg-config before gpgme-config
gpgme in git master now supports pkg-config and with the next release we can and should prefer its use. However, retain the legacy code that enables building with older versions of gpgme, as a fallback. Signed-off-by: Eli Schwartz <eschwartz@archlinux.org> --- Since we seem headed for a release soon, I'd like to get this in now even though gpgme is still unreleased. configure.ac | 68 +++++++++++++++++++++------------------ lib/libalpm/libalpm.pc.in | 4 +-- meson.build | 49 +++++++++++++++------------- 3 files changed, 66 insertions(+), 55 deletions(-) diff --git a/configure.ac b/configure.ac index 2f345b5d..74bf8c1f 100644 --- a/configure.ac +++ b/configure.ac @@ -268,37 +268,43 @@ AS_IF([test "x$with_gpgme" != "xno"], [AC_MSG_RESULT([no])]) have_gpgme=no -AS_IF([test "x$with_gpgme" != "xno"], - [AM_PATH_GPGME([1.3.0], - [LIBS_save="$LIBS" - CPPFLAGS_save="$CPPFLAGS" - CFLAGS_save="$CFLAGS" - - LIBS="$LIBS $GPGME_LIBS" - CPPFLAGS="$CPPFLAGS $GPGME_CPPFLAGS" - CFLAGS="$CFLAGS $GPGME_CFLAGS" - - AC_MSG_CHECKING([for sane gpgme]) - AC_LINK_IFELSE( - [AC_LANG_PROGRAM( - [[#include <gpgme.h>]], - [[return gpgme_check_version("1.3.0");]])], - [AC_MSG_RESULT([yes]) - have_gpgme=yes - AC_DEFINE([HAVE_LIBGPGME], [1], [Define if gpgme should be used to provide GPG signature support.])], - [AC_MSG_RESULT([no]) - have_gpgme=no - unset GPGME_LIBS - unset GPGME_CFLAGS] - AS_IF([test "x$with_gpgme" = "xyes"], - [AC_MSG_FAILURE([*** gpgme >= 1.3.0 is needed for GPG signature support])]) - ) - - LIBS="$LIBS_save" - CPPFLAGS="$CPPFLAGS_save" - CFLAGS="$CFLAGS_save" - unset CPPFLAGS_save - unset CFLAGS_save],)]) +if test "x$with_gpgme" != "xno"; then + PKG_CHECK_MODULES(GPGME, [gpgme], + [AC_DEFINE([HAVE_LIBGPGME], [1], [Define if gpgme should be used to provide GPG signature support.]) + AC_SUBST(pc_gpgme, [gpgme]) + have_gpgme=yes], + [AM_PATH_GPGME([1.3.0], + [LIBS_save="$LIBS" + CPPFLAGS_save="$CPPFLAGS" + CFLAGS_save="$CFLAGS" + + LIBS="$LIBS $GPGME_LIBS" + CPPFLAGS="$CPPFLAGS $GPGME_CPPFLAGS" + CFLAGS="$CFLAGS $GPGME_CFLAGS" + + AC_MSG_CHECKING([for sane gpgme]) + AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[#include <gpgme.h>]], + [[return gpgme_check_version("1.3.0");]])], + [AC_MSG_RESULT([yes]) + have_gpgme=yes + AC_DEFINE([HAVE_LIBGPGME], [1], [Define if gpgme should be used to provide GPG signature support.]) + AC_SUBST(pc_gpgme_libs, ["$GPGME_LIBS"])], + [AC_MSG_RESULT([no]) + have_gpgme=no + unset GPGME_LIBS + unset GPGME_CFLAGS] + AS_IF([test "x$with_gpgme" = "xyes"], + [AC_MSG_FAILURE([*** gpgme >= 1.3.0 is needed for GPG signature support])]) + ) + + LIBS="$LIBS_save" + CPPFLAGS="$CPPFLAGS_save" + CFLAGS="$CFLAGS_save" + unset CPPFLAGS_save + unset CFLAGS_save],)]) +fi AS_IF([test "x$have_gpgme" = xno -a "x$with_gpgme" = xyes], [AC_MSG_FAILURE([--with-gpgme was given, but gpgme was not found])]) diff --git a/lib/libalpm/libalpm.pc.in b/lib/libalpm/libalpm.pc.in index 6b905747..126a6e6a 100644 --- a/lib/libalpm/libalpm.pc.in +++ b/lib/libalpm/libalpm.pc.in @@ -7,7 +7,7 @@ Name: libalpm Description: Arch Linux package management library URL: http://www.archlinux.org/pacman/ Version: @LIB_VERSION@ -Requires.private: libarchive @pc_crypto@ @pc_libcurl@ +Requires.private: libarchive @pc_crypto@ @pc_libcurl@ @pc_gpgme@ Cflags: -I${includedir} @LFS_CFLAGS@ Libs: -L${libdir} -lalpm -Libs.private: @LIBS@ @GPGME_LIBS@ +Libs.private: @LIBS@ @pc_gpgme_libs@ diff --git a/meson.build b/meson.build index b810e2fb..5512913a 100644 --- a/meson.build +++ b/meson.build @@ -98,29 +98,34 @@ libcurl = dependency('libcurl', conf.set('HAVE_LIBCURL', libcurl.found()) want_gpgme = get_option('gpgme') -gpgme_config = find_program('gpgme-config', required : want_gpgme) -if not want_gpgme.disabled() and gpgme_config.found() - gpgme_version = run_command(gpgme_config, '--version').stdout().strip() - - needed_gpgme_version = '>=1.3.0' - have = gpgme_version.version_compare(needed_gpgme_version) - if want_gpgme.enabled() and not have - error('gpgme @0@ is needed for GPG signature support'.format(needed_gpgme_version)) +gpgme = dependency('gpgme', + required : false, + static : get_option('buildstatic')) +# gpgme recently began providing a pkg-config file. Create a fake dependency +# object if it cannot be found, by manually searching for libs. +if not want_gpgme.disabled() and not gpgme.found() + gpgme_config = find_program('gpgme-config', required : want_gpgme) + if gpgme_config.found() + gpgme_version = run_command(gpgme_config, '--version').stdout().strip() + + needed_gpgme_version = '>=1.3.0' + if gpgme_version.version_compare(needed_gpgme_version) + gpgme_libs = [ + cc.find_library('gpgme', + dirs : [get_option('gpgme-libdir')]), + cc.find_library('gpg-error', + dirs : [get_option('gpgme-libdir')]), + cc.find_library('assuan', + dirs : [get_option('gpgme-libdir')]), + ] + gpgme = declare_dependency(dependencies : gpgme_libs) + endif endif +endif - gpgme_libs = [ - cc.find_library('gpgme', required : have, - dirs : [get_option('gpgme-libdir')]), - cc.find_library('gpg-error', required : have, - dirs : [get_option('gpgme-libdir')]), - cc.find_library('assuan', required : have, - dirs : [get_option('gpgme-libdir')]), - ] - - conf.set('HAVE_LIBGPGME', have) -else - gpgme_libs = [] - conf.set('HAVE_LIBGPGME', false) +conf.set('HAVE_LIBGPGME', gpgme.found()) +if want_gpgme.enabled() and not conf.get('HAVE_LIBGPGME') + error('gpgme @0@ is needed for GPG signature support'.format(needed_gpgme_version)) endif want_crypto = get_option('crypto') @@ -359,7 +364,7 @@ libalpm_a = static_library( 'alpm', libalpm_sources, include_directories : includes, - dependencies : [crypto_provider, libarchive, libcurl] + gpgme_libs, + dependencies : [crypto_provider, libarchive, libcurl, gpgme], link_with : [libcommon], install : true) -- 2.21.0
participants (1)
-
Eli Schwartz