File vtk.spec of Package vtk

#
# spec file for package vtk
#
# Copyright (c) 2012 SUSE LINUX Products GmbH, Nuernberg, Germany.
#
# 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 http://bugs.opensuse.org/
#


Name:           vtk
Version:        5.10.1
Release:        0
%define series 5.10
# This is a variant BSD license, a cross between BSD and ZLIB.
# For all intents, it has the same rights and restrictions as BSD.
# http://fedoraproject.org/wiki/Licensing/BSD#VTKBSDVariant
Summary:        The Visualization Toolkit - A high level 3D visualization library
License:        BSD-3-Clause
Group:          Productivity/Scientific/Other
Url:            http://vtk.org/
Source:         http://www.vtk.org/files/release/%{series}/%{name}-%{version}.tar.gz
# PATCH-FIX-UPSTREAM vtk-pythondestdir.patch badshah400@gmail.com -- Correct installation destination for python libraries
Patch0:         vtk-pythondestdir.patch
# PATCH-FIX-UPSTREAM vtk-system.patch badshah400@gmail.com -- Use system libraries, http://public.kitware.com/Bug/view.php?id=11823
Patch1:         vtk-system.patch
# patch to fix the soname for libVTKnetcdf_cxx
Patch2:         vtk-soversion2.patch
# PATCH-FIX-UPSTREAM vtk-sqldatabaseschema.patch badshah400@gmail.com -- Fix problems with vtkSQLDatabaseSchema.h
Patch3:         vtk-sqldatabaseschema.patch
# PATCH-FIX-UPSTREAM vtk-fix-file-contains-date-time.patch badshah400@gmail.com -- Fix file containing DATE and TIME
Patch4:         vtk-fix-file-contains-date-time.patch
%if 0%{?suse_version} > 1210
BuildRequires:  Mesa-libGL-devel
%else
BuildRequires:  Mesa-devel
%endif
BuildRequires:  boost-devel
BuildRequires:  chrpath
BuildRequires:  cmake
BuildRequires:  doxygen
BuildRequires:  fdupes
BuildRequires:  freetype2-devel
BuildRequires:  gcc-c++
%if 0%{?suse_version} > 1210
BuildRequires:  gl2ps-devel
%endif
BuildRequires:  gnuplot
BuildRequires:  graphviz
%if 0%{?suse_version} > 1210
BuildRequires:  hdf5-devel
%endif
BuildRequires:  java-devel
BuildRequires:  libQtWebKit-devel
%if 0%{?suse_version} > 1210
BuildRequires:  libX11-devel
BuildRequires:  libXt-devel
%else
BuildRequires:  xorg-x11-devel
%endif
BuildRequires:  libexpat-devel
BuildRequires:  libiodbc-devel
BuildRequires:  libjpeg-devel
BuildRequires:  libmysqlclient-devel
BuildRequires:  libpng-devel
BuildRequires:  libqt4-devel
BuildRequires:  libtheora-devel
BuildRequires:  libtiff-devel
BuildRequires:  python-devel
BuildRequires:  python-qt4-devel
BuildRequires:  tcl-devel
BuildRequires:  tk-devel
BuildRequires:  wget
BuildRequires:  zlib-devel
%if %{?sles_version}
BuildRequires:  libxml2-devel
%else 
BuildRequires:  pkgconfig(libxml-2.0)
%endif
BuildRoot:      %{_tmppath}/%{name}-%{version}-build
%define qtdir   %{_lib}/qt4

%description
VTK is an open-source software system for image processing, 3D
graphics, volume rendering and visualization. VTK includes many
advanced algorithms (e.g., surface reconstruction, implicit modelling,
decimation) and rendering techniques (e.g., hardware-accelerated
volume rendering, LOD control).

