db775f43ec
There won't be any support for writing to the bdb backend in f34, so e.g. pkglayering won't work (and obviously even composes wouldn't work once the buildroot moves to f34). Instead of requiring the whole world to add an `rpmdb` key in their manifests, let's just add a compile flag for it, and tweak the spec file to use this flag on f34.
205 lines
6.3 KiB
RPMSpec
205 lines
6.3 KiB
RPMSpec
# The canonical copy of this spec file is upstream at:
|
|
# https://github.com/projectatomic/rpm-ostree/blob/master/packaging/rpm-ostree.spec.in
|
|
|
|
Summary: Hybrid image/package system
|
|
Name: rpm-ostree
|
|
Version: 2020.10
|
|
Release: 1%{?dist}
|
|
#VCS: https://github.com/cgwalters/rpm-ostree
|
|
# This tarball is generated via "cd packaging && make -f Makefile.dist-packaging dist-snapshot"
|
|
# in the upstream git. If rust is enabled, it contains vendored sources.
|
|
Source0: rpm-ostree-%{version}.tar.xz
|
|
License: LGPLv2+
|
|
URL: https://github.com/projectatomic/rpm-ostree
|
|
|
|
ExclusiveArch: %{rust_arches}
|
|
|
|
%if 0%{?rhel} && !0%{?eln}
|
|
BuildRequires: rust-toolset
|
|
%else
|
|
BuildRequires: rust-packaging
|
|
BuildRequires: cargo
|
|
BuildRequires: rust
|
|
%endif
|
|
|
|
# RHEL8 doesn't ship zchunk today. See also the comments
|
|
# in configure.ac around this as libdnf/librepo need to be in
|
|
# sync, and today we bundle libdnf but not librepo.
|
|
%if 0%{?rhel} && 0%{?rhel} <= 8
|
|
%bcond_with zchunk
|
|
%else
|
|
%bcond_without zchunk
|
|
%endif
|
|
|
|
%if 0%{?fedora} >= 34
|
|
%define sqlite_rpmdb_default "--enable-sqlite-rpmdb-default"
|
|
%endif
|
|
|
|
# For the autofiles bits below
|
|
BuildRequires: /usr/bin/python3
|
|
# We always run autogen.sh
|
|
BuildRequires: autoconf automake libtool git
|
|
# For docs
|
|
BuildRequires: chrpath
|
|
BuildRequires: gtk-doc
|
|
BuildRequires: gperf
|
|
BuildRequires: gnome-common
|
|
BuildRequires: /usr/bin/g-ir-scanner
|
|
# Core requirements
|
|
# One way to check this: `objdump -p /path/to/rpm-ostree | grep LIBOSTREE` and pick the highest (though that might miss e.g. new struct members)
|
|
BuildRequires: pkgconfig(ostree-1) >= 2020.7
|
|
BuildRequires: pkgconfig(polkit-gobject-1)
|
|
BuildRequires: pkgconfig(json-glib-1.0)
|
|
BuildRequires: pkgconfig(rpm)
|
|
BuildRequires: pkgconfig(libarchive)
|
|
BuildRequires: pkgconfig(libsystemd)
|
|
BuildRequires: libcap-devel
|
|
BuildRequires: libattr-devel
|
|
|
|
# We currently interact directly with librepo
|
|
BuildRequires: pkgconfig(librepo)
|
|
|
|
# Needed by curl-rust
|
|
BuildRequires: pkgconfig(libcurl)
|
|
|
|
# libdnf bundling
|
|
# We're using RPATH to pick up our bundled version
|
|
%global __requires_exclude ^libdnf[.]so[.].*$
|
|
|
|
# Our bundled libdnf.so.2 is for us only
|
|
%global __provides_exclude_from ^%{_libdir}/%{name}/.*$
|
|
|
|
BuildRequires: cmake
|
|
BuildRequires: pkgconfig(expat)
|
|
BuildRequires: pkgconfig(check)
|
|
BuildRequires: pkgconfig(libsolv)
|
|
|
|
# We need g++ for libdnf
|
|
BuildRequires: gcc-c++
|
|
|
|
|
|
# more libdnf build deps (see libdnf's spec for versions)
|
|
%global swig_version 3.0.12
|
|
%global libmodulemd_version 2.5.0
|
|
BuildRequires: swig >= %{swig_version}
|
|
BuildRequires: pkgconfig(modulemd-2.0) >= %{libmodulemd_version}
|
|
BuildRequires: pkgconfig(json-c)
|
|
BuildRequires: pkgconfig(cppunit)
|
|
BuildRequires: pkgconfig(sqlite3)
|
|
BuildRequires: pkgconfig(smartcols)
|
|
%if %{with zchunk}
|
|
BuildRequires: pkgconfig(zck) >= 0.9.11
|
|
%endif
|
|
BuildRequires: gpgme-devel
|
|
|
|
Requires: libmodulemd%{?_isa} >= %{libmodulemd_version}
|
|
|
|
# For now...see https://github.com/projectatomic/rpm-ostree/pull/637
|
|
# and https://github.com/fedora-infra/fedmsg-atomic-composer/pull/17
|
|
# etc. We'll drop this dependency at some point in the future when
|
|
# rpm-ostree wraps more of ostree (such as `ostree admin unlock` etc.)
|
|
Requires: ostree
|
|
Requires: bubblewrap
|
|
Requires: fuse
|
|
|
|
Requires: %{name}-libs%{?_isa} = %{version}-%{release}
|
|
|
|
%description
|
|
rpm-ostree is a hybrid image/package system. It supports
|
|
"composing" packages on a build server into an OSTree repository,
|
|
which can then be replicated by client systems with atomic upgrades.
|
|
Additionally, unlike many "pure" image systems, with rpm-ostree
|
|
each client system can layer on additional packages, providing
|
|
a "best of both worlds" approach.
|
|
|
|
%package libs
|
|
Summary: Shared library for rpm-ostree
|
|
|
|
%description libs
|
|
The %{name}-libs package includes the shared library for %{name}.
|
|
|
|
%package devel
|
|
Summary: Development headers for %{name}
|
|
Requires: %{name}-libs%{?_isa} = %{version}-%{release}
|
|
|
|
%description devel
|
|
The %{name}-devel package includes the header files for %{name}-libs.
|
|
|
|
%prep
|
|
%autosetup -Sgit -n %{name}-%{version}
|
|
|
|
%build
|
|
# gobject introspection does not work with LTO. There is an effort to fix this
|
|
# in the appropriate project upstreams, so hopefully LTO can be enabled someday
|
|
# Disable LTO.
|
|
%define _lto_cflags %{nil}
|
|
|
|
env NOCONFIGURE=1 ./autogen.sh
|
|
# Since we're hybrid C++/Rust we need to propagate this manually;
|
|
# the %%configure macro today assumes (reasonably) that one is building
|
|
# C/C++ and sets C{,XX}FLAGS
|
|
export RUSTFLAGS="%{build_rustflags}"
|
|
%configure --disable-silent-rules --enable-gtk-doc %{?sqlite_rpmdb_default}
|
|
%make_build
|
|
|
|
%install
|
|
%make_install INSTALL="install -p -c"
|
|
find $RPM_BUILD_ROOT -name '*.la' -delete
|
|
|
|
# I try to do continuous delivery via rpmdistro-gitoverlay while
|
|
# reusing the existing spec files. Currently RPM only supports
|
|
# mandatory file entries. What this is doing is making each file
|
|
# entry optional - if it exists it will be picked up. That
|
|
# way the same spec file works more easily across multiple versions where e.g. an
|
|
# older version might not have a systemd unit file.
|
|
cat > autofiles.py <<EOF
|
|
import os,sys,glob
|
|
os.chdir(os.environ['RPM_BUILD_ROOT'])
|
|
for line in sys.argv[1:]:
|
|
if line == '':
|
|
break
|
|
if line[0] != '/':
|
|
sys.stdout.write(line + '\n')
|
|
else:
|
|
files = glob.glob(line[1:])
|
|
if len(files) > 0:
|
|
sys.stderr.write('{0} matched {1} files\n'.format(line, len(files)))
|
|
sys.stdout.write(line + '\n')
|
|
else:
|
|
sys.stderr.write('{0} did not match any files\n'.format(line))
|
|
EOF
|
|
PYTHON=python3
|
|
if ! test -x /usr/bin/python3; then
|
|
PYTHON=python2
|
|
fi
|
|
$PYTHON autofiles.py > files \
|
|
'%{_bindir}/*' \
|
|
'%{_libdir}/%{name}' \
|
|
'%{_mandir}/man*/*' \
|
|
'%{_datadir}/dbus-1/system.d/*' \
|
|
'%{_sysconfdir}/rpm-ostreed.conf' \
|
|
'%{_prefix}/lib/systemd/system/*' \
|
|
'%{_libexecdir}/rpm-ostree*' \
|
|
'%{_datadir}/polkit-1/actions/*.policy' \
|
|
'%{_datadir}/dbus-1/system-services' \
|
|
'%{_datadir}/bash-completion/completions/*'
|
|
|
|
$PYTHON autofiles.py > files.lib \
|
|
'%{_libdir}/*.so.*' \
|
|
'%{_libdir}/girepository-1.0/*.typelib'
|
|
|
|
$PYTHON autofiles.py > files.devel \
|
|
'%{_libdir}/lib*.so' \
|
|
'%{_includedir}/*' \
|
|
'%{_datadir}/dbus-1/interfaces/org.projectatomic.rpmostree1.xml' \
|
|
'%{_libdir}/pkgconfig/*' \
|
|
'%{_datadir}/gtk-doc/html/*' \
|
|
'%{_datadir}/gir-1.0/*-1.0.gir'
|
|
|
|
%files -f files
|
|
%doc COPYING.GPL COPYING.LGPL LICENSE README.md
|
|
|
|
%files libs -f files.lib
|
|
|
|
%files devel -f files.devel
|