File guam.spec of Package guam-selfcontained

%if 0%{?opensuse_bs}
#!BuildIgnore:  ghostscript-x11
%endif

%global debug_package %{nil}

%global realname kolab_guam
%global binname guam

%if 0%{?suse_version} < 1 && 0%{?fedora} < 1 && 0%{?rhel} < 7
%global with_systemd 0
%else
%global with_systemd 1
%endif

%{!?_unitdir: %global _unitdir /usr/lib/systemd/system}
%{!?_erldir: %global _erldir /usr/lib64/erlang/}
%{!?_erllibdir: %global _erllibdir /usr/lib64/erlang/lib}

%define lock_version() %{1}%{?_isa} = %(rpm -q --queryformat "%%{VERSION}" %{1})

Name:               guam
Version:            0.9.13
Release:            1%{?dist}
Summary:            A Smart Reverse IMAP Proxy

Group:              System Environment/Daemons
License:            GPLv3+
URL:                https://kolab.org/about/guam

Source0:            guam-%{version}.tar.gz
Source100:          plesk.sys.config

BuildRequires:      erlang >= 17.4
BuildRequires:      erlang-asn1
BuildRequires:      erlang-common_test
BuildRequires:      erlang-compiler
BuildRequires:      erlang-crypto
BuildRequires:      erlang-debugger
BuildRequires:      erlang-erts
BuildRequires:      erlang-et
BuildRequires:      erlang-kernel
BuildRequires:      erlang-mnesia
BuildRequires:      erlang-observer
BuildRequires:      erlang-public_key
BuildRequires:      erlang-runtime_tools
BuildRequires:      erlang-sasl
BuildRequires:      erlang-snmp
BuildRequires:      erlang-ssh
BuildRequires:      erlang-ssl
BuildRequires:      erlang-stdlib
BuildRequires:      erlang-syntax_tools
BuildRequires:      erlang-tools
BuildRequires:      erlang-wx
BuildRequires:      erlang-xmerl

Requires:           erlang
Requires:           which

%if 0%{?with_systemd}
%if 0%{?suse_version}
Requires(post):     systemd
Requires(postun):   systemd
Requires(preun):    systemd
%else
Requires(post):     systemd-units
Requires(postun):   systemd-units
Requires(preun):    coreutils
Requires(preun):    systemd-units
%endif
%else
Requires(post):     chkconfig
Requires(post):     initscripts
Requires(postun):   initscripts
Requires(preun):    chkconfig
Requires(preun):    initscripts
%endif

%description
Guam is a smart, unjustly outcast Reverse IMAP Proxy that lives at
the perimeter of your IMAP environment.

%prep
%setup -q

%build

DEBUG=1
export DEBUG

# Only available since hex v0.9.0
HEX_OFFLINE=true
export HEX_OFFLINE

REBAR_CACHE_DIR=cache/rebar3/
export REBAR_CACHE_DIR

# Rebuild all beam files (The otp version from the tarball may not match)
rm -rf _build
./rebar3 compile

./rebar3 release \
    --dev-mode false \
    --relname %{name} \
    --relvsn %{version}

%install

find -type f | sort

mkdir -p \
    %{buildroot}%{_sysconfdir}/%{name}/ \
    %{buildroot}%{_sbindir} \
    %{buildroot}%{_erldir}/bin/ \
    %{buildroot}%{_erllibdir}/ \
%if 0%{?with_systemd}
    %{buildroot}%{_unitdir}/ \
%else
    %{buildroot}%{_initddir}/ \
%endif
    %{buildroot}%{_var}/log/%{name}/

# Configuration
cp _build/default/rel/%{name}/etc/sys.config \
    %{buildroot}%{_sysconfdir}/%{name}/sys.config
cp _build/default/rel/%{name}/vm.args \
    %{buildroot}%{_sysconfdir}/%{name}/vm.args

# Service scripts
%if 0%{?with_systemd}
install -p -m 644 contrib/%{name}.service \
    %{buildroot}%{_unitdir}/%{name}.service
%else
install -p -m 755 contrib/%{name}.sysvinit \
    %{buildroot}%{_initddir}/%{name}
%endif

pushd %{buildroot}%{_erldir}/bin/
ln -s ../lib/%{realname}-%{version}/bin/%{binname} %{realname}
popd

