File mayavi.spec of Package mayavi

#
# spec file for package mayavi
#
# Copyright (c) 2020 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
# upon. The license for this file, and modifications and additions to the
# file, is the same license as for the pristine package itself (unless the
# license for the pristine package is not an Open Source License, in which
# case the license is the MIT License). An "Open Source License" is a
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.

# Please submit bugfixes or comments via https://bugs.opensuse.org/
#


%define         X_display  ":98"
Name:           mayavi
Version:        4.7.2
Release:        0
Summary:        3D visualization of scientific data in Python
License:        BSD-3-Clause AND EPL-1.0 AND LGPL-2.0-or-later AND LGPL-3.0-or-later
Group:          Productivity/Scientific/Other
URL:            https://github.com/enthought/mayavi
Source0:        https://files.pythonhosted.org/packages/source/m/mayavi/mayavi-%{version}.tar.gz
Source1:        mayavi.desktop
Source2:        tvtk_doc.desktop
BuildRequires:  R-base-devel
BuildRequires:  fdupes
BuildRequires:  pkgconfig
BuildRequires:  python-rpm-macros
BuildRequires:  python3-Cython
BuildRequires:  python3-Pygments
BuildRequires:  python3-Sphinx
BuildRequires:  python3-apptools
BuildRequires:  python3-configobj
BuildRequires:  python3-devel
BuildRequires:  python3-envisage >= 3.0
BuildRequires:  python3-nose
BuildRequires:  python3-numpy-devel >= 1.0.1
BuildRequires:  python3-pyface >= 6.0.0
BuildRequires:  python3-qt5
BuildRequires:  python3-setuptools
BuildRequires:  python3-traits >= 4.6.0
BuildRequires:  python3-traitsui >= 6.0.0
BuildRequires:  python3-vtk >= 5.0
BuildRequires:  update-desktop-files
BuildRequires:  vtk-devel
Requires:       python3-apptools
Requires:       python3-qt5
Requires:       python3-setuptools
Requires:       python3-tvtk = %{version}
Provides:       python3-mayavi = %{version}
Recommends:     %{name}-jupyter
# SECTION test requirements
BuildRequires:  xorg-x11-server
# /SECTION

%description
Mayavi provides interactive visualization of 3-D data. It offers:

 * An (optional) user interface with dialogs to interact with
   all data and objects in the visualization.
 * A scripting interface in Python, including
   one-liners, or an object-oriented programming interface. Mayavi
   integrates with numpy and scipy for 3D plotting and can
   be used in IPython interactively, similarly to Matplotlib.
 * Use of the the VTK toolkit.

Additionally, Mayavi is a reusable tool that can be embedded in
applications in different ways or be combined with the Envisage
application-building framework to assemble domain-specific tools.

It is part of the Enthought Tool Suite (ETS).

%package     -n python3-tvtk
Summary:        A python3-traits enabled version of python3-vtk
Group:          Productivity/Scientific/Other
Requires:       python3-numpy >= 1.0.1
Requires:       python3-pyface >= 6.0.0
Requires:       python3-traits >= 4.6.0
Requires:       python3-traitsui >= 6.0.0
Requires:       python3-vtk >= 5.0
Recommends:     python3-configobj
Recommends:     python3-envisage >= 3.0
Recommends:     python3-wxWidgets >= 2.8

%description -n python3-tvtk
TVTK wraps VTK objects to provide a convenient, Pythonic API, while
supporting Traits attributes and NumPy/SciPy arrays. TVTK is
implemented mostly in pure Python, except for a small extension module.

Developers typically use TVTK to write Mayavi modules, and then use
Mayavi to interact with visualizations or create applications.

It is part of the Enthought Tool Suite (ETS).

%package        doc
Summary:        Documentation for mayavi
Group:          Documentation/HTML
Requires:       %{name} = %{version}

%description    doc
Documentation files for the %{name} package.

%package     -n python3-tvtk-doc
Summary:        Documentation for python3-tvtk
Group:          Documentation/HTML
Requires:       python3-tvtk = %{version}

%description -n python3-tvtk-doc
Documentation files for the python3-tvtk package.