%package devel
Summary:        VTK header files for building C++ code
Group:          Development/Libraries/Other
Requires:       %{name} = %{version}
%if 0%{?suse_version} >= 1130
Requires:       %{name}-java = %{version}
%endif
Requires:       %{name}-qt = %{version}
Requires:       %{name}-tcl = %{version}
%if 0%{?suse_version} > 1210
Requires:       Mesa-libGL-devel
%else
Requires:       Mesa-devel
%endif
%if 0%{?suse_version} > 1210
Requires:       gl2ps-devel
Requires:       hdf5-devel
%endif
Requires:       libexpat-devel
Requires:       libjpeg-devel
Requires:       libmysqlclient-devel
Requires:       libogg-devel
Requires:       libpng-devel
Requires:       libqt4-devel
Requires:       libtheora-devel
Requires:       libtiff-devel
Requires:       python-%{name} = %{version}
%if 0%{?suse_version} >= 1130
Requires:       python-%{name}-qt = %{version}
%endif

%description devel
VTK is an open-source software system for image processing, 3D
graphics, volume rendering and visualization. VTK includes many
advanced algorithms (e.g., surface reconstruction, implicit modelling,
decimation) and rendering techniques (e.g., hardware-accelerated
volume rendering, LOD control).

This provides the VTK header files required to compile C++ programs that
use VTK to do 3D visualisation.

%if 0%{?suse_version} >= 1130
%package java
Summary:        Java bindings for VTK
Group:          Development/Libraries/Java
Requires:       %{name} = %{version}

%description java
VTK is an open-source software system for image processing, 3D
graphics, volume rendering and visualization. VTK includes many
advanced algorithms (e.g., surface reconstruction, implicit modelling,
decimation) and rendering techniques (e.g., hardware-accelerated
volume rendering, LOD control).

This package provides java bindings for VTK.
%endif

%package -n python-%{name}
Summary:        Python bindings for VTK
Group:          System/Libraries
Requires:       %{name} = %{version}
%{py_requires}

%description -n python-%{name}
VTK is an open-source software system for image processing, 3D
graphics, volume rendering and visualization. VTK includes many
advanced algorithms (e.g., surface reconstruction, implicit modelling,
decimation) and rendering techniques (e.g., hardware-accelerated
volume rendering, LOD control).

This package provides python bindings for VTK.

%if 0%{?suse_version} >=1130
%package -n python-%{name}-qt
Summary:        Qt Python VTK widget
Group:          System/Libraries
Requires:       %{name} = %{version}
Requires:       %{name}-qt = %{version}
Requires:       python-%{name} = %{version}
Requires:       python-qt4
%{py_requires}

%description -n python-%{name}-qt
VTK is an open-source software system for image processing, 3D
graphics, volume rendering and visualization. VTK includes many
advanced algorithms (e.g., surface reconstruction, implicit modelling,
decimation) and rendering techniques (e.g., hardware-accelerated
volume rendering, LOD control).

This package provides python-qt bindings for VTK.
%endif

%package qt
Summary:        Qt VTK widget
Group:          Development/Libraries/C and C++
Requires:       %{name} = %{version}

%description qt
VTK is an open-source software system for image processing, 3D
graphics, volume rendering and visualization. VTK includes many
advanced algorithms (e.g., surface reconstruction, implicit modelling,
decimation) and rendering techniques (e.g., hardware-accelerated
volume rendering, LOD control).

This package provides Qt bindings for VTK.

%package tcl
Summary:        Tcl bindings for VTK
Group:          System/Libraries
Requires:       %{name} = %{version}

%description tcl
VTK is an open-source software system for image processing, 3D
graphics, volume rendering and visualization. VTK includes many
advanced algorithms (e.g., surface reconstruction, implicit modelling,
decimation) and rendering techniques (e.g., hardware-accelerated
volume rendering, LOD control).

This package provides tcl bindings for VTK.

%package examples
Summary:        Examples for VTK
Group:          Productivity/Scientific/Other
Requires:       %{name} = %{version}
Requires:       %{name}data = %{version}

%description examples
VTK is an open-source software system for image processing, 3D
graphics, volume rendering and visualization. VTK includes many
advanced algorithms (e.g., surface reconstruction, implicit modelling,
decimation) and rendering techniques (e.g., hardware-accelerated
volume rendering, LOD control).

