diff options
Diffstat (limited to 'nixpkgs/pkgs/development/libraries/gpgme')
3 files changed, 433 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/development/libraries/gpgme/default.nix b/nixpkgs/pkgs/development/libraries/gpgme/default.nix new file mode 100644 index 000000000000..6af608995c2f --- /dev/null +++ b/nixpkgs/pkgs/development/libraries/gpgme/default.nix @@ -0,0 +1,129 @@ +{ lib +, stdenv +, fetchurl +, fetchpatch +, autoreconfHook +, libgpg-error +, gnupg +, pkg-config +, glib +, pth +, libassuan +, file +, which +, ncurses +, texinfo +, buildPackages +, qtbase ? null +, pythonSupport ? false +, swig2 ? null +# only for passthru.tests +, libsForQt5 +, python3 +}: +let + inherit (stdenv.hostPlatform) system; +in +stdenv.mkDerivation rec { + pname = "gpgme"; + version = "1.21.0"; + + src = fetchurl { + url = "mirror://gnupg/gpgme/${pname}-${version}.tar.bz2"; + hash = "sha256-QW4XThZXNNhIBiU/jJa9opk/0H8ljDqtXwU6bv1GPog="; + }; + + patches = [ + # Support Python 3.10 version detection without distutils, https://dev.gnupg.org/D545 + ./python-310-detection-without-distutils.patch + # Fix a test after disallowing compressed signatures in gpg (PR #180336) + ./test_t-verify_double-plaintext.patch + ]; + + outputs = [ "out" "dev" "info" ]; + + outputBin = "dev"; # gpgme-config; not so sure about gpgme-tool + + nativeBuildInputs = [ + autoreconfHook + gnupg + pkg-config + texinfo + ] ++ lib.optionals pythonSupport [ + python3.pythonForBuild + ncurses + swig2 + which + ]; + + buildInputs = lib.optionals pythonSupport [ + python3 + ]; + + propagatedBuildInputs = [ + glib + libassuan + libgpg-error + pth + ] ++ lib.optionals (qtbase != null) [ + qtbase + ]; + + nativeCheckInputs = [ + which + ]; + + depsBuildBuild = [ + buildPackages.stdenv.cc + ]; + + dontWrapQtApps = true; + + configureFlags = [ + "--enable-fixed-path=${gnupg}/bin" + "--with-libgpg-error-prefix=${libgpg-error.dev}" + "--with-libassuan-prefix=${libassuan.dev}" + ] ++ lib.optional pythonSupport "--enable-languages=python" + # Tests will try to communicate with gpg-agent instance via a UNIX socket + # which has a path length limit. Nix on darwin is using a build directory + # that already has quite a long path and the resulting socket path doesn't + # fit in the limit. https://github.com/NixOS/nix/pull/1085 + ++ lib.optionals stdenv.isDarwin [ "--disable-gpg-test" ]; + + env.NIX_CFLAGS_COMPILE = toString ( + # qgpgme uses Q_ASSERT which retains build inputs at runtime unless + # debugging is disabled + lib.optional (qtbase != null) "-DQT_NO_DEBUG" + # https://www.gnupg.org/documentation/manuals/gpgme/Largefile-Support-_0028LFS_0029.html + ++ lib.optional stdenv.hostPlatform.is32bit "-D_FILE_OFFSET_BITS=64" + ); + + enableParallelBuilding = true; + + # prevent tests from being run during the buildPhase + makeFlags = [ "tests=" ]; + + doCheck = true; + + checkFlags = [ "-C" "tests" ]; + + passthru.tests = { + python = python3.pkgs.gpgme; + qt = libsForQt5.qgpgme; + }; + + meta = with lib; { + homepage = "https://gnupg.org/software/gpgme/index.html"; + changelog = "https://git.gnupg.org/cgi-bin/gitweb.cgi?p=gpgme.git;f=NEWS;hb=gpgme-${version}"; + description = "Library for making GnuPG easier to use"; + longDescription = '' + GnuPG Made Easy (GPGME) is a library designed to make access to GnuPG + easier for applications. It provides a High-Level Crypto API for + encryption, decryption, signing, signature verification and key + management. + ''; + license = with licenses; [ lgpl21Plus gpl3Plus ]; + platforms = platforms.unix; + maintainers = with maintainers; [ dotlambda ]; + }; +} diff --git a/nixpkgs/pkgs/development/libraries/gpgme/python-310-detection-without-distutils.patch b/nixpkgs/pkgs/development/libraries/gpgme/python-310-detection-without-distutils.patch new file mode 100644 index 000000000000..e0eea9ff0429 --- /dev/null +++ b/nixpkgs/pkgs/development/libraries/gpgme/python-310-detection-without-distutils.patch @@ -0,0 +1,273 @@ +diff --git a/m4/ax_python_devel.m4 b/m4/ax_python_devel.m4 +--- a/m4/ax_python_devel.m4 ++++ b/m4/ax_python_devel.m4 +@@ -1,5 +1,5 @@ + # =========================================================================== +-# https://www.gnu.org/software/autoconf-archive/ax_python_devel.html ++# https://www.gnu.org/software/autoconf-archive/ax_python_devel.html + # =========================================================================== + # + # SYNOPSIS +@@ -12,8 +12,8 @@ + # in your configure.ac. + # + # This macro checks for Python and tries to get the include path to +-# 'Python.h'. It provides the $(PYTHON_CPPFLAGS) and $(PYTHON_LDFLAGS) +-# output variables. It also exports $(PYTHON_EXTRA_LIBS) and ++# 'Python.h'. It provides the $(PYTHON_CPPFLAGS) and $(PYTHON_LIBS) output ++# variables. It also exports $(PYTHON_EXTRA_LIBS) and + # $(PYTHON_EXTRA_LDFLAGS) for embedding Python in your code. + # + # You can search for some particular version of Python by passing a +@@ -67,7 +67,7 @@ + # modified version of the Autoconf Macro, you may extend this special + # exception to the GPL to apply to your modified version as well. + +-#serial 17 ++#serial 23 + + AU_ALIAS([AC_PYTHON_DEVEL], [AX_PYTHON_DEVEL]) + AC_DEFUN([AX_PYTHON_DEVEL],[ +@@ -99,7 +99,7 @@ + This version of the AC@&t@_PYTHON_DEVEL macro + doesn't work properly with versions of Python before + 2.1.0. You may need to re-run configure, setting the +-variables PYTHON_CPPFLAGS, PYTHON_LDFLAGS, PYTHON_SITE_PKG, ++variables PYTHON_CPPFLAGS, PYTHON_LIBS, PYTHON_SITE_PKG, + PYTHON_EXTRA_LIBS and PYTHON_EXTRA_LDFLAGS by hand. + Moreover, to disable this check, set PYTHON_NOVERSIONCHECK + to something else than an empty string. +@@ -135,16 +135,25 @@ + # + # Check if you have distutils, else fail + # +- AC_MSG_CHECKING([for the distutils Python package]) +- ac_distutils_result=`$PYTHON -c "import distutils" 2>&1` +- if test -z "$ac_distutils_result"; then ++ AC_MSG_CHECKING([for the sysconfig Python package]) ++ ac_sysconfig_result=`$PYTHON -c "import sysconfig" 2>&1` ++ if test $? -eq 0; then + AC_MSG_RESULT([yes]) ++ IMPORT_SYSCONFIG="import sysconfig" + else + AC_MSG_RESULT([no]) +- AC_MSG_ERROR([cannot import Python module "distutils". ++ ++ AC_MSG_CHECKING([for the distutils Python package]) ++ ac_sysconfig_result=`$PYTHON -c "from distutils import sysconfig" 2>&1` ++ if test $? -eq 0; then ++ AC_MSG_RESULT([yes]) ++ IMPORT_SYSCONFIG="from distutils import sysconfig" ++ else ++ AC_MSG_ERROR([cannot import Python module "distutils". + Please check your Python installation. The error was: +-$ac_distutils_result]) +- PYTHON_VERSION="" ++$ac_sysconfig_result]) ++ PYTHON_VERSION="" ++ fi + fi + + # +@@ -152,10 +161,19 @@ + # + AC_MSG_CHECKING([for Python include path]) + if test -z "$PYTHON_CPPFLAGS"; then +- python_path=`$PYTHON -c "import distutils.sysconfig; \ +- print (distutils.sysconfig.get_python_inc ());"` +- plat_python_path=`$PYTHON -c "import distutils.sysconfig; \ +- print (distutils.sysconfig.get_python_inc (plat_specific=1));"` ++ if test "$IMPORT_SYSCONFIG" = "import sysconfig"; then ++ # sysconfig module has different functions ++ python_path=`$PYTHON -c "$IMPORT_SYSCONFIG; \ ++ print (sysconfig.get_path ('include'));"` ++ plat_python_path=`$PYTHON -c "$IMPORT_SYSCONFIG; \ ++ print (sysconfig.get_path ('platinclude'));"` ++ else ++ # old distutils way ++ python_path=`$PYTHON -c "$IMPORT_SYSCONFIG; \ ++ print (sysconfig.get_python_inc ());"` ++ plat_python_path=`$PYTHON -c "$IMPORT_SYSCONFIG; \ ++ print (sysconfig.get_python_inc (plat_specific=1));"` ++ fi + if test -n "${python_path}"; then + if test "${plat_python_path}" != "${python_path}"; then + python_path="-I$python_path -I$plat_python_path" +@@ -172,14 +190,14 @@ + # Check for Python library path + # + AC_MSG_CHECKING([for Python library path]) +- if test -z "$PYTHON_LDFLAGS"; then ++ if test -z "$PYTHON_LIBS"; then + # (makes two attempts to ensure we've got a version number + # from the interpreter) + ac_python_version=`cat<<EOD | $PYTHON - + + # join all versioning strings, on some systems + # major/minor numbers could be in different list elements +-from distutils.sysconfig import * ++from sysconfig import * + e = get_config_var('VERSION') + if e is not None: + print(e) +@@ -197,7 +215,7 @@ + # Make the versioning information available to the compiler + + # JW: We don't need it and it interferes with the hack +- # to detect multiple Pyhton versions ++ # to detect multiple Python versions + #AC_DEFINE_UNQUOTED([HAVE_PYTHON], ["$ac_python_version"], + # [If available, contains the Python version number currently in use.]) + +@@ -205,8 +223,8 @@ + ac_python_libdir=`cat<<EOD | $PYTHON - + + # There should be only one +-import distutils.sysconfig +-e = distutils.sysconfig.get_config_var('LIBDIR') ++$IMPORT_SYSCONFIG ++e = sysconfig.get_config_var('LIBDIR') + if e is not None: + print (e) + EOD` +@@ -214,8 +232,8 @@ + # Now, for the library: + ac_python_library=`cat<<EOD | $PYTHON - + +-import distutils.sysconfig +-c = distutils.sysconfig.get_config_vars() ++$IMPORT_SYSCONFIG ++c = sysconfig.get_config_vars() + if 'LDVERSION' in c: + print ('python'+c[['LDVERSION']]) + else: +@@ -230,44 +248,67 @@ + then + # use the official shared library + ac_python_library=`echo "$ac_python_library" | sed "s/^lib//"` +- PYTHON_LDFLAGS="-L$ac_python_libdir -l$ac_python_library" ++ PYTHON_LIBS="-L$ac_python_libdir -l$ac_python_library" + else + # old way: use libpython from python_configdir + ac_python_libdir=`$PYTHON -c \ +- "from distutils.sysconfig import get_python_lib as f; \ ++ "from sysconfig import get_python_lib as f; \ + import os; \ + print (os.path.join(f(plat_specific=1, standard_lib=1), 'config'));"` +- PYTHON_LDFLAGS="-L$ac_python_libdir -lpython$ac_python_version" ++ PYTHON_LIBS="-L$ac_python_libdir -lpython$ac_python_version" + fi + +- if test -z "PYTHON_LDFLAGS"; then ++ if test -z "PYTHON_LIBS"; then + AC_MSG_ERROR([ + Cannot determine location of your Python DSO. Please check it was installed with +- dynamic libraries enabled, or try setting PYTHON_LDFLAGS by hand. ++ dynamic libraries enabled, or try setting PYTHON_LIBS by hand. + ]) + fi + fi +- AC_MSG_RESULT([$PYTHON_LDFLAGS]) +- AC_SUBST([PYTHON_LDFLAGS]) ++ AC_MSG_RESULT([$PYTHON_LIBS]) ++ AC_SUBST([PYTHON_LIBS]) + + # + # Check for site packages + # + AC_MSG_CHECKING([for Python site-packages path]) + if test -z "$PYTHON_SITE_PKG"; then +- PYTHON_SITE_PKG=`$PYTHON -c "import distutils.sysconfig; \ +- print (distutils.sysconfig.get_python_lib(0,0));"` ++ if test "$IMPORT_SYSCONFIG" = "import sysconfig"; then ++ PYTHON_SITE_PKG=`$PYTHON -c "$IMPORT_SYSCONFIG; \ ++ print (sysconfig.get_path('purelib'));"` ++ else ++ # distutils.sysconfig way ++ PYTHON_SITE_PKG=`$PYTHON -c "$IMPORT_SYSCONFIG; \ ++ print (sysconfig.get_python_lib(0,0));"` ++ fi + fi + AC_MSG_RESULT([$PYTHON_SITE_PKG]) + AC_SUBST([PYTHON_SITE_PKG]) + ++ # ++ # Check for platform-specific site packages ++ # ++ AC_MSG_CHECKING([for Python platform specific site-packages path]) ++ if test -z "$PYTHON_SITE_PKG"; then ++ if test "$IMPORT_SYSCONFIG" = "import sysconfig"; then ++ PYTHON_PLATFORM_SITE_PKG=`$PYTHON -c "$IMPORT_SYSCONFIG; \ ++ print (sysconfig.get_path('platlib'));"` ++ else ++ # distutils.sysconfig way ++ PYTHON_PLATFORM_SITE_PKG=`$PYTHON -c "$IMPORT_SYSCONFIG; \ ++ print (sysconfig.get_python_lib(1,0));"` ++ fi ++ fi ++ AC_MSG_RESULT([$PYTHON_PLATFORM_SITE_PKG]) ++ AC_SUBST([PYTHON_PLATFORM_SITE_PKG]) ++ + # + # libraries which must be linked in when embedding + # + AC_MSG_CHECKING(python extra libraries) + if test -z "$PYTHON_EXTRA_LIBS"; then +- PYTHON_EXTRA_LIBS=`$PYTHON -c "import distutils.sysconfig; \ +- conf = distutils.sysconfig.get_config_var; \ ++ PYTHON_EXTRA_LIBS=`$PYTHON -c "$IMPORT_SYSCONFIG; \ ++ conf = sysconfig.get_config_var; \ + print (conf('LIBS') + ' ' + conf('SYSLIBS'))"` + fi + AC_MSG_RESULT([$PYTHON_EXTRA_LIBS]) +@@ -278,8 +319,8 @@ + # + AC_MSG_CHECKING(python extra linking flags) + if test -z "$PYTHON_EXTRA_LDFLAGS"; then +- PYTHON_EXTRA_LDFLAGS=`$PYTHON -c "import distutils.sysconfig; \ +- conf = distutils.sysconfig.get_config_var; \ ++ PYTHON_EXTRA_LDFLAGS=`$PYTHON -c "$IMPORT_SYSCONFIG; \ ++ conf = sysconfig.get_config_var; \ + print (conf('LINKFORSHARED'))"` + fi + AC_MSG_RESULT([$PYTHON_EXTRA_LDFLAGS]) +@@ -291,8 +332,10 @@ + AC_MSG_CHECKING([consistency of all components of python development environment]) + # save current global flags + ac_save_LIBS="$LIBS" ++ ac_save_LDFLAGS="$LDFLAGS" + ac_save_CPPFLAGS="$CPPFLAGS" +- LIBS="$ac_save_LIBS $PYTHON_LDFLAGS $PYTHON_EXTRA_LDFLAGS $PYTHON_EXTRA_LIBS" ++ LIBS="$ac_save_LIBS $PYTHON_LIBS $PYTHON_EXTRA_LIBS $PYTHON_EXTRA_LIBS" ++ LDFLAGS="$ac_save_LDFLAGS $PYTHON_EXTRA_LDFLAGS" + CPPFLAGS="$ac_save_CPPFLAGS $PYTHON_CPPFLAGS" + AC_LANG_PUSH([C]) + AC_LINK_IFELSE([ +@@ -303,15 +346,17 @@ + # turn back to default flags + CPPFLAGS="$ac_save_CPPFLAGS" + LIBS="$ac_save_LIBS" ++ LDFLAGS="$ac_save_LDFLAGS" + + AC_MSG_RESULT([$pythonexists]) + + if test ! "x$pythonexists" = "xyes"; then ++ # gpgme: only warn here, no error, as we are looking for multiple versions + AC_MSG_WARN([ + Could not link test program to Python. Maybe the main Python library has been + installed in some non-standard library path. If so, pass it to configure, +- via the LDFLAGS environment variable. +- Example: ./configure LDFLAGS="-L/usr/non-standard-path/python/lib" ++ via the LIBS environment variable. ++ Example: ./configure LIBS="-L/usr/non-standard-path/python/lib" + ============================================================================ + You probably have to install the development version of the Python package + for your distribution. The exact name of this package varies among them. +@@ -323,4 +368,4 @@ + # + # all done! + # +-]) ++]) +\ No newline at end of file + diff --git a/nixpkgs/pkgs/development/libraries/gpgme/test_t-verify_double-plaintext.patch b/nixpkgs/pkgs/development/libraries/gpgme/test_t-verify_double-plaintext.patch new file mode 100644 index 000000000000..8f866af0da91 --- /dev/null +++ b/nixpkgs/pkgs/development/libraries/gpgme/test_t-verify_double-plaintext.patch @@ -0,0 +1,31 @@ +--- a/tests/gpg/t-verify.c ++++ b/tests/gpg/t-verify.c +@@ -304,7 +304,7 @@ + err = gpgme_data_new (&text); + fail_if_err (err); + err = gpgme_op_verify (ctx, sig, NULL, text); +- if (gpgme_err_code (err) != GPG_ERR_BAD_DATA) ++ if (gpgme_err_code (err) == GPG_ERR_NO_ERROR) + { + fprintf (stderr, "%s:%i: Double plaintext message not detected\n", + PGM, __LINE__); +--- a/lang/python/tests/t-verify.py ++++ b/lang/python/tests/t-verify.py +@@ -142,7 +142,7 @@ + c.op_verify(sig, None, text) + except Exception as e: + assert type(e) == gpg.errors.GPGMEError +- assert e.getcode() == gpg.errors.BAD_DATA ++ assert e.getcode() != gpg.errors.NO_ERROR + else: + assert False, "Expected an error but got none." + +@@ -178,7 +178,7 @@ + try: + c.verify(double_plaintext_sig) + except gpg.errors.GPGMEError as e: +- assert e.getcode() == gpg.errors.BAD_DATA ++ assert e.getcode() != gpg.errors.NO_ERROR + else: + assert False, "Expected an error but got none." + |