X-Git-Url: https://git.sthu.org/?p=shuber-gentoo-overlay.git;a=blobdiff_plain;f=media-gfx%2Fblender%2Fblender-2.54_beta.ebuild;fp=media-gfx%2Fblender%2Fblender-2.54_beta.ebuild;h=46f570052fa343e21ed25aac3888fba8dc675708;hp=eef8fff3646a2ad71c883cbb8ff62648f3c055b7;hb=8b982502e45e9b6b03f04f299562af416689159e;hpb=be2732a9a0efbf96a37bb0a56be1b4f173f975e1 diff --git a/media-gfx/blender/blender-2.54_beta.ebuild b/media-gfx/blender/blender-2.54_beta.ebuild index eef8fff..46f5700 100644 --- a/media-gfx/blender/blender-2.54_beta.ebuild +++ b/media-gfx/blender/blender-2.54_beta.ebuild @@ -3,49 +3,77 @@ # $Header: /var/cvsroot/gentoo-x86/media-gfx/blender/blender-2.49b.ebuild,v 1.3 2010/05/31 15:02:53 arfrever Exp $ EAPI=2 +#NEED_PYTHON="3.1" +PYTHON_DEPEND="3:3.1" +inherit eutils python versionator flag-o-matic toolchain-funcs -inherit multilib eutils python -IUSE="blender-game ffmpeg nls ogg openmp verse openal" +IUSE="+game-engine player +elbeem +openexr ffmpeg jpeg2k openal openmp \ + +dds debug doc fftw jack apidoc sndfile lcms tweak-mode sdl sse \ + redcode +zlib iconv" + +LANGS="en ar bg ca cs de el es fi fr hr it ja ko nl pl pt_BR ro ru sr sv uk zh_CN" +for X in ${LANGS} ; do + IUSE="${IUSE} linguas_${X}" +done + DESCRIPTION="3D Creation/Animation/Publishing System" HOMEPAGE="http://www.blender.org/" MY_P=${P//_/-} SRC_URI="http://download.blender.org/source/${MY_P}.tar.gz" -S="${S%_beta}"-beta -SLOT="0" -LICENSE="|| ( GPL-2 BL BSD )" -KEYWORDS="~amd64 ~ppc ~ppc64 ~sparc ~x86" -RDEPEND="ffmpeg? ( >=media-video/ffmpeg-0.5[encode,theora] ) - media-libs/jpeg - media-libs/openjpeg - media-libs/tiff - >=dev-lang/python-2.5 - nls? ( >=media-libs/freetype-2.0 - virtual/libintl - >=media-libs/ftgl-2.1 ) - openal? ( >=media-libs/openal-1.6.372 - >=media-libs/freealut-1.1.0-r1 ) - media-libs/openexr +SLOT="2.5" +LICENSE="|| ( GPL-2 BL )" +KEYWORDS="~amd64 ~x86" + +RDEPEND="media-libs/jpeg media-libs/libpng - blender-game? ( >=media-libs/libsdl-1.2[joystick] ) - >=media-libs/libsdl-1.2 - ogg? ( media-libs/libogg ) - virtual/opengl" + x11-libs/libXi + x11-libs/libX11 + media-libs/tiff + media-libs/libsamplerate + virtual/opengl + >=media-libs/freetype-2.0 + virtual/libintl + media-libs/glew + dev-cpp/eigen:2 + >=sci-physics/bullet-2.76 + iconv? ( virtual/libiconv ) + zlib? ( sys-libs/zlib ) + sdl? ( media-libs/libsdl[audio,joystick] ) + openexr? ( media-libs/openexr ) + ffmpeg? ( + >=media-video/ffmpeg-0.5[x264,xvid,mp3,encode,theora] + jpeg2k? ( >=media-video/ffmpeg-0.5[x264,xvid,mp3,encode,theora,jpeg2k] ) + ) + openal? ( >=media-libs/openal-1.6.372 ) + fftw? ( sci-libs/fftw:3.0 ) + jack? ( media-sound/jack-audio-connection-kit ) + sndfile? ( media-libs/libsndfile ) + lcms? ( media-libs/lcms )" DEPEND=">=dev-util/scons-0.98 - sys-devel/gcc[openmp?] + apidoc? ( + dev-python/sphinx + >=app-doc/doxygen-1.5.7[-nodot] + ) x11-base/xorg-server ${RDEPEND}" +# configure internationalization only if LINGUAS have more +# languages than 'en', otherwise must be disabled +if [[ ${LINGUAS} != "en" && -n ${LINGUAS} ]]; then + DEPEND="${DEPEND} + sys-devel/gettext" +fi + +S="${WORKDIR}/${MY_P}" blend_with() { local UWORD="$2" - if [ -z "${UWORD}" ]; then - UWORD="$1" - fi + [ -z "${UWORD}" ] && UWORD="$1" if useq $1; then echo "WITH_BF_${UWORD}=1" | tr '[:lower:]' '[:upper:]' \ >> "${S}"/user-config.py @@ -55,97 +83,268 @@ blend_with() { fi } +pkg_setup() { + enable_openmp=0 + if use openmp; then + if tc-has-openmp; then + enable_openmp=1 + else + ewarn "You are using gcc built without 'openmp' USE." + ewarn "Switch CXX to an OpenMP capable compiler." + die "Need openmp" + fi + fi +} + src_prepare() { - rm -f "${S}/release/scripts/bpymodules/"*.pyc + + epatch "${FILESDIR}"/${PN}-${SLOT}-desktop.patch + epatch "${FILESDIR}"/${PN}-${SLOT}-doxygen.patch + + # TODO: write a proper Makefile to replace the borked bmake script + epatch "${FILESDIR}"/${PN}-${SLOT}-bmake.patch + + # OpenJPEG + einfo "Removing bundled OpenJPEG ..." + rm -r extern/libopenjpeg + + # Glew + einfo "Removing bundled Glew ..." + rm -r extern/glew + epatch "${FILESDIR}"/${PN}-${SLOT}-glew.patch + + # Eigen2 + einfo "Removing bundled Eigen2 ..." + rm -r extern/Eigen2 + epatch "${FILESDIR}"/${PN}-${SLOT}-eigen.patch } src_configure() { - # add ffmpeg info to the scons build info -# cat <<- EOF >> "${S}"/user-config.py -# BF_FFMPEG="/usr" -# BF_FFMPEG_LIB="avdevice avformat avcodec swscale avutil" -# EOF - - # set python version to current version in use -# cat <<- EOF >> "${S}"/user-config.py -# BF_PYTHON_VERSION="$(python_get_version)" -# BF_PYTHON_INC="$(python_get_includedir)" -# BF_PYTHON_BINARY="$(PYTHON -a)" -# BF_PYTHON_LIB="python$(python_get_version)" -# EOF + # add system openjpeg into Scons build options. + cat <<- EOF >> "${S}"/user-config.py + BF_OPENJPEG="/usr" + BF_OPENJPEG_INC="/usr/include" + BF_OPENJPEG_LIB="openjpeg" + EOF + + # FIX: littlecms includes path aren't specified + if use lcms; then + cat <<- EOF >> "${S}"/user-config.py + BF_LCMS_INC="/usr/include/" + BF_LCMS_LIB="lcms" + BF_LCMS_LIBPATH="/usr/lib/" + EOF + fi - # add system openjpeg into scons build. -# cat <<- EOF >> "${S}"/user-config.py -# BF_OPENJPEG = "/usr" -# BF_OPENJPEG_INC = "/usr/include" -# BF_OPENJPEG_LIB = "openjpeg" -# EOF + #add iconv into Scons build options. + if use !elibc_glibc && use !elibc_uclibc && use iconv; then + cat <<- EOF >> "${S}"/user-config.py + WITH_BF_ICONV=1 + BF_ICONV="/usr" + EOF + fi - #set CFLAGS used in /etc/make.conf correctly + # configure internationalization only if LINGUAS have more + # languages than 'en', otherwise must be disabled + [[ -z ${LINGUAS} ]] || [[ ${LINGUAS} == "en" ]] && echo "WITH_BF_INTERNATIONAL=0" >> "${S}"/user-config.py - echo "CFLAGS= [`for i in ${CFLAGS[@]}; do printf "%s \'$i"\',; done`] " \ - | sed -e "s:,]: ]:" >> "${S}"/user-config.py + # configure Elbeem fluid system + use elbeem || echo "BF_NO_ELBEEM=1" >> "${S}"/user-config.py - echo "CXXFLAGS= [`for i in ${CFLAGS[@]}; do printf "%s \'$i"\',; done`]" \ - | sed -e "s:,]: ]:" >> "${S}"/user-config.py + # configure Tweak Mode + use tweak-mode && echo "BF_TWEAK_MODE=1" >> "${S}"/user-config.py - # check for blender-game USE flag. - # blender-game will merge with blenderplayer. + # FIX: Game Engine module needs to be active to build the Blender Player + if ! use game-engine && use player; then + elog "Forcing Game Engine [+game-engine] as required by Blender Player [+player]" + echo "WITH_BF_GAMEENGINE=1" >> "${S}"/user-config.py + else + blend_with game-engine gameengine + fi + # set CFLAGS used in /etc/make.conf correctly + echo "CFLAGS=[`for i in ${CFLAGS[@]}; do printf "%s \'$i"\',; done`] " \ + | sed -e "s:,]: ]:" >> "${S}"/user-config.py + + # set CXXFLAGS used in /etc/make.conf correctly + local FILTERED_CXXFLAGS="`for i in ${CXXFLAGS[@]}; do printf "%s \'$i"\',; done`" + echo "CXXFLAGS=[${FILTERED_CXXFLAGS}]" | sed -e "s:,]: ]:" >> "${S}"/user-config.py + echo "BGE_CXXFLAGS=[${FILTERED_CXXFLAGS}]" | sed -e "s:,]: ]:" >> "${S}"/user-config.py + + # reset general options passed to the C/C++ compilers (useless hardcoded flags) + # FIX: forcing '-funsigned-char' fixes an anti-aliasing issue with menu + # shadows, see bug #276338 for reference + echo "CCFLAGS= ['-funsigned-char', '-D_LARGEFILE_SOURCE', '-D_FILE_OFFSET_BITS=64']" >> "${S}"/user-config.py + + # set LDFLAGS used in /etc/make.conf correctly + local FILTERED_LDFLAGS="`for i in ${LDFLAGS[@]}; do printf "%s \'$i"\',; done`" + echo "LINKFLAGS=[${FILTERED_LDFLAGS}]" | sed -e "s:,]: ]:" >> "${S}"/user-config.py + echo "PLATFORM_LINKFLAGS=[${FILTERED_LDFLAGS}]" | sed -e "s:,]: ]:" >> "${S}"/user-config.py + + # reset REL_* variables (useless hardcoded flags) + cat <<- EOF >> "${S}"/user-config.py + REL_CFLAGS=[] + REL_CXXFLAGS=[] + REL_CCFLAGS=[] + EOF + + # reset warning flags (useless for NON blender developers) + cat <<- EOF >> "${S}"/user-config.py + C_WARN =[ '-w', '-g0' ] + CC_WARN =[ '-w', '-g0' ] + CXX_WARN=[ '-w', '-g0' ] + EOF + + # detecting -j value from MAKEOPTS + local NUMJOBS="$( echo "${MAKEOPTS}" | sed -ne 's,.*-j\([[:digit:]]\+\).*,\1,p' )" + [[ -z "${NUMJOBS}" ]] && NUMJOBS=1 # resetting to -j1 for empty MAKEOPTS + + # generic settings which differ from the defaults from linux2-config.py + cat <<- EOF >> "${S}"/user-config.py + BF_OPENGL_LIB='GL GLU X11 Xi GLEW' + BF_INSTALLDIR="../install" + WITHOUT_BF_PYTHON_INSTALL=1 + BF_PYTHON="/usr" + BF_BUILDINFO=0 + BF_QUIET=1 + BF_NUMJOBS=${NUMJOBS} + BF_LINE_OVERWRITE=0 + WITH_BF_FHS=1 + WITH_BF_BINRELOC=0 + WITH_BF_STATICOPENGL=0 + WITH_BF_OPENMP=${enable_openmp} + EOF + + # configure WITH_BF* Scons build options for arg in \ - 'openal'\ - 'ffmpeg' \ - 'blender-game player' \ - 'blender-game gameengine' \ - 'nls international' \ - 'ogg' \ - 'openmp' \ - 'verse' ; do + 'sdl' \ + 'apidoc docs' \ + 'lcms' \ + 'jack' \ + 'sndfile' \ + 'openexr' \ + 'dds' \ + 'fftw fftw3' \ + 'jpeg2k openjpeg' \ + 'openal'\ + 'ffmpeg' \ + 'ffmpeg ogg' \ + 'player' \ + 'collada' \ + 'sse rayoptimization' \ + 'redcode' \ + 'zlib' \ + 'verse' ; do blend_with ${arg} done + + # enable debugging/testing support + use debug && echo "BF_DEBUG=1" >> "${S}"/user-config.py + use test && echo "BF_UNIT_TEST=1" >> "${S}"/user-config.py } src_compile() { - # scons uses -l differently -> remove it - scons ${MAKEOPTS/-l[0-9]} || die \ - '!!! Please add "${S}/scons.config" when filing bugs reports \ - to bugs.gentoo.org' + scons || die \ + '!!! Please add "${S}/scons.config" when filing bugs reports \ + to bugs.gentoo.org' - cd "${WORKDIR}"/install/linux2/plugins + einfo "Building plugins ..." + cd "${WORKDIR}"/install/plugins/ \ + || die "dir ${WORKDIR}/install/plugins/ does not exists" chmod 755 bmake - emake || die + + # FIX: plugins are built without respecting user's LDFLAGS + emake \ + CFLAGS="${CFLAGS} -fPIC" \ + LDFLAGS="$(raw-ldflags) -Bshareable" \ + > /dev/null \ + || die "plugins compilation failed" } src_install() { - - PVshort="${PV%_beta}" - + # creating binary wrapper + cat <<- EOF >> "${WORKDIR}/install/blender-${SLOT}" + #!/bin/sh + + # stop this script if the local blender path is a symlink + if [ -L \${HOME}/.blender ]; then + echo "Detected a symbolic link for \${HOME}/.blender" + echo "Sorry, to avoid dangerous situations, the Blender binary can" + echo "not be started until you have removed the symbolic link:" + echo " # rm -i \${HOME}/.blender" + exit 1 + fi + + export BLENDER_SYSTEM_SCRIPTS="/usr/share/blender/${SLOT}/scripts" + export BLENDER_SYSTEM_DATAFILES="/usr/share/blender/${SLOT}/datafiles" + exec /usr/bin/blender-bin-${SLOT} + EOF + + # install binaries exeinto /usr/bin/ - doexe "${WORKDIR}"/install/linux2/blender - use blender-game && doexe "${WORKDIR}"/install/linux2/blenderplayer + mv "${WORKDIR}/install/blender" "${WORKDIR}/install/blender-bin-${SLOT}" + doexe "${WORKDIR}/install/blender-bin-${SLOT}" + doexe "${WORKDIR}/install/blender-${SLOT}" + if use player; then + mv "${WORKDIR}"/install/blenderplayer \ + "${WORKDIR}/install/blenderplayer-${SLOT}" + doexe "${WORKDIR}"/install/blenderplayer + fi - dodir /usr/share/${PN} + # install plugins + exeinto /usr/share/${PN}/${SLOT}/textures + doexe "${WORKDIR}"/install/plugins/texture/*.so + exeinto /usr/share/${PN}/${SLOT}/sequences + doexe "${WORKDIR}"/install/plugins/sequence/*.so + insinto /usr/include/${PN}/${SLOT} + doins "${WORKDIR}"/install/plugins/include/*.h + rm -r "${WORKDIR}"/install/plugins || die - exeinto /usr/$(get_libdir)/${PN}/textures - doexe "${WORKDIR}"/install/linux2/plugins/texture/*.so - exeinto /usr/$(get_libdir)/${PN}/sequences - doexe "${WORKDIR}"/install/linux2/plugins/sequence/*.so - insinto /usr/include/${PN} - doins "${WORKDIR}"/install/linux2/plugins/include/*.h - insinto /usr/share/${PN} - doins -r "${WORKDIR}"/install/linux2/${PVshort}/scripts + # install desktop file insinto /usr/share/pixmaps - doins "${WORKDIR}"/install/linux2/icons/scalable/blender.svg + cp release/freedesktop/icons/scalable/blender.svg \ + release/freedesktop/icons/scalable/blender-${SLOT}.svg + doins release/freedesktop/icons/scalable/blender-${SLOT}.svg insinto /usr/share/applications - doins "${WORKDIR}"/blender-2.54-beta/release/freedesktop/blender.desktop + cp release/freedesktop/blender.desktop \ + release/freedesktop/blender-${SLOT}.desktop + doins release/freedesktop/blender-${SLOT}.desktop + + # install docs + use doc && dodoc release/text/BlenderQuickStart.pdf + if use apidoc; then + + einfo "Generating (BGE) Blender Game Engine API docs ..." + docinto "API/BGE_API" + dohtml -r "${WORKDIR}"/install/share/${PN}/${SLOT}/doc/* + rm -r "${WORKDIR}"/install/share/${PN}/${SLOT}/doc + + einfo "Generating Blender C/C++ API docs ..." + pushd "${S}"/doc > /dev/null + doxygen -u Doxyfile + doxygen || die "doxygen failed to build API docs." + docinto "API/blender" + dohtml -r html/* + popd > /dev/null + fi + + # final cleanup + rm -r "${WORKDIR}"/install/{Python-license.txt,icons,GPL-license.txt,copyright.txt} - dodoc "${WORKDIR}"/install/linux2/readme.html + # installing blender + insinto /usr/share/${PN}/${SLOT} + doins -r "${WORKDIR}"/install/2.54/* + doins release/VERSION + + # FIX: making all python scripts readable only by group 'users', + # so nobody can modify scripts apart root user, but python + # cache (*.pyc) can be written and shared across the users. + chown root:users -R "${D}/usr/share/${PN}/${SLOT}/scripts" || die + chmod 750 -R "${D}/usr/share/${PN}/${SLOT}/scripts" || die - insinto /etc/env.d - doins "${FILESDIR}/20${PN}" } pkg_preinst(){ @@ -156,18 +355,29 @@ pkg_preinst(){ } pkg_postinst(){ - env-update - - elog "blender uses python integration. As such, may have some" + echo + elog "Blender uses python integration. As such, may have some" elog "inherit risks with running unknown python scripting." - elog " " - elog "CVE-2008-1103-1.patch has been removed as it interferes" - elog "with autosave undo features. Up stream blender coders" - elog "have not addressed the CVE issue as the status is still" - elog "a CANDIDATE and not CONFIRMED." - elog " " + elog elog "It is recommended to change your blender temp directory" - elog "from /tmp to ~tmp or another tmp file under your home" - elog "directory. This can be done by starting blender, then" + elog "from /tmp to /home/user/tmp or another tmp file under your" + elog "home directory. This can be done by starting blender, then" elog "dragging the main menu down do display all paths." + elog + elog "Blender has its own internal rendering engine but you" + elog "can export to external renderers for image computation" + elog "like: YafRay[1], sunflow[2], PovRay[3] and luxrender[4]" + elog + elog "If you need one of them just emerge it:" + elog " [1] emerge -av media-gfx/yafray" + elog " [2] emerge -av media-gfx/sunflow" + elog " [3] emerge -av media-gfx/povray" + elog " [4] emerge -av media-gfx/luxrender" + elog + elog "When setting the Blender paths with the User Preferences" + elog "dialog box, remember to NOT declare your home's paths as:" + elog "~/.blender, but as: /home/user/.blender; in other words," + elog "DO NOT USE the tilde inside the paths, as Blender is not" + elog "able to handle it, ignoring your customizations." + }