This package contains many well-commented examples showing how to use
VTK. Examples are available in the C++, Tcl, Python and Java
programming languages.

%package testing
Summary:        Testing programs for VTK
Group:          Productivity/Scientific/Other
Requires:       %{name} = %{version}
Requires:       %{name}data = %{version}

%description testing
VTK is an open-source software system for image processing, 3D
graphics, volume rendering and visualization. VTK includes many
advanced algorithms (e.g., surface reconstruction, implicit modelling,
decimation) and rendering techniques (e.g., hardware-accelerated
volume rendering, LOD control).

This package provides a few testing programs for VTK.

%prep
%setup -q -n VTK%{version}
%patch0 -p1
%patch1 -p1
%patch2 -p1
%if 0%{?suse_version} == 1140
%patch3 -p1
%endif
%patch4 -p1

# Remove build time references so build-compare can do its work
#FAKE_BUILDDATE=$(LC_ALL=C date -u -r %{_sourcedir}/%{name}.changes '+%%b %%e %%Y')
#FAKE_BUILDTIME=$(LC_ALL=C date -u -r %{_sourcedir}/%{name}.changes '+%%H:%%M')
#sed -i "s/__DATE__/\"$FAKE_BUILDDATE\"/" Utilities/vtknetcdf/libvers.c
#sed -i "s/__TIME__/\"$FAKE_BUILDTIME\"/" Utilities/vtknetcdf/libvers.c

# Replace relative path ../../../VTKData with %%{_datadir}/%%{name}data-%%{version}
# otherwise it will break on symlinks.
grep -rl '\.\./\.\./\.\./\.\./VTKData' . | xargs perl -pi -e's,\.\./\.\./\.\./\.\./VTKData,%{_datadir}/%{name},g'

%build
export CFLAGS="%{optflags}"
export CXXFLAGS="%{optflags}"

mkdir build
pushd build
cmake .. \
    -DBUILD_DOCUMENTATION:BOOL=ON \
    -DBUILD_EXAMPLES:BOOL=ON \
    -DBUILD_SHARED_LIBS:BOOL=ON \
    -DBUILD_TESTING:BOOL=ON \
    -DCMAKE_INSTALL_PREFIX:PATH=%{_prefix} \
    -DSIP_INCLUDE_DIR:Path=%{py_incdir} \
    -DVTK_INSTALL_LIB_DIR:PATH=/%{_lib}/%{name}\
    -DVTK_INSTALL_QT_DIR:STRING=/%{qtdir}/plugins/designer \
    -DVTK_USE_BOOST:BOOL=ON \
    -DVTK_USE_GL2PS:BOOL=ON \
    -DVTK_USE_GUISUPPORT:BOOL=ON \
    -DVTK_USE_MYSQL:BOOL=ON \
    -DVTK_USE_OGGTHEORA_ENCODER:BOOL=ON \
    -DVTK_USE_ODBC:BOOL=ON \
    -DVTK_USE_PARALLEL:BOOL=ON \
    -DVTK_USE_PARALLEL_BGL:BOOL=ON \
    -DVTK_USE_QT:BOOL=ON \
    -DVTK_USE_QVTK_QTOPENGL:BOOL=ON \
    -DVTK_USE_RENDERING:BOOL=ON \
    -DVTK_USE_TEXT_ANALYSIS:BOOL=ON \
    -DVTK_USE_SYSTEM_LIBRARIES:BOOL=ON \
    -DVTK_USE_SYSTEM_LIBPROJ4:BOOL=OFF \
%if 0%{?suse_version} <= 1210
    -DVTK_USE_SYSTEM_GL2PS:BOOL=OFF \
    -DVTK_USE_SYSTEM_HDF5:BOOL=OFF \
%endif
    -DVTK_WRAP_PYTHON:BOOL=ON \
%if 0%{?suse_version} >= 1130
    -DVTK_WRAP_JAVA:BOOL=ON \
    -DVTK_WRAP_PYTHON_SIP:BOOL=ON \
