%global pkgname scscp
%global usrname gapd
Name: gap-pkg-%{pkgname}
Version: 2.1.4
Release: 3%{?dist}
Summary: Symbolic Computation Software Composability Protocol in GAP
License: GPLv2+
URL: https://alexk.host.cs.st-andrews.ac.uk/scscp/
Source0: http://www.gap-system.org/pub/gap/gap4/tar.bz2/packages/%{pkgname}-%{version}.tar.bz2
Source1: %{usrname}.sh
Source2: gap-scscp.service
Source3: %{usrname}.logrotate
Source4: %{usrname}.conf
Source5: %{usrname}.h2m
Source6: server.g
BuildArch: noarch
BuildRequires: gap-devel
BuildRequires: GAPDoc-latex
BuildRequires: gap-pkg-io
BuildRequires: gap-pkg-openmath
BuildRequires: help2man
BuildRequires: systemd
%{?systemd_requires}
Requires(pre): shadow-utils
Requires(postun): shadow-utils
Requires: gap-core
Requires: gap-pkg-io
Requires: gap-pkg-openmath
%description
This package implements the Symbolic Computation Software Composability
Protocol (SCSCP) for the GAP system in accordance with the SCSCP
specification, described at http://www.symbolic-computing.org/scscp, and
OpenMath dictionaries scscp1 and scscp2.
%prep
%setup -q -n %{pkgname}
%build
# Link to main GAP documentation
ln -s %{_gap_dir}/doc ../../doc
mkdir ../pkg
ln -s ../%{pkgname} ../pkg/%{pkgname}
gap -l "$PWD/..;%{_gap_dir}" << EOF
ReadPackage("scscp", "/lib/buildman.g");
SCSCPBuildManual();
EOF
rm -fr ../../doc ../pkg
%install
mkdir -p %{buildroot}%{_gap_dir}/pkg
cp -a ../%{pkgname} %{buildroot}%{_gap_dir}/pkg/%{pkgname}
rm -f %{buildroot}%{_gap_dir}/pkg/%{pkgname}/{GPL,README}
rm -f %{buildroot}%{_gap_dir}/pkg/%{pkgname}/doc/*.{aux,bbl,blg,brf,idx,ilg,ind,log,out,pnr,toc}
# Replace upstream's launcher script with our own.
cp -p %{SOURCE1} %{buildroot}%{_gap_dir}/pkg/%{pkgname}
# Install the systemd unit
mkdir -p %{buildroot}%{_unitdir}
cp -p %{SOURCE2} %{buildroot}%{_unitdir}
# Install the logrotate script
mkdir -p %{buildroot}%{_sysconfdir}/logrotate.d
cp -p %{SOURCE3} %{buildroot}%{_sysconfdir}/logrotate.d/%{name}
# Install the daemon config file
mkdir -p %{buildroot}%{_sysconfdir}
cp -p %{SOURCE4} %{buildroot}%{_sysconfdir}
# Install the man page
mkdir -p %{buildroot}%{_mandir}/man8
help2man -m "GAP SCSCP package" -S "GAP SCSCP (Fedora %{version}-%{release})" \
-n "GAP Daemon" -I %{SOURCE5} -o %{buildroot}%{_mandir}/man8/%{usrname}.8 \
-N -s 8 %{SOURCE1}
# Move the config files to their new home
mkdir -p %{buildroot}%{_sysconfdir}/scscp/gap
cp -p %{SOURCE6} %{buildroot}%{_sysconfdir}/scscp/gap
mv %{buildroot}%{_gap_dir}/pkg/%{pkgname}/config.g \
%{buildroot}%{_gap_dir}/pkg/%{pkgname}/configpar.g \
%{buildroot}%{_sysconfdir}/scscp/gap
# Tell the package where to look for its configuration
sed -e 's,ReadPackage("scscp/\(config\.g\)"),Read("/etc/scscp/gap/\1"),' \
-e 's,ReadPackage("scscp/\(configpar\.g\)"),Read("/etc/scscp/gap/\1"),' \
-i %{buildroot}%{_gap_dir}/pkg/%{pkgname}/init.g
touch -r init.g %{buildroot}%{_gap_dir}/pkg/%{pkgname}/init.g
%check
# We only run the offline test as the others require network access and two
# servers to be setup and running.
mkdir ../pkg
ln -s ../%{pkgname} ../pkg/%{pkgname}
pushd tst
gap -l "$PWD/../..;%{_gap_dir}" << EOF 2>&1 | tee log
LoadPackage("scscp");
Test("offline.tst", rec(compareFunction := "uptowhitespace") );
EOF
grep -Fvq 'Errors detected' log
rm -f log
popd
rm -fr ../pkg
%pre
getent passwd _%{usrname} >/dev/null || \
useradd -c "GAP SCSCP server daemon" -d %{_sharedstatedir}/%{usrname}/ \
-m -r -s /sbin/nologin -U _%{usrname} 2&>1 /dev/null || :
%preun
%systemd_preun gap-scscp.service
%post
%systemd_post gap-scscp.service
%postun
%systemd_postun gap-scscp.service
%files
%doc README
%license GPL
%docdir %{_gap_dir}/pkg/%{pkgname}/demo
%docdir %{_gap_dir}/pkg/%{pkgname}/doc
%docdir %{_gap_dir}/pkg/%{pkgname}/example
%docdir %{_gap_dir}/pkg/%{pkgname}/htm
%{_gap_dir}/pkg/%{pkgname}/
%{_mandir}/man8/%{usrname}.8*
%{_unitdir}/gap-scscp.service
%dir %{_sysconfdir}/scscp/
%dir %{_sysconfdir}/scscp/gap/
%config(noreplace) %{_sysconfdir}/scscp/gap/config.g
%config(noreplace) %{_sysconfdir}/scscp/gap/configpar.g
%config(noreplace) %{_sysconfdir}/scscp/gap/server.g
%config(noreplace) %{_sysconfdir}/%{usrname}.conf
%dir %{_sysconfdir}/logrotate.d/
%config(noreplace) %{_sysconfdir}/logrotate.d/%{name}
%changelog
* Wed Jul 20 2016 Jerry James <loganjerry@gmail.com> - 2.1.4-3
- Own the logrotate directory
- Do not delete the user in postun
* Thu May 26 2016 Jerry James <loganjerry@gmail.com> - 2.1.4-2
- Improved service integration
* Fri Apr 22 2016 Jerry James <loganjerry@gmail.com> - 2.1.4-1
- Initial RPM