# 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.8 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: 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 # 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 %configure --disable-silent-rules --enable-gtk-doc %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