%else
    -DVTK_WRAP_JAVA:BOOL=OFF \
    -DVTK_WRAP_PYTHON_SIP:BOOL=OFF \
%endif
    -DVTK_WRAP_TCL:BOOL=ON

# Package fails to compile with the following option (Note: postgresql-devel and libpqxx-devel are needed as dependencies)
#    -DVTK_USE_POSTGRES:BOOL=ON \

make %{?_smp_mflags} VERBOSE=1

# Remove executable bits from sources (some of which are generated)
find . -name \*.c -or -name \*.cxx -or -name \*.h -or -name \*.hxx -or -name \*.gif | xargs chmod -x
popd

%install
pushd build
%makeinstall

# link the directories to %%{_libdir}.  Moving them breaks the cmake macros.
echo `ls %{buildroot}%{_libdir}/%{name}/*.so*`
echo `ls %{buildroot}%{_libdir}/%{name}/*.so* | sed -e's,^%{buildroot}%{_libdir}/,,'`
ls %{buildroot}%{_libdir}/%{name}/*.so* | sed -e's,^%{buildroot}%{_libdir}/,,' | xargs ln -st %{buildroot}%{_libdir}

# Gather list of non-binding libraries
ls %{buildroot}%{_libdir}/lib*.so.* \
   %{buildroot}%{_libdir}/%{name}/lib*.so.* | grep -Ev '(Java|QVTK|Qt|Python|TCL)' | sed -e's,^%{buildroot},,' > libs.list

# Gather list of devel libraries
ls %{buildroot}%{_libdir}/*.so \
   %{buildroot}%{_libdir}/%{name}/*.so | sed -e's,^%{buildroot},,' > devel.list

# List of executable utilities
cat > utils.list << EOF
%{name}EncodeString
%{name}WrapHierarchy
lproj
EOF

# List of executable examples
cat > examples.list << EOF
HierarchicalBoxPipeline
MultiBlock
Arrays
Cube
RGrid
SGrid
Medical1
Medical2
Medical3
finance
AmbientSpheres
Cylinder
DiffuseSpheres
SpecularSpheres
Cone
Cone2
Cone3
Cone4
Cone5
Cone6
EOF

# List of executable test binaries
cat > testing.list << EOF
CommonCxxTests
TestCxxFeatures
TestInstantiator
FilteringCxxTests
GraphicsCxxTests
GenericFilteringCxxTests
ImagingCxxTests
IOCxxTests
RenderingCxxTests
VTKBenchMark
VolumeRenderingCxxTests
WidgetsCxxTests
SocketClient
SocketServer
EOF

# List of devel utilities and files
cat > utils.list << EOF
%{name}EncodeString
%{name}WrapHierarchy
lproj
EOF

# Install utils/examples/testing, too
for filelist in utils.list examples.list testing.list; do
  for file in `cat $filelist`; do
    install -p bin/$file %{buildroot}%{_bindir}
  done
perl -pi -e's,^,%{_bindir}/,' $filelist
done

# Remove any remnants of rpaths
chrpath -d %{buildroot}%{_bindir}/*

# Main package contains utils and core libs
cat libs.list utils.list > main.list

popd

# Make shared libs and scripts executable
chmod a+x %{buildroot}%{_libdir}/%{name}/doxygen/*.pl
chmod a+x %{buildroot}%{_libdir}/%{name}/testing/*.{py,tcl}

# Remove exec bit from non-scripts and %%doc
for file in `find %{buildroot} -type f -perm 0755 | xargs -r file | grep ASCII | awk -F: '{print $1}'`; do
  head -1 $file | grep '^#!' > /dev/null && continue
  chmod 0644 $file
done
find Utilities/Upgrading -type f | xargs chmod -x

# Verdict places the docs in the false folder
rm -rf %{buildroot}%{_libdir}/%{name}/doc

# Move tcl script to %%{_datadir}/tcl/%%{name}/
mkdir -p %{buildroot}%{_datadir}/tcl/%{name}/
mv %{buildroot}%{_libdir}/%{name}/tcl/  %{buildroot}%{_datadir}/tcl/%{name}/
mv %{buildroot}%{_libdir}/%{name}/*.tcl %{buildroot}%{_datadir}/tcl/%{name}/

%fdupes -s %{buildroot}

%post   -p /sbin/ldconfig
%postun -p /sbin/ldconfig

%if 0%{?suse_version} >= 1130
%post   java -p /sbin/ldconfig
%postun java -p /sbin/ldconfig
%endif

%post   -n python-%{name} -p /sbin/ldconfig
%postun -n python-%{name} -p /sbin/ldconfig

%if 0%{?suse_version} >=1130
%post   -n python-%{name}-qt -p /sbin/ldconfig
%postun -n python-%{name}-qt -p /sbin/ldconfig
%endif

%post   qt -p /sbin/ldconfig
%postun qt -p /sbin/ldconfig

%post   tcl -p /sbin/ldconfig
%postun tcl -p /sbin/ldconfig

%files -f build/main.list
%defattr(-,root,root,-)
%doc Copyright.txt README.html %{name}Logo.jpg %{name}Banner.gif Wrapping/*/README*
%dir %{_libdir}/%{name}/

%files devel -f build/devel.list
%defattr(-,root,root,-)
%doc Utilities/Upgrading
%{_libdir}/%{name}/*.cmake
%{_libdir}/%{name}/doxygen/
%{_libdir}/%{name}/CMake/
%{_libdir}/%{name}/hints/
%{_includedir}/%{name}-%{series}/

%if 0%{?suse_version} >= 1130
%files java
%defattr(-,root,root,-)
%{_bindir}/%{name}ParseJava
%{_bindir}/%{name}WrapJava
%{_libdir}/*Java.so.*
%{_libdir}/%{name}/*Java.so.*
%{_libdir}/%{name}/java/
%endif

%files -n python-%{name}
%defattr(-,root,root,-)
%{_bindir}/%{name}python
%{_bindir}/%{name}WrapPython
%{_bindir}/%{name}WrapPythonInit
%{_libdir}/libvtkPythonCore.so.*
%{_libdir}/libvtkRenderingPythonTkWidgets.so.*
%{_libdir}/*PythonD.so.*
%{_libdir}/%{name}/libvtkPythonCore.so.*
%{_libdir}/%{name}/libvtkRenderingPythonTkWidgets.so.*
%{_libdir}/%{name}/*PythonD.so.*
%{python_sitelib}/VTK-%{version}-py%{py_ver}.egg-info
%{python_sitelib}/%{name}/
%if 0%{?suse_version} >= 1130
%exclude %{python_sitelib}/%{name}/QVTKPython.so
%exclude %{python_sitelib}/%{name}/*PythonSIP.so
%endif

%if 0%{?suse_version} >= 1130
%files -n python-%{name}-qt
%defattr(-,root,root,-)
%{python_sitelib}/%{name}/QVTKPython.so
%{python_sitelib}/%{name}/*PythonSIP.so
%endif

%files qt
%defattr(-,root,root,-)
%{_libdir}/libQVTK.so.*
%{_libdir}/%{name}/libQVTK.so.*
%dir %{_prefix}/%{qtdir}/plugins/designer
%{_prefix}/%{qtdir}/plugins/designer/libQVTKWidgetPlugin.so

%files tcl
%defattr(-,root,root,-)
%{_bindir}/%{name}
%{_bindir}/%{name}WrapTcl
%{_bindir}/%{name}WrapTclInit
%{_datadir}/tcl/%{name}/
%{_libdir}/lib%{name}*TCL.so.*
%{_libdir}/%{name}/lib%{name}*TCL.so.*

%files examples -f build/examples.list
%defattr(-,root,root,-)

%files testing -f build/testing.list
%defattr(-,root,root,-)
%{_libdir}/%{name}/testing/

%changelog
openSUSE Build Service is sponsored by