# Licensed 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.
#

%define name couchdb
%define prefix /opt/%{name}

Summary:       RESTful document oriented database
License:       Apache License v2.0
Name:          %{name}
Version:       %{_version}
Release:       1%{?dist}
Source:        https://www.apache.org/dist/couchdb/source/${version}/apache-couchdb-%{version}.tar.gz
Source1:       %{name}.service
Source2:       %{name}.init
Source3:       10-filelog.ini
Source5:       %{name}.logrotate
Prefix:        %{prefix}
Group:         Applications/Databases
URL:           https://couchdb.apache.org/
Vendor:        The Apache Software Foundation
BuildArch:     x86_64 ppc64le
ExclusiveArch: x86_64 ppc64le
Exclusiveos:   linux
Packager:      CouchDB Developers <dev@couchdb.apache.org>

%if 0%{?suse_version}
BuildRequires: erlang
BuildRequires: erlang-rebar
BuildRequires: erlang-reltool
BuildRequires: erlang-epmd
BuildRequires: gcc-c++
BuildRequires: pkg-config
Requires(pre): shadow
BuildRequires: python3
%else
BuildRequires: esl-erlang
BuildRequires: gcc
Requires(pre): shadow-utils
#BuildRequires: python-pip
#BuildRequires: python-sphinx >= 1.5.3
%endif

BuildRequires: git
BuildRequires: help2man
#BuildRequires: %SPIDERMONKEY_DEV%
BuildRequires: libcurl-devel
BuildRequires: libicu-devel
BuildRequires: nodejs >= 6.10.1

Requires(post): curl
Requires(post): %SPIDERMONKEY%
Requires(post): libicu >= 4.2.1
Requires(post): procps

%if 0%{?fedora} || 0%{?rhel} >= 7 || 0%{?suse_version}
%if 0%{?suse_version}
BuildRequires: 		systemd-rpm-macros
%else
BuildRequires:		xfsprogs-devel
%endif
%{?systemd_requires}
BuildRequires:		systemd
%else
Requires(post):		chkconfig
Requires(preun):	chkconfig, initscripts
Requires(postun):	initscripts
%endif

%description
Apache CouchDB is a distributed, fault-tolerant and schema-free
document-oriented database accessible via a RESTful HTTP/JSON API. Among other
features, it provides robust, incremental replication with bi-directional
conflict detection and resolution, and is queryable and indexable using a
table-oriented view engine with JavaScript acting as the default view
definition language.

CouchDB is written in Erlang, but can be easily accessed from any environment
that provides means to make HTTP requests. There are a multitude of third-party
client libraries that make this even easier for a variety of programming
languages and environments.

# NOTE: Stripping binaries causes issues so we skip it.
%define __os_install_post %{nil}

%build
./configure -c --spidermonkey-version=%SM_VER%
%{__make} release

%clean
%{__rm} -rf %{buildroot}

%pre
%if 0%{?suse_version}
if ! /usr/bin/getent passwd couchdb > /dev/null; then /usr/sbin/useradd \
  --system --home-dir /opt/couchdb --no-create-home \
  --shell /bin/bash --comment "CouchDB Administrator" \
  --user-group couchdb; fi
%else
if ! /usr/bin/getent passwd couchdb > /dev/null; then /usr/sbin/adduser \
  --system --home /opt/couchdb --no-create-home \
  --shell /bin/bash --comment "CouchDB Administrator" \
  --user-group couchdb; fi
%endif

%install
%{__install} -d -m0755 %{buildroot}/opt
%{__cp} -r rel/couchdb %{buildroot}/opt
%{__install} -d -m0750 %{buildroot}/var/log/%{name}
%if 0%{?suse_version}
%{__install} -d -m0750 %{buildroot}%{_localstatedir}/lib/%{name}
%else
%{__install} -d -m0750 %{buildroot}%{_sharedstatedir}/%{name}
%endif
%{__install} -Dp -m0644 %{SOURCE3} %{buildroot}/opt/%{name}/etc/default.d/10-filelog.ini
%{__install} -Dp -m0644 %{SOURCE5} %{buildroot}/etc/logrotate.d/%{name}
/bin/find %{buildroot}/opt/%{name} -name *.ini -exec %{__chmod} 0640 {} \;

%if 0%{?fedora} || 0%{?rhel} >= 7 || 0%{?suse_version}
%{__install} -Dp -m0644 %{SOURCE1} %{buildroot}%{_unitdir}/%{name}.service
%else
%{__install} -Dp -m0755 %{SOURCE2} %{buildroot}%{_initrddir}/%{name}
%endif
%if 0%{?suse_version}
%{__ln_s} -f -T %{_localstatedir}/lib/%{name} %{buildroot}/opt/%{name}/data
%else
%{__ln_s} -f -T %{_sharedstatedir}/%{name} %{buildroot}/opt/%{name}/data
%endif
%{__ln_s} -f -T /var/log/%{name} %{buildroot}/opt/%{name}/var/log/%{name}

%post
%{__chown} -R couchdb:couchdb /opt/%{name}
%{__chmod} a+x /opt/%{name}/bin/*
%if 0%{?fedora} || 0%{?rhel} >= 7
%systemd_post %{name}.service
%else
/sbin/chkconfig --add %{name} || :
%endif

%preun
%if 0%{?fedora} || 0%{?rhel} >= 7 || 0%{?suse_version}
%systemd_preun %{name}.service
%else
# stop couchdb only when uninstalling
if [ $1 -eq 0 ]; then
  /sbin/service %{name} stop >/dev/null 2>&1 || :
  /sbin/chkconfig --del %{name} || :
fi
killall -u couchdb epmd || :
%endif

%postun
%if 0%{?fedora} || 0%{?rhel} >= 7 || 0%{?suse_version}
%systemd_postun_with_restart %{name}.service
%else
# restart couchdb only when upgrading
if [ $1 -eq 1 ]; then
  /sbin/service %{name} condrestart >/dev/null 2>&1 || :
fi
%endif

%files
%attr(0755, %{name}, %{name}) /opt/couchdb
%if 0%{?suse_version}
%attr(0755, %{name}, %{name}) %dir %{_localstatedir}/lib/%{name}
%else
%attr(0755, %{name}, %{name}) %dir %{_sharedstatedir}/%{name}
%endif
%attr(0755, %{name}, %{name}) %dir /var/log/%{name}
%config(noreplace) /opt/couchdb/etc/local.ini
%config(noreplace) /opt/couchdb/etc/vm.args
%config /etc/logrotate.d/%{name}
%if 0%{?fedora} || 0%{?rhel} >= 7 || 0%{?suse_version}
%{_unitdir}/%{name}.service
%else
%{_initrddir}/%{name}
%endif


%changelog
* Tue May 2 2017 CouchDB Developers <dev@couchdb.apache.org> 2.0.0-1
- New upstream version
- New sysvinit and systemd service files
- New backported couchup script
