LogoopenSUSE Build Service > Projects
Sign Up | Log In

View File blender.spec of Package blender (Project graphics)

#
# spec file for package blender
#
# Copyright (c) 2016 SUSE LINUX 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/
#

%define osversion %(cat /etc/os-release|grep VERSION_ID|cut -d '"' -f 2)
# NOTE:Audaspace will become a separate library as of blender 2.8 set audaspace to 1 when this verion is available.
# NOTE:Adaspace is already in factory.
%define audaspace 0
%define collada 1
%define wplayer 1
%define documentation 0
# Set this to 1 for fixing bugs.
%define debugbuild 0
# Find the version of python3 that blender is going to build against.
%define py3version %(pkg-config python3 --modversion)
# blender has versions like x.xxy which have x.xx (notice the missing
# trailing y) in the directory path. This makes this additional variable
# necessary.
%define _version %(echo %{version} | cut -b 1-4)
# NOTE: this is to enable blender to build without cycles for 13.2 BUILD_ORIG = 1 see boo#960234
%if 0%{?suse_version} > 1320 || 0%{?suse_version} == 1315
%bcond_without ffmpeg
%bcond_without cycles
%else
%if 0%{?BUILD_ORIG} == 1 && 0%{?suse_version} <= 1320
%define collada 0
%bcond_without ffmpeg
%bcond_with cycles
%else
%define collada 0
%bcond_with ffmpeg
%bcond_with cycles
%endif
%endif
Name:           blender
Version:        2.78a
Release:        0
Summary:        A 3D Modelling And Rendering Package
License:        GPL-2.0+
Group:          Productivity/Graphics/3D Editors
Url:            http://www.blender.org/
# http://download.blender.org/source/
Source0:        %{name}-%{version}.tar.gz
Source1:        %{name}-%{version}.tar.gz.md5sum
Source2:        geeko.blend
Source3:        geeko.README
Source4:        blender-sample
Source6:        blender.xpm
Source7:        x-blend.desktop
Source8:        blender.appdata.xml
# Removed for 2.78
#Patch1:         blender-2.58-python_include.patch
# libquicktime-devel
BuildRequires:  openSUSE-release
BuildRequires:  OpenEXR-devel
BuildRequires:  SDL2-devel
BuildRequires:  binutils-gold
BuildRequires:  boost-devel
BuildRequires:  cmake
BuildRequires:  desktop-file-utils
BuildRequires:  doxygen
BuildRequires:  epydoc
BuildRequires:  fdupes
BuildRequires:  fftw3-devel
BuildRequires:  gcc-c++
BuildRequires:  gettext-tools
BuildRequires:  glew-devel
BuildRequires:  graphviz
BuildRequires:  help2man
BuildRequires:  hicolor-icon-theme
BuildRequires:  jack-audio-connection-kit-devel
BuildRequires:  libao-devel
BuildRequires:  libdrm-devel
BuildRequires:  libexpat-devel
BuildRequires:  libjpeg-devel
BuildRequires:  liblcms-devel
BuildRequires:  libpng-devel
BuildRequires:  libsamplerate-devel
BuildRequires:  libsndfile-devel
BuildRequires:  libtiff-devel
BuildRequires:  libtool
BuildRequires:  libvorbis-devel
BuildRequires:  llvm-devel
BuildRequires:  lzo-devel
BuildRequires:  openal-soft-devel
BuildRequires:  openssl-devel
BuildRequires:  pcre-devel
BuildRequires:  perl-Text-Iconv
BuildRequires:  pkg-config
BuildRequires:  pkgconfig(libopenjpeg)
%if 0%{?debugbuild} == 1
BuildRequires:  pkgconfig(valgrind)
%endif
%if 0%{?is_opensuse} == 1
BuildRequires:  pkgconfig(jemalloc)
%endif
# Needed since blender 2.71. Otherwise it won't build
BuildRequires:  python3-numpy-devel
BuildRequires:  pkgconfig(python3) >= 3.5
%if 0%{?suse_version} > 1320
BuildRequires:  python3-requests
%endif
BuildRequires:  ruby
BuildRequires:  ruby-devel
BuildRequires:  shared-mime-info
BuildRequires:  update-desktop-files
BuildRequires:  xorg-x11
BuildRequires:  xorg-x11-devel
BuildRequires:  xz
BuildRequires:  xz-devel
BuildRequires:  yasm
BuildRequires:  yasm-devel
BuildRequires:  pkgconfig(glu)
BuildRequires:  pkgconfig(libxml-2.0)
Requires:       python3-base >= %{py3version}
# See bnc#713346
Requires:       python3-numpy
Requires:       python3-xml
%if 0%{?suse_version} > 1320
Requires:       python3-requests
%endif
BuildRoot:      %{_tmppath}/%{name}-%{version}-build
%if 0%{?suse_version} > 1210
BuildRequires:  libGLw-devel
BuildRequires:  libGLw1
%else
BuildRequires:  MesaGLw-devel
%endif
%if %{documentation} == 1
Recommends:     blender-doc
%endif
%if %{with ffmpeg}
BuildRequires:  pkgconfig(libavcodec)
BuildRequires:  pkgconfig(libavdevice)
BuildRequires:  pkgconfig(libavformat)
BuildRequires:  pkgconfig(libavutil)
BuildRequires:  pkgconfig(libswscale)
%endif
%if 0%{?collada} == 1
BuildRequires:  openCOLLADA-devel
%endif
%if 0%{?audaspace} == 1
BuildRequires:  pkgconfig(audaspace)
%endif
# Added OpenimageIO and OpenColorIO to enable build with cycles see bnc#905649
%if %{with cycles}
BuildRequires:  OpenColorIO-devel
BuildRequires:  OpenImageIO-devel
BuildRequires:  cmake(pugixml)
%endif

