## -------------------------------------------------------------------
##
## Copyright (c) 2014 Basho Technologies, Inc.; 2021-2023 TI Tokyo
##
## This file is provided to you under the Apache License,
## Version 2.0 (the "License"); you may not use this file
## except in compliance with the License.  You may obtain
## a copy of the License at
##
##   http://www.apache.org/licenses/LICENSE-2.0
##
## Unless required by applicable law or agreed to in writing,
## software distributed under the License is distributed on an
## "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
## KIND, either express or implied.  See the License for the
## specific language governing permissions and limitations
## under the License.
##
## -------------------------------------------------------------------

Name: riak-cs
Version: %{_version}
Release: %{_release}%{?dist}
License: "Apache 2.0"
Group: Development/Libraries
Source: %{_tarname}
URL: "https://tiot.jp"
Vendor: "TI Tokyo"
Packager: "Riak CS Package Maintainer" <"andriy.zavada@tiot.jp">
BuildRoot: %{_tmppath}/%{name}-%{_revision}-%{release}-root
Summary: "Riak CS is a Riak-backed S3 drop-in replacement"
BuildRequires: systemd
Requires(post): systemd
Requires(preun): systemd
Requires(postun): systemd

%description
"Riak CS is a Riak-backed AWS S3 drop-in replacement"

%define debug_package %{nil}
%define __prelink_undo_cmd /bin/cat prelink library

# disable shebang mangling
%undefine __brp_mangle_shebangs

%define platform_etc_dir %{_sysconfdir}/riak-cs
%define platform_base_dir %{_libdir}/riak-cs
%define platform_bin_dir %{platform_base_dir}/bin
%define platform_lib_dir %{platform_base_dir}/lib
%define platform_log_dir %{_localstatedir}/log/riak-cs
# no data as such; it's only used for cuttlefish-generated configs
%define platform_data_dir %{_localstatedir}/lib/riak-cs

%prep
%setup -q -n %{_tarname_base} -c %{_tarname_base}

# Setup vars.config like other platforms, but do it inside of spec file
cp rel/pkg/rpm/vars.config.part rel/pkg/rpm/vars.config
cat >>rel/pkg/rpm/vars.config <<EOF
%% Platform-specific installation paths
{platform_bin_dir,  "%{platform_bin_dir}"}.
{platform_etc_dir,  "%{platform_etc_dir}"}.
{platform_base_dir, "%{platform_base_dir}"}.
{platform_gen_dir,  "%{platform_data_dir}"}.
{platform_lib_dir,  "%{platform_lib_dir}"}.
{platform_log_dir,  "%{platform_log_dir}"}.
{crash_dump,        "%{platform_log_dir}/erl_crash.dump"}.
EOF

%define _build_id_links none

%build
# symlink deps, to reuse deps fetched previously with rebar3 get-deps
(mkdir -p _build/default/lib && cd _build/default/lib && for d in ../../../../../../../../_build/default/lib/*; do ln -sf $d; done)
make rel-rpm
# remove sources
rm -rf rel/riak-cs/lib/*/c_src rel/riak-cs/lib/*/src

%install
%define relpath %{_builddir}/%{buildsubdir}/rel/riak-cs
%define buildroot_lib %{buildroot}%{_libdir}/riak-cs
%define buildroot_etc %{buildroot}%{_sysconfdir}/riak-cs
%define buildroot_bin %{buildroot_lib}/bin
%define buildroot_sbin %{buildroot}%{_sbindir}
%define buildroot_unit %{buildroot}%{_unitdir}
%define buildroot_run %{buildroot}%{_rundir}

mkdir -p \
  %{buildroot_etc} \
  %{buildroot_lib} \
  %{buildroot_bin} \
  %{buildroot_sbin} \
  %{buildroot_unit} \
  %{buildroot_run}/riak-cs \
  %{buildroot}%{_localstatedir}/lib/riak-cs \
  %{buildroot}%{_localstatedir}/log/riak-cs

cp -R %{relpath}/lib       %{buildroot_lib}
cp -R %{relpath}/erts-*    %{buildroot_lib}
cp -R %{relpath}/releases  %{buildroot_lib}
cp -R %{relpath}/share     %{buildroot_lib}
cp rel/pkg/rpm/%{name}.service %{buildroot_unit}

(cd %{relpath}/bin && \
 find . -type f -exec install -Dm 0755 {} %{buildroot_bin}/{} \;)

cp -a %{relpath}/priv/tools %{buildroot_bin}

cp %{relpath}/etc/riak-cs.conf %{buildroot_etc}
cp %{relpath}/etc/advanced.config %{buildroot_etc}
for f in riak-cs-admin riak-cs-supercluster riak-cs-debug riak-cs-chkconfig; do
    cp %{relpath}/bin/$f %{buildroot}/usr/sbin
done
cp %{relpath}/usr/bin/riak-cs %{buildroot}/usr/sbin

mkdir -p %{buildroot}%{_localstatedir}/lib/riak-cs

# Needed to work around check-rpaths which seems to be hardcoded into recent
# RPM releases
export QA_RPATHS=3


%pre
if ! getent group riak_cs >/dev/null 2>&1; then
   groupadd -r riak_cs
fi

if getent passwd riak_cs >/dev/null 2>&1; then
   usermod -d %{_localstatedir}/lib/riak-cs riak_cs || true
else
   useradd -r -g riak_cs \
           --home %{_localstatedir}/lib/riak-cs \
           --comment "Riak CS User" \
           --shell /bin/bash \
           riak_cs
fi

%post
# For distros with SELinux (RHEL/Fedora)
if [ `which selinuxenabled > /dev/null 2>&1` ] ; then
   # Fixup perms for SELinux (if it is enabled)
   selinuxenabled && find %{_localstatedir}/lib/riak-cs -name "*.so" -exec chcon -t textrel_shlib_t {} \;
fi

%systemd_post %{name}.service

%preun
%systemd_preun %{name}.service

%postun
%systemd_postun %{name}.service
rm -f %{_sysconfdir}/riak-cs/riak-cs.conf.new
rm -rf %{_localstatedir}/lib/riak-cs
rm -rf %{_localstatedir}/log/riak-cs

%files
%defattr(-,root,root)
%{_libdir}/*
%{_unitdir}/%{name}.service
%{_sbindir}/*

%defattr(-,riak_cs,riak_cs)
%{_sysconfdir}/riak-cs
%{_localstatedir}/lib/riak-cs
%{_localstatedir}/log/riak-cs

%config(noreplace) %{_sysconfdir}/riak-cs/*

%clean
rm -rf %{buildroot}