%package        jupyter
Summary:        Jupyter notebook backend for mayavi
Group:          Productivity/Scientific/Other
Requires:       %{name} = %{version}
Requires:       jupyter-ipyevents
Requires:       jupyter-ipywidgets
Requires:       jupyter-notebook

%description    jupyter
Interface to allow plotting with mayavi in Jupyter
notebooks.

This package pulls in the dependencies needed to
run mayavi in a Jupyter notebook.

%prep
%setup -q -n mayavi-%{version}
rm -r mayavi.egg-info

# wrong-file-end-of-line-encoding
sed -i 's|\r||' examples/mayavi/data/room_vis.wrl

# spurious-executable-perm
chmod -x mayavi/tests/data/cellsnd.ascii.inp

# non-executable-script
sed -i -e '/^#!\//, 1d' integrationtests/mayavi/*.py
sed -i -e '/^#!\//, 1d' mayavi/tests/*.py
sed -i -e '/^#!\//, 1d' mayavi/tests/csv_files/csv_2_py
sed -i -e '/^#!\//, 1d' mayavi/scripts/*.py
sed -i -e '/^#!\//, 1d' tvtk/setup.py

# env-script-interpreter
find . -name \*.py -exec \
    sed -i -e '1s@#!\s*%{_bindir}/env\s*python@#!%{_bindir}/python@' '{}' \;

%build
export LANG=en_US.UTF-8
export DISPLAY=%{X_display}
Xvfb %{X_display} >& Xvfb.log &
trap "kill $! || true" EXIT
sleep 10

export CFLAGS="%{optflags}"
%python3_build

%install
export LANG=en_US.UTF-8
export DISPLAY=%{X_display}
Xvfb %{X_display} >& Xvfb.log &
trap "kill $! || true" EXIT
sleep 10

%python3_install

# examples and integrationtests are not installed by the build system
# Manually install examples and integrationtests in python3_sitearch
mkdir -p %{buildroot}%{python3_sitearch}/mayavi/examples
cp -R examples/mayavi/* %{buildroot}%{python3_sitearch}/mayavi/examples/
mkdir -p %{buildroot}%{python3_sitearch}/mayavi/integrationtests
cp -R integrationtests/mayavi/* %{buildroot}%{python3_sitearch}/mayavi/integrationtests/
mkdir -p %{buildroot}%{python3_sitearch}/tvtk/examples
cp -R examples/tvtk/* %{buildroot}%{python3_sitearch}/tvtk/examples/

# Remove shebang from .py files in examples and integrationtests
# as they are not supposed to be executed
find %{buildroot}%{python3_sitearch}/{mayavi,tvtk}/examples -name \*.py \
    -exec sed -i -e '/^#!\//, 1d' '{}' \;
%if 0%{?suse_version} > 1320
find %{buildroot}%{python3_sitearch}/mayavi/html/_downloads -name \*.py \
    -exec sed -i -e '/^#!\//, 1d' '{}' \;
%endif

mkdir -p %{buildroot}/%{_mandir}/man1/
mv docs/mayavi2.man %{buildroot}/%{_mandir}/man1/mayavi2.1
mkdir -p %{buildroot}%{_datadir}/icons/hicolor/48x48/apps/
install -p -m 644 ./docs/source/mayavi/images/mayavi2-48x48.png \
   %{buildroot}%{_datadir}/icons/hicolor/48x48/apps/mayavi2.png
install -p -m 644 ./docs/source/mayavi/images/mayavi2-48x48.png \
   %{buildroot}%{_datadir}/icons/hicolor/48x48/apps/tvtk_doc.png

chmod a+x %{buildroot}%{python3_sitearch}/mayavi/scripts/mayavi2.py
chmod a+x %{buildroot}%{python3_sitearch}/mayavi/tests/runtests.py
chmod a+x %{buildroot}%{python3_sitearch}/tvtk/setup.py

# REMOVE BYTECODES NOT ACCOMPANIED BY SOURCE CODE
rm -fr %{buildroot}%{python3_sitearch}/tvtk/plugins/scene/__init__.py{c,o}
rm -fr %{buildroot}%{python3_sitearch}/tvtk/plugins/browser/__init__.py{c,o}
rm -fr %{buildroot}%{python3_sitearch}/tvtk/plugins/scene/ui/__init__.py{c,o}
rm -fr %{buildroot}%{python3_sitearch}/tvtk/tools/__init__.py{c,o}
rm -fr %{buildroot}%{python3_sitearch}/tvtk/pipeline/__init__.py{c,o}
rm -fr %{buildroot}%{python3_sitearch}/tvtk/plugins/__init__.py{c,o}
rm -fr %{buildroot}%{python3_sitearch}/tvtk/version.py{c,o}

# script-without-shebang
chmod a-x %{buildroot}%{python3_sitearch}/mayavi/scripts/mayavi2.py
chmod a-x %{buildroot}%{python3_sitearch}/mayavi/tests/csv_files/csv_2_py
chmod a-x %{buildroot}%{python3_sitearch}/mayavi/tests/runtests.py
chmod a-x %{buildroot}%{python3_sitearch}/tvtk/setup.py

# REMOVE UNNEEDED HIDDEN FILE

%suse_update_desktop_file -i mayavi
%suse_update_desktop_file -i tvtk_doc

mkdir -p %{buildroot}%{_docdir}/mayavi/
mkdir -p %{buildroot}%{_docdir}/python3-tvtk/
cp -r docs/build/mayavi/html %{buildroot}%{_docdir}/mayavi/
cp -r docs/build/tvtk/html %{buildroot}%{_docdir}/python3-tvtk/

%fdupes %{buildroot}%{_docdir}/mayavi/
%fdupes %{buildroot}%{_docdir}/python3-tvtk/
%fdupes %{buildroot}%{python3_sitearch}/mayavi/
%fdupes %{buildroot}%{python3_sitearch}/mayavi-%{version}-py*.egg-info
%fdupes %{buildroot}%{python3_sitearch}/tvtk/
%fdupes %{buildroot}%{_datadir}/icons/

sed -i "s|\r||g" %{buildroot}%{_docdir}/python3-tvtk/html/objects.inv
rm -r %{buildroot}%{python3_sitearch}/{tvtk,mayavi}/html/.buildinfo
rm -r %{buildroot}%{_docdir}/{python3-tvtk,mayavi}/html/.buildinfo

python3    -m compileall -d %{python3_sitearch} %{buildroot}%{python3_sitearch}/mayavi/
python3 -O -m compileall -d %{python3_sitearch} %{buildroot}%{python3_sitearch}/mayavi/
python3    -m compileall -d %{python3_sitearch} %{buildroot}%{python3_sitearch}/tvtk/
python3 -O -m compileall -d %{python3_sitearch} %{buildroot}%{python3_sitearch}/tvtk/
%fdupes %{buildroot}%{python3_sitearch}/mayavi/
%fdupes %{buildroot}%{python3_sitearch}/tvtk/

%files
%doc README*.*
%license LICENSE*.txt image_LICENSE*.txt
%{_bindir}/mayavi2
%{_mandir}/man1/mayavi2.1%{?ext_man}
%{_datadir}/applications/mayavi.desktop
%{python3_sitearch}/mayavi/
%{python3_sitearch}/mayavi-%{version}-py*.egg-info
%exclude %{_docdir}/mayavi/html/

%files -n python3-tvtk
%doc README*.*
%license LICENSE*.txt image_LICENSE*.txt
%{_bindir}/tvtk_doc
%{_datadir}/applications/tvtk_doc.desktop
%{_datadir}/icons/hicolor/
%{python3_sitearch}/tvtk/
%exclude %{_docdir}/python3-tvtk/html/

%files doc
%license LICENSE*.txt image_LICENSE*.txt
%{_docdir}/mayavi/html/

%files -n python3-tvtk-doc
%license LICENSE*.txt image_LICENSE*.txt
%{_docdir}/python3-tvtk/html/

%files jupyter
%license LICENSE*.txt image_LICENSE*.txt

%changelog
openSUSE Build Service is sponsored by