# TODO
# - fix config having escaped html entities:
# # package A requires capability foo >= 1.0 while package B provides "foo"
# Conditional build:
%bcond_with static # don't use shared libraries
%bcond_without imode # don't build interactive mode
%bcond_with python # don't build python bindings
%bcond_with tests # tests
# required versions (forced to avoid SEGV with mixed db used by rpm and poldek)
%define ver_rpm 1:4.14
Summary: RPM packages management helper tool
Summary(hu.UTF-8): RPM csomagkezelést segítő eszköz
Summary(pl.UTF-8): Pomocnicze narzędzie do zarządzania pakietami RPM
Name: poldek
Version: 0.42.2
Release: 9
License: GPL v2
Group: Applications/System
#Source0: http://poldek.pld-linux.org/download/snapshots/%{name}-%{version}-cvs%{snap}.tar.bz2
Source0: https://github.com/poldek-pm/poldek/releases/download/v%{version}/%{name}-%{version}.tar.xz
# Source0-md5: 2759fe45bc50efb6084d5338d725411a
Source1: tld.conf
Source2: tld-multilib.conf
Source3: tld-debuginfo.conf
Source4: %{name}-config.sh
Source5: %{name}-aliases.conf
Source6: %{name}.desktop
Source7: %{name}.png
# Source7-md5: ee487abede50874e9eceb6495d5ee150
Patch0: %{name}-config.patch
Patch1: pm-hooks.patch
Patch2: %{name}-ext-down-enable.patch
Patch3: %{name}-pc.patch
Patch4: %{name}-info.patch
Patch5: %{name}-multiarch-x32.patch
Patch6: rpm-4.15.patch
Patch7: db-index-format.patch
Patch8: rpm4-uname-deps.patch
Patch9: sqlite-rpmdb.patch
Patch10: rpm4-cpuinfo-deps.patch
Patch11: rpm4-no-dir-deps.patch
Patch12: rpm4-rpmvercmp.patch
Patch13: trurlib-shared.patch
Patch14: rpm4-script-req-workaround.patch
Patch15: skip-buildid-obsoletes.patch
Patch16: verify-signature.patch
Patch17: %{name}-rsa_sig_rpmorg.patch
Patch18: no-bdb-for-rpm-org.patch
URL: http://poldek.pld-linux.org/
BuildRequires: autoconf >= 2.63
BuildRequires: automake >= 1:1.11
BuildRequires: bzip2-devel
BuildRequires: check-devel
BuildRequires: docbook-dtd412-xml
BuildRequires: docbook2X
BuildRequires: gettext-tools >= 0.11.5
BuildRequires: libgomp-devel
BuildRequires: libtool
BuildRequires: libxml2-devel >= 2
BuildRequires: lua54-devel
BuildRequires: ncurses-devel
BuildRequires: openssl-devel >= 0.9.7d
BuildRequires: pcre-devel
BuildRequires: perl-XML-Simple
BuildRequires: perl-base
BuildRequires: perl-modules
BuildRequires: pkgconfig
BuildRequires: popt-devel
%{?with_python:BuildRequires: python-devel}
BuildRequires: readline-devel >= 5.0
BuildRequires: rpm-devel >= %{ver_rpm}
%{?with_python:BuildRequires: rpm-pythonprov}
BuildRequires: tar >= 1:1.22
BuildRequires: texinfo
BuildRequires: xmlto
BuildRequires: xz
BuildRequires: zlib-devel
BuildRequires: zstd-devel
%if %{with static}
BuildRequires: bzip2-static
BuildRequires: glibc-static
BuildRequires: libxml2-static
BuildRequires: ncurses-static
BuildRequires: openssl-static
BuildRequires: pcre-static
BuildRequires: popt-static
BuildRequires: readline-static
BuildRequires: rpm-static
BuildRequires: zlib-static
BuildRequires: zstd-static
%endif
Requires(postun): awk
Requires(postun): sed >= 4.0
Requires: %{name}-libs = %{version}-%{release}
Requires: /bin/run-parts
Requires: rpm >= %{ver_rpm}
Requires: rpm-lib >= %{ver_rpm}
Requires: sed
Conflicts: etckeeper < 1.18-2
BuildRoot: %{tmpdir}/%{name}-%{version}-root-%(id -u -n)
# it could be %{_libexecdir}/%{name}, but beware of compatibility (path hardcoded in configurations)
%define pkglibexecdir %{_prefix}/lib/%{name}
%description
poldek is an RPM package management tool which allows you to easily
perform package verification, installation (including system
installation from scratch), upgrading, and removal.
Program can be used in batch (like apt-get from Debian's APT) or
interactive mode. The interactive mode puts you into a readline
interface with command line autocompletion and history, similar to the
shell mode of Perl's CPAN.
%{?with_static:This version is statically linked.}
%{!?with_imode:This version hasn't got interactive mode.}
#'vim
%description -l hu.UTF-8
poldek egy RPM csomagkezelő eszköz, amely megkönnyíti a
csomagellenőrzést, telepítést (beleértve a rendszertelepítést a
nulláról), frissítést és eltávolítást.
A program használható parancssorból (mint a Debian apt-get programja)
vagy interaktív módban. Az interaktív mód egy readline környezetet
jelent, parancskiegészítéssel és előzményekkel, hasonlóan a Perl CPAN
shell módjához.
%{?with_static:Ez a verzió statikusan linkelt.}
%{!?with_imode:Ennek a verziónak nincs interaktív módja.}
%description -l pl.UTF-8
poldek jest narzędziem linii poleceń służącym do weryfikacji,
instalacji (włączając instalację systemu od zera), aktualizacji i
usuwania pakietów.
Program może być używany w trybie wsadowym (jak debianowy apt-get) lub
interaktywnym. Tryb interaktywny posiada interfejs readline z
dopełnianiem komend i historią, podobny do trybu shell perlowego
modułu CPAN.
%{?with_static:Ta wersja jest konsolidowana statycznie.}
%{!?with_imode:Ta wersja nie posiada trybu interaktywnego.}
%package libs
Summary: poldek libraries
Summary(hu.UTF-8): A poldek könyvtárai
Summary(pl.UTF-8): Biblioteki poldka
Group: Libraries
%description libs
poldek libraries.
%description libs -l hu.UTF-8
A poldek könyvtárai.
%description libs -l pl.UTF-8
Biblioteki poldka.
%package devel
Summary: Header files for poldek libraries
Summary(hu.UTF-8): A poldek könyvtár fejlesztői fájljai
Summary(pl.UTF-8): Pliki nagłówkowe bibliotek poldka
Group: Development/Libraries
Requires: %{name}-libs = %{version}-%{release}
Requires: rpm-devel >= %{ver_rpm}
%description devel
Header files for poldek libraries.
%description devel -l hu.UTF-8
A poldek könyvtár fejlesztői fájljai.
%description devel -l pl.UTF-8
Pliki nagłówkowe bibliotek poldka.
%package static
Summary: poldek static libraries
Summary(hu.UTF-8): poldek statikus könyvtárak
Summary(pl.UTF-8): Biblioteki statyczne poldka
Group: Development/Libraries
Requires: %{name}-devel = %{version}-%{release}
%description static
poldek static libraries.
%description static -l hu.UTF-8
poldek statikus könyvtárak.
%description static -l pl.UTF-8
Biblioteki statyczne poldka.
%package -n python-poldek
Summary: Python modules for poldek
Summary(hu.UTF-8): Python modulok poldek-hez
Summary(pl.UTF-8): Moduły języka Python dla poldka
Group: Libraries/Python
Requires: %{name}-libs = %{version}-%{release}
Requires: python-libs
%description -n python-poldek
Python modules for poldek.
%description -n python-poldek -l hu.UTF-8
Python modulok poldek-hez.
%description -n python-poldek -l pl.UTF-8
Moduły języka Python dla poldka.
%prep
%setup -q
%patch0 -p1
%patch1 -p1
%patch2 -p1
%patch3 -p1
%patch4 -p1
%patch5 -p1
%patch6 -p1
%patch7 -p1
%patch8 -p1
%patch9 -p1
%patch10 -p1
%patch11 -p1
%patch12 -p1
cd trurlib
%patch13 -p1
cd ..
%patch14 -p1
%patch15 -p1
%patch16 -p1
%patch17 -p1
%patch18 -p1
%{__rm} doc/poldek.info
%{__rm} m4/libtool.m4 m4/lt*.m4
# cleanup backups after patching
find . '(' -name '*~' -o -name '*.orig' ')' -print0 | xargs -0 -r -l512 rm -f
chmod u+x ./configure ./doc/conf-xml2.sh
%build
%{__gettextize}
%{__libtoolize}
%{__aclocal} -I m4
%{__autoheader}
%{__autoconf}
%{__automake}
cd tndb
%{__libtoolize}
%{__aclocal}
%{__autoheader}
%{__autoconf}
%{__automake}
cd ../trurlib
%{__libtoolize}
%{__aclocal}
%{__autoheader}
%{__autoconf}
%{__automake}
cd ..
%configure \
%{?with_static:--enable-static --disable-shared} \
%{!?with_imode:--disable-imode} \
--with-pkglibdir=%{pkglibexecdir} \
--enable-nls \
%{?with_python:--with-python}
%{__make}
%{__make} -C doc poldek.info
%if %{with python}
%{__make} -C python
%endif
%if %{with tests}
%{__make} check
%endif
%install
rm -rf $RPM_BUILD_ROOT
install -d $RPM_BUILD_ROOT/var/cache/%{name}
%{__make} install \
DESTDIR=$RPM_BUILD_ROOT
install -p %{SOURCE4} $RPM_BUILD_ROOT%{_bindir}/poldek-config
%if %{with python}
%{__make} -C python install \
DESTDIR=$RPM_BUILD_ROOT \
py_sitedir=%{py_sitedir}
%endif
%{?with_static:%{__rm} $RPM_BUILD_ROOT%{_bindir}/rpmvercmp}
%ifarch i686 aarch64 %{arm}
%define ftp_arch %{_target_cpu}
%endif
%ifarch %{x8664}
%define ftp_arch x86_64
%define ftp_alt_arch i686
%endif
%define tld_conf %{SOURCE1}
%ifarch %{x8664}
%define tld_multilib_conf %{SOURCE2}
%endif
%define tld_debuginfo_conf %{SOURCE3}
%{__sed} -e 's|%%ARCH%%|%{ftp_arch}|g' < %{tld_conf} > $RPM_BUILD_ROOT%{_sysconfdir}/%{name}/repos.d/tld.conf
%if 0%{?tld_multilib_conf:1}
%{__sed} 's|%%ARCH%%|%{ftp_alt_arch}|g' < %{tld_multilib_conf} > $RPM_BUILD_ROOT%{_sysconfdir}/%{name}/repos.d/tld-multilib.conf
%endif
%{__sed} -e 's|%%ARCH%%|%{ftp_arch}|g' < %{tld_debuginfo_conf} > $RPM_BUILD_ROOT%{_sysconfdir}/%{name}/repos.d/tld-debuginfo.conf
cp -p %{SOURCE5} $RPM_BUILD_ROOT%{_sysconfdir}/%{name}/cli.conf
%if %{with imode}
# add desktop file and icon
install -d $RPM_BUILD_ROOT{%{_desktopdir},%{_pixmapsdir}}
cp -p %{SOURCE6} $RPM_BUILD_ROOT%{_desktopdir}/%{name}.desktop
cp -p %{SOURCE7} $RPM_BUILD_ROOT%{_pixmapsdir}/%{name}.png
%endif
# sources we don't package
%{__rm} $RPM_BUILD_ROOT%{_sysconfdir}/%{name}/{rh,fedora,centos}-source.conf
# include them in %doc
%{__rm} -rf configs
cp -a conf configs
%{__rm} -f configs/Makefile*
%if %{with python}
%py_postclean
%{__rm} $RPM_BUILD_ROOT%{_libdir}/_poldekmod.{la,so}
%endif
%find_lang %{name}
%clean
rm -rf $RPM_BUILD_ROOT
%post
[ ! -x /usr/sbin/fix-info-dir ] || /usr/sbin/fix-info-dir -c %{_infodir} >/dev/null 2>&1
if [ "$1" = "1" ]; then
# remove ignore = vserver-packages inside vserver on first install
{
while read f ctx; do
[ "$f" = "VxID:" -o "$f" = "s_context:" ] && break
done /dev/null
if [ -z "$ctx" -o "$ctx" = "0" ]; then
VSERVER=no
else
VSERVER=yes
fi
if [ "$VSERVER" = "yes" ]; then
%{__sed} -i -e '/^ignore/s/vserver-packages//' %{_sysconfdir}/%{name}/poldek.conf
fi
fi
%postun -p /sbin/postshell
-/usr/sbin/fix-info-dir -c %{_infodir}
%post libs -p /sbin/ldconfig
%postun libs -p /sbin/ldconfig
%triggerpostun -- poldek < 0.30-0.20080225.00.1
if ! grep -q '^%%includedir repos.d' %{_sysconfdir}/%{name}/poldek.conf; then
%{__sed} -i -e '/^%%include source.conf/{
a
a# /etc/poldek/repos.d/*.conf
a%%includedir repos.d
}' %{_sysconfdir}/%{name}/poldek.conf
fi
%{__sed} -i -e '/%%include %%{_distro}-source.conf/d' %{_sysconfdir}/%{name}/poldek.conf
%{__sed} -i -e '/%%include %%{_distro}-multilib-source.conf/d' %{_sysconfdir}/%{name}/poldek.conf
if [ -f %{_sysconfdir}/%{name}/tld-source.conf.rpmsave ]; then
%{__mv} -f %{_sysconfdir}/%{name}/repos.d/tld.conf{,.rpmnew}
%{__mv} -v %{_sysconfdir}/%{name}/tld-source.conf.rpmsave %{_sysconfdir}/%{name}/repos.d/tld.conf
fi
%ifarch %{x8664}
if [ -f %{_sysconfdir}/%{name}/tld-multilib-source.conf.rpmsave ]; then
%{__mv} -f %{_sysconfdir}/%{name}/repos.d/tld-multilib.conf{,.rpmnew}
%{__mv} -v %{_sysconfdir}/%{name}/tld-multilib-source.conf.rpmsave %{_sysconfdir}/%{name}/repos.d/tld-multilib.conf
fi
%endif
%triggerpostun -- %{name} < 0.30.1-8
if [ $1 -le 1 ]; then
# revert change on --downgrade
%{__sed} -i -re 's,^pm command = %{pkglibexecdir}/pm-command.sh,#&,' %{_sysconfdir}/%{name}/%{name}.conf
else
# setup pm command
%{__sed} -i -re 's,#?(pm command =).*,\1 %{pkglibexecdir}/pm-command.sh,' %{_sysconfdir}/%{name}/%{name}.conf
fi
%files -f %{name}.lang
%defattr(644,root,root,755)
%doc ChangeLog README* NEWS configs
%dir %{_sysconfdir}/%{name}
%dir %{_sysconfdir}/%{name}/pre-install.d
%{_sysconfdir}/%{name}/pre-install.d/README
%dir %{_sysconfdir}/%{name}/post-install.d
%{_sysconfdir}/%{name}/post-install.d/README
%dir %{_sysconfdir}/%{name}/repos.d
%config(noreplace) %verify(not md5 mtime size) %{_sysconfdir}/%{name}/cli.conf
%config(noreplace) %verify(not md5 mtime size) %{_sysconfdir}/%{name}/fetch.conf
%config(noreplace) %verify(not md5 mtime size) %{_sysconfdir}/%{name}/poldek.conf
%config(noreplace) %verify(not md5 mtime size) %{_sysconfdir}/%{name}/source.conf
%config(noreplace) %verify(not md5 mtime size) %{_sysconfdir}/%{name}/repos.d/tld.conf
%if 0%{?tld_multilib_conf:1}
%config(noreplace) %verify(not md5 mtime size) %{_sysconfdir}/%{name}/repos.d/tld-multilib.conf
%endif
%config(noreplace) %verify(not md5 mtime size) %{_sysconfdir}/%{name}/repos.d/tld-debuginfo.conf
%attr(755,root,root) %{_bindir}/ipoldek
%attr(755,root,root) %{_bindir}/poldek
%attr(755,root,root) %{_bindir}/poldek-config
%attr(755,root,root) %{_bindir}/rpmvercmp
%dir %{pkglibexecdir}
%attr(755,root,root) %{pkglibexecdir}/pm-command.sh
%attr(755,root,root) %{pkglibexecdir}/poldekuser-setup.sh
%attr(755,root,root) %{pkglibexecdir}/vfcompr
%attr(755,root,root) %{pkglibexecdir}/vfjuggle
%attr(755,root,root) %{pkglibexecdir}/vfsmb
%attr(755,root,root) %{pkglibexecdir}/zlib-in-rpm.sh
%{_mandir}/man1/%{name}*.1*
%lang(pl) %{_mandir}/pl/man1/%{name}*
%{_infodir}/poldek.info*
%if %{with imode}
%{_desktopdir}/%{name}.desktop
%{_pixmapsdir}/%{name}.png
%endif
%dir /var/cache/%{name}
%if %{without static}
%files libs
%defattr(644,root,root,755)
%attr(755,root,root) %{_libdir}/libpoclidek.so.*.*.*
%attr(755,root,root) %{_libdir}/libpoldek.so.*.*.*
%attr(755,root,root) %{_libdir}/libtndb.so.*.*.*
%attr(755,root,root) %{_libdir}/libtrurl.so.*.*.*
%attr(755,root,root) %{_libdir}/libvfile.so.*.*.*
%attr(755,root,root) %ghost %{_libdir}/libpoclidek.so.1
%attr(755,root,root) %ghost %{_libdir}/libpoldek.so.3
%attr(755,root,root) %ghost %{_libdir}/libtndb.so.0
%attr(755,root,root) %ghost %{_libdir}/libtrurl.so.0
%attr(755,root,root) %ghost %{_libdir}/libvfile.so.0
%endif
%files devel
%defattr(644,root,root,755)
%if %{without static}
%attr(755,root,root) %{_libdir}/libpoclidek.so
%attr(755,root,root) %{_libdir}/libpoldek.so
%attr(755,root,root) %{_libdir}/libtndb.so
%attr(755,root,root) %{_libdir}/libtrurl.so
%attr(755,root,root) %{_libdir}/libvfile.so
%endif
%{_libdir}/libpoclidek.la
%{_libdir}/libpoldek.la
%{_libdir}/libtndb.la
%{_libdir}/libtrurl.la
%{_libdir}/libvfile.la
%{_includedir}/poldek
%{_includedir}/tndb
%{_includedir}/trurl
%{_includedir}/vfile
%{_pkgconfigdir}/tndb.pc
%{_pkgconfigdir}/trurlib.pc
%files static
%defattr(644,root,root,755)
%{_libdir}/libtndb.a
%{_libdir}/libtrurl.a
%if %{with python}
%files -n python-poldek
%defattr(644,root,root,755)
%attr(755,root,root) %{py_sitedir}/_poldekmod.so
%{py_sitescriptdir}/poldek.py[co]
%{py_sitescriptdir}/poldekmod.py[co]
%endif