From 0a72874734ceafdf0a9f9e7a96c8b3f88507a54b Mon Sep 17 00:00:00 2001 From: Eli Schwartz Date: Thu, 7 Mar 2019 23:10:38 -0500 Subject: 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 Signed-off-by: Allan McRae --- 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 2f091f69..cb2fb2bf 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 ]], - [[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 ]], + [[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 d443a2b3..cbd4b5d0 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') @@ -341,7 +346,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) -- cgit v1.2.3-55-g3dc8