1SUMMARY="3D Creation/Animation/Publishing System"
2DESCRIPTION="Blender is the free and open source 3D creation suite. It \
3supports the entirety of the 3D pipeline���modeling, rigging, animation, \
4simulation, rendering, compositing and motion tracking, even video editing \
5and game creation.
6Advanced users employ Blender���s API for Python scripting to customize the \
7application and write specialized tools; often these are included in Blender���s \
8future releases. Blender is well suited to individuals and small studios who \
9benefit from its unified pipeline and responsive development process."
10HOMEPAGE="https://www.blender.org/"
11COPYRIGHT="2002-2018 Blender Foundation"
12LICENSE="GNU GPL v2"
13REVISION="27"
14SOURCE_URI="https://download.blender.org/source/blender-$portVersion.tar.gz"
15CHECKSUM_SHA256="4c944c304a49e68ac687ea06f5758204def049b66dc211e1cffa1857716393bc"
16PATCHES="
17	blender-$portVersion.patchset
18	"
19ADDITIONAL_FILES="
20	blender.rdef.in
21	Blender.sh
22	"
23
24ARCHITECTURES="all !x86_gcc2"
25SECONDARY_ARCHITECTURES="x86"
26
27PYTHON_VERSION="3.9"
28
29PROVIDES="
30	blender$secondaryArchSuffix = $portVersion
31	app:blender
32	cmd:blender_thumbnailer.py${secondaryArchSuffix}
33	"
34REQUIRES="
35	haiku$secondaryArchSuffix
36	lib:libalembic$secondaryArchSuffix
37	lib:libavcodec$secondaryArchSuffix
38	lib:libavdevice$secondaryArchSuffix
39	lib:libboost_atomic$secondaryArchSuffix
40	lib:libboost_chrono$secondaryArchSuffix
41	lib:libboost_date_time$secondaryArchSuffix
42	lib:libboost_filesystem$secondaryArchSuffix
43	lib:libboost_locale$secondaryArchSuffix
44	lib:libboost_regex$secondaryArchSuffix
45	lib:libboost_system$secondaryArchSuffix
46	lib:libboost_thread$secondaryArchSuffix
47	lib:libexecinfo$secondaryArchSuffix
48	lib:libfftw3$secondaryArchSuffix
49	lib:libfreetype$secondaryArchSuffix
50	lib:libgcc_s$secondaryArchSuffix
51	lib:libgl$secondaryArchSuffix
52	lib:libglew$secondaryArchSuffix
53	lib:libglu$secondaryArchSuffix
54	lib:libgomp$secondaryArchSuffix
55	lib:libhdf5$secondaryArchSuffix
56	lib:libiconv$secondaryArchSuffix
57	lib:libicui18n$secondaryArchSuffix
58	lib:libicuuc$secondaryArchSuffix
59	lib:libiex_3_0$secondaryArchSuffix
60	lib:libilmthread_3_0$secondaryArchSuffix
61	lib:libimath_3_0$secondaryArchSuffix
62	lib:libLLVM_9$secondaryArchSuffix
63	lib:liblzma$secondaryArchSuffix
64	lib:liblzo2$secondaryArchSuffix
65	lib:libopenal$secondaryArchSuffix
66	lib:libopencolladabaseutils$secondaryArchSuffix
67	lib:libopencolorio$secondaryArchSuffix
68	lib:libopenimageio$secondaryArchSuffix
69#	lib:libopenvdb$secondaryArchSuffix
70	lib:libosdCPU$secondaryArchSuffix
71	lib:libosdGPU$secondaryArchSuffix
72#	lib:liboslcomp$secondaryArchSuffix
73	lib:libpcre$secondaryArchSuffix
74	lib:libpng16$secondaryArchSuffix
75	lib:libpugixml$secondaryArchSuffix
76	lib:libpython${PYTHON_VERSION}$secondaryArchSuffix
77	lib:libsdl2_2.0$secondaryArchSuffix
78	lib:libsndfile$secondaryArchSuffix
79	lib:libtbb$secondaryArchSuffix
80	lib:libtiff$secondaryArchSuffix
81	lib:libtinyxml$secondaryArchSuffix
82	lib:libturbojpeg$secondaryArchSuffix
83	lib:libxml2$secondaryArchSuffix
84	lib:libyaml_cpp$secondaryArchSuffix
85	lib:libz$secondaryArchSuffix
86	"
87
88BUILD_REQUIRES="
89	haiku${secondaryArchSuffix}_devel
90	devel:eigen$secondaryArchSuffix
91	devel:libalembic$secondaryArchSuffix
92	devel:libavcodec$secondaryArchSuffix
93	devel:libavdevice$secondaryArchSuffix
94	devel:libboost_atomic$secondaryArchSuffix >= 1.69.0
95	devel:libboost_chrono$secondaryArchSuffix >= 1.69.0
96	devel:libboost_date_time$secondaryArchSuffix >= 1.69.0
97	devel:libboost_filesystem$secondaryArchSuffix >= 1.69.0
98	devel:libboost_locale$secondaryArchSuffix >= 1.69.0
99	devel:libboost_regex$secondaryArchSuffix >= 1.69.0
100	devel:libboost_system$secondaryArchSuffix >= 1.69.0
101	devel:libboost_thread$secondaryArchSuffix >= 1.69.0
102	devel:libexecinfo$secondaryArchSuffix
103	devel:libfftw3$secondaryArchSuffix
104	devel:libfreetype$secondaryArchSuffix
105	devel:libgl$secondaryArchSuffix
106	devel:libglew$secondaryArchSuffix
107	devel:libglu$secondaryArchSuffix
108	devel:libgomp$secondaryArchSuffix
109	devel:libhdf5$secondaryArchSuffix
110	devel:libiconv$secondaryArchSuffix
111	devel:libiex_3_0$secondaryArchSuffix
112	devel:libilmthread_3_0$secondaryArchSuffix
113	lib:libimath_3_0$secondaryArchSuffix
114	devel:libllvm_9$secondaryArchSuffix
115	devel:liblzma$secondaryArchSuffix
116	devel:liblzo2$secondaryArchSuffix
117	devel:libopenal$secondaryArchSuffix
118	devel:libopencolladabaseutils$secondaryArchSuffix
119	devel:libopencolorio$secondaryArchSuffix
120	devel:libopenimageio$secondaryArchSuffix
121#	devel:libopenvdb$secondaryArchSuffix
122	devel:libosdCPU$secondaryArchSuffix
123	devel:libosdGPU$secondaryArchSuffix
124#	devel:liboslcomp$secondaryArchSuffix
125	devel:libpcre$secondaryArchSuffix
126	devel:libpng16$secondaryArchSuffix
127	devel:libpugixml$secondaryArchSuffix
128	devel:libpython${PYTHON_VERSION}$secondaryArchSuffix
129	devel:libsdl2_2.0$secondaryArchSuffix
130	devel:libsndfile$secondaryArchSuffix
131	devel:libtbb$secondaryArchSuffix
132	devel:libtiff$secondaryArchSuffix
133	devel:libtinyxml$secondaryArchSuffix
134	devel:libturbojpeg$secondaryArchSuffix
135	devel:libxml2$secondaryArchSuffix
136	devel:libyaml_cpp$secondaryArchSuffix
137	devel:libz$secondaryArchSuffix
138	lib:libavdevice$secondaryArchSuffix # REQUIRED
139	"
140BUILD_PREREQUIRES="
141	cmd:cmake
142	cmd:find
143	cmd:gcc$secondaryArchSuffix
144	cmd:ld$secondaryArchSuffix
145	cmd:ninja
146	cmd:python${PYTHON_VERSION}
147	cmd:sed
148	cmd:strip
149	"
150
151
152PATCH()
153{
154	find . -type f -name "*.py" | xargs sed -i -e 's,python3,python3.9,g'
155}
156
157BUILD()
158{
159	# IMPORTANT INFORMATION, PLEASE READ BEFORE CHANGE ANYTHING.
160
161	# Please do not make any changes here if they not *REALLY* necessary.
162	# Keep this list short and tidy.
163
164	# Blender uses the following settings to produce the official releases:
165	# https://github.com/blender/blender/blob/master/build_files/cmake/config/blender_release.cmake
166	# This settings are used on Haiku too, but we had to override some settings.
167	# We should follow their settings as closely as possible to make interoperability possible between diferent platforms.
168	# In the recipe there are 3 group for the compiler flags:
169	# - platform specific (required to build Blender on Haiku)
170	# - bugous (these settings should work but they breaks build / functionality on Haiku, should be fixed)
171	# - missing deps (required dependency is not (yet) available for Haiku, should be ported)
172	# If a change required please put it in the correct category, if you are unsure, ask at HaikuPorts.
173
174	INCLUDE_DIR="`finddir B_SYSTEM_HEADERS_DIRECTORY`${secondaryArchSubDir}"
175
176	# Haiku specific settings
177	BLENDER_PLATFORM_SPECIFIC="-DCMAKE_INSTALL_PREFIX:PATH=$appsDir/Blender \
178		-DPYTHON_VERSION=${PYTHON_VERSION} \
179		-DPYTHON_INCLUDE_DIR=`finddir B_SYSTEM_HEADERS_DIRECTORY`/python${PYTHON_VERSION}/ \
180		-DPYTHON_LIBRARY=`finddir B_SYSTEM_LIB_DIRECTORY`${secondaryArchSubDir}/libpython${PYTHON_VERSION}.so.1.0 \
181		-DPYTHON_EXECUTABLE=/bin/python${PYTHON_VERSION} \
182		-DPYTHON_NUMPY_PATH=`finddir B_SYSTEM_LIB_DIRECTORY`/python${PYTHON_VERSION}/vendor-packages \
183		-DPYTHON_REQUESTS_PATH=`finddir B_SYSTEM_LIB_DIRECTORY`/python${PYTHON_VERSION}/vendor-packages \
184		-DOPENCOLLADA_COLLADABASEUTILS_INCLUDE_DIR=${INCLUDE_DIR}/opencollada/COLLADABaseUtils \
185		-DOPENCOLLADA_COLLADAFRAMEWORK_INCLUDE_DIR=${INCLUDE_DIR}/opencollada/COLLADAFramework \
186		-DOPENCOLLADA_COLLADASAXFRAMEWORKLOADER_INCLUDE_DIR=${INCLUDE_DIR}/opencollada/COLLADASaxFrameworkLoader \
187		-DOPENCOLLADA_COLLADASTREAMWRITER_INCLUDE_DIR=${INCLUDE_DIR}/opencollada/COLLADAStreamWriter \
188		-DOPENCOLLADA_GENERATEDSAXPARSER_INCLUDE_DIR=${INCLUDE_DIR}/opencollada/GeneratedSaxParser \
189		-DOPENJPEG_INCLUDE_DIR=${INCLUDE_DIR} \
190		-DOPENJPEG_LIBRARY=`finddir B_SYSTEM_LIB_DIRECTORY`${secondaryArchSubDir} \
191		-DOPENSUBDIV_INCLUDE_DIR=${INCLUDE_DIR} \
192		-DZLIB_LIBRARY_RELEASE=`finddir B_SYSTEM_LIB_DIRECTORY`${secondaryArchSubDir}/libz.so.1 \
193		-DWITH_GHOST_SDL=ON \
194		-DWITH_BUILDINFO=OFF \
195		-DWITH_OPENCOLORIO=OFF \
196		-DWITH_MOD_FLUID=OFF \
197		-DWITH_PYTHON_INSTALL=OFF \
198		-DWITH_PYTHON_INSTALL_NUMPY=OFF \
199		-DWITH_PYTHON_INSTALL_REQUESTS=OFF \
200		-DWITH_PYTHON_MODULE=OFF \
201		-DWITH_PYTHON_SAFETY=OFF \
202		-DCMAKE_SKIP_RPATH=ON \
203		-Wno-dev"
204
205	# Release settings breaks build on Haiku
206	BLENDER_BUGOUS="-DWITH_CYCLES_LOGGING=OFF \
207		-DWITH_GAMEENGINE_DECKLINK=OFF \
208		-DWITH_GTESTS=OFF \
209		-DWITH_SYSTEM_EIGEN3=ON \
210		-DWITH_SYSTEM_LZO=ON"
211
212	# Missing deps on Haiku
213	BLENDER_MISSING="-DWITH_JACK=OFF \
214		-DWITH_MEM_JEMALLOC=OFF \
215		-DWITH_INPUT_NDOF=OFF"
216
217	# Extra CXX Flags
218	BLENDER_CXX="-std=c++11"
219
220	mkdir -p build_haiku
221	cd build_haiku
222
223	cmake .. \
224		-G Ninja \
225		-DCMAKE_BUILD_TYPE=Release \
226		-C ../build_files/cmake/config/blender_release.cmake \
227		$BLENDER_PLATFORM_SPECIFIC \
228		$BLENDER_BUGOUS \
229		$BLENDER_MISSING \
230		-DCMAKE_CXX_FLAGS="$BLENDER_CXX"
231
232	ninja $jobArgs
233}
234
235INSTALL()
236{
237	cd build_haiku
238	ninja install $jobArgs
239
240	mv $appsDir/Blender/blender $appsDir/Blender/Blender
241
242	local MAJOR="`echo "$portVersion" | cut -d. -f1`"
243	local MIDDLE="`echo "$portVersion" | cut -d. -f2 | sed 's/[a-z]*//g'`"
244	local MINOR="`echo 0`"
245	sed \
246		-e "s|@MAJOR@|$MAJOR|" \
247		-e "s|@MIDDLE@|$MIDDLE|" \
248		-e "s|@MINOR@|$MINOR|" \
249		$portDir/additional-files/blender.rdef.in > blender.rdef
250
251	addResourcesToBinaries blender.rdef \
252		$appsDir/Blender/Blender
253
254	# Startscript for windowed mode (WORKAROUND)
255	cp $portDir/additional-files/Blender.sh $appsDir/Blender/
256	chmod +x $appsDir/Blender/Blender.sh
257
258	# Installing extra-attribs
259	rc blender.rdef
260	resattr -o $appsDir/Blender/Blender.sh \
261		blender.rsrc
262
263	cd $appsDir/Blender
264	mkdir -p $docDir/blender
265
266	mv GPL-license.txt GPL3-license.txt \
267		LICENSE-bfont.ttf.txt jemalloc-license.txt \
268		Python-license.txt copyright.txt readme.html \
269		blender.svg ocio-license.txt LICENSE-bmonofont-i18n.ttf.txt \
270		LICENSE-droidsans.ttf.txt $docDir/blender
271
272	rm -rf blender.desktop
273
274	addAppDeskbarSymlink $appsDir/Blender/Blender.sh Blender
275
276	mkdir -p $binDir
277	ln -s $appsDir/Blender/blender_thumbnailer.py \
278		$binDir/blender_thumbnailer.py
279}
280
281TEST()
282{
283	cd build_haiku
284	# The whole testcase is around 1GB and not included. Get it from here:
285	# svn checkout https://svn.blender.org/svnroot/bf-blender/trunk/lib/tests
286	# and put it in "work-2.xx/sources/lib"
287	make test
288}
289