mkdir -p %{buildroot}%{_erllibdir}/%{realname}-%{version}/bin/
cp -av _build/default/rel/%{name}/bin/* %{buildroot}%{_erllibdir}/%{realname}-%{version}/bin/

# Remove the sources
find _build/default/rel/%{name}/lib/ -type d -name "src" -exec rm -Rf {} +

# Copy over all lib dirs
cp -av _build/default/rel/%{name}/lib/* %{buildroot}%{_erllibdir}/

# Copy over the release directory as well
cp -av _build/default/rel/%{name}/releases/ %{buildroot}%{_erllibdir}/%{realname}-%{version}/

# More configuration
%if 0%{?plesk}
install -m 644 -p %{SOURCE100} %{buildroot}%{_sysconfdir}/guam/sys.config
%endif

pushd %{buildroot}%{_erllibdir}/%{realname}-%{version}/releases/%{version}/
rm sys.config vm.args
ln -sv ../../../../../../..%{_sysconfdir}/%{name}/sys.config sys.config
ln -sv ../../../../../../..%{_sysconfdir}/%{name}/vm.args vm.args
popd

pushd %{buildroot}%{_erllibdir}/%{realname}-%{version}/
ln -s ../../lib lib
ln -s ../../../../..%{_var}/log/%{name} log
popd

cat > %{buildroot}%{_sbindir}/%{name} << EOF
#!/bin/bash
exec %{_erllibdir}/%{realname}-%{version}/bin/%{binname} \$*
EOF

%check

DEBUG=1
export DEBUG

HEX_OFFLINE=true
export HEX_OFFLINE

REBAR_CACHE_DIR=cache/rebar3/
export REBAR_CACHE_DIR

./rebar3 eunit -v
./rebar3 ct -v

%postun
%if 0%{?with_systemd}
%systemd_postun %{name}.service
%endif

%if 0%{?with_systemd}
%post
%systemd_post %{name}.service

if [ ! -f "/etc/guam/dh_2048.pem" ]; then
    openssl gendh -out /etc/guam/dh_2048.pem -2 2048 >/dev/null 2>&1 || \
    openssl dhparam -out /etc/guam/dh_2048.pem -2 2048 >/dev/null 2>&1
fi

%preun
%systemd_preun %{name}.service

%posttrans
test -f /etc/sysconfig/guam-disable-posttrans || \
    systemctl try-restart %{name}.service 2>&1 || :

%else
%post
chkconfig --add %{name} >/dev/null 2>&1 || :

if [ ! -f "/etc/guam/dh_2048.pem" ]; then
    openssl gendh -out /etc/guam/dh_2048.pem -2 2048 >/dev/null 2>&1 || \
    openssl dhparam -out /etc/guam/dh_2048.pem -2 2048 >/dev/null 2>&1
fi

%posttrans
test -f /etc/sysconfig/guam-disable-posttrans || \
    %{_sbindir}/service restart %{name} 2>&1 || :
%endif

%files
%config(noreplace) %{_sysconfdir}/%{name}/sys.config
%config(noreplace) %{_sysconfdir}/%{name}/vm.args
%attr(0750,root,root) %{_sbindir}/%{name}
%{_libdir}/erlang/bin/%{realname}
%{_libdir}/erlang/lib/
%attr(0640,root,root) %{_var}/log/%{name}/

%if 0%{?with_systemd}
%{_unitdir}/%{name}.service
%else
%{_initddir}/%{name}
%endif

%changelog
* Mon Sep 12 2022 Christian Mollekopf <mollekopf@apheleia-it.ch> - 0.9.13-1
- Release of version 0.9.13

* Tue Apr 19 2022 Christian Mollekopf <mollekopf@apheleia-it.ch> - 0.9.12-1
- Release of version 0.9.12

* Mon Jun 07 2021 Christian Mollekopf <mollekopf@kolabsys.com> - 0.9.11-1
- Release of version 0.9.11

* Mon May 31 2021 Christian Mollekopf <mollekopf@kolabsys.com> - 0.9.10-1
- Release of version 0.9.10

* Mon Dec 14 2020 Christian Mollekopf <mollekopf@kolabsys.com> - 0.9.9-1
- Release of version 0.9.9

* Mon Nov 9 2020 Christian Mollekopf <mollekopf@kolabsys.com> - 0.9.8-2
- Fixed STARTTLS

* Mon Oct 26 2020 Christian Mollekopf <mollekopf@kolabsys.com> - 0.9.8-1
- Release of version 0.9.8

* Wed Apr 15 2020 Christian Mollekopf <mollekopf@kolabsys.com> - 0.9.7-1
- Release of version 0.9.7

* Tue Mar 31 2020 Christian Mollekopf <mollekopf@kolabsys.com> - 0.9.6-1
- Release of version 0.9.6

* Thu Dec  5 2019 Jeroen van Meeuwen <vanmeeuwen@kolabsys.com> - 0.9.5-1
- Release of version 0.9.5

* Wed May 15 2019 Jeroen van Meeuwen (Kolab Systems) <vanmeeuwen@kolabsys.com> - 0.9.4-15
- Fix LIST-EXTENDED, LIST-STATUS and LIST return options for purely numerical folder names

* Tue Apr 23 2019 Christian Mollekopf (Kolab Systems) <mollekopf@kolabsys.com> - 0.9.4-14
- Removed the unavailable syslog backend for plesk

* Wed Jan  2 2019 Jeroen van Meeuwen (Kolab Systems) <vanmeeuwen@kolabsys.com> - 0.9.4-10
- Fix LIST-EXTENDED, LIST-STATUS and LIST return options response filtering

* Thu Oct  4 2018 Jeroen van Meeuwen <vanmeeuwen@kolabsys.com> - 0.9.4-9
- Add cacertfile setting for Plesk (Bifrost T143291)

* Wed Jul 18 2018 Christoph Erhardt <kolab@sicherha.de> - 0.9.4-8
- Add run-time dependency on which

* Sat May 19 2018 Jeroen van Meeuwen (Kolab Systems) <vanmeeuwen@kolabsys.com> - 0.9.4-7
- Fix generating dh params file on more recent openssl versions

* Tue May 08 2018 Christoph Erhardt <kolab@sicherha.de> - 0.9.4-6
- Apply patch that fixes stalling client buffers and handling of split commands

* Fri May 04 2018 Christoph Erhardt <kolab@sicherha.de> - 0.9.4-5
- Make logs go to /var/log/guam

* Sat Apr 21 2018 Christoph Erhardt <kolab@sicherha.de> - 0.9.4-4
- Fix packaging, dependencies and more stuff

* Thu Apr 19 2018 Christoph Erhardt <kolab@sicherha.de> - 0.9.4-3
- Use script rather than symlink

* Thu Apr 19 2018 Christoph Erhardt <kolab@sicherha.de> - 0.9.4-2
- Ship correct variants of sys.config and vm.args

* Sun Apr 15 2018 Christoph Erhardt <kolab@sicherha.de> - 0.9.4-1
- Release version 0.9.4

* Tue Feb 27 2018 Jeroen van Meeuwen (Kolab Systems) <vanmeeuwen@kolabsys.com> - 0.9.2-3
- Allow empty lines in commands

* Mon Jun 26 2017 Jeroen van Meeuwen (Kolab Systems) <vanmeeuwen@kolabsys.com> - 0.9.2-2
- Fix T25795

* Mon Jun 19 2017 Jeroen van Meeuwen (Kolab Systems) <vanmeeuwen@kolabsys.com> - 0.9.2-1
- Release version 0.9.2

* Tue Jul 12 2016 Aaron Seigo <seigo@kolabsystems.com> - 0.8.3-1
- Release of version 0.8.3

* Fri Jul  8 2016 Jeroen van Meeuwen <vanmeeuwen@kolabsys.com> - 0.8.2-2
- Fix T1345

* Wed Jul  6 2016 Aaron Seigo <seigo@kolabsystems.com> - 0.8.2-1
- Release of version 0.8.2

* Tue Jul  5 2016 Jeroen van Meeuwen <vanmeeuwen@kolabsys.com> - 0.8.1-1
- Release of version 0.8.1

* Fri Jun 10 2016 Aaron Seigo <seigo@kolabsystems.com>
- Package version 0.8

* Tue Feb  2 2016 Jeroen van Meeuwen <vanmeeuwen@kolabsys.com> - 0.7.1-1
- Check in systemd init script fixes

* Mon Jan  4 2016 Jeroen van Meeuwen <vanmeeuwen@kolabsys.com> - 0.7.0-1
- Release of 0.7.0

* Mon Dec 21 2015 Jeroen van Meeuwen <vanmeeuwen@kolabsys.com> - 0.6-0.1.git
- Check in 0.6 from git master HEAD to introduce CI/CD

* Wed Dec 16 2015 Jeroen van Meeuwen <vanmeeuwen@kolabsys.com> - 0.5-0.1.git
- Release of 0.5
- Enhance groupware filtering

* Tue Dec  8 2015 Jeroen van Meeuwen <vanmeeuwen@kolabsys.com> - 0.4-0.1.git
- Release of 0.4

* Mon Dec  7 2015 Jeroen van Meeuwen <vanmeeuwen@kolabsys.com> - 0.3-0.1.git
- Third iteration with more/better TLS configuration support

* Mon Nov 30 2015 Jeroen van Meeuwen <vanmeeuwen@kolabsys.com> - 0.2-0.1.git
- Second iteration with TLS configuration

* Thu Nov 26 2015 Jeroen van Meeuwen <vanmeeuwen@kolabsys.com> - 0.1-0.1.git
- First package