%bcond check 1 # No Qt5 on RHEL 10 and higher %bcond qt5 %[ 0%{?rhel} < 10 ] %bcond qt6 1 %global gnupg2_min_ver 2.2.24 %global libgpg_error_min_ver 1.36 # we are doing out of source build %global _configure ../configure Name: gpgme Summary: GnuPG Made Easy - high level crypto API Version: 1.23.2 Release: %autorelease # MIT: src/cJSON.{c,h} (used by gpgme-json) License: LGPL-2.1-or-later AND MIT URL: https://gnupg.org/related_software/gpgme/ Source0: https://gnupg.org/ftp/gcrypt/gpgme/gpgme-%{version}.tar.bz2 Source1: https://gnupg.org/ftp/gcrypt/gpgme/gpgme-%{version}.tar.bz2.sig Source3: https://gnupg.org/signature_key.asc Source2: gpgme-multilib.h ## downstream patches # Don't add extra libs/cflags in gpgme-config/cmake equivalent Patch1001: 0001-don-t-add-extra-libraries-for-linking.patch # add -D_FILE_OFFSET_BITS... to gpgme-config, upstreamable Patch1002: gpgme-1.3.2-largefile.patch # Let's fix stupid AX_PYTHON_DEVEL Patch1003: 0001-fix-stupid-ax_python_devel.patch # Allow extra options to be passed to setup.py during installation Patch1004: 0002-setup_py_extra_opts.patch ## temporary downstream fixes # Skip lang/qt/tests/t-remarks on gnupg 2.4+ Patch3001: 1001-qt-skip-test-remarks-for-gnupg2-2.4.patch BuildRequires: make BuildRequires: cmake BuildRequires: gcc BuildRequires: gcc-c++ BuildRequires: gawk BuildRequires: texinfo BuildRequires: gnupg2 >= %{gnupg2_min_ver} BuildRequires: gnupg2-smime BuildRequires: libgpg-error-devel >= %{libgpg_error_min_ver} BuildRequires: libassuan-devel >= 2.4.2 # For python bindings BuildRequires: swig # to remove RPATH BuildRequires: chrpath # For AutoReq cmake-filesystem BuildRequires: cmake Requires: gnupg2 >= %{gnupg2_min_ver} # On the following architectures workaround multiarch conflict of -devel packages: %define multilib_arches %{ix86} x86_64 ia64 ppc ppc64 s390 s390x %{sparc} %description 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. %package devel Summary: Development headers and libraries for %{name} Requires: %{name}%{?_isa} = %{?epoch:%{epoch}:}%{version}-%{release} Requires: libgpg-error-devel%{?_isa} >= %{libgpg_error_min_ver} %description devel %{summary}. %package -n %{name}pp Summary: C++ bindings/wrapper for GPGME Obsoletes: gpgme-pp < 1.8.0-7 Provides: gpgme-pp = %{?epoch:%{epoch}:}%{version}-%{release} Provides: gpgme-pp%{?_isa} = %{?epoch:%{epoch}:}%{version}-%{release} Requires: %{name}%{?_isa} = %{?epoch:%{epoch}:}%{version}-%{release} %description -n %{name}pp %{summary}. %package -n %{name}pp-devel Summary: Development libraries and header files for %{name}-pp Obsoletes: gpgme-pp-devel < 1.8.0-7 Provides: gpgme-pp-devel = %{?epoch:%{epoch}:}%{version}-%{release} Provides: gpgme-pp-devel%{?_isa} = %{?epoch:%{epoch}:}%{version}-%{release} Requires: %{name}pp%{?_isa} = %{?epoch:%{epoch}:}%{version}-%{release} Requires: %{name}-devel%{?_isa} %description -n %{name}pp-devel %{summary} %if %{with qt5} %package -n q%{name}-qt5 Summary: Qt5 API bindings/wrapper for GPGME Requires: %{name}pp%{?_isa} = %{?epoch:%{epoch}:}%{version}-%{release} BuildRequires: pkgconfig(Qt5Core) BuildRequires: pkgconfig(Qt5Test) Obsoletes: q%{name} < 1.20.0 Provides: q%{name} %description -n q%{name}-qt5 %{summary}. %endif %if %{with qt6} %package -n q%{name}-qt6 Summary: Qt6 API bindings/wrapper for GPGME Requires: %{name}pp%{?_isa} = %{?epoch:%{epoch}:}%{version}-%{release} BuildRequires: pkgconfig(Qt6Core) BuildRequires: pkgconfig(Qt6Test) %description -n q%{name}-qt6 %{summary}. %endif %if %{with qt5} || %{with qt6} %package -n q%{name}-common-devel Summary: Common development header files for %{name}-qt5 and %{name}-qt6 Requires: %{name}pp-devel%{?_isa} %description -n q%{name}-common-devel %{summary}. %endif %if %{with qt5} %package -n q%{name}-qt5-devel Summary: Development libraries and header files for %{name}-qt5 # before libqgpgme.so symlink was moved to avoid conflict Conflicts: kdepimlibs-devel < 4.14.10-17 Requires: q%{name}-qt5%{?_isa} = %{?epoch:%{epoch}:}%{version}-%{release} Requires: q%{name}-common-devel%{?_isa} Obsoletes: q%{name}-devel < 1.20.0 Provides: q%{name}-devel = %{?epoch:%{epoch}:}%{version}-%{release} Provides: q%{name}-devel%{?_isa} = %{?epoch:%{epoch}:}%{version}-%{release} %description -n q%{name}-qt5-devel %{summary}. %endif %if %{with qt6} %package -n q%{name}-qt6-devel Summary: Development libraries and header files for %{name}-qt6 Requires: q%{name}-qt6%{?_isa} = %{?epoch:%{epoch}:}%{version}-%{release} Requires: q%{name}-common-devel%{?_isa} %description -n q%{name}-qt6-devel %{summary}. %endif %package -n python3-gpg Summary: %{name} bindings for Python 3 BuildRequires: python3-devel # Needed since Python 3.12+ drops distutils BuildRequires: python3-setuptools Requires: %{name}%{?_isa} = %{?epoch:%{epoch}:}%{version}-%{release} Obsoletes: platform-python-gpg < %{version}-%{release} %description -n python3-gpg %{summary}. %prep %autosetup -p1 gpg2 --import --import-options import-export,import-minimal %{SOURCE3} > ./gpg-keyring.gpg gpgv2 --keyring ./gpg-keyring.gpg %{SOURCE1} %{SOURCE0} ## HACK ALERT # The config script already suppresses the -L if it's /usr/lib, so cheat and # set it to a value which we know will be suppressed. sed -i -e 's|^libdir=@libdir@$|libdir=@exec_prefix@/lib|g' src/gpgme-config.in # The build machinery does not support Python 3.9+ yet # https://github.com/gpg/gpgme/pull/4 sed -i 's/3.8/%{python3_version}/g' configure %build # People neeed to learn that you can't run autogen.sh anymore #./autogen.sh # Since 1.16.0, we need to explicitly pass -D_LARGEFILE_SOURCE and # -D_FILE_OFFSET_BITS=64 for the QT binding to build successfully on 32-bit # platforms. export CFLAGS='%{optflags} -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64' export CXXFLAGS='%{optflags} -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64' # Explicit new lines in C(XX)FLAGS can break naive build scripts export CFLAGS="$(echo ${CFLAGS} | tr '\n\\' ' ')" export CXXFLAGS="$(echo ${CXXFLAGS} | tr '\n\\' ' ')" export SETUPTOOLS_USE_DISTUTILS=local #export PYTHON=%{python3} #export PYTHON_VERSION=%{python3_version} # Also build either qt5 or qt6 mkdir build pushd build %configure --disable-static --disable-silent-rules --enable-languages=cpp,%{?with_qt5:qt,}%{!?with_qt5:%{?with_qt6:qt6,}}python %make_build popd # Build qt6 in extra step if qt5 has been build %if %{with qt5} && %{with qt6} mkdir build-qt6 pushd build-qt6 %configure --disable-static --disable-silent-rules --enable-languages=cpp,qt6,python %make_build popd %endif %install # When using distutils from setuptools 60+, ./setup.py install use # the .egg format. This forces setuptools to use .egg-info format. # SETUP_PY_EXTRA_OPTS is introduced by the Patch1004 above. export SETUPTOOLS_USE_DISTUTILS=local export SETUP_PY_EXTRA_OPTS="--single-version-externally-managed --root=/" # Aliso install either qt5 or qt6 pushd build %make_install popd # Install qt6 in extra step if qt5 has been installed %if %{with qt5} && %{with qt6} pushd build-qt6 %make_install popd %endif # unpackaged files rm -fv %{buildroot}%{_infodir}/dir rm -fv %{buildroot}%{_libdir}/lib*.la # Hack to resolve multiarch conflict (#341351) %ifarch %{multilib_arches} mv %{buildroot}%{_bindir}/gpgme-config{,.%{_target_cpu}} cat > gpgme-config-multilib.sh <<__END__ #!/bin/sh exec %{_bindir}/gpgme-config.\$(arch) \$@ __END__ install -D -p gpgme-config-multilib.sh %{buildroot}%{_bindir}/gpgme-config mv %{buildroot}%{_includedir}/gpgme.h \ %{buildroot}%{_includedir}/gpgme-%{__isa_bits}.h install -m644 -p -D %{SOURCE2} %{buildroot}%{_includedir}/gpgme.h %endif chrpath -d %{buildroot}%{_bindir}/%{name}-tool chrpath -d %{buildroot}%{_bindir}/%{name}-json chrpath -d %{buildroot}%{_libdir}/lib%{name}pp.so* # qt5 %if %{with qt5} chrpath -d %{buildroot}%{_libdir}/libq%{name}.so* %endif # qt6 %if %{with qt6} chrpath -d %{buildroot}%{_libdir}/libq%{name}qt6.so* %endif # autofoo installs useless stuff for uninstall rm -vf %{buildroot}%{python2_sitelib}/gpg/install_files.txt rm -vf %{buildroot}%{python3_sitelib}/gpg/install_files.txt %if %{with check} %check pushd build make check popd %endif %files %license COPYING* LICENSES %doc AUTHORS NEWS README* %{_bindir}/%{name}-json %{_libdir}/lib%{name}.so.11* %files devel %{_bindir}/%{name}-config %{_bindir}/%{name}-tool %ifarch %{multilib_arches} %{_bindir}/%{name}-config.%{_target_cpu} %{_includedir}/%{name}-%{__isa_bits}.h %endif %{_includedir}/%{name}.h %{_libdir}/lib%{name}.so %{_datadir}/aclocal/%{name}.m4 %{_infodir}/%{name}.info* %{_libdir}/pkgconfig/%{name}*.pc %files -n %{name}pp %doc lang/cpp/README %{_libdir}/lib%{name}pp.so.6* %files -n %{name}pp-devel %{_includedir}/%{name}++/ %{_libdir}/lib%{name}pp.so %{_libdir}/cmake/Gpgmepp/ %if %{with qt5} %files -n q%{name}-qt5 %doc lang/qt/README %{_libdir}/libq%{name}.so.15* %endif %if %{with qt6} %files -n q%{name}-qt6 %{_libdir}/libq%{name}qt6.so.15* %endif %if %{with qt5} || %{with qt6} %files -n q%{name}-common-devel %{_includedir}/q%{name}/ %{_includedir}/QGpgME/ %endif %if %{with qt5} %files -n q%{name}-qt5-devel %{_libdir}/libq%{name}.so %{_libdir}/cmake/QGpgme/ %endif %if %{with qt6} %files -n q%{name}-qt6-devel %{_libdir}/libq%{name}qt6.so %{_libdir}/cmake/QGpgmeQt6/ %endif %files -n python3-gpg %doc lang/python/README %{python3_sitearch}/gpg-*.egg-info/ %{python3_sitearch}/gpg/ %changelog %autochangelog