%description
Blender is a 3D modelling and rendering package. It is the in-house
software of a high quality animation studio, Blender has proven to
be an extremely fast and versatile design instrument. The software
has a personal touch, offering a unique approach to the world of
Three Dimensions. Use Blender to create TV commercials, to make
technical visualizations, business graphics, to do some morphing,
or design user interfaces. You can easy build and manage complex
environments. The renderer is versatile and extremely fast. All
basic animation principles (curves & keys) are well implemented.It
includes tools for modeling, sculpting, texturing (painting,
node-based shader materials, or UV mapped), UV mapping, rigging and
constraints, weight painting, particle systems, simulation (fluids,
physics, and soft body dynamics and an external crowd simulator),
rendering, node-based compositing, and non linear video editing,
as well as an integrated game engine for real-time interactive 3D
and game creation and playback with cross-platform compatibility.
%if %{without cycles}
This blender is not built with cycles.
%endif

%if %{documentation} == 1
%package doc
Summary:        Documentation for blender
Group:          Documentation
BuildArch:      noarch

%description doc
Being the in-house software of a high quality animation studio, Blender
has proven to be an extremely fast and versatile design instrument. The
software has a personal touch, offering a unique approach to the world
of Three Dimensions. Use Blender to create TV commercials, to make
technical visualizations, business graphics, to do some morphing, or
design user interfaces.
This package includes API documentation and example plugin programs.
%endif

%lang_package

%prep
echo %{osversion}
pushd ../SOURCES
md5sum -c %{SOURCE1}
popd
%setup -q
#%%patch1

# binreloc is not a part of fedora
rm -rf extern/ffmpeg
rm -rf extern/fftw
rm -rf extern/glew
rm -rf extern/libmp3lame
rm -rf extern/libopenjpeg
rm -rf extern/libredcode
rm -rf extern/ode
rm -rf extern/x264
rm -rf extern/xvidcore
rm -rf extern/qhull
rm -rf extern/make
rm -rf extern/verse
echo %{_version}

%build
# sse options only on supported archs
%ifarch %{ix86} x86_64
sseflags='-msse -msse2'
%endif
# Find python3 version and abiflags
export psver=$(pkg-config python3 --modversion)
export pver=$(pkg-config python3 --modversion)$(python3-config --abiflags)
mkdir -p Build && pushd Build
#-fsanitize=address
# FIXME: This comes from a stupid osc spec formatter
# blender's flags are complex enough already without %%cmake macro spamming the build log.
# It also puts _smp_mflags where it shouldn't, I had to write make -j1 to stop it.
# NOTE: Don't use cmake macro.
cmake ../ -DBUILD_SHARED_LIBS:BOOL=off \
%if 0%{?debugbuild} == 1
      -DCMAKE_BUILD_TYPE:STRING=Debug \
      -DCMAKE_C_FLAGS_DEBUG:STRING="-fsanitize=address -ggdb" \
      -DCMAKE_CXX_FLAGS_DEBUG:STRING="-fsanitize=address -ggdb" \
      -DWITH_MEM_VALGRIND:BOOL=ON \
      -DWITH_ASSERT_ABORT:BOOL=ON \
%endif
%if 0%{?is_opensuse} == 1
      -DWITH_MEM_JEMALLOC:BOOL=ON \
%endif
      -DWITH_BUILDINFO:BOOL=ON \
      -DWITH_LLVM:BOOL=ON \
      -DWITH_FFTW3:BOOL=on \
      -DWITH_JACK:BOOL=on \
      -DWITH_JACK_DYNLOAD:BOOL=on \
      -DWITH_CODEC_SNDFILE:BOOL=on \
      -DWITH_IMAGE_OPENJPEG:BOOL=on \
      -DWITH_SYSTEM_OPENJPEG:BOOL=on \
      -DWITH_LIBMV_SCHUR_SPECIALIZATIONS:BOOL=on \
%if %{with ffmpeg}
      -DWITH_CODEC_FFMPEG:BOOL=on \
%endif
%if 0%{?collada} == 1
      -DWITH_OPENCOLLADA:BOOL=on \
%else
      -DWITH_OPENCOLLADA:BOOL=off \
%endif
%if 0%{?audaspace} == 1
      -DWITH_SYSTEM_AUDASPACE:BOOL=on \
%endif
      -DWITH_PYTHON:BOOL=on \
      -DWITH_PYTHON_INSTALL:BOOL=off \
      -DWITH_GAMEENGINE:BOOL=ON \
%if %{without cycles}
      -DWITH_CYCLES:BOOL=OFF \
%endif
%ifarch ppc ppc64 ppc64le
      -DWITH_CYCLES:BOOL=OFF \
%else
%if %{with cycles}
      -DWITH_CYCLES:BOOL=ON \
      -DWITH_OPENIMAGEIO:BOOL=ON \
      -DWITH_OPENCOLORIO:BOOL=ON \
%endif
%endif
      -DWITH_PLAYER:BOOL=on \
      -DWITH_INSTALL_PORTABLE:BOOL=OFF \
      -DWITH_SYSTEM_GLEW:BOOL=ON \
      -DWITH_SDL:BOOL=ON \
      -DWITH_SDL_DYNLOAD:BOOL=on \
%ifnarch x86_64
      -DWITH_RAYOPTIMIZATION:BOOL=OFF \
      -DWITH_MOD_OCEANSIM:BOOL=OFF \
%else
      -DWITH_RAYOPTIMIZATION:BOOL=on \
      -DWITH_MOD_OCEANSIM:BOOL=ON \
%endif
      -DCMAKE_VERBOSE_MAKEFILE=on \
      -DCMAKE_C_FLAGS="%{optflags} ${sseflags}" \
      -DCMAKE_CXX_FLAGS="%{optflags} ${sseflags}" \
      -DCMAKE_INSTALL_PREFIX:PATH=%{_prefix} \
      -DPYTHON_VERSION=$psver \
      -DPYTHON_LIBPATH=%{_libexecdir} \
      -DPYTHON_LIBRARY=python$pver \
      -DPYTHON_INCLUDE_DIRS=%{_includedir}/python$pver \
      -DWITH_PYTHON_INSTALL_NUMPY=off

export LDFLAGS="$LDFLAGS -lclew"
pushd intern/libmv
make -j1
popd
# A further attempt to stop out of memory failures.
export jobs=$(getconf _NPROCESSORS_ONLN)

%define jobs %(echo $jobs)
%if 0%{?jobs} > 2
%define _smp_mflags -j2
%endif
make %{?_smp_mflags}
popd
%if %{documentation} == 1
# Build documentation
pushd doc/doxygen
doxygen -u Doxyfile
doxygen Doxyfile
popd
mv doc/doxygen/html doc/
rm -rf doc/doxygen
%endif

