# The canonical copy of this spec file is upstream at: # https://github.com/coreos/rpm-ostree/blob/main/packaging/rpm-ostree.spec.in Summary: Hybrid image/package system Name: rpm-ostree Version: 2021.5 Release: 1%{?dist} License: LGPLv2+ URL: https://github.com/coreos/rpm-ostree # This tarball is generated via "cd packaging && make -f Makefile.dist-packaging dist-snapshot" # in the upstream git. It also contains vendored Rust sources. Source0: https://github.com/coreos/rpm-ostree/releases/download/v%{version}/rpm-ostree-%{version}.tar.xz ExclusiveArch: %{rust_arches} BuildRequires: make %if 0%{?rhel} && !0%{?eln} BuildRequires: rust-toolset %else BuildRequires: rust-packaging BuildRequires: cargo BuildRequires: rust %endif # Enable ASAN + UBSAN %bcond_with sanitizers # 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: 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 (libdnf below also pulls it in, # but duplicating to be clear) BuildRequires: pkgconfig(librepo) # Needed by curl-rust BuildRequires: pkgconfig(libcurl) BuildRequires: cmake BuildRequires: pkgconfig(expat) BuildRequires: pkgconfig(check) # We use some libsolv types directly too (libdnf below also pulls it in, # but duplicating to be clear) BuildRequires: pkgconfig(libsolv) # We need g++ for libdnf BuildRequires: gcc-c++ # more libdnf build deps (see libdnf's spec for versions; maintain ordering) %global libsolv_version 0.7.17 %global libmodulemd_version 2.11.2-2 %global librepo_version 1.13.0 %global swig_version 3.0.12 BuildRequires: swig >= %{swig_version} BuildRequires: pkgconfig(modulemd-2.0) >= %{libmodulemd_version} BuildRequires: pkgconfig(librepo) >= %{librepo_version} BuildRequires: libsolv-devel >= %{libsolv_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 # Runtime libdnf deps Requires: libmodulemd%{?_isa} >= %{libmodulemd_version} Requires: libsolv%{?_isa} >= %{libsolv_version} Requires: librepo%{?_isa} >= %{librepo_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} %{?with_sanitizers:--enable-sanitizers} %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 < 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