Skip to content

Instantly share code, notes, and snippets.

@brothermechanic
Created February 14, 2020 19:06
Show Gist options
  • Save brothermechanic/8670b597ac324eff3d61d1624640aedb to your computer and use it in GitHub Desktop.
Save brothermechanic/8670b597ac324eff3d61d1624640aedb to your computer and use it in GitHub Desktop.
blender-9999-r1.ebuild
# Copyright 1999-2017 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
EAPI=7
PYTHON_COMPAT=( python3_7 )
inherit git-r3 check-reqs cmake-utils python-single-r1 gnome2-utils xdg-utils pax-utils toolchain-funcs flag-o-matic
DESCRIPTION="3D Creation/Animation/Publishing System"
HOMEPAGE="http://www.blender.org/"
EGIT_REPO_URI="http://git.blender.org/blender.git"
#EGIT_BRANCH="master"
LICENSE="|| ( GPL-2 BL )"
SLOT="28"
KEYWORDS=""
IUSE_DESKTOP="-portable +blender +X +addons +addons-contrib +nls -ndof -player"
IUSE_GPU="+opengl cuda opencl -sm_30 -sm_35 -sm_50 -sm_52 -sm_61 -sm_70"
IUSE_LIBS="+cycles -sdl jack openal freestyle -osl +openvdb +opensubdiv +opencolorio +openimageio +collada -alembic +fftw +oidn +usd"
IUSE_CPU="openmp -embree +sse"
IUSE_TEST="-valgrind -debug -doc"
IUSE_IMAGE="-dpx -dds +openexr jpeg2k tiff +hdr"
IUSE_CODEC="avi +ffmpeg -sndfile +quicktime"
IUSE_COMPRESSION="-lzma +lzo"
IUSE_MODIFIERS="+fluid +smoke +oceansim +quadriflow"
IUSE="${IUSE_DESKTOP} ${IUSE_GPU} ${IUSE_LIBS} ${IUSE_CPU} ${IUSE_TEST} ${IUSE_IMAGE} ${IUSE_CODEC} ${IUSE_COMPRESSION} ${IUSE_MODIFIERS}"
REQUIRED_USE="${PYTHON_REQUIRED_USE}
fluid ( fftw )
oceansim ( fftw )
smoke ( fftw )
tiff ( openimageio )
openexr ( openimageio )
cuda? ( cycles openimageio )
cycles? ( openexr tiff openimageio opencolorio )
osl? ( cycles )
embree? ( cycles )
oidn? ( cycles )"
LANGS="en ar bg ca cs de el es es_ES fa fi fr he hr hu id it ja ky ne nl pl pt pt_BR ru sr sr@latin sv tr uk zh_CN zh_TW"
for X in ${LANGS} ; do
IUSE+=" linguas_${X}"
REQUIRED_USE+=" linguas_${X}? ( nls )"
done
RDEPEND="${PYTHON_DEPS}
dev-libs/jemalloc
dev-python/numpy
dev-python/requests
sys-libs/zlib
smoke? ( sci-libs/fftw:3.0 )
media-libs/freetype
media-libs/libpng:0=
virtual/libintl
virtual/jpeg:0=
dev-libs/boost[nls?,threads(+)]
opengl? (
virtual/opengl
media-libs/glew:*
virtual/glu
)
X? (
x11-libs/libXi
x11-libs/libX11
x11-libs/libXxf86vm
)
opencolorio? ( media-libs/opencolorio )
cycles? (
openimageio? ( >=media-libs/openimageio-1.1.5 )
cuda? ( dev-util/nvidia-cuda-toolkit )
osl? ( media-libs/osl )
embree? ( media-libs/embree[static-libs,raymask] )
openvdb? ( media-gfx/openvdb
dev-cpp/tbb )
)
sdl? ( media-libs/libsdl[sound,joystick] )
tiff? ( media-libs/tiff:0 )
openexr? ( media-libs/openexr )
ffmpeg? ( >=media-video/ffmpeg-2.2[x264,xvid,mp3,encode,jpeg2k?] )
jpeg2k? ( media-libs/openjpeg:0 )
jack? ( media-sound/jack-audio-connection-kit )
sndfile? ( media-libs/libsndfile )
collada? ( media-libs/opencollada )
ndof? (
app-misc/spacenavd
dev-libs/libspnav
)
quicktime? ( media-libs/libquicktime )
valgrind? ( dev-util/valgrind )
lzma? ( app-arch/lzma )
lzo? ( dev-libs/lzo )
alembic? ( media-gfx/alembic )
opencl? ( app-eselect/eselect-opencl )
opensubdiv? ( media-libs/opensubdiv[-opencl,-cuda] )
nls? ( virtual/libiconv )
oidn? ( media-libs/oidn )"
DEPEND="${RDEPEND}
dev-cpp/eigen:3
nls? ( sys-devel/gettext )
doc? (
dev-python/sphinx
app-doc/doxygen[-nodot(-),dot(+)]
)"
#PATCHES=(
# "${FILESDIR}/blender-doxyfile.patch"
#)
CMAKE_BUILD_TYPE="Release"
blender_check_requirements() {
[[ ${MERGE_TYPE} != binary ]] && use openmp && tc-check-openmp
if use doc; then
CHECKREQS_DISK_BUILD="4G" check-reqs_pkg_pretend
fi
}
pkg_pretend() {
blender_check_requirements
}
pkg_setup() {
blender_check_requirements
python-single-r1_pkg_setup
}
src_prepare() {
# remove some bundled deps
rm -r \
extern/glew \
extern/glew-es \
extern/Eigen3 \
extern/lzma \
extern/lzo \
extern/gtest \
|| die
if use addons ; then
ewarn "$(echo "Bundled addons")"
else
rm -r release/scripts/addons/*
fi
if use addons-contrib ; then
ewarn "$(echo "Bundled addons")"
else
rm -r release/scripts/addons_contrib/*
fi
default
# we don't want static glew, but it's scattered across
# multiple files that differ from version to version
# !!!CHECK THIS SED ON EVERY VERSION BUMP!!!
local file
while IFS="" read -d $'\0' -r file ; do
sed -i -e '/-DGLEW_STATIC/d' "${file}" || die
done < <(find . -type f -name "CMakeLists.txt")
# Disable MS Windows help generation. The variable doesn't do what it
# it sounds like.
sed -e "s|GENERATE_HTMLHELP = YES|GENERATE_HTMLHELP = NO|" \
-i doc/doxygen/Doxyfile || die
ewarn "$(echo "Remaining bundled dependencies:";
( find extern -mindepth 1 -maxdepth 1 -type d; ) | sed 's|^|- |')"
# linguas cleanup
local i
if ! use nls; then
rm -r "${S}"/release/datafiles/locale || die
else
if [[ -n "${LINGUAS+x}" ]] ; then
cd "${S}"/release/datafiles/locale/po
for i in *.po ; do
mylang=${i%.po}
has ${mylang} ${LINGUAS} || { rm -r ${i} || die ; }
done
fi
fi
cmake-utils_src_prepare
}
src_configure() {
append-flags -funsigned-char -fno-strict-aliasing
local mycmakeargs=""
#CUDA Kernel Selection
local CUDA_ARCH=""
if use cuda; then
if use sm_30; then
if [[ -n "${CUDA_ARCH}" ]] ; then
CUDA_ARCH="${CUDA_ARCH};sm_30"
else
CUDA_ARCH="sm_30"
fi
fi
if use sm_35; then
if [[ -n "${CUDA_ARCH}" ]] ; then
CUDA_ARCH="${CUDA_ARCH};sm_35"
else
CUDA_ARCH="sm_35"
fi
fi
if use sm_50; then
if [[ -n "${CUDA_ARCH}" ]] ; then
CUDA_ARCH="${CUDA_ARCH};sm_50"
else
CUDA_ARCH="sm_50"
fi
fi
if use sm_52; then
if [[ -n "${CUDA_ARCH}" ]] ; then
CUDA_ARCH="${CUDA_ARCH};sm_52"
else
CUDA_ARCH="sm_52"
fi
fi
if use sm_61; then
if [[ -n "${CUDA_ARCH}" ]] ; then
CUDA_ARCH="${CUDA_ARCH};sm_61"
else
CUDA_ARCH="sm_61"
fi
fi
if use sm_70; then
if [[ -n "${CUDA_ARCH}" ]] ; then
CUDA_ARCH="${CUDA_ARCH};sm_70"
else
CUDA_ARCH="sm_70"
fi
fi
#If a kernel isn't selected then all of them are built by default
if [ -n "${CUDA_ARCH}" ] ; then
mycmakeargs+=(
-DCYCLES_CUDA_BINARIES_ARCH=${CUDA_ARCH}
)
fi
mycmakeargs+=(
-DWITH_CYCLES_CUDA=ON
-DWITH_CYCLES_CUDA_BINARIES=ON
-DCUDA_INCLUDES=/opt/cuda/include
-DCUDA_LIBRARIES=/opt/cuda/lib64
-DCUDA_NVCC_EXECUDABLE=/opt/cuda/bin/nvcc
-DCUDA_NVCC_FLAGS=-std=c++11
)
fi
mycmakeargs+=(
-DCMAKE_INSTALL_PREFIX=/usr
-DPYTHON_VERSION=${EPYTHON/python/}
-DPYTHON_LIBRARY=$(python_get_library_path)
-DPYTHON_INCLUDE_DIR=$(python_get_includedir)
-DWITH_PYTHON_INSTALL=$(usex portable)
-DWITH_PYTHON_INSTALL_NUMPY=$(usex portable)
-DWITH_PYTHON_INSTALL_REQUESTS=$(usex portable)
-DWITH_PYTHON_MODULE=$(usex !X)
-DWITH_HEADLESS=$(usex !X)
-DWITH_BLENDER=$(usex blender)
-DWITH_ALEMBIC=$(usex alembic)
-DWITH_CODEC_AVI=$(usex avi)
-DWITH_CODEC_FFMPEG=$(usex ffmpeg)
-DWITH_CODEC_SNDFILE=$(usex sndfile)
-DWITH_FFTW3=$(usex fftw)
-DWITH_CPU_SSE=$(usex sse)
-DWITH_CYCLES=$(usex cycles)
-DWITH_CYCLES_DEVICE_CUDA=$(usex cuda)
-DWITH_CYCLES_DEVICE_OPENCL=$(usex opencl)
-DWITH_CYCLES_EMBREE=$(usex embree)
-DWITH_CYCLES_NATIVE_ONLY=$(usex cycles)
-DWITH_CYCLES_OSL=$(usex osl)
-DWITH_CYCLES_STANDALONE=OFF
-DWITH_CYCLES_STANDALONE_GUI=OFF
-DWITH_FREESTYLE=$(usex freestyle)
-DWITH_X11=$(usex X)
-DWITH_GHOST_XDND=$(usex X)
-DWITH_IMAGE_CINEON=$(usex dpx)
-DWITH_IMAGE_DDS=$(usex dds)
-DWITH_IMAGE_HDR=$(usex hdr)
-DWITH_IMAGE_OPENEXR=$(usex openexr)
-DWITH_IMAGE_OPENJPEG=$(usex jpeg2k)
-DWITH_IMAGE_TIFF=$(usex tiff)
-DWITH_INPUT_NDOF=$(usex ndof)
-DWITH_INSTALL_PORTABLE=$(usex portable)
-DWITH_INTERNATIONAL=$(usex nls)
-DWITH_JACK=$(usex jack)
-DWITH_LZMA=$(usex lzma)
-DWITH_LZO=$(usex lzo)
-DWITH_VALGRIND=$(usex valgrind)
-DWITH_MOD_FLUID=$(usex fluid)
-DWITH_MOD_OCEANSIM=$(usex oceansim)
-DWITH_MOD_SMOKE=$(usex smoke)
-DWITH_OPENAL=$(usex openal)
-DWITH_OPENCOLLADA=$(usex collada)
-DWITH_OPENCOLORIO=$(usex opencolorio)
-DWITH_OPENGL=$(usex opengl)
-DWITH_OPENIMAGEDENOISE=$(usex oidn)
-DWITH_OPENIMAGEIO=$(usex openimageio)
-DWITH_OPENMP=$(usex openmp)
-DWITH_OPENSUBDIV=$(usex opensubdiv)
-DWITH_OPENVDB=$(usex openvdb)
-DWITH_OPENVDB_BLOSC=$(usex openvdb)
-DWITH_RAYOPTIMIZATION=$(usex sse)
-DWITH_QUADRIFLOW=$(usex quadriflow)
-DWITH_SDL=$(usex sdl)
-DWITH_STATIC_LIBS=$(usex portable)
-DWITH_SYSTEM_EIGEN3=$(usex !portable)
-DWITH_SYSTEM_GLES=$(usex !portable)
-DWITH_SYSTEM_GLEW=$(usex !portable)
-DWITH_SYSTEM_LZO=$(usex !portable)
-DWITH_GHOST_DEBUG=$(usex debug)
-DWITH_CXX_GUARDEDALLOC=$(usex debug)
-DWITH_USD=$(usex usd)
-DWITH_USD=OFF
)
cmake-utils_src_configure
}
src_compile() {
cmake-utils_src_compile
if use doc; then
einfo "Generating Blender C/C++ API docs ..."
cd "${CMAKE_USE_DIR}"/doc/doxygen || die
doxygen -u Doxyfile
doxygen || die "doxygen failed to build API docs."
cd "${CMAKE_USE_DIR}" || die
einfo "Generating (BPY) Blender Python API docs ..."
"${BUILD_DIR}"/bin/blender --background --python doc/python_api/sphinx_doc_gen.py -noaudio || die "blender failed."
cd "${CMAKE_USE_DIR}"/doc/python_api || die
sphinx-build sphinx-in BPY_API || die "sphinx failed."
fi
}
src_test() { :; }
src_install() {
# Pax mark blender for hardened support.
pax-mark m "${CMAKE_BUILD_DIR}"/bin/blender
if use doc; then
docinto "html/API/python"
dodoc -r "${CMAKE_USE_DIR}"/doc/python_api/BPY_API/.
docinto "html/API/blender"
dodoc -r "${CMAKE_USE_DIR}"/doc/doxygen/html/.
fi
cmake-utils_src_install
# fix doc installdir
docinto "html"
dodoc "${CMAKE_USE_DIR}"/release/text/readme.html
rm -r "${ED%/}"/usr/share/doc/blender || die
python_fix_shebang "${ED%/}/usr/bin/blender-thumbnailer.py"
python_optimize "${ED%/}/usr/share/blender/${MY_PV}/scripts"
}
pkg_preinst() {
gnome2_icon_savelist
}
pkg_postinst() {
elog
elog "Blender compiles from master thunk by default"
elog
elog "There is some my prefer blender settings as patches"
elog "find them in cg/local-patches/blender/"
elog "To apply someone copy them in "
elog "/etc/portage/patches/media-gfx/blender/"
elog "or create simlink"
elog
gnome2_icon_cache_update
xdg_mimeinfo_database_update
}
pkg_postrm() {
gnome2_icon_cache_update
xdg_mimeinfo_database_update
ewarn ""
ewarn "You may want to remove the following directory."
ewarn "~/.config/${PN}/${MY_PV}/cache/"
ewarn "It may contain extra render kernels not tracked by portage"
ewarn ""
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment