
%define services pgbackrest.target pgbackrest-diff@.service pgbackrest-full@.service pgbackrest-incr@.service pgbackrest.service pgbackrest-diff@.timer pgbackrest-full@.timer pgbackrest-incr@.timer

Name:           pgbackrest
Version:        2.54.2
Release:        1%{dist}
Summary:        Reliable PostgreSQL Backup & Restore
License:        MIT
URL:            https://www.pgbackrest.org
Source:         https://github.com/%{name}/%{name}/archive/release/%{version}/%{name}-%{version}.tar.gz

Source1:        pgbackrest.conf
Source10:       pgbackrest-diff@.service
Source11:       pgbackrest-diff@.timer
Source12:       pgbackrest-full@.service
Source13:       pgbackrest-full@.timer
Source14:       pgbackrest-incr@.service
Source15:       pgbackrest-incr@.timer
Source16:       pgbackrest.service
Source17:       pgbackrest.target
Source18:       pgbackrest.tmpfiles.d

Patch1:         use-run-pgbackrest.patch

BuildRequires:  libyaml-devel
BuildRequires:  meson
BuildRequires:  pkgconfig
BuildRequires:  pkgconfig(libpq)
BuildRequires:  pkgconfig(bzip2)
BuildRequires:  pkgconfig(liblz4)
BuildRequires:  pkgconfig(libpq)
BuildRequires:  pkgconfig(libssh2)
BuildRequires:  pkgconfig(libxml-2.0)
BuildRequires:  pkgconfig(openssl)
BuildRequires:  pkgconfig(systemd)
BuildRequires:  pkgconfig(libzstd)

# This is a bit awkward as we only need this for directory ownership
Requires(pre):  postgresql-server

%description
pgBackRest aims to be a simple, reliable backup and restore system for
PostgreSQL that can seamlessly scale up to the largest databases and
workloads.

The following features are available:
- Parallel backup & restore
- Local or remote operation
- Full, incremental, differential backups
- Backup rotation & archive expiration
- Backup integrity
- Page checksums
- Backup resume
- Streaming compression & checksums
- Delta restore
- Parallel, asynchronous WAL push & get
- Tablespace & link support
- Amazon S3 support
- Encryption
- Compatibility with PostgreSQL >= 8.3

%prep
%autosetup -p1 -n %{name}-release-%{version}

%build

%meson
%meson_build

%install
%meson_install

install -D -d -m 0700                         \
  %{buildroot}%{_localstatedir}/lib/%{name}   \
  %{buildroot}%{_localstatedir}/log/%{name}   \
  %{buildroot}%{_localstatedir}/spool/%{name}

install -D -d -m 0755        \
  %{buildroot}%{_sysconfdir} \
  %{buildroot}%{_unitdir}

install -m 0644 %{SOURCE1} %{buildroot}/%{_sysconfdir}/%{name}.conf
install -m 0644 \
    %{SOURCE10} \
    %{SOURCE11} \
    %{SOURCE12} \
    %{SOURCE13} \
    %{SOURCE14} \
    %{SOURCE15} \
    %{SOURCE16} \
    %{SOURCE17} \
  %{buildroot}%{_unitdir}

install -D -m 0644 \
    %{SOURCE18} \
    %{buildroot}%{_tmpfilesdir}/%{name}.conf

%check
# Tests are only available with Vagrant
# We just test that the binary works.
%{buildroot}/%{_bindir}/%{name} version || exit 1
%meson_test

%pre
%systemd_pre %{services}

%post
%tmpfiles_create %{_tmpfilesdir}/%{name}.conf
%systemd_post %{services}

%preun
%systemd_preun %{services}

%postun
%systemd_postun %{services}

%files
%doc README.md
%license LICENSE
%config(noreplace) %attr (640,root,postgres) %{_sysconfdir}/%{name}.conf
# We still can do that as postgres user is system fixed
%attr(-,postgres,postgres) %{_localstatedir}/log/%{name}
%attr(-,postgres,postgres) %{_localstatedir}/lib/%{name}
%attr(-,postgres,postgres) %{_localstatedir}/spool/%{name}
%ghost %dir %attr(750,postgres,postgres) /run/pgbackrest
%{_bindir}/%{name}
%{_unitdir}/pgbackrest-diff@.service
%{_unitdir}/pgbackrest-diff@.timer
%{_unitdir}/pgbackrest-full@.service
%{_unitdir}/pgbackrest-full@.timer
%{_unitdir}/pgbackrest-incr@.service
%{_unitdir}/pgbackrest-incr@.timer
%{_unitdir}/pgbackrest.service
%{_unitdir}/pgbackrest.target
%{_tmpfilesdir}/%{name}.conf