%install
echo "release version = %{_version}"
# make install
pushd Build
%make_install
popd
# Remove folder, it's not supposed to be installed here.
rm -rf %{buildroot}%{_datadir}/%{name}/%{_version}/datafiles/fonts
rm -f %{buildroot}%{_datadir}/%{name}/%{_version}/scripts/addons/.gitignore
# Fix any .py files with shebangs and wrong permissions.
if test -z `find %{buildroot} -name *.py -perm 0644 -print0|xargs -0r grep -l '#!'`; \
then break;
else chmod -f 0755 `find %{buildroot} -name *.py -perm 0644 -print0|xargs -0r grep -l '#!'`; \
fi
# Copy text files to correct place.
mkdir -p %{buildroot}%{_docdir}/%{name}
cp -v    %{buildroot}%{_datadir}/doc/blender/* %{buildroot}%{_docdir}/%{name}/
rm -rf %{buildroot}%{_datadir}/doc/blender
# install blender sample.
install -D -m 0644 %{SOURCE2} %{buildroot}%{_docdir}/%{name}/
install -D -m 0644 %{SOURCE3} %{buildroot}%{_docdir}/%{name}/
install -D -m 0755 %{SOURCE4} %{buildroot}%{_bindir}/

# install appdata file
mkdir -p %{buildroot}%{_datadir}/appdata/
install -D -m 0644 %{SOURCE8} %{buildroot}%{_datadir}/appdata/

if test -z `find %{buildroot}%{_docdir}/%{name} -name *.py -perm 0755 -print0|xargs -0r grep -l '#!'`; \
then break;
else chmod -f 0644 `find %{buildroot}%{_docdir}/%{name} -name *.py -perm 0755 -print0|xargs -0r grep -l '#!'`; \
fi
%fdupes %{buildroot}%{_datadir}/%{name}/%{_version}/
%find_lang %{name} %{?no_lang_C}
rm -rf %{buildroot}%{_datadir}/locale/languages
find %{buildroot}%{_datadir}/%{name}/%{_version}/scripts/ -name "*.h" -print -delete
# Factory is now of the opinion that every /usr/bin file needs a man page,
%if %{wplayer} == 1
# Generate man page with help2man
# Create man1 directory if it doesn't exist. Added with v2.73
[ -d %{buildroot}%{_mandir}/man1 ] || mkdir -p %{buildroot}%{_mandir}/man1 || :
pushd %{buildroot}%{_mandir}/man1
cp -v %{buildroot}%{_bindir}/blenderplayer ./
help2man \
	--version-string="%{version}" \
	--help-option="-h" -n "a utility for previewing .blend files" \
	-s 1 -m "User Commands" -S "Stichting Blender Foundation" -N -o blenderplayer.1 ./'blenderplayer -h ""'
rm blenderplayer
popd
#cp -v %%{SOURCE5} %%{buildroot}%%{_mandir}/man1
%endif
%if 1 == 1
# Add more icons.
mkdir -p %{buildroot}%{_datadir}/pixmaps/
pushd %{buildroot}%{_datadir}/pixmaps/
ln -s ../icons/hicolor/32x32/apps/blender.png blender.png
popd
# Install s6=blender.xpm and s11=v-2.55
install -D -m 0644 %{SOURCE6} %{buildroot}%{_datadir}/pixmaps/
ln -s ../icons/hicolor/scalable/apps/blender.svg %{buildroot}%{_datadir}/pixmaps
%endif
%if 0%{?sles_version}
%suse_update_desktop_file -i -n -G "Blender Template" x-blend
%suse_update_desktop_file -i -n blender
%else
# Install blender template desktop file.
desktop-file-install --dir=%{buildroot}%{_datadir}/applications %{SOURCE7}
# Validate blender.desktop
desktop-file-validate %{buildroot}%{_datadir}/applications/blender.desktop
desktop-file-validate %{buildroot}%{_datadir}/applications/x-blend.desktop
%endif
find . -name blender-softwaregl -print -exec cp -v {} %{buildroot}%{_bindir}/ \;

%post
%mime_database_post
%desktop_database_post
touch --no-create %{_datadir}/icons/hicolor >/dev/null 2>&1 ||:

%postun
%mime_database_postun
%desktop_database_postun
if [ $1 -eq 0 ] ; then
    touch --no-create %{_datadir}/icons/hicolor >/dev/null 2>&1 ||:
    gtk-update-icon-cache %{_datadir}/icons/hicolor >/dev/null 2>&1 ||:
fi

%posttrans
gtk-update-icon-cache %{_datadir}/icons/hicolor >/dev/null 2>&1 ||:

%files lang -f %{name}.lang
%defattr (-, root, root)
%{_datadir}/%{name}/%{_version}/datafiles/locale/

%files
%defattr (-, root, root)
%{_bindir}/*
%{_mandir}/man1/*
%dir %{_datadir}/%{name}
%dir %{_datadir}/%{name}/%{_version}
%dir %{_datadir}/%{name}/%{_version}/datafiles
%ifnarch ppc %power64
%if 0%{?is_opensuse} == 1
%{_datadir}/%{name}/%{_version}/datafiles/colormanagement/
%endif
%endif
%{_datadir}/%{name}/%{_version}/scripts/
%{_datadir}/applications/blender.desktop
%{_datadir}/applications/x-blend.desktop
%{_datadir}/icons/hicolor/*/apps/blender.png
%{_datadir}/icons/hicolor/scalable/apps/blender.svg
%{_datadir}/pixmaps/blender.svg
%{_datadir}/pixmaps/blender.xpm
%{_datadir}/pixmaps/blender.png
%dir %{_datadir}/appdata
%{_datadir}/appdata/*.appdata.xml
%if %{documentation} == 0
%doc %{_docdir}/%{name}
%else
%files doc
%defattr (-, root, root)
%doc doc/
%endif

%changelog