Orion Poplawski b62f115
# Octave packaging macros
Orion Poplawski b62f115
Orion Poplawski b62f115
# Octave binary API provided
834892e
%octave_api %(octave-config -p API_VERSION || echo 0)
Orion Poplawski b62f115
Orion Poplawski b62f115
# Octave Package Directories
Orion Poplawski b62f115
%octshareprefix %{_datadir}/octave
Orion Poplawski b62f115
%octprefix %{octshareprefix}/packages
Orion Poplawski 265a73c
%octarchprefix %{_libdir}/octave/packages
Orion Poplawski 6948e3e
%octpkgdir %{octprefix}/%{octpkg}-%{version}
Orion Poplawski b62f115
%octpkglibdir %{octarchprefix}/%{octpkg}-%{version}
Orion Poplawski b62f115
Orion Poplawski b62f115
# Run an octave command - quietly with no startup files
342625d
%octave_cmd() octave -H -q --no-window-system --no-site-file --eval "%*";
Orion Poplawski b62f115
Orion Poplawski c146c58
# Build unpacked source directory into a package tar file in a temporary location
Orion Poplawski c146c58
%octave_pkg_build %octave_cmd pkg build '-verbose' '-nodeps' %{_tmppath}/%{name}-%{version}-%{release}.%{_arch} %{_builddir}/%{buildsubdir}
Orion Poplawski b62f115
Orion Poplawski b62f115
# Install a package.  We use the octave pkg install command to install the
Orion Poplawski b62f115
# built package into the buildroot.  We also put a note to prevent the root
Orion Poplawski b62f115
# user from removing the package with the octave pkg uninstall command
Orion Poplawski cf6b5f2
%octave_pkg_install \
Orion Poplawski b62f115
mkdir -p %{buildroot}/%{octprefix} \
Orion Poplawski b62f115
mkdir -p %{buildroot}/%{octarchprefix} \
Orion Poplawski b62f115
%octave_cmd warning('off','all');pkg('prefix','%{buildroot}/%{octprefix}','%{buildroot}/%{octarchprefix}');pkg('global_list',fullfile('%{buildroot}/%{octshareprefix}','octave_packages'));pkg('local_list',fullfile('%{buildroot}/%{octshareprefix}','octave_packages'));pkg('install','-nodeps','-verbose','%{_tmppath}/%{name}-%{version}-%{release}.%{_arch}/%{octpkg}-%{version}.tar.gz');unlink(pkg('local_list'));unlink(pkg('global_list')); \
Orion Poplawski cf6b5f2
if [ -e %{buildroot}%{octpkgdir}/packinfo/on_uninstall.m ] \
Orion Poplawski cf6b5f2
then \
Orion Poplawski cf6b5f2
    mv %{buildroot}%{octpkgdir}/packinfo/on_uninstall.m %{buildroot}%{octpkgdir}/packinfo/on_uninstall.m.orig \
Orion Poplawski cf6b5f2
fi \
Orion Poplawski cf6b5f2
echo "function on_uninstall (desc)" > %{buildroot}%{octpkgdir}/packinfo/on_uninstall.m \
Orion Poplawski cf6b5f2
echo "  error ('Can not uninstall %s installed by the redhat package manager', desc.name);" >> %{buildroot}%{octpkgdir}/packinfo/on_uninstall.m \
Orion Poplawski cf6b5f2
echo "endfunction" >> %{buildroot}%{octpkgdir}/packinfo/on_uninstall.m \
Orion Poplawski cf6b5f2
%{nil}
Orion Poplawski b62f115
Orion Poplawski b62f115
# preun script - we need to remove our uninstall protection and perhaps
Orion Poplawski b62f115
# run the package's own uninstall script.
Orion Poplawski 265a73c
%octave_pkg_preun \
Orion Poplawski cf6b5f2
rm %{octpkgdir}/packinfo/on_uninstall.m \
Orion Poplawski cf6b5f2
if [ -e %{octpkgdir}/packinfo/on_uninstall.m.orig ]; then \
Orion Poplawski cf6b5f2
  mv %{octpkgdir}/packinfo/on_uninstall.m.orig %{octpkgdir}/packinfo/on_uninstall.m \
Orion Poplawski cf6b5f2
  cd %{octpkgdir}/packinfo \
Orion Poplawski cf6b5f2
  %octave_cmd l=pkg('list');on_uninstall(l{cellfun(@(x)strcmp(x.name,'%{octpkg}'),l)}); \
Orion Poplawski cf6b5f2
fi \
Orion Poplawski cf6b5f2
%{nil}