d12ce22fffcc2fb62febe2c77d8c14ba629aa65a
[blender.git] / build_files / build_environment / install_deps.sh
1 #!/usr/bin/env bash
2 # ##### BEGIN GPL LICENSE BLOCK #####
3 #
4 #  This program is free software; you can redistribute it and/or
5 #  modify it under the terms of the GNU General Public License
6 #  as published by the Free Software Foundation; either version 2
7 #  of the License, or (at your option) any later version.
8 #
9 #  This program is distributed in the hope that it will be useful,
10 #  but WITHOUT ANY WARRANTY; without even the implied warranty of
11 #  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 #  GNU General Public License for more details.
13 #
14 #  You should have received a copy of the GNU General Public License
15 #  along with this program; if not, write to the Free Software Foundation,
16 #  Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17 #
18 # ##### END GPL LICENSE BLOCK #####
19
20 # A shell script installing/building all needed dependencies to build Blender, for some Linux distributions.
21
22 ##### Args and Help Handling #####
23
24 # Parse command line!
25 ARGS=$( \
26 getopt \
27 -o s:i:t:h \
28 --long source:,install:,tmp:,info:,threads:,help,show-deps,no-sudo,no-confirm,with-all,with-opencollada,\
29 ver-ocio:,ver-oiio:,ver-llvm:,ver-osl:,ver-osd:,ver-openvdb:,\
30 force-all,force-python,force-numpy,force-boost,\
31 force-ocio,force-openexr,force-oiio,force-llvm,force-osl,force-osd,force-openvdb,\
32 force-ffmpeg,force-opencollada,\
33 build-all,build-python,build-numpy,build-boost,\
34 build-ocio,build-openexr,build-oiio,build-llvm,build-osl,build-osd,build-openvdb,\
35 build-ffmpeg,build-opencollada,\
36 skip-python,skip-numpy,skip-boost,\
37 skip-ocio,skip-openexr,skip-oiio,skip-llvm,skip-osl,skip-osd,skip-openvdb,\
38 skip-ffmpeg,skip-opencollada \
39 -- "$@" \
40 )
41
42 COMMANDLINE=$@
43
44 DISTRO=""
45 RPM=""
46 SRC="$HOME/src/blender-deps"
47 INST="/opt/lib"
48 TMP="/tmp"
49 CWD=$PWD
50 INFO_PATH=$CWD
51 SCRIPT_DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
52
53 # Do not install some optional, potentially conflicting libs by default...
54 WITH_ALL=false
55
56 # Do not yet enable opencollada, use --with-opencollada (or --with-all) option to try it.
57 WITH_OPENCOLLADA=false
58
59 THREADS=$(nproc)
60
61 COMMON_INFO="\"Source code of dependencies needed to be compiled will be downloaded and extracted into '\$SRC'.
62 Built libs of dependencies needed to be compiled will be installed into '\$INST'.
63 Please edit \\\$SRC and/or \\\$INST variables at the beginning of this script,
64 or use --source/--install options, if you want to use other paths!
65
66 Number of threads for building: \$THREADS (automatically detected, use --threads=<nbr> to override it).
67 Full install: \$WITH_ALL (use --with-all option to enable it).
68 Building OpenCOLLADA: \$WITH_OPENCOLLADA (use --with-opencollada option to enable it).
69
70 Example:
71 Full install without OpenCOLLADA: --with-all --skip-opencollada
72
73 Use --help to show all available options!\""
74
75 ARGUMENTS_INFO="\"COMMAND LINE ARGUMENTS:
76     -h, --help
77         Show this message and exit.
78
79     --show-deps
80         Show main dependencies of Blender (including officially supported versions) and exit.
81
82     -s <path>, --source=<path>
83         Use a specific path where to store downloaded libraries sources (defaults to '\$SRC').
84
85     -i <path>, --install=<path>
86         Use a specific path where to install built libraries (defaults to '\$INST').
87
88     --tmp=<path>
89         Use a specific temp path (defaults to '\$TMP').
90
91     --info=<path>
92         Use a specific info path (to store BUILD_NOTES.txt, defaults to '\$INFO_PATH').
93
94     -t n, --threads=n
95         Use a specific number of threads when building the libraries (auto-detected as '\$THREADS').
96
97     --no-sudo
98         Disable use of sudo (this script won't be able to do much though, will just print needed packages...).
99
100     --no-confirm
101         Disable any interaction with user (suitable for automated run).
102
103     --with-all
104         By default, a number of optional and not-so-often needed libraries are not installed.
105         This option will try to install them, at the cost of potential conflicts (depending on
106         how your package system is set…).
107         Note this option also implies all other (more specific) --with-foo options below.
108
109     --with-opencollada
110         Build and install the OpenCOLLADA libraries.
111
112     --ver-ocio=<ver>
113         Force version of OCIO library.
114
115     --ver-oiio=<ver>
116         Force version of OIIO library.
117
118     --ver-llvm=<ver>
119         Force version of LLVM library.
120
121     --ver-osl=<ver>
122         Force version of OSL library.
123
124     --ver-osd=<ver>
125         Force version of OSD library.
126
127     --ver-openvdb=<ver>
128         Force version of OpenVDB library.
129
130     Note about the --ver-foo options:
131         It may not always work as expected (some libs are actually checked out from a git rev...), yet it might help
132         to fix some build issues (like LLVM mismatch with the version used by your graphic system).
133
134     --build-all
135         Force the build of all possible libraries.
136
137     --build-python
138         Force the build of Python.
139
140     --build-numpy
141         Force the build of NumPy.
142
143     --build-boost
144         Force the build of Boost.
145
146     --build-ocio
147         Force the build of OpenColorIO.
148
149     --build-openexr
150         Force the build of OpenEXR.
151
152     --build-oiio
153         Force the build of OpenImageIO.
154
155     --build-llvm
156         Force the build of LLVM.
157
158     --build-osl
159         Force the build of OpenShadingLanguage.
160
161     --build-osd
162         Force the build of OpenSubdiv.
163
164     --build-openvdb
165         Force the build of OpenVDB.
166
167     --build-opencollada
168         Force the build of OpenCOLLADA.
169
170     --build-ffmpeg
171         Force the build of FFMpeg.
172
173     Note about the --build-foo options:
174         * They force the script to prefer building dependencies rather than using available packages.
175           This may make things simpler and allow working around some distribution bugs, but on the other hand it will
176           use much more space on your hard drive.
177         * Please be careful with the Blender building options if you have both 'official' dev packages and
178           install_deps' built ones on your system, by default CMake will prefer official packages, which may lead to
179           linking issues. Please ensure your CMake configuration always uses all correct library paths.
180         * If the “force-built” library is a dependency of others, it will force the build
181           of those libraries as well (e.g. --build-boost also implies --build-oiio and --build-osl...).
182
183     --force-all
184         Force the rebuild of all built libraries.
185
186     --force-python
187         Force the rebuild of Python.
188
189     --force-numpy
190         Force the rebuild of NumPy.
191
192     --force-boost
193         Force the rebuild of Boost.
194
195     --force-ocio
196         Force the rebuild of OpenColorIO.
197
198     --force-openexr
199         Force the rebuild of OpenEXR.
200
201     --force-oiio
202         Force the rebuild of OpenImageIO.
203
204     --force-llvm
205         Force the rebuild of LLVM.
206
207     --force-osl
208         Force the rebuild of OpenShadingLanguage.
209
210     --force-osd
211         Force the rebuild of OpenSubdiv.
212
213     --force-openvdb
214         Force the rebuild of OpenVDB.
215
216     --force-opencollada
217         Force the rebuild of OpenCOLLADA.
218
219     --force-ffmpeg
220         Force the rebuild of FFMpeg.
221
222     Note about the --force-foo options:
223         * They obviously only have an effect if those libraries are built by this script
224           (i.e. if there is no available and satisfactory package)!
225         * If the “force-rebuilt” library is a dependency of others, it will force the rebuild
226           of those libraries too (e.g. --force-boost will also rebuild oiio and osl...).
227
228     --skip-python
229         Unconditionally skip Python installation/building.
230
231     --skip-numpy
232         Unconditionally skip NumPy installation/building.
233
234     --skip-boost
235         Unconditionally skip Boost installation/building.
236
237     --skip-ocio
238         Unconditionally skip OpenColorIO installation/building.
239
240     --skip-openexr
241         Unconditionally skip OpenEXR installation/building.
242
243     --skip-oiio
244         Unconditionally skip OpenImageIO installation/building.
245
246     --skip-llvm
247         Unconditionally skip LLVM installation/building.
248
249     --skip-osl
250         Unconditionally skip OpenShadingLanguage installation/building.
251
252     --skip-osd
253         Unconditionally skip OpenSubdiv installation/building.
254
255     --skip-openvdb
256         Unconditionally skip OpenVDB installation/building.
257
258     --skip-opencollada
259         Unconditionally skip OpenCOLLADA installation/building.
260
261     --skip-ffmpeg
262         Unconditionally skip FFMpeg installation/building.\""
263
264 ##### Main Vars #####
265
266 DO_SHOW_DEPS=false
267
268 SUDO="sudo"
269
270 NO_CONFIRM=false
271
272 PYTHON_VERSION="3.5.1"
273 PYTHON_VERSION_MIN="3.5"
274 PYTHON_FORCE_BUILD=false
275 PYTHON_FORCE_REBUILD=false
276 PYTHON_SKIP=false
277
278 NUMPY_VERSION="1.10.1"
279 NUMPY_VERSION_MIN="1.8"
280 NUMPY_FORCE_BUILD=false
281 NUMPY_FORCE_REBUILD=false
282 NUMPY_SKIP=false
283
284 BOOST_VERSION="1.60.0"
285 BOOST_VERSION_MIN="1.49"
286 BOOST_FORCE_BUILD=false
287 BOOST_FORCE_REBUILD=false
288 BOOST_SKIP=false
289
290 OCIO_VERSION="1.0.9"
291 OCIO_VERSION_MIN="1.0"
292 OCIO_FORCE_BUILD=false
293 OCIO_FORCE_REBUILD=false
294 OCIO_SKIP=false
295
296 OPENEXR_VERSION="2.2.0"
297 OPENEXR_VERSION_MIN="2.0.1"
298 ILMBASE_VERSION="2.2.0"
299 ILMBASE_VERSION_MIN="2.2"
300 OPENEXR_FORCE_BUILD=false
301 OPENEXR_FORCE_REBUILD=false
302 OPENEXR_SKIP=false
303 _with_built_openexr=false
304
305 OIIO_VERSION="1.6.9"
306 OIIO_VERSION_MIN="1.6.0"
307 OIIO_VERSION_MAX="1.9.0"  # UNKNOWN currently # Not supported by current OSL...
308 OIIO_FORCE_BUILD=false
309 OIIO_FORCE_REBUILD=false
310 OIIO_SKIP=false
311
312 LLVM_VERSION="3.4"
313 LLVM_VERSION_MIN="3.4"
314 LLVM_VERSION_FOUND=""
315 LLVM_FORCE_BUILD=false
316 LLVM_FORCE_REBUILD=false
317 LLVM_SKIP=false
318
319 # OSL needs to be compiled for now!
320 OSL_VERSION="1.6.9"
321 OSL_VERSION_MIN=$OSL_VERSION
322 OSL_FORCE_BUILD=false
323 OSL_FORCE_REBUILD=false
324 OSL_SKIP=false
325
326 # OpenSubdiv needs to be compiled for now
327 OSD_VERSION="3.0.2"
328 OSD_VERSION_MIN=$OSD_VERSION
329 OSD_FORCE_BUILD=false
330 OSD_FORCE_REBUILD=false
331 OSD_SKIP=false
332
333 # OpenVDB needs to be compiled for now
334 OPENVDB_BLOSC_VERSION="1.7.0"
335
336 OPENVDB_VERSION="3.1.0"
337 OPENVDB_VERSION_MIN=$OPENVDB_VERSION
338 OPENVDB_FORCE_BUILD=false
339 OPENVDB_FORCE_REBUILD=false
340 OPENVDB_SKIP=false
341
342 # Version??
343 OPENCOLLADA_VERSION="1.3"
344 OPENCOLLADA_FORCE_BUILD=true  # no package!
345 OPENCOLLADA_FORCE_REBUILD=false
346 OPENCOLLADA_SKIP=false
347
348 FFMPEG_VERSION="2.8.4"
349 FFMPEG_VERSION_MIN="2.8.4"
350 FFMPEG_FORCE_BUILD=false
351 FFMPEG_FORCE_REBUILD=false
352 FFMPEG_SKIP=false
353 _ffmpeg_list_sep=";"
354
355 # FFMPEG optional libs.
356 VORBIS_USE=false
357 VORBIS_DEV=""
358 OGG_USE=false
359 OGG_DEV=""
360 THEORA_USE=false
361 THEORA_DEV=""
362 XVID_USE=false
363 XVID_DEV=""
364 X264_USE=false
365 X264_DEV=""
366 X264_VERSION_MIN=0.118
367 VPX_USE=false
368 VPX_VERSION_MIN=0.9.7
369 VPX_DEV=""
370 MP3LAME_USE=false
371 MP3LAME_DEV=""
372 OPENJPEG_USE=false
373 OPENJPEG_DEV=""
374
375 # Switch to english language, else some things (like check_package_DEB()) won't work!
376 LANG_BACK=$LANG
377 LANG=""
378 export LANG
379
380 ##### Generic Helpers #####
381
382 BLACK=$(tput setaf 0)
383 RED=$(tput setaf 1)
384 GREEN=$(tput setaf 2)
385 YELLOW=$(tput setaf 3)
386 LIME_YELLOW=$(tput setaf 190)
387 POWDER_BLUE=$(tput setaf 153)
388 BLUE=$(tput setaf 4)
389 MAGENTA=$(tput setaf 5)
390 CYAN=$(tput setaf 6)
391 WHITE=$(tput setaf 7)
392 BRIGHT=$(tput bold)
393 NORMAL=$(tput sgr0)
394 BLINK=$(tput blink)
395 REVERSE=$(tput smso)
396 UNDERLINE=$(tput smul)
397
398 _echo() {
399   if [ "X$1" = "X-n" ]; then
400      shift; printf "%s" "$@"
401   else
402      printf "%s\n" "$@"
403   fi
404 }
405
406 ERROR() {
407   _echo "${BRIGHT}${RED}ERROR! ${NORMAL}${RED}$@${NORMAL}"
408 }
409
410 WARNING() {
411   _echo "${BRIGHT}${YELLOW}WARNING! ${NORMAL}${YELLOW}$@${NORMAL}"
412 }
413
414 INFO() {
415   _echo "${GREEN}$@${NORMAL}"
416 }
417
418 PRINT() {
419   _echo "$@"
420 }
421
422 ##### Args Handling #####
423
424 # Finish parsing the commandline args.
425 eval set -- "$ARGS"
426 while true; do
427   case $1 in
428     -s|--source)
429       SRC="$2"; shift; shift; continue
430     ;;
431     -i|--install)
432       INST="$2"; shift; shift; continue
433     ;;
434     --tmp)
435       TMP="$2"; shift; shift; continue
436     ;;
437     --info)
438       INFO_PATH="$2"; shift; shift; continue
439     ;;
440     -t|--threads)
441       THREADS="$2"; shift; shift; continue
442     ;;
443     -h|--help)
444       PRINT ""
445       PRINT "USAGE:"
446       PRINT ""
447       PRINT "`eval _echo "$COMMON_INFO"`"
448       PRINT ""
449       PRINT "`eval _echo "$ARGUMENTS_INFO"`"
450       PRINT ""
451       exit 0
452     ;;
453     --show-deps)
454       # We have to defer...
455       DO_SHOW_DEPS=true; shift; continue
456     ;;
457     --no-sudo)
458       PRINT ""
459       WARNING "--no-sudo enabled, this script might not be able to do much..."
460       PRINT ""
461       SUDO=""; shift; continue
462     ;;
463     --no-confirm)
464       NO_CONFIRM=true; shift; continue
465     ;;
466     --with-all)
467       WITH_ALL=true; shift; continue
468     ;;
469     --with-opencollada)
470       WITH_OPENCOLLADA=true; shift; continue
471     ;;
472     --ver-ocio)
473       OCIO_VERSION="$2"
474       OCIO_VERSION_MIN=$OCIO_VERSION
475       shift; shift; continue
476     ;;
477     --ver-oiio)
478       OIIO_VERSION="$2"
479       OIIO_VERSION_MIN=$OIIO_VERSION
480       shift; shift; continue
481     ;;
482     --ver-llvm)
483       LLVM_VERSION="$2"
484       LLVM_VERSION_MIN=$LLVM_VERSION
485       shift; shift; continue
486     ;;
487     --ver-osl)
488       OSL_VERSION="$2"
489       OSL_VERSION_MIN=$OSL_VERSION
490       shift; shift; continue
491     ;;
492     --ver-osd)
493       OSD_VERSION="$2"
494       OSD_VERSION_MIN=$OSD_VERSION
495       shift; shift; continue
496     ;;
497     --ver-openvdb)
498       OPENVDB_VERSION="$2"
499       OPENVDB_VERSION_MIN=$OPENVDB_VERSION
500       shift; shift; continue
501     ;;
502     --build-all)
503       PYTHON_FORCE_BUILD=true
504       NUMPY_FORCE_BUILD=true
505       BOOST_FORCE_BUILD=true
506       OCIO_FORCE_BUILD=true
507       OPENEXR_FORCE_BUILD=true
508       OIIO_FORCE_BUILD=true
509       LLVM_FORCE_BUILD=true
510       OSL_FORCE_BUILD=true
511       OSD_FORCE_BUILD=true
512       OPENVDB_FORCE_BUILD=true
513       OPENCOLLADA_FORCE_BUILD=true
514       FFMPEG_FORCE_BUILD=true
515       shift; continue
516     ;;
517     --build-python)
518       PYTHON_FORCE_BUILD=true
519       NUMPY_FORCE_BUILD=true
520       shift; continue
521     ;;
522     --build-numpy)
523       PYTHON_FORCE_BUILD=true
524       NUMPY_FORCE_BUILD=true
525       shift; continue
526     ;;
527     --build-boost)
528       BOOST_FORCE_BUILD=true; shift; continue
529     ;;
530     --build-ocio)
531       OCIO_FORCE_BUILD=true; shift; continue
532     ;;
533     --build-openexr)
534       OPENEXR_FORCE_BUILD=true; shift; continue
535     ;;
536     --build-oiio)
537       OIIO_FORCE_BUILD=true; shift; continue
538     ;;
539     --build-llvm)
540       LLVM_FORCE_BUILD=true; shift; continue
541     ;;
542     --build-osl)
543       OSL_FORCE_BUILD=true; shift; continue
544     ;;
545     --build-osd)
546       OSD_FORCE_BUILD=true; shift; continue
547     ;;
548     --build-openvdb)
549       OPENVDB_FORCE_BUILD=true; shift; continue
550     ;;
551     --build-opencollada)
552       OPENCOLLADA_FORCE_BUILD=true; shift; continue
553     ;;
554     --build-ffmpeg)
555       FFMPEG_FORCE_BUILD=true; shift; continue
556     ;;
557     --force-all)
558       PYTHON_FORCE_REBUILD=true
559       NUMPY_FORCE_REBUILD=true
560       BOOST_FORCE_REBUILD=true
561       OCIO_FORCE_REBUILD=true
562       OPENEXR_FORCE_REBUILD=true
563       OIIO_FORCE_REBUILD=true
564       LLVM_FORCE_REBUILD=true
565       OSL_FORCE_REBUILD=true
566       OSD_FORCE_REBUILD=true
567       OPENVDB_FORCE_REBUILD=true
568       OPENCOLLADA_FORCE_REBUILD=true
569       FFMPEG_FORCE_REBUILD=true
570       shift; continue
571     ;;
572     --force-python)
573       PYTHON_FORCE_REBUILD=true
574       NUMPY_FORCE_REBUILD=true
575       shift; continue
576     ;;
577     --force-numpy)
578       NUMPY_FORCE_REBUILD=true; shift; continue
579     ;;
580     --force-boost)
581       BOOST_FORCE_REBUILD=true; shift; continue
582     ;;
583     --force-ocio)
584       OCIO_FORCE_REBUILD=true; shift; continue
585     ;;
586     --force-openexr)
587       OPENEXR_FORCE_REBUILD=true; shift; continue
588     ;;
589     --force-oiio)
590       OIIO_FORCE_REBUILD=true; shift; continue
591     ;;
592     --force-llvm)
593       LLVM_FORCE_REBUILD=true; shift; continue
594     ;;
595     --force-osl)
596       OSL_FORCE_REBUILD=true; shift; continue
597     ;;
598     --force-osd)
599       OSD_FORCE_REBUILD=true; shift; continue
600     ;;
601     --force-openvdb)
602       OPENVDB_FORCE_REBUILD=true; shift; continue
603     ;;
604     --force-opencollada)
605       OPENCOLLADA_FORCE_REBUILD=true; shift; continue
606     ;;
607     --force-ffmpeg)
608       FFMPEG_FORCE_REBUILD=true; shift; continue
609     ;;
610     --skip-python)
611       PYTHON_SKIP=true; shift; continue
612     ;;
613     --skip-numpy)
614       NUMPY_SKIP=true; shift; continue
615     ;;
616     --skip-boost)
617       BOOST_SKIP=true; shift; continue
618     ;;
619     --skip-ocio)
620       OCIO_SKIP=true; shift; continue
621     ;;
622     --skip-openexr)
623       OPENEXR_SKIP=true; shift; continue
624     ;;
625     --skip-oiio)
626       OIIO_SKIP=true; shift; continue
627     ;;
628     --skip-llvm)
629       LLVM_SKIP=true; shift; continue
630     ;;
631     --skip-osl)
632       OSL_SKIP=true; shift; continue
633     ;;
634     --skip-osd)
635       OSD_SKIP=true; shift; continue
636     ;;
637     --skip-openvdb)
638       OPENVDB_SKIP=true; shift; continue
639     ;;
640     --skip-opencollada)
641       OPENCOLLADA_SKIP=true; shift; continue
642     ;;
643     --skip-ffmpeg)
644       FFMPEG_SKIP=true; shift; continue
645     ;;
646     --)
647       # no more arguments to parse
648       break
649     ;;
650     *)
651       PRINT ""
652       ERROR "Wrong parameter! Usage:"
653       PRINT ""
654       PRINT "`eval _echo "$COMMON_INFO"`"
655       PRINT ""
656       exit 1
657     ;;
658   esac
659 done
660
661 if [ "$WITH_ALL" = true -a "$OPENCOLLADA_SKIP" = false ]; then
662   WITH_OPENCOLLADA=true
663 fi
664
665
666
667 # This has to be done here, because user might force some versions...
668 PYTHON_SOURCE=( "https://www.python.org/ftp/python/$PYTHON_VERSION/Python-$PYTHON_VERSION.tgz" )
669 NUMPY_SOURCE=( "http://sourceforge.net/projects/numpy/files/NumPy/$NUMPY_VERSION/numpy-$NUMPY_VERSION.tar.gz" )
670
671 _boost_version_nodots=`echo "$BOOST_VERSION" | sed -r 's/\./_/g'`
672 BOOST_SOURCE=( "http://sourceforge.net/projects/boost/files/boost/$BOOST_VERSION/boost_$_boost_version_nodots.tar.bz2/download" )
673 BOOST_BUILD_MODULES="--with-system --with-filesystem --with-thread --with-regex --with-locale --with-date_time --with-wave"
674
675 OCIO_SOURCE=( "https://github.com/imageworks/OpenColorIO/tarball/v$OCIO_VERSION" )
676
677 OPENEXR_USE_REPO=false
678 OPENEXR_SOURCE=( "http://download.savannah.nongnu.org/releases/openexr/openexr-$OPENEXR_VERSION.tar.gz" )
679 OPENEXR_SOURCE_REPO=( "https://github.com/mont29/openexr.git" )
680 OPENEXR_SOURCE_REPO_UID="2787aa1cf652d244ed45ae124eb1553f6cff11ee"
681 ILMBASE_SOURCE=( "http://download.savannah.nongnu.org/releases/openexr/ilmbase-$ILMBASE_VERSION.tar.gz" )
682
683 OIIO_USE_REPO=false
684 OIIO_SOURCE=( "https://github.com/OpenImageIO/oiio/archive/Release-$OIIO_VERSION.tar.gz" )
685 OIIO_SOURCE_REPO=( "https://github.com/OpenImageIO/oiio.git" )
686 OIIO_SOURCE_REPO_UID="c9e67275a0b248ead96152f6d2221cc0c0f278a4"
687
688 LLVM_SOURCE=( "http://llvm.org/releases/$LLVM_VERSION/llvm-$LLVM_VERSION.src.tar.gz" )
689 LLVM_CLANG_SOURCE=( "http://llvm.org/releases/$LLVM_VERSION/clang-$LLVM_VERSION.src.tar.gz" "http://llvm.org/releases/$LLVM_VERSION/cfe-$LLVM_VERSION.src.tar.gz" )
690
691 OSL_USE_REPO=false
692 OSL_SOURCE=( "https://github.com/imageworks/OpenShadingLanguage/archive/Release-$OSL_VERSION.tar.gz" )
693 #~ OSL_SOURCE=( "https://github.com/Nazg-Gul/OpenShadingLanguage/archive/Release-1.5.11.tar.gz" )
694 #~ OSL_SOURCE_REPO=( "https://github.com/imageworks/OpenShadingLanguage.git" )
695 #~ OSL_SOURCE_REPO=( "https://github.com/mont29/OpenShadingLanguage.git" )
696 #~ OSL_SOURCE_REPO_UID="85179714e1bc69cd25ecb6bb711c1a156685d395"
697 #~ OSL_SOURCE_REPO_BRANCH="master"
698 OSL_SOURCE_REPO=( "https://github.com/Nazg-Gul/OpenShadingLanguage.git" )
699 OSL_SOURCE_REPO_UID="7d40ff5fe8e47b030042afb92d0e955f5aa96f48"
700 OSL_SOURCE_REPO_BRANCH="blender-fixes"
701
702 OSD_USE_REPO=true
703 # Script foo to make the version string compliant with the archive name:
704 # ${Varname//SearchForThisChar/ReplaceWithThisChar}
705 OSD_SOURCE=( "https://github.com/PixarAnimationStudios/OpenSubdiv/archive/v${OSD_VERSION//./_}.tar.gz" )
706 OSD_SOURCE_REPO=( "https://github.com/PixarAnimationStudios/OpenSubdiv.git" )
707 OSD_SOURCE_REPO_UID="404659fffa659da075d1c9416e4fc939139a84ee"
708 OSD_SOURCE_REPO_BRANCH="dev"
709
710 OPENVDB_USE_REPO=false
711 OPENVDB_BLOSC_SOURCE=( "https://github.com/Blosc/c-blosc/archive/v${OPENVDB_BLOSC_VERSION}.tar.gz" )
712 OPENVDB_SOURCE=( "https://github.com/dreamworksanimation/openvdb/archive/v${OPENVDB_VERSION}.tar.gz" )
713 #~ OPENVDB_SOURCE_REPO=( "https:///dreamworksanimation/openvdb.git" )
714 #~ OPENVDB_SOURCE_REPO_UID="404659fffa659da075d1c9416e4fc939139a84ee"
715 #~ OPENVDB_SOURCE_REPO_BRANCH="dev"
716
717 OPENCOLLADA_SOURCE=( "https://github.com/KhronosGroup/OpenCOLLADA.git" )
718 OPENCOLLADA_REPO_UID="3335ac164e68b2512a40914b14c74db260e6ff7d"
719 OPENCOLLADA_REPO_BRANCH="master"
720
721 FFMPEG_SOURCE=( "http://ffmpeg.org/releases/ffmpeg-$FFMPEG_VERSION.tar.bz2" )
722
723
724
725 #### Show Dependencies ####
726
727 # Need those to be after we defined versions...
728 DEPS_COMMON_INFO="\"COMMON DEPENDENCIES:
729
730 Those libraries should be available as packages in all recent distributions (optional ones are [between brackets]):
731
732     * Basics of dev environment (cmake, gcc, svn , git, ...).
733     * libjpeg, libpng, libtiff, [libopenjpeg], [libopenal].
734     * libx11, libxcursor, libxi, libxrandr, libxinerama (and other libx... as needed).
735     * libsqlite3, libbz2, libssl, libfftw3, libxml2, libtinyxml, yasm, libyaml-cpp.
736     * libsdl1.2, libglew, libglewmx.\""
737
738 DEPS_SPECIFIC_INFO="\"BUILDABLE DEPENDENCIES:
739
740 The following libraries will probably not all be available as packages in your distribution
741 (install_deps will by default try to install packages, and fall back to building missing ones).
742 You can force install_deps to build those with '--build-all' or relevant 'build-foo' options, see '--help' message.
743 You may also want to build them yourself (optional ones are [between brackets]):
744
745     * Python $PYTHON_VERSION_MIN (from $PYTHON_SOURCE).
746     * [NumPy $NUMPY_VERSION_MIN] (from $NUMPY_SOURCE).
747     * Boost $BOOST_VERSION_MIN (from $BOOST_SOURCE, modules: $BOOST_BUILD_MODULES).
748     * [FFMpeg $FFMPEG_VERSION_MIN (needs libvorbis, libogg, libtheora, libx264, libmp3lame, libxvidcore, libvpx, ...)] (from $FFMPEG_SOURCE).
749     * [OpenColorIO $OCIO_VERSION_MIN] (from $OCIO_SOURCE).
750     * ILMBase $ILMBASE_VERSION_MIN (from $ILMBASE_SOURCE).
751     * OpenEXR $OPENEXR_VERSION_MIN (from $OPENEXR_SOURCE).
752     * OpenImageIO $OIIO_VERSION_MIN (from $OIIO_SOURCE).
753     * [LLVM $LLVM_VERSION_MIN (with clang)] (from $LLVM_SOURCE, and $LLVM_CLANG_SOURCE).
754     * [OpenShadingLanguage $OSL_VERSION_MIN] (from $OSL_SOURCE_REPO, branch $OSL_SOURCE_REPO_BRANCH, commit $OSL_SOURCE_REPO_UID).
755     * [OpenSubDiv $OSD_VERSION_MIN] (from $OSD_SOURCE_REPO, branch $OSD_SOURCE_REPO_BRANCH, commit $OSD_SOURCE_REPO_UID).
756     * [OpenVDB $OPENVDB_VERSION_MIN] (from $OPENVDB_SOURCE), [Blosc $OPENVDB_BLOSC_VERSION] (from $OPENVDB_BLOSC_SOURCE).
757     * [OpenCollada] (from $OPENCOLLADA_SOURCE, branch $OPENCOLLADA_REPO_BRANCH, commit $OPENCOLLADA_REPO_UID).\""
758
759 if [ "$DO_SHOW_DEPS" = true ]; then
760   PRINT ""
761   PRINT "Blender dependencies (libraries needed to build it):"
762   PRINT ""
763   PRINT "`eval _echo "$DEPS_COMMON_INFO"`"
764   PRINT ""
765   PRINT "`eval _echo "$DEPS_SPECIFIC_INFO"`"
766   PRINT ""
767   exit 0
768 fi
769
770
771
772 ##### Generic Helpers #####
773
774 # Check return code of wget for success...
775 download() {
776   declare -a sources=("${!1}")
777   sources_count=${#sources[@]}
778   error=1
779
780   for (( i=0; $i < $sources_count; i++ ))
781   do
782     wget -c ${sources[$i]} -O $2
783     if [ $? -eq 0 ]; then
784       error=0
785       break
786     fi
787   done
788
789   if [ $error -eq 1 ]; then
790     ERROR "wget could not find ${sources[@]}, or could not write it to $2, exiting"
791     exit 1
792   fi
793 }
794
795 # Return 0 if $1 = $2 (i.e. 1.01.0 = 1.1, but 1.1.1 != 1.1), else 1.
796 # $1 and $2 should be version numbers made of numbers only.
797 version_eq() {
798   backIFS=$IFS
799   IFS='.'
800
801   # Split both version numbers into their numeric elements.
802   arr1=( $1 )
803   arr2=( $2 )
804
805   ret=1
806
807   count1=${#arr1[@]}
808   count2=${#arr2[@]}
809   if [ $count2 -ge $count1 ]; then
810     _t=$count1
811     count1=$count2
812     count2=$_t
813     arr1=( $2 )
814     arr2=( $1 )
815   fi
816
817   ret=0
818   for (( i=0; $i < $count2; i++ ))
819   do
820     if [ $(( 10#${arr1[$i]} )) -ne $(( 10#${arr2[$i]} )) ]; then
821       ret=1
822       break
823     fi
824   done
825
826   for (( i=$count2; $i < $count1; i++ ))
827   do
828     if [ $(( 10#${arr1[$i]} )) -ne 0 ]; then
829       ret=1
830       break
831     fi
832   done
833
834   IFS=$backIFS
835   return $ret
836 }
837
838 # Return 0 if $1 >= $2, else 1.
839 # $1 and $2 should be version numbers made of numbers only.
840 version_ge() {
841   version_eq $1 $2
842   if [ $? -eq 1 -a $(_echo "$1" "$2" | sort --version-sort | head --lines=1) = "$1" ]; then
843     return 1
844   else
845     return 0
846   fi
847 }
848
849 # Return 0 if $3 > $1 >= $2, else 1.
850 # $1 and $2 should be version numbers made of numbers only.
851 version_ge_lt() {
852   version_ge $1 $3
853   if [ $? -eq 0 ]; then
854     return 1
855   else
856     version_ge $1 $2
857     return $?
858   fi
859 }
860
861 # Return 0 if $1 is into $2 (e.g. 3.3.2 is into 3.3, but not 3.3.0 or 3.3.5), else 1.
862 # $1 and $2 should be version numbers made of numbers only.
863 # $1 should be at least as long as $2!
864 version_match() {
865   backIFS=$IFS
866   IFS='.'
867
868   # Split both version numbers into their numeric elements.
869   arr1=( $1 )
870   arr2=( $2 )
871
872   ret=1
873
874   count1=${#arr1[@]}
875   count2=${#arr2[@]}
876   if [ $count1 -ge $count2 ]; then
877     ret=0
878     for (( i=0; $i < $count2; i++ ))
879     do
880       if [ $(( 10#${arr1[$i]} )) -ne $(( 10#${arr2[$i]} )) ]; then
881         ret=1
882         break
883       fi
884     done
885   fi
886
887   IFS=$backIFS
888   return $ret
889 }
890
891 ##### Generic compile helpers #####
892 prepare_opt() {
893   INFO "Ensuring $INST exists and is writable by us"
894   if [ ! $SUDO ]; then
895     WARNING "--no-sudo enabled, might be impossible to create install dir..."
896   fi
897   if [ ! -d  $INST ]; then
898     $SUDO mkdir -p $INST
899   fi
900
901   if [ ! -w $INST ]; then
902     $SUDO chown $USER $INST
903     $SUDO chmod 775 $INST
904   fi
905 }
906
907 # Check whether the current package needs to be recompiled, based on a dummy file containing a magic number in its name...
908 magic_compile_check() {
909   if [ -f $INST/.$1-magiccheck-$2 ]; then
910     return 0
911   else
912     return 1
913   fi
914 }
915
916 magic_compile_set() {
917   rm -f $INST/.$1-magiccheck-*
918   touch $INST/.$1-magiccheck-$2
919 }
920
921 # Note: should clean nicely in $INST, but not in $SRC, when we switch to a new version of a lib...
922 _clean() {
923   rm -rf `readlink -f $_inst_shortcut`
924   # Only remove $_src dir when not using git repo (avoids to re-clone the whole repo every time!!!).
925   if [ $_git == false ]; then
926     rm -rf $_src
927   fi
928   rm -rf $_inst
929   rm -rf $_inst_shortcut
930 }
931
932 _create_inst_shortcut() {
933   rm -f $_inst_shortcut
934   ln -s $_inst $_inst_shortcut
935 }
936
937 # ldconfig
938 run_ldconfig() {
939   _lib_path="$INST/$1/lib"
940   _ldconf_path="/etc/ld.so.conf.d/$1.conf"
941   PRINT ""
942   if [ ! $SUDO ]; then
943     WARNING "--no-sudo enabled, impossible to run ldconfig for $1, you'll have to do it yourself..."
944   else
945     INFO "Running ldconfig for $1..."
946     $SUDO sh -c "echo \"$_lib_path\" > $_ldconf_path"
947     $SUDO /sbin/ldconfig  # XXX OpenSuse does not include sbin in command path with sudo!!!
948   fi
949   PRINT ""
950 }
951
952 #### Build Python ####
953 _init_python() {
954   _src=$SRC/Python-$PYTHON_VERSION
955   _git=false
956   _inst=$INST/python-$PYTHON_VERSION
957   _inst_shortcut=$INST/python-$PYTHON_VERSION_MIN
958 }
959
960 clean_Python() {
961   clean_Numpy
962   _init_python
963   _clean
964 }
965
966 compile_Python() {
967   # To be changed each time we make edits that would modify the compiled result!
968   py_magic=1
969   _init_python
970
971   # Clean install if needed!
972   magic_compile_check python-$PYTHON_VERSION $py_magic
973   if [ $? -eq 1 -o "$PYTHON_FORCE_REBUILD" = true ]; then
974     clean_Python
975   fi
976
977   if [ ! -d $_inst ]; then
978     INFO "Building Python-$PYTHON_VERSION"
979
980     prepare_opt
981
982     if [ ! -d $_src ]; then
983       mkdir -p $SRC
984       download PYTHON_SOURCE[@] $_src.tgz
985
986       INFO "Unpacking Python-$PYTHON_VERSION"
987       tar -C $SRC -xf $_src.tgz
988     fi
989
990     cd $_src
991
992     ./configure --prefix=$_inst --libdir=$_inst/lib --enable-ipv6 \
993         --enable-loadable-sqlite-extensions --with-dbmliborder=bdb \
994         --with-computed-gotos --with-pymalloc
995
996     make -j$THREADS && make install
997     make clean
998
999     if [ -d $_inst ]; then
1000       _create_inst_shortcut
1001     else
1002       ERROR "Python--$PYTHON_VERSION failed to compile, exiting"
1003       exit 1
1004     fi
1005
1006     magic_compile_set python-$PYTHON_VERSION $py_magic
1007
1008     cd $CWD
1009     INFO "Done compiling Python-$PYTHON_VERSION!"
1010   else
1011     INFO "Own Python-$PYTHON_VERSION is up to date, nothing to do!"
1012     INFO "If you want to force rebuild of this lib, use the --force-python option."
1013   fi
1014 }
1015
1016 ##### Build Numpy #####
1017 _init_numpy() {
1018   _src=$SRC/numpy-$NUMPY_VERSION
1019   _git=false
1020   _inst=$INST/numpy-$NUMPY_VERSION
1021   _python=$INST/python-$PYTHON_VERSION
1022   _site=lib/python$PYTHON_VERSION_MIN/site-packages
1023   _inst_shortcut=$_python/$_site/numpy
1024 }
1025
1026 clean_Numpy() {
1027   _init_numpy
1028   _clean
1029 }
1030
1031 compile_Numpy() {
1032   # To be changed each time we make edits that would modify the compiled result!
1033   numpy_magic=0
1034   _init_numpy
1035
1036   # Clean install if needed!
1037   magic_compile_check numpy-$NUMPY_VERSION $numpy_magic
1038   if [ $? -eq 1 -o "$NUMPY_FORCE_REBUILD" = true ]; then
1039     clean_Numpy
1040   fi
1041
1042   if [ ! -d $_inst ]; then
1043     INFO "Building Numpy-$NUMPY_VERSION"
1044
1045     prepare_opt
1046
1047     if [ ! -d $_src ]; then
1048       mkdir -p $SRC
1049       download NUMPY_SOURCE[@] $_src.tar.gz
1050
1051       INFO "Unpacking Numpy-$NUMPY_VERSION"
1052       tar -C $SRC -xf $_src.tar.gz
1053     fi
1054
1055     cd $_src
1056
1057     $_python/bin/python3 setup.py install --prefix=$_inst
1058
1059     if [ -d $_inst ]; then
1060       # Can't use _create_inst_shortcut here...
1061       rm -f $_inst_shortcut
1062       ln -s $_inst/$_site/numpy $_inst_shortcut
1063     else
1064       ERROR "Numpy-$NUMPY_VERSION failed to compile, exiting"
1065       exit 1
1066     fi
1067
1068     magic_compile_set numpy-$NUMPY_VERSION $numpy_magic
1069
1070     cd $CWD
1071     INFO "Done compiling Numpy-$NUMPY_VERSION!"
1072   else
1073     INFO "Own Numpy-$NUMPY_VERSION is up to date, nothing to do!"
1074     INFO "If you want to force rebuild of this lib, use the --force-numpy option."
1075   fi
1076 }
1077
1078 #### Build Boost ####
1079 _init_boost() {
1080   _src=$SRC/boost-$BOOST_VERSION
1081   _git=false
1082   _inst=$INST/boost-$BOOST_VERSION
1083   _inst_shortcut=$INST/boost
1084 }
1085
1086 clean_Boost() {
1087   _init_boost
1088   _clean
1089 }
1090
1091 compile_Boost() {
1092   # To be changed each time we make edits that would modify the compiled result!
1093   boost_magic=9
1094
1095   _init_boost
1096
1097   # Clean install if needed!
1098   magic_compile_check boost-$BOOST_VERSION $boost_magic
1099   if [ $? -eq 1 -o "$BOOST_FORCE_REBUILD" = true ]; then
1100     clean_Boost
1101   fi
1102
1103   if [ ! -d $_inst ]; then
1104     INFO "Building Boost-$BOOST_VERSION"
1105
1106     # Rebuild dependecies as well!
1107     OIIO_FORCE_BUILD=true
1108     OIIO_FORCE_REBUILD=true
1109     OSL_FORCE_BUILD=true
1110     OSL_FORCE_REBUILD=true
1111
1112     prepare_opt
1113
1114     if [ ! -d $_src ]; then
1115       INFO "Downloading Boost-$BOOST_VERSION"
1116       mkdir -p $SRC
1117       download BOOST_SOURCE[@] $_src.tar.bz2
1118       tar -C $SRC --transform "s,(.*/?)boost_1_[^/]+(.*),\1boost-$BOOST_VERSION\2,x" -xf $_src.tar.bz2
1119     fi
1120
1121     cd $_src
1122     if [ ! -f $_src/b2 ]; then
1123       ./bootstrap.sh
1124     fi
1125     ./b2 -j$THREADS -a $BOOST_BUILD_MODULES \
1126          --prefix=$_inst --disable-icu boost.locale.icu=off install
1127     ./b2 --clean
1128
1129     if [ -d $_inst ]; then
1130       _create_inst_shortcut
1131     else
1132       ERROR "Boost-$BOOST_VERSION failed to compile, exiting"
1133       exit 1
1134     fi
1135
1136     magic_compile_set boost-$BOOST_VERSION $boost_magic
1137
1138     cd $CWD
1139     INFO "Done compiling Boost-$BOOST_VERSION!"
1140   else
1141     INFO "Own Boost-$BOOST_VERSION is up to date, nothing to do!"
1142     INFO "If you want to force rebuild of this lib, use the --force-boost option."
1143   fi
1144
1145   # Just always run it, much simpler this way!
1146   run_ldconfig "boost"
1147 }
1148
1149 #### Build OCIO ####
1150 _init_ocio() {
1151   _src=$SRC/OpenColorIO-$OCIO_VERSION
1152   _git=false
1153   _inst=$INST/ocio-$OCIO_VERSION
1154   _inst_shortcut=$INST/ocio
1155 }
1156
1157 clean_OCIO() {
1158   _init_ocio
1159   _clean
1160 }
1161
1162 compile_OCIO() {
1163   # To be changed each time we make edits that would modify the compiled result!
1164   ocio_magic=1
1165   _init_ocio
1166
1167   # Clean install if needed!
1168   magic_compile_check ocio-$OCIO_VERSION $ocio_magic
1169   if [ $? -eq 1 -o "$OCIO_FORCE_REBUILD" = true ]; then
1170     clean_OCIO
1171   fi
1172
1173   if [ ! -d $_inst ]; then
1174     INFO "Building OpenColorIO-$OCIO_VERSION"
1175
1176     prepare_opt
1177
1178     if [ ! -d $_src ]; then
1179       INFO "Downloading OpenColorIO-$OCIO_VERSION"
1180       mkdir -p $SRC
1181       download OCIO_SOURCE[@] $_src.tar.gz
1182
1183       INFO "Unpacking OpenColorIO-$OCIO_VERSION"
1184       tar -C $SRC --transform "s,(.*/?)imageworks-OpenColorIO[^/]*(.*),\1OpenColorIO-$OCIO_VERSION\2,x" \
1185           -xf $_src.tar.gz
1186     fi
1187
1188     cd $_src
1189     # Always refresh the whole build!
1190     if [ -d build ]; then
1191       rm -rf build
1192     fi
1193     mkdir build
1194     cd build
1195
1196     cmake_d="-D CMAKE_BUILD_TYPE=Release"
1197     cmake_d="$cmake_d -D CMAKE_PREFIX_PATH=$_inst"
1198     cmake_d="$cmake_d -D CMAKE_INSTALL_PREFIX=$_inst"
1199     cmake_d="$cmake_d -D OCIO_BUILD_APPS=OFF"
1200     cmake_d="$cmake_d -D OCIO_BUILD_PYGLUE=OFF"
1201
1202     if file /bin/cp | grep -q '32-bit'; then
1203       cflags="-fPIC -m32 -march=i686"
1204     else
1205       cflags="-fPIC"
1206     fi
1207
1208     cmake $cmake_d -D CMAKE_CXX_FLAGS="$cflags" -D CMAKE_EXE_LINKER_FLAGS="-lgcc_s -lgcc" ..
1209
1210     make -j$THREADS && make install
1211
1212     # Force linking against static libs
1213     rm -f $_inst/lib/*.so*
1214
1215     # Additional depencencies
1216     cp ext/dist/lib/libtinyxml.a $_inst/lib
1217     cp ext/dist/lib/libyaml-cpp.a $_inst/lib
1218
1219     make clean
1220
1221     if [ -d $_inst ]; then
1222       _create_inst_shortcut
1223     else
1224       ERROR "OpenColorIO-$OCIO_VERSION failed to compile, exiting"
1225       exit 1
1226     fi
1227
1228     magic_compile_set ocio-$OCIO_VERSION $ocio_magic
1229
1230     cd $CWD
1231     INFO "Done compiling OpenColorIO-$OCIO_VERSION!"
1232   else
1233     INFO "Own OpenColorIO-$OCIO_VERSION is up to date, nothing to do!"
1234     INFO "If you want to force rebuild of this lib, use the --force-ocio option."
1235   fi
1236
1237   run_ldconfig "ocio"
1238 }
1239
1240 #### Build ILMBase ####
1241 _init_ilmbase() {
1242   _src=$SRC/ILMBase-$ILMBASE_VERSION
1243   _git=false
1244   _inst=$TMP/ilmbase-$ILMBASE_VERSION
1245   _inst_shortcut=$TMP/ilmbase
1246 }
1247
1248 clean_ILMBASE() {
1249   _init_ilmbase
1250   _clean
1251 }
1252
1253 compile_ILMBASE() {
1254   # To be changed each time we make edits that would modify the compiled result!
1255   ilmbase_magic=10
1256   _init_ilmbase
1257
1258   # Clean install if needed!
1259   magic_compile_check ilmbase-$ILMBASE_VERSION $ilmbase_magic
1260   if [ $? -eq 1 -o "$OPENEXR_FORCE_REBUILD" = true ]; then
1261     clean_ILMBASE
1262     rm -rf $_openexr_inst
1263   fi
1264
1265   if [ ! -d $_openexr_inst ]; then
1266     INFO "Building ILMBase-$ILMBASE_VERSION"
1267
1268     # Rebuild dependecies as well!
1269     OPENEXR_FORCE_BUILD=true
1270     OPENEXR_FORCE_REBUILD=true
1271
1272     prepare_opt
1273
1274     if [ ! -d $_src ]; then
1275       INFO "Downloading ILMBase-$ILMBASE_VERSION"
1276       mkdir -p $SRC
1277       download ILMBASE_SOURCE[@] $_src.tar.gz
1278
1279       INFO "Unpacking ILMBase-$ILMBASE_VERSION"
1280       tar -C $SRC --transform "s,(.*/?)ilmbase-[^/]*(.*),\1ILMBase-$ILMBASE_VERSION\2,x" -xf $_src.tar.gz
1281
1282     fi
1283
1284     cd $_src
1285     # Always refresh the whole build!
1286     if [ -d build ]; then
1287       rm -rf build
1288     fi
1289     mkdir build
1290     cd build
1291
1292     cmake_d="-D CMAKE_BUILD_TYPE=Release"
1293     cmake_d="$cmake_d -D CMAKE_PREFIX_PATH=$_inst"
1294     cmake_d="$cmake_d -D CMAKE_INSTALL_PREFIX=$_inst"
1295     cmake_d="$cmake_d -D BUILD_SHARED_LIBS=ON"
1296     cmake_d="$cmake_d -D NAMESPACE_VERSIONING=OFF"  # VERY IMPORTANT!!!
1297
1298     if file /bin/cp | grep -q '32-bit'; then
1299       cflags="-fPIC -m32 -march=i686"
1300     else
1301       cflags="-fPIC"
1302     fi
1303
1304     cmake $cmake_d -D CMAKE_CXX_FLAGS="$cflags" -D CMAKE_EXE_LINKER_FLAGS="-lgcc_s -lgcc" ..
1305
1306     make -j$THREADS && make install
1307
1308     make clean
1309
1310     if [ -d $_inst ]; then
1311       _create_inst_shortcut
1312     else
1313       ERROR "ILMBase-$ILMBASE_VERSION failed to compile, exiting"
1314       exit 1
1315     fi
1316     cd $CWD
1317     INFO "Done compiling ILMBase-$ILMBASE_VERSION!"
1318   else
1319     INFO "Own ILMBase-$ILMBASE_VERSION is up to date, nothing to do!"
1320     INFO "If you want to force rebuild of this lib (and openexr), use the --force-openexr option."
1321   fi
1322
1323   magic_compile_set ilmbase-$ILMBASE_VERSION $ilmbase_magic
1324 }
1325
1326 #### Build OpenEXR ####
1327 _init_openexr() {
1328   _src=$SRC/OpenEXR-$OPENEXR_VERSION
1329   _git=true
1330   _inst=$_openexr_inst
1331   _inst_shortcut=$INST/openexr
1332 }
1333
1334 clean_OPENEXR() {
1335   clean_ILMBASE
1336   _init_openexr
1337   _clean
1338 }
1339
1340 compile_OPENEXR() {
1341   # To be changed each time we make edits that would modify the compiled result!
1342   openexr_magic=13
1343
1344   # Clean install if needed!
1345   magic_compile_check openexr-$OPENEXR_VERSION $openexr_magic
1346   if [ $? -eq 1 -o "$OPENEXR_FORCE_REBUILD" = true ]; then
1347     clean_OPENEXR
1348   fi
1349
1350   _openexr_inst=$INST/openexr-$OPENEXR_VERSION
1351   compile_ILMBASE
1352   PRINT ""
1353   _ilmbase_inst=$_inst_shortcut
1354   _init_openexr
1355
1356   if [ ! -d $_inst ]; then
1357     INFO "Building OpenEXR-$OPENEXR_VERSION"
1358
1359     # Rebuild dependecies as well!
1360     OIIO_FORCE_BUILD=true
1361     OIIO_FORCE_REBUILD=true
1362
1363     prepare_opt
1364
1365     if [ ! -d $_src ]; then
1366       INFO "Downloading OpenEXR-$OPENEXR_VERSION"
1367       mkdir -p $SRC
1368
1369       if [ "$OPENEXR_USE_REPO" = true ]; then
1370         git clone ${OPENEXR_SOURCE_REPO[0]} $_src
1371       else
1372         download OPENEXR_SOURCE[@] $_src.tar.gz
1373         INFO "Unpacking OpenEXR-$OPENEXR_VERSION"
1374         tar -C $SRC --transform "s,(.*/?)openexr[^/]*(.*),\1OpenEXR-$OPENEXR_VERSION\2,x" -xf $_src.tar.gz
1375       fi
1376
1377     fi
1378
1379     cd $_src
1380
1381     if [ "$OPENEXR_USE_REPO" = true ]; then
1382       # XXX For now, always update from latest repo...
1383       git pull origin master
1384       # Stick to same rev as windows' libs...
1385       git checkout $OPENEXR_SOURCE_REPO_UID
1386       git reset --hard
1387       oiio_src_path="../OpenEXR"
1388     else
1389       oiio_src_path=".."
1390     fi
1391
1392     # Always refresh the whole build!
1393     if [ -d build ]; then
1394       rm -rf build
1395     fi
1396     mkdir build
1397     cd build
1398
1399     cmake_d="-D CMAKE_BUILD_TYPE=Release"
1400     cmake_d="$cmake_d -D CMAKE_PREFIX_PATH=$_inst"
1401     cmake_d="$cmake_d -D CMAKE_INSTALL_PREFIX=$_inst"
1402     cmake_d="$cmake_d -D ILMBASE_PACKAGE_PREFIX=$_ilmbase_inst"
1403     cmake_d="$cmake_d -D BUILD_SHARED_LIBS=ON"
1404     cmake_d="$cmake_d -D NAMESPACE_VERSIONING=OFF"  # VERY IMPORTANT!!!
1405
1406     if file /bin/cp | grep -q '32-bit'; then
1407       cflags="-fPIC -m32 -march=i686"
1408     else
1409       cflags="-fPIC"
1410     fi
1411
1412     cmake $cmake_d -D CMAKE_CXX_FLAGS="$cflags" -D CMAKE_EXE_LINKER_FLAGS="-lgcc_s -lgcc" $oiio_src_path
1413
1414     make -j$THREADS && make install
1415
1416     make clean
1417
1418     if [ -d $_inst ]; then
1419       _create_inst_shortcut
1420       # Copy ilmbase files here (blender expects same dir for ilmbase and openexr :/).
1421       cp -Lrn $_ilmbase_inst/* $_inst_shortcut
1422     else
1423       ERROR "OpenEXR-$OPENEXR_VERSION failed to compile, exiting"
1424       exit 1
1425     fi
1426
1427     magic_compile_set openexr-$OPENEXR_VERSION $openexr_magic
1428
1429     cd $CWD
1430     INFO "Done compiling OpenEXR-$OPENEXR_VERSION!"
1431   else
1432     INFO "Own OpenEXR-$OPENEXR_VERSION is up to date, nothing to do!"
1433     INFO "If you want to force rebuild of this lib, use the --force-openexr option."
1434   fi
1435
1436   _with_built_openexr=true
1437
1438   # Just always run it, much simpler this way!
1439   run_ldconfig "openexr"
1440 }
1441
1442 #### Build OIIO ####
1443 _init_oiio() {
1444   _src=$SRC/OpenImageIO-$OIIO_VERSION
1445   _git=true
1446   _inst=$INST/oiio-$OIIO_VERSION
1447   _inst_shortcut=$INST/oiio
1448 }
1449
1450 clean_OIIO() {
1451   _init_oiio
1452   _clean
1453 }
1454
1455 compile_OIIO() {
1456   # To be changed each time we make edits that would modify the compiled result!
1457   oiio_magic=15
1458   _init_oiio
1459
1460   # Clean install if needed!
1461   magic_compile_check oiio-$OIIO_VERSION $oiio_magic
1462   if [ $? -eq 1 -o "$OIIO_FORCE_REBUILD" = true ]; then
1463     clean_OIIO
1464   fi
1465
1466   if [ ! -d $_inst ]; then
1467     INFO "Building OpenImageIO-$OIIO_VERSION"
1468
1469     # Rebuild dependecies as well!
1470     OSL_FORCE_BUILD=true
1471     OSL_FORCE_REBUILD=true
1472
1473     prepare_opt
1474
1475     if [ ! -d $_src ]; then
1476       mkdir -p $SRC
1477
1478       if [ "$OIIO_USE_REPO" = true ]; then
1479         git clone ${OIIO_SOURCE_REPO[0]} $_src
1480       else
1481         download OIIO_SOURCE[@] "$_src.tar.gz"
1482         INFO "Unpacking OpenImageIO-$OIIO_VERSION"
1483         tar -C $SRC --transform "s,(.*/?)oiio-Release-[^/]*(.*),\1OpenImageIO-$OIIO_VERSION\2,x" -xf $_src.tar.gz
1484       fi
1485     fi
1486
1487     cd $_src
1488
1489     if [ "$OIIO_USE_REPO" = true ]; then
1490       # XXX For now, always update from latest repo...
1491       git pull origin master
1492       # Stick to same rev as windows' libs...
1493       git checkout $OIIO_SOURCE_REPO_UID
1494       git reset --hard
1495     fi
1496
1497     # Always refresh the whole build!
1498     if [ -d build ]; then
1499       rm -rf build
1500     fi
1501     mkdir build
1502     cd build
1503
1504     cmake_d="-D CMAKE_BUILD_TYPE=Release"
1505     cmake_d="$cmake_d -D CMAKE_PREFIX_PATH=$_inst"
1506     cmake_d="$cmake_d -D CMAKE_INSTALL_PREFIX=$_inst"
1507     cmake_d="$cmake_d -D STOP_ON_WARNING=OFF"
1508     cmake_d="$cmake_d -D BUILDSTATIC=OFF"
1509     cmake_d="$cmake_d -D LINKSTATIC=OFF"
1510
1511     cmake_d="$cmake_d -D ILMBASE_VERSION=$ILMBASE_VERSION"
1512     cmake_d="$cmake_d -D OPENEXR_VERSION=$OPENEXR_VERSION"
1513
1514     if [ "$_with_built_openexr" = true ]; then
1515       cmake_d="$cmake_d -D ILMBASE_HOME=$INST/openexr"
1516       cmake_d="$cmake_d -D OPENEXR_HOME=$INST/openexr"
1517       INFO "ILMBASE_HOME=$INST/openexr"
1518     fi
1519
1520     # Optional tests and cmd tools
1521     cmake_d="$cmake_d -D USE_QT=OFF"
1522     cmake_d="$cmake_d -D USE_PYTHON=OFF"
1523     cmake_d="$cmake_d -D BUILD_TESTING=OFF"
1524     cmake_d="$cmake_d -D OIIO_BUILD_TESTS=OFF"
1525     cmake_d="$cmake_d -D OIIO_BUILD_TOOLS=OFF"
1526     #cmake_d="$cmake_d -D CMAKE_EXPORT_COMPILE_COMMANDS=ON"
1527     #cmake_d="$cmake_d -D CMAKE_VERBOSE_MAKEFILE=ON"
1528
1529     if [ -d $INST/boost ]; then
1530       cmake_d="$cmake_d -D BOOST_ROOT=$INST/boost -D Boost_NO_SYSTEM_PATHS=ON"
1531     fi
1532
1533     # Looks like we do not need ocio in oiio for now...
1534 #    if [ -d $INST/ocio ]; then
1535 #      cmake_d="$cmake_d -D OCIO_PATH=$INST/ocio"
1536 #    fi
1537     cmake_d="$cmake_d -D USE_OCIO=OFF"
1538
1539     if file /bin/cp | grep -q '32-bit'; then
1540       cflags="-fPIC -m32 -march=i686"
1541     else
1542       cflags="-fPIC"
1543     fi
1544
1545     cmake $cmake_d -D CMAKE_CXX_FLAGS="$cflags" -D CMAKE_EXE_LINKER_FLAGS="-lgcc_s -lgcc" ..
1546
1547     make -j$THREADS && make install
1548     make clean
1549
1550     if [ -d $_inst ]; then
1551       _create_inst_shortcut
1552     else
1553       ERROR "OpenImageIO-$OIIO_VERSION failed to compile, exiting"
1554       exit 1
1555     fi
1556
1557     magic_compile_set oiio-$OIIO_VERSION $oiio_magic
1558
1559     cd $CWD
1560     INFO "Done compiling OpenImageIO-$OIIO_VERSION!"
1561   else
1562     INFO "Own OpenImageIO-$OIIO_VERSION is up to date, nothing to do!"
1563     INFO "If you want to force rebuild of this lib, use the --force-oiio option."
1564   fi
1565
1566   # Just always run it, much simpler this way!
1567   run_ldconfig "oiio"
1568 }
1569
1570 #### Build LLVM ####
1571 _init_llvm() {
1572   _src=$SRC/LLVM-$LLVM_VERSION
1573   _src_clang=$SRC/CLANG-$LLVM_VERSION
1574   _git=false
1575   _inst=$INST/llvm-$LLVM_VERSION
1576   _inst_shortcut=$INST/llvm
1577 }
1578
1579 clean_LLVM() {
1580   _init_llvm
1581   _clean
1582 }
1583
1584 compile_LLVM() {
1585   # To be changed each time we make edits that would modify the compiled result!
1586   llvm_magic=3
1587   _init_llvm
1588
1589   # Clean install if needed!
1590   magic_compile_check llvm-$LLVM_VERSION $llvm_magic
1591   if [ $? -eq 1 -o "$LLVM_FORCE_REBUILD" = true ]; then
1592     clean_LLVM
1593   fi
1594
1595   if [ ! -d $_inst ]; then
1596     INFO "Building LLVM-$LLVM_VERSION (CLANG included!)"
1597
1598     # Rebuild dependecies as well!
1599     OSL_FORCE_BUILD=true
1600     OSL_FORCE_REBUILD=true
1601
1602     prepare_opt
1603
1604     if [ ! -d $_src -o true ]; then
1605       mkdir -p $SRC
1606       download LLVM_SOURCE[@] "$_src.tar.gz"
1607       download LLVM_CLANG_SOURCE[@] "$_src_clang.tar.gz"
1608
1609       INFO "Unpacking LLVM-$LLVM_VERSION"
1610       tar -C $SRC --transform "s,([^/]*/?)llvm-[^/]*(.*),\1LLVM-$LLVM_VERSION\2,x" \
1611           -xf $_src.tar.gz
1612       INFO "Unpacking CLANG-$LLVM_VERSION to $_src/tools/clang"
1613       # Stupid clang guys renamed 'clang' to 'cfe' for now handle both cases... :(
1614       tar -C $_src/tools \
1615           --transform "s,([^/]*/?)(clang|cfe)-[^/]*(.*),\1clang\3,x" \
1616           -xf $_src_clang.tar.gz
1617
1618       cd $_src
1619
1620       # XXX Ugly patching hack!
1621       patch -p1 -i "$SCRIPT_DIR/install_deps_patches/llvm.patch"
1622
1623       cd $CWD
1624
1625     fi
1626
1627     cd $_src
1628
1629     # Always refresh the whole build!
1630     if [ -d build ]; then
1631       rm -rf build
1632     fi
1633     mkdir build
1634     cd build
1635
1636     cmake_d="-D CMAKE_BUILD_TYPE=Release"
1637     cmake_d="$cmake_d -D CMAKE_INSTALL_PREFIX=$_inst"
1638     cmake_d="$cmake_d -D LLVM_ENABLE_FFI=ON"
1639     cmake_d="$cmake_d -D LLVM_TARGETS_TO_BUILD=X86"
1640     cmake_d="$cmake_d -D LLVM_ENABLE_TERMINFO=OFF"
1641
1642     if [ -d $_FFI_INCLUDE_DIR ]; then
1643       cmake_d="$cmake_d -D FFI_INCLUDE_DIR=$_FFI_INCLUDE_DIR"
1644     fi
1645
1646     cmake $cmake_d ..
1647
1648     make -j$THREADS && make install
1649     make clean
1650
1651     if [ -d $_inst ]; then
1652       _create_inst_shortcut
1653     else
1654       ERROR "LLVM-$LLVM_VERSION failed to compile, exiting"
1655       exit 1
1656     fi
1657
1658     magic_compile_set llvm-$LLVM_VERSION $llvm_magic
1659
1660     cd $CWD
1661     INFO "Done compiling LLVM-$LLVM_VERSION (CLANG included)!"
1662   else
1663     INFO "Own LLVM-$LLVM_VERSION (CLANG included) is up to date, nothing to do!"
1664     INFO "If you want to force rebuild of this lib, use the --force-llvm option."
1665   fi
1666 }
1667
1668 #### Build OSL ####
1669 _init_osl() {
1670   _src=$SRC/OpenShadingLanguage-$OSL_VERSION
1671   _git=true
1672   _inst=$INST/osl-$OSL_VERSION
1673   _inst_shortcut=$INST/osl
1674 }
1675
1676 clean_OSL() {
1677   _init_osl
1678   _clean
1679 }
1680
1681 compile_OSL() {
1682   # To be changed each time we make edits that would modify the compiled result!
1683   osl_magic=18
1684   _init_osl
1685
1686   # Clean install if needed!
1687   magic_compile_check osl-$OSL_VERSION $osl_magic
1688   if [ $? -eq 1 -o "$OSL_FORCE_REBUILD" = true ]; then
1689     #~ rm -Rf $_src  # XXX Radical, but not easy to change remote repo fully automatically
1690     clean_OSL
1691   fi
1692
1693   if [ ! -d $_inst ]; then
1694     INFO "Building OpenShadingLanguage-$OSL_VERSION"
1695
1696     prepare_opt
1697
1698     if [ ! -d $_src ]; then
1699       mkdir -p $SRC
1700
1701       if [ "$OSL_USE_REPO" = true ]; then
1702         git clone ${OSL_SOURCE_REPO[0]} $_src
1703       else
1704         download OSL_SOURCE[@] "$_src.tar.gz"
1705         INFO "Unpacking OpenShadingLanguage-$OSL_VERSION"
1706         tar -C $SRC --transform "s,(.*/?)OpenShadingLanguage-[^/]*(.*),\1OpenShadingLanguage-$OSL_VERSION\2,x" \
1707             -xf $_src.tar.gz
1708       fi
1709     fi
1710
1711     cd $_src
1712
1713     if [ "$OSL_USE_REPO" = true ]; then
1714       git remote set-url origin ${OSL_SOURCE_REPO[0]}
1715       # XXX For now, always update from latest repo...
1716       git pull --no-edit -X theirs origin $OSL_SOURCE_REPO_BRANCH
1717       # Stick to same rev as windows' libs...
1718       git checkout $OSL_SOURCE_REPO_UID
1719       git reset --hard
1720
1721       # XXX Ugly patching hack!
1722       patch -p1 -i "$SCRIPT_DIR/install_deps_patches/osl.patch"
1723     fi
1724
1725     # Always refresh the whole build!
1726     if [ -d build ]; then
1727       rm -rf build
1728     fi
1729     mkdir build
1730     cd build
1731
1732     cmake_d="-D CMAKE_BUILD_TYPE=Release"
1733     cmake_d="$cmake_d -D CMAKE_INSTALL_PREFIX=$_inst"
1734     cmake_d="$cmake_d -D BUILD_TESTING=OFF"
1735     cmake_d="$cmake_d -D STOP_ON_WARNING=OFF"
1736     cmake_d="$cmake_d -D BUILDSTATIC=OFF"
1737
1738     #~ cmake_d="$cmake_d -D ILMBASE_VERSION=$ILMBASE_VERSION"
1739
1740     if [ "$_with_built_openexr" = true ]; then
1741       INFO "ILMBASE_HOME=$INST/openexr"
1742       cmake_d="$cmake_d -D ILMBASE_HOME=$INST/openexr"
1743       # XXX Temp workaround... sigh, ILMBase really messed the things up by defining their custom names ON by default :(
1744       cmake_d="$cmake_d -D ILMBASE_CUSTOM=ON"
1745       cmake_d="$cmake_d -D ILMBASE_CUSTOM_LIBRARIES='Half;Iex;Imath;IlmThread'"
1746     fi
1747
1748     if [ -d $INST/boost ]; then
1749       cmake_d="$cmake_d -D BOOST_ROOT=$INST/boost -D Boost_NO_SYSTEM_PATHS=ON"
1750     fi
1751
1752     if [ -d $INST/oiio ]; then
1753       cmake_d="$cmake_d -D OPENIMAGEIOHOME=$INST/oiio"
1754     fi
1755
1756     if [ ! -z $LLVM_VERSION_FOUND ]; then
1757       cmake_d="$cmake_d -D LLVM_VERSION=$LLVM_VERSION_FOUND"
1758       if [ -d $INST/llvm ]; then
1759         cmake_d="$cmake_d -D LLVM_DIRECTORY=$INST/llvm"
1760         cmake_d="$cmake_d -D LLVM_STATIC=ON"
1761       fi
1762     fi
1763
1764     #~ cmake_d="$cmake_d -D CMAKE_EXPORT_COMPILE_COMMANDS=ON"
1765     #~ cmake_d="$cmake_d -D CMAKE_VERBOSE_MAKEFILE=ON"
1766
1767     cmake $cmake_d ..
1768
1769     make -j$THREADS && make install
1770     make clean
1771
1772     if [ -d $_inst ]; then
1773       _create_inst_shortcut
1774     else
1775       ERROR "OpenShadingLanguage-$OSL_VERSION failed to compile, exiting"
1776       exit 1
1777     fi
1778
1779     magic_compile_set osl-$OSL_VERSION $osl_magic
1780
1781     cd $CWD
1782     INFO "Done compiling OpenShadingLanguage-$OSL_VERSION!"
1783   else
1784     INFO "Own OpenShadingLanguage-$OSL_VERSION is up to date, nothing to do!"
1785     INFO "If you want to force rebuild of this lib, use the --force-osl option."
1786   fi
1787
1788   run_ldconfig "osl"
1789 }
1790
1791 #### Build OSD ####
1792 _init_osd() {
1793   _src=$SRC/OpenSubdiv-$OSD_VERSION
1794   _git=true
1795   _inst=$INST/osd-$OSD_VERSION
1796   _inst_shortcut=$INST/osd
1797 }
1798
1799 clean_OSD() {
1800   _init_osd
1801   _clean
1802 }
1803
1804 compile_OSD() {
1805   # To be changed each time we make edits that would modify the compiled result!
1806   osd_magic=0
1807   _init_osd
1808
1809   # Clean install if needed!
1810   magic_compile_check osd-$OSD_VERSION $osd_magic
1811   if [ $? -eq 1 -o "$OSD_FORCE_REBUILD" = true ]; then
1812     clean_OSD
1813   fi
1814
1815   if [ ! -d $_inst ]; then
1816     INFO "Building OpenSubdiv-$OSD_VERSION"
1817
1818     prepare_opt
1819
1820     if [ ! -d $_src ]; then
1821       mkdir -p $SRC
1822
1823       if [ "$OSD_USE_REPO" = true ]; then
1824         git clone ${OSD_SOURCE_REPO[0]} $_src
1825       else
1826         download OSD_SOURCE[@] "$_src.tar.gz"
1827         INFO "Unpacking OpenSubdiv-$OSD_VERSION"
1828         tar -C $SRC --transform "s,(.*/?)OpenSubdiv-[^/]*(.*),\1OpenSubdiv-$OSD_VERSION\2,x" \
1829             -xf $_src.tar.gz
1830       fi
1831     fi
1832
1833     cd $_src
1834
1835     if [ "$OSD_USE_REPO" = true ]; then
1836       git remote set-url origin ${OSD_SOURCE_REPO[0]}
1837       # XXX For now, always update from latest repo...
1838       git pull --no-edit -X theirs origin $OSD_SOURCE_REPO_BRANCH
1839       # Stick to same rev as windows' libs...
1840       git checkout $OSD_SOURCE_REPO_UID
1841       git reset --hard
1842     fi
1843
1844     # Always refresh the whole build!
1845     if [ -d build ]; then
1846       rm -rf build
1847     fi
1848     mkdir build
1849     cd build
1850
1851     cmake_d="-D CMAKE_BUILD_TYPE=Release"
1852     cmake_d="$cmake_d -D CMAKE_INSTALL_PREFIX=$_inst"
1853     # ptex is only needed when nicholas bishop is ready
1854     cmake_d="$cmake_d -D NO_PTEX=1"
1855     cmake_d="$cmake_d -D NO_CLEW=1"
1856     # maya plugin, docs, tutorials, regression tests and examples are not needed
1857     cmake_d="$cmake_d -D NO_MAYA=1 -D NO_DOC=1 -D NO_TUTORIALS=1 -D NO_REGRESSION=1 -DNO_EXAMPLES=1"
1858
1859     cmake $cmake_d ..
1860
1861     make -j$THREADS && make install
1862     make clean
1863
1864     if [ -d $_inst ]; then
1865       _create_inst_shortcut
1866     else
1867       ERROR "OpenSubdiv-$OSD_VERSION failed to compile, exiting"
1868       exit 1
1869     fi
1870
1871     magic_compile_set osd-$OSD_VERSION $osd_magic
1872
1873     cd $CWD
1874     INFO "Done compiling OpenSubdiv-$OSD_VERSION!"
1875   else
1876     INFO "Own OpenSubdiv-$OSD_VERSION is up to date, nothing to do!"
1877     INFO "If you want to force rebuild of this lib, use the --force-osd option."
1878   fi
1879
1880   run_ldconfig "osd"
1881 }
1882
1883 #### Build Blosc ####
1884 _init_blosc() {
1885   _src=$SRC/c-blosc-$OPENVDB_BLOSC_VERSION
1886   _git=false
1887   _inst=$INST/blosc-$OPENVDB_BLOSC_VERSION
1888   _inst_shortcut=$INST/blosc
1889 }
1890
1891 clean_BLOSC() {
1892   _init_blosc
1893   _clean
1894 }
1895
1896 compile_BLOSC() {
1897   # To be changed each time we make edits that would modify the compiled result!
1898   blosc_magic=0
1899   _init_blosc
1900
1901   # Clean install if needed!
1902   magic_compile_check blosc-$OPENVDB_BLOSC_VERSION $blosc_magic
1903   if [ $? -eq 1 -o "$OPENVDB_FORCE_REBUILD" = true ]; then
1904     clean_BLOSC
1905     rm -rf $_inst
1906   fi
1907
1908   if [ ! -d $_inst ]; then
1909     INFO "Building Blosc-$OPENVDB_BLOSC_VERSION"
1910
1911     # Rebuild dependecies as well!
1912     OPENVDB_FORCE_BUILD=true
1913     OPENVDB_FORCE_REBUILD=true
1914
1915     prepare_opt
1916
1917     if [ ! -d $_src ]; then
1918       INFO "Downloading Blosc-$OPENVDB_BLOSC_VERSION"
1919       mkdir -p $SRC
1920       download OPENVDB_BLOSC_SOURCE[@] $_src.tar.gz
1921
1922       INFO "Unpacking Blosc-$OPENVDB_BLOSC_VERSION"
1923       tar -C $SRC -xf $_src.tar.gz
1924     fi
1925
1926     cd $_src
1927     # Always refresh the whole build!
1928     if [ -d build ]; then
1929       rm -rf build
1930     fi
1931     mkdir build
1932     cd build
1933
1934     cmake_d="-D CMAKE_BUILD_TYPE=Release"
1935     cmake_d="$cmake_d -D CMAKE_INSTALL_PREFIX=$_inst"
1936     cmake_d="$cmake_d -D BUILD_STATIC=OFF"
1937     cmake_d="$cmake_d -D BUILD_TESTS=OFF"
1938     cmake_d="$cmake_d -D BUILD_BENCHMARKS=OFF"
1939     INFO "$cmake_d"
1940
1941     cmake $cmake_d ..
1942
1943     make -j$THREADS && make install
1944
1945     make clean
1946
1947     if [ -d $_inst ]; then
1948       _create_inst_shortcut
1949     else
1950       ERROR "Blosc-$OPENVDB_BLOSC_VERSION failed to compile, exiting"
1951       exit 1
1952     fi
1953     cd $CWD
1954     INFO "Done compiling Blosc-$OPENVDB_BLOSC_VERSION!"
1955   else
1956     INFO "Own Blosc-$OPENVDB_BLOSC_VERSION is up to date, nothing to do!"
1957     INFO "If you want to force rebuild of this lib (and openexr), use the --force-openvdb option."
1958   fi
1959
1960   magic_compile_set blosc-$OPENVDB_BLOSC_VERSION $blosc_magic
1961
1962   run_ldconfig "blosc"
1963 }
1964
1965 #### Build OpenVDB ####
1966 _init_openvdb() {
1967   _src=$SRC/openvdb-$OPENVDB_VERSION
1968   _git=false
1969   _inst=$INST/openvdb-$OPENVDB_VERSION
1970   _inst_shortcut=$INST/openvdb
1971 }
1972
1973 clean_OPENVDB() {
1974   _init_openvdb
1975   _clean
1976 }
1977
1978 compile_OPENVDB() {
1979   compile_BLOSC
1980   PRINT ""
1981
1982   # To be changed each time we make edits that would modify the compiled result!
1983   openvdb_magic=0
1984   _init_openvdb
1985
1986   # Clean install if needed!
1987   magic_compile_check openvdb-$OPENVDB_VERSION $openvdb_magic
1988   if [ $? -eq 1 -o "$OPENVDB_FORCE_REBUILD" = true ]; then
1989     clean_OPENVDB
1990   fi
1991
1992   if [ ! -d $_inst ]; then
1993     INFO "Building OpenVDB-$OPENVDB_VERSION"
1994
1995     prepare_opt
1996
1997     if [ ! -d $_src -o true ]; then
1998       mkdir -p $SRC
1999       download OPENVDB_SOURCE[@] "$_src.tar.gz"
2000
2001       INFO "Unpacking OpenVDB-$OPENVDB_VERSION"
2002       #~ tar -C $SRC --transform "s,(.*/?)OpenShadingLanguage-[^/]*(.*),\1OpenShadingLanguage-$OPENVDB_VERSION\2,x" \
2003           #~ -xf $_src.tar.gz
2004       tar -C $SRC -xf $_src.tar.gz
2005     fi
2006
2007     cd $_src
2008
2009     #~ if [ "$OPENVDB_USE_REPO" = true ]; then
2010       #~ git remote set-url origin ${OPENVDB_SOURCE_REPO[0]}
2011       #~ # XXX For now, always update from latest repo...
2012       #~ git pull --no-edit -X theirs origin $OPENVDB_SOURCE_REPO_BRANCH
2013       #~ # Stick to same rev as windows' libs...
2014       #~ git checkout $OPENVDB_SOURCE_REPO_UID
2015       #~ git reset --hard
2016     #~ fi
2017
2018     cd openvdb  # Grrrrrr...
2019
2020     # Always refresh the whole build!
2021     if [ -d build ]; then
2022       rm -rf build
2023     fi
2024     mkdir build
2025     cd build
2026
2027     make_d="DESTDIR=$_inst"
2028
2029     if [ -d $INST/boost ]; then
2030       make_d="$make_d -D BOOST_ROOT=$INST/boost -D Boost_NO_SYSTEM_PATHS=ON"
2031     fi
2032
2033     #~ if [ "$_with_built_openexr" = true ]; then
2034       #~ cmake_d="$cmake_d -D ILMBASE_HOME=$INST/openexr"
2035       #~ cmake_d="$cmake_d -D OPENEXR_HOME=$INST/openexr"
2036       #~ INFO "ILMBASE_HOME=$INST/openexr"
2037     #~ fi
2038
2039     #~ cmake_d="-D CMAKE_BUILD_TYPE=Release"
2040     #~ cmake_d="$cmake_d -D CMAKE_INSTALL_PREFIX=$_inst"
2041     #~ # ptex is only needed when nicholas bishop is ready
2042     #~ cmake_d="$cmake_d -D NO_PTEX=1"
2043     #~ cmake_d="$cmake_d -D NO_CLEW=1"
2044     #~ # maya plugin, docs, tutorials, regression tests and examples are not needed
2045     #~ cmake_d="$cmake_d -D NO_MAYA=1 -D NO_DOC=1 -D NO_TUTORIALS=1 -D NO_REGRESSION=1 -DNO_EXAMPLES=1"
2046
2047     #~ cmake $cmake_d ..
2048
2049     #~ make -j$THREADS && make install
2050     #~ make clean
2051
2052     #~ if [ -d $_inst ]; then
2053       #~ _create_inst_shortcut
2054     #~ else
2055       #~ ERROR "OpenSubdiv-$OSD_VERSION failed to compile, exiting"
2056       #~ exit 1
2057     #~ fi
2058
2059     #~ magic_compile_set osd-$OSD_VERSION $osd_magic
2060
2061     cd $CWD
2062     INFO "Done compiling OpenVDB-$OPENVDB_VERSION!"
2063   else
2064     INFO "Own OpenVDB-$OPENVDB_VERSION is up to date, nothing to do!"
2065     INFO "If you want to force rebuild of this lib, use the --force-openvdb option."
2066   fi
2067
2068   run_ldconfig "openvdb"
2069 }
2070
2071 #### Build OpenCOLLADA ####
2072 _init_opencollada() {
2073   _src=$SRC/OpenCOLLADA-$OPENCOLLADA_VERSION
2074   _git=true
2075   _inst=$INST/opencollada-$OPENCOLLADA_VERSION
2076   _inst_shortcut=$INST/opencollada
2077 }
2078
2079 clean_OpenCOLLADA() {
2080   _init_opencollada
2081   _clean
2082 }
2083
2084 compile_OpenCOLLADA() {
2085   # To be changed each time we make edits that would modify the compiled results!
2086   opencollada_magic=9
2087   _init_opencollada
2088
2089   # Clean install if needed!
2090   magic_compile_check opencollada-$OPENCOLLADA_VERSION $opencollada_magic
2091   if [ $? -eq 1 -o "$OPENCOLLADA_FORCE_REBUILD" = true ]; then
2092     clean_OpenCOLLADA
2093   fi
2094
2095   if [ ! -d $_inst ]; then
2096     INFO "Building OpenCOLLADA-$OPENCOLLADA_VERSION"
2097
2098     prepare_opt
2099
2100     if [ ! -d $_src ]; then
2101       mkdir -p $SRC
2102       git clone $OPENCOLLADA_SOURCE $_src
2103     fi
2104
2105     cd $_src
2106
2107     # XXX For now, always update from latest repo...
2108     git pull origin $OPENCOLLADA_REPO_BRANCH
2109
2110     # Stick to same rev as windows' libs...
2111     git checkout $OPENCOLLADA_REPO_UID
2112     git reset --hard
2113
2114     # Always refresh the whole build!
2115     if [ -d build ]; then
2116       rm -rf build
2117     fi
2118     mkdir build
2119     cd build
2120
2121     cmake_d="-D CMAKE_BUILD_TYPE=Release"
2122     cmake_d="$cmake_d -D CMAKE_INSTALL_PREFIX=$_inst"
2123     cmake_d="$cmake_d -D USE_EXPAT=OFF"
2124     cmake_d="$cmake_d -D USE_LIBXML=ON"
2125     # XXX Does not work!
2126 #    cmake_d="$cmake_d -D USE_STATIC=OFF"
2127     cmake_d="$cmake_d -D USE_STATIC=ON"
2128
2129     cmake $cmake_d ../
2130
2131     make -j$THREADS && make install
2132     make clean
2133
2134     if [ -d $_inst ]; then
2135       _create_inst_shortcut
2136     else
2137       ERROR "OpenCOLLADA-$OPENCOLLADA_VERSION failed to compile, exiting"
2138       exit 1
2139     fi
2140
2141     magic_compile_set opencollada-$OPENCOLLADA_VERSION $opencollada_magic
2142
2143     cd $CWD
2144     INFO "Done compiling OpenCOLLADA-$OPENCOLLADA_VERSION!"
2145   else
2146     INFO "Own OpenCOLLADA-$OPENCOLLADA_VERSION is up to date, nothing to do!"
2147     INFO "If you want to force rebuild of this lib, use the --force-opencollada option."
2148   fi
2149 }
2150
2151 #### Build FFMPEG ####
2152 _init_ffmpeg() {
2153   _src=$SRC/ffmpeg-$FFMPEG_VERSION
2154   _inst=$INST/ffmpeg-$FFMPEG_VERSION
2155   _inst_shortcut=$INST/ffmpeg
2156 }
2157
2158 clean_FFmpeg() {
2159   _init_ffmpeg
2160   _clean
2161 }
2162
2163 compile_FFmpeg() {
2164   # To be changed each time we make edits that would modify the compiled result!
2165   ffmpeg_magic=4
2166   _init_ffmpeg
2167
2168   # Clean install if needed!
2169   magic_compile_check ffmpeg-$FFMPEG_VERSION $ffmpeg_magic
2170   if [ $? -eq 1 -o "$FFMPEG_FORCE_REBUILD" = true ]; then
2171     clean_FFmpeg
2172   fi
2173
2174   if [ ! -d $_inst ]; then
2175     INFO "Building ffmpeg-$FFMPEG_VERSION"
2176
2177     prepare_opt
2178
2179     if [ ! -d $_src ]; then
2180       INFO "Downloading ffmpeg-$FFMPEG_VERSION"
2181       mkdir -p $SRC
2182       download FFMPEG_SOURCE[@] "$_src.tar.bz2"
2183
2184       INFO "Unpacking ffmpeg-$FFMPEG_VERSION"
2185       tar -C $SRC -xf $_src.tar.bz2
2186     fi
2187
2188     cd $_src
2189
2190     extra=""
2191
2192     if [ "$VORBIS_USE" = true ]; then
2193       extra="$extra --enable-libvorbis"
2194     fi
2195
2196     if [ "$THEORA_USE" = true ]; then
2197       extra="$extra --enable-libtheora"
2198     fi
2199
2200     if [ "$XVID_USE" = true ]; then
2201       extra="$extra --enable-libxvid"
2202     fi
2203
2204     if [ "$X264_USE" = true ]; then
2205       extra="$extra --enable-libx264"
2206     fi
2207
2208     if [ "$VPX_USE" = true ]; then
2209       extra="$extra --enable-libvpx"
2210     fi
2211
2212     if [ "$MP3LAME_USE" = true ]; then
2213       extra="$extra --enable-libmp3lame"
2214     fi
2215
2216     if [ "$OPENJPEG_USE" = true ]; then
2217       extra="$extra --enable-libopenjpeg"
2218     fi
2219
2220     ./configure --cc="gcc -Wl,--as-needed" \
2221         --extra-ldflags="-pthread -static-libgcc" \
2222         --prefix=$_inst --enable-static \
2223         --disable-ffplay --disable-ffserver --disable-doc \
2224         --enable-gray \
2225         --enable-avfilter --disable-vdpau \
2226         --disable-bzlib --disable-libgsm --disable-libspeex \
2227         --enable-pthreads --enable-zlib --enable-stripping --enable-runtime-cpudetect \
2228         --disable-vaapi --disable-libfaac --disable-nonfree --enable-gpl \
2229         --disable-postproc --disable-librtmp --disable-libopencore-amrnb \
2230         --disable-libopencore-amrwb --disable-libdc1394 --disable-version3 --disable-outdev=sdl \
2231         --disable-libxcb \
2232         --disable-outdev=xv \
2233         --disable-outdev=alsa --disable-indev=sdl --disable-indev=alsa --disable-indev=jack \
2234         --disable-indev=lavfi $extra
2235
2236     make -j$THREADS && make install
2237     make clean
2238
2239     if [ -d $_inst ]; then
2240       _create_inst_shortcut
2241     else
2242       ERROR "FFmpeg-$FFMPEG_VERSION failed to compile, exiting"
2243       exit 1
2244     fi
2245
2246     magic_compile_set ffmpeg-$FFMPEG_VERSION $ffmpeg_magic
2247
2248     cd $CWD
2249     INFO "Done compiling ffmpeg-$FFMPEG_VERSION!"
2250   else
2251     INFO "Own ffmpeg-$FFMPEG_VERSION is up to date, nothing to do!"
2252     INFO "If you want to force rebuild of this lib, use the --force-ffmpeg option."
2253   fi
2254 }
2255
2256
2257 #### Install on DEB-like ####
2258 get_package_version_DEB() {
2259     dpkg-query -W -f '${Version}' $1 | sed -r 's/.*:\s*([0-9]+:)(([0-9]+\.?)+).*/\2/'
2260 }
2261
2262 check_package_DEB() {
2263   r=`apt-cache show $1 | grep -c 'Package:'`
2264
2265   if [ $r -ge 1 ]; then
2266     return 0
2267   else
2268     return 1
2269   fi
2270 }
2271
2272 check_package_installed_DEB() {
2273   r=`dpkg-query -W -f='${Status}' $1 | grep -c "install ok"`
2274
2275   if [ $r -ge 1 ]; then
2276     return 0
2277   else
2278     return 1
2279   fi
2280 }
2281
2282 check_package_version_match_DEB() {
2283   v=`apt-cache policy $1 | grep 'Candidate:' | sed -r 's/.*:\s*([0-9]+:)(([0-9]+\.?)+).*/\2/'`
2284
2285   if [ -z "$v" ]; then
2286     return 1
2287   fi
2288
2289   version_match $v $2
2290   return $?
2291 }
2292
2293 check_package_version_ge_DEB() {
2294   v=`apt-cache policy $1 | grep 'Candidate:' | sed -r 's/.*:\s*([0-9]+:)?(([0-9]+\.?)+).*/\2/'`
2295
2296   if [ -z "$v" ]; then
2297     return 1
2298   fi
2299
2300   version_ge $v $2
2301   return $?
2302 }
2303
2304 check_package_version_ge_lt_DEB() {
2305   v=`apt-cache policy $1 | grep 'Candidate:' | sed -r 's/.*:\s*([0-9]+:)?(([0-9]+\.?)+).*/\2/'`
2306
2307   if [ -z "$v" ]; then
2308     return 1
2309   fi
2310
2311   version_ge_lt $v $2 $3
2312   return $?
2313 }
2314
2315 install_packages_DEB() {
2316   if [ ! $SUDO ]; then
2317     WARNING "--no-sudo enabled, impossible to run apt-get install for $@, you'll have to do it yourself..."
2318   else
2319     $SUDO apt-get install -y --force-yes $@
2320     if [ $? -ge 1 ]; then
2321       ERROR "apt-get failed to install requested packages, exiting."
2322       exit 1
2323     fi
2324   fi
2325 }
2326
2327 install_DEB() {
2328   PRINT ""
2329   INFO "Installing dependencies for DEB-based distribution"
2330   PRINT ""
2331   PRINT "`eval _echo "$COMMON_INFO"`"
2332   PRINT ""
2333
2334   if [ "$NO_CONFIRM" = false ]; then
2335     read -p "Do you want to continue (Y/n)?"
2336     [ "$(echo ${REPLY:=Y} | tr [:upper:] [:lower:])" != "y" ] && exit
2337   fi
2338
2339   if [ ! -z "`cat /etc/debian_version | grep ^6`"  ]; then
2340     if [ -z "`cat /etc/apt/sources.list | grep backports.debian.org`"  ]; then
2341       WARNING "Looks like you're using Debian Squeeze which does have broken CMake"
2342       PRINT "It is highly recommended to install cmake from backports, otherwise"
2343       PRINT "compilation of some libraries could fail"
2344       PRINT ""
2345       PRINT "You could install newer CMake from debian-backports repository"
2346       PRINT "Add this this line to your /etc/apt/sources.lixt:"
2347       PRINT ""
2348       PRINT "deb http://backports.debian.org/debian-backports squeeze-backports main"
2349       PRINT ""
2350       PRINT "and then run:"
2351       PRINT ""
2352       PRINT "sudo apt-get update && sudo apt-get install cmake=2.8.7-4~bpo60+1 sudo apt-get install cmake=2.8.7-4~bpo60+1"
2353       PRINT ""
2354       PRINT "(you could also add this reporisotry using GUI like synaptic)"
2355       PRINT ""
2356       PRINT "Hit Enter to continue running the script, or hit Ctrl-C to abort the script"
2357
2358       read
2359       PRINT ""
2360     fi
2361   fi
2362
2363   if [ ! $SUDO ]; then
2364     WARNING "--no-sudo enabled, impossible to run apt-get update, you'll have to do it yourself..."
2365   else
2366     $SUDO apt-get update
2367   fi
2368
2369   # These libs should always be available in debian/ubuntu official repository...
2370   OPENJPEG_DEV="libopenjpeg-dev"
2371   VORBIS_DEV="libvorbis-dev"
2372   OGG_DEV="libogg-dev"
2373   THEORA_DEV="libtheora-dev"
2374
2375   _packages="gawk cmake cmake-curses-gui build-essential libjpeg-dev libpng-dev \
2376              libfreetype6-dev libx11-dev \
2377              libxcursor-dev libxi-dev wget libsqlite3-dev libxrandr-dev libxinerama-dev \
2378              libbz2-dev libncurses5-dev libssl-dev liblzma-dev libreadline-dev $OPENJPEG_DEV \
2379              libopenal-dev libglew-dev libglewmx-dev yasm $THEORA_DEV $VORBIS_DEV $OGG_DEV \
2380              libsdl1.2-dev libfftw3-dev patch bzip2 libxml2-dev libtinyxml-dev"
2381
2382   OPENJPEG_USE=true
2383   VORBIS_USE=true
2384   OGG_USE=true
2385   THEORA_USE=true
2386
2387   PRINT "$LIBYAML_CPP_VER"
2388   # Some not-so-old distro (ubuntu 12.4) do not have it, do not fail in this case, just warn.
2389   YAMLCPP_DEV="libyaml-cpp-dev"
2390   check_package_DEB $YAMLCPP_DEV
2391   if [ $? -eq 0 ]; then
2392     # Another Ubuntu hack - in 14.4, ocio uses (old) 0.3, while default is now 0.5... grrrrr.
2393     if $LIBYAML_CPP_VER_DEFINED; then
2394       YAMLCPP_VER_DEV="libyaml-cpp$LIBYAML_CPP_VER-dev"
2395       check_package_DEB $YAMLCPP_VER_DEV
2396       if [ $? -eq 0 ]; then
2397         YAMLCPP_DEV=$YAMLCPP_VER_DEV
2398       else
2399         PRINT ""
2400         WARNING "libyaml-cpp$LIBYAML_CPP_VER-dev not found!"
2401         PRINT ""
2402       fi
2403     fi
2404     _packages="$_packages $YAMLCPP_DEV"
2405   else
2406     PRINT ""
2407     WARNING "libyaml-cpp-dev not found, you may have to install it by hand to get Blender compiling..."
2408     PRINT ""
2409   fi
2410
2411   # Install newest libtiff-dev in debian/ubuntu.
2412   TIFF="libtiff"
2413   check_package_DEB $TIFF
2414   if [ $? -eq 0 ]; then
2415     _packages="$_packages $TIFF-dev"
2416   else
2417     TIFF="libtiff5"
2418     check_package_DEB $TIFF
2419     if [ $? -eq 0 ]; then
2420       _packages="$_packages $TIFF-dev"
2421     else
2422       TIFF="libtiff4"  # Some old distro, like e.g. ubuntu 10.04 :/
2423       check_package_DEB $TIFF
2424       if [ $? -eq 0 ]; then
2425         _packages="$_packages $TIFF-dev"
2426       fi
2427     fi
2428   fi
2429
2430   GIT="git"
2431   check_package_DEB $GIT
2432   if [ $? -eq 0 ]; then
2433     _packages="$_packages $GIT"
2434   else
2435     GIT="git-core"  # Some old distro, like e.g. ubuntu 10.04 :/
2436     check_package_DEB $GIT
2437     if [ $? -eq 0 ]; then
2438       _packages="$_packages $GIT"
2439     fi
2440   fi
2441
2442   if [ "$WITH_ALL" = true ]; then
2443     _packages="$_packages libspnav-dev"
2444     # Only install jack if jack2 is not already installed!
2445     JACK="libjack-dev"
2446     JACK2="libjack-jackd2-dev"
2447     check_package_installed_DEB $JACK2
2448     if [ $? -eq 0 ]; then
2449       _packages="$_packages $JACK2"
2450     else
2451       _packages="$_packages $JACK"
2452     fi
2453   fi
2454
2455   PRINT ""
2456   install_packages_DEB $_packages
2457
2458   PRINT""
2459   SNDFILE_DEV="libsndfile1-dev"
2460   check_package_DEB $SNDFILE_DEV
2461   if [ $? -eq 0 ]; then
2462     install_packages_DEB $SNDFILE_DEV
2463   fi
2464
2465   PRINT ""
2466   X264_DEV="libx264-dev"
2467   check_package_version_ge_DEB $X264_DEV $X264_VERSION_MIN
2468   if [ $? -eq 0 ]; then
2469     install_packages_DEB $X264_DEV
2470     X264_USE=true
2471   fi
2472
2473   if [ "$WITH_ALL" = true ]; then
2474     PRINT ""
2475     # Grmpf, debian is libxvidcore-dev and ubuntu libxvidcore4-dev!
2476     # Note: not since ubuntu 10.04
2477     XVID_DEV="libxvidcore-dev"
2478     check_package_DEB $XVID_DEV
2479     if [ $? -eq 0 ]; then
2480       install_packages_DEB $XVID_DEV
2481       XVID_USE=true
2482     else
2483       XVID_DEV="libxvidcore4-dev"
2484       check_package_DEB $XVID_DEV
2485       if [ $? -eq 0 ]; then
2486         install_packages_DEB $XVID_DEV
2487         XVID_USE=true
2488       fi
2489     fi
2490
2491     PRINT ""
2492     MP3LAME_DEV="libmp3lame-dev"
2493     check_package_DEB $MP3LAME_DEV
2494     if [ $? -eq 0 ]; then
2495       install_packages_DEB $MP3LAME_DEV
2496       MP3LAME_USE=true
2497     fi
2498
2499     PRINT ""
2500     VPX_DEV="libvpx-dev"
2501     check_package_version_ge_DEB $VPX_DEV $VPX_VERSION_MIN
2502     if [ $? -eq 0 ]; then
2503       install_packages_DEB $VPX_DEV
2504       VPX_USE=true
2505     fi
2506   fi
2507
2508
2509   PRINT ""
2510   _do_compile_python=false
2511   if [ "$PYTHON_SKIP" = true ]; then
2512     WARNING "Skipping Python/NumPy installation, as requested..."
2513   elif [ "$PYTHON_FORCE_BUILD" = true ]; then
2514     INFO "Forced Python/NumPy building, as requested..."
2515     _do_compile_python=true
2516   else
2517     check_package_DEB python$PYTHON_VERSION_MIN-dev
2518     if [ $? -eq 0 ]; then
2519       install_packages_DEB python$PYTHON_VERSION_MIN-dev
2520       clean_Python
2521       PRINT ""
2522       if [ "$NUMPY_SKIP" = true ]; then
2523         WARNING "Skipping NumPy installation, as requested..."
2524       else
2525         check_package_DEB python3-numpy
2526         if [ $? -eq 0 ]; then
2527           install_packages_DEB python3-numpy
2528         else
2529           WARNING "Sorry, using python package but no valid numpy package available!" \
2530                   "    Use --build-numpy to force building of both Python and NumPy."
2531         fi
2532       fi
2533     else
2534       _do_compile_python=true
2535     fi
2536   fi
2537
2538   if $_do_compile_python; then
2539     compile_Python
2540     PRINT ""
2541     if [ "$NUMPY_SKIP" = true ]; then
2542       WARNING "Skipping NumPy installation, as requested..."
2543     else
2544       compile_Numpy
2545     fi
2546   fi
2547
2548
2549   PRINT ""
2550   if [ "$BOOST_SKIP" = true ]; then
2551     WARNING "Skipping Boost installation, as requested..."
2552   elif [ "$BOOST_FORCE_BUILD" = true ]; then
2553     INFO "Forced Boost building, as requested..."
2554     compile_Boost
2555   else
2556     check_package_version_ge_DEB libboost-dev $BOOST_VERSION_MIN
2557     if [ $? -eq 0 ]; then
2558       install_packages_DEB libboost-dev
2559
2560       boost_version=$(echo `get_package_version_DEB libboost-dev` | sed -r 's/^([0-9]+\.[0-9]+).*/\1/')
2561
2562       check_package_DEB libboost-locale$boost_version-dev
2563       if [ $? -eq 0 ]; then
2564         install_packages_DEB libboost-locale$boost_version-dev libboost-filesystem$boost_version-dev \
2565                              libboost-regex$boost_version-dev libboost-system$boost_version-dev \
2566                              libboost-thread$boost_version-dev libboost-wave$boost_version-dev
2567         clean_Boost
2568       else
2569         compile_Boost
2570       fi
2571     else
2572       compile_Boost
2573     fi
2574   fi
2575
2576
2577   PRINT ""
2578   if [ "$OCIO_SKIP" = true ]; then
2579     WARNING "Skipping OpenColorIO installation, as requested..."
2580   elif [ "$OCIO_FORCE_BUILD" = true ]; then
2581     INFO "Forced OpenColorIO building, as requested..."
2582     compile_OCIO
2583   else
2584     # XXX Always force build of own OCIO, until linux distro guys update their package to default libyaml-cpp ver (0.5)!
2585     #check_package_version_ge_DEB libopencolorio-dev $OCIO_VERSION_MIN
2586     #if [ $? -eq 0 ]; then
2587       #install_packages_DEB libopencolorio-dev
2588       #clean_OCIO
2589     #else
2590       compile_OCIO
2591     #fi
2592   fi
2593
2594
2595   PRINT ""
2596   if [ "$OPENEXR_SKIP" = true ]; then
2597     WARNING "Skipping ILMBase/OpenEXR installation, as requested..."
2598   elif [ "$OPENEXR_FORCE_BUILD" = true ]; then
2599     INFO "Forced ILMBase/OpenEXR building, as requested..."
2600     compile_OPENEXR
2601   else
2602     check_package_version_ge_DEB libopenexr-dev $OPENEXR_VERSION_MIN
2603     if [ $? -eq 0 ]; then
2604       install_packages_DEB libopenexr-dev
2605       OPENEXR_VERSION=`get_package_version_DEB libopenexr-dev`
2606       ILMBASE_VERSION=$OPENEXR_VERSION
2607       clean_OPENEXR
2608     else
2609       compile_OPENEXR
2610     fi
2611   fi
2612
2613
2614   PRINT ""
2615   if [ "$OIIO_SKIP" = true ]; then
2616     WARNING "Skipping OpenImageIO installation, as requested..."
2617   elif [ "$OIIO_FORCE_BUILD" = true ]; then
2618     INFO "Forced OpenImageIO building, as requested..."
2619     compile_OIIO
2620   else
2621     check_package_version_ge_lt_DEB libopenimageio-dev $OIIO_VERSION_MIN $OIIO_VERSION_MAX
2622     if [ $? -eq 0 -a "$_with_built_openexr" = false ]; then
2623       install_packages_DEB libopenimageio-dev
2624       clean_OIIO
2625     else
2626       compile_OIIO
2627     fi
2628   fi
2629
2630
2631   PRINT ""
2632   have_llvm=false
2633   _do_compile_llvm=false
2634   if [ "$LLVM_SKIP" = true ]; then
2635     WARNING "Skipping LLVM installation, as requested (this also implies skipping OSL!)..."
2636   elif [ "$LLVM_FORCE_BUILD" = true ]; then
2637     INFO "Forced LLVM building, as requested..."
2638     _do_compile_llvm=true
2639   else
2640     check_package_DEB llvm-$LLVM_VERSION-dev
2641     if [ $? -eq 0 ]; then
2642       install_packages_DEB llvm-$LLVM_VERSION-dev clang-$LLVM_VERSION
2643       have_llvm=true
2644       LLVM_VERSION_FOUND=$LLVM_VERSION
2645       clean_LLVM
2646     else
2647       check_package_version_ge_DEB llvm-dev $LLVM_VERSION_MIN
2648       if [ $? -eq 0 ]; then
2649         install_packages_DEB llvm-dev clang
2650         have_llvm=true
2651         LLVM_VERSION_FOUND=""  # Using default one, no need to specify it!
2652         clean_LLVM
2653       else
2654         _do_compile_llvm=true
2655       fi
2656     fi
2657   fi
2658
2659   if [ "$_do_compile_llvm" = true ]; then
2660     install_packages_DEB libffi-dev
2661     # LLVM can't find the debian ffi header dir
2662     _FFI_INCLUDE_DIR=`dpkg -L libffi-dev | grep -e ".*/ffi.h" | sed -r 's/(.*)\/ffi.h/\1/'`
2663     PRINT ""
2664     compile_LLVM
2665     have_llvm=true
2666     LLVM_VERSION_FOUND=$LLVM_VERSION
2667   fi
2668
2669
2670   PRINT ""
2671   _do_compile_osl=false
2672   if [ "$OSL_SKIP" = true ]; then
2673     WARNING "Skipping OpenShadingLanguage installation, as requested..."
2674   elif [ "$OSL_FORCE_BUILD" = true ]; then
2675     INFO "Forced OpenShadingLanguage building, as requested..."
2676     _do_compile_osl=true
2677   else
2678       # No package currently!
2679     _do_compile_osl=true
2680   fi
2681
2682   if [ "$_do_compile_osl" = true ]; then
2683     if [ "$have_llvm" = true ]; then
2684       install_packages_DEB flex bison libtbb-dev
2685       PRINT ""
2686       compile_OSL
2687     else
2688       WARNING "No LLVM available, cannot build OSL!"
2689     fi
2690   fi
2691
2692
2693   PRINT ""
2694   _do_compile_osd=false
2695   if [ "$OSD_SKIP" = true ]; then
2696     WARNING "Skipping OpenSubdiv installation, as requested..."
2697   elif [ "$OSD_FORCE_BUILD" = true ]; then
2698     INFO "Forced OpenSubdiv building, as requested..."
2699     _do_compile_osd=true
2700   else
2701       # No package currently!
2702     _do_compile_osd=true
2703   fi
2704
2705   if [ "$_do_compile_osd" = true ]; then
2706     install_packages_DEB flex bison libtbb-dev
2707     PRINT ""
2708     compile_OSD
2709   fi
2710
2711
2712   if [ "$WITH_OPENCOLLADA" = true ]; then
2713     _do_compile_collada=false
2714     PRINT ""
2715     if [ "$OPENCOLLADA_SKIP" = true ]; then
2716       WARNING "Skipping OpenCOLLADA installation, as requested..."
2717     elif [ "$OPENCOLLADA_FORCE_BUILD" = true ]; then
2718       INFO "Forced OpenCollada building, as requested..."
2719       _do_compile_collada=true
2720     else
2721         # No package currently!
2722       _do_compile_collada=true
2723     fi
2724
2725     if [ "$_do_compile_collada" = true ]; then
2726       install_packages_DEB libpcre3-dev
2727       # Find path to libxml shared lib...
2728       _XML2_LIB=`dpkg -L libxml2-dev | grep -e ".*/libxml2.so"`
2729       # No package
2730       PRINT ""
2731       compile_OpenCOLLADA
2732     fi
2733   fi
2734
2735
2736   PRINT ""
2737   if [ "$FFMPEG_SKIP" = true ]; then
2738     WARNING "Skipping FFMpeg installation, as requested..."
2739   elif [ "$FFMPEG_FORCE_BUILD" = true ]; then
2740     INFO "Forced FFMpeg building, as requested..."
2741     compile_FFmpeg
2742   else
2743 #    XXX Debian features libav packages as ffmpeg, those are not really compatible with blender code currently :/
2744 #        So for now, always build our own ffmpeg.
2745 #    check_package_DEB ffmpeg
2746 #    if [ $? -eq 0 ]; then
2747 #      install_packages_DEB ffmpeg
2748 #      ffmpeg_version=`get_package_version_DEB ffmpeg`
2749 #      PRINT "ffmpeg version: $ffmpeg_version"
2750 #      if [ ! -z "$ffmpeg_version" ]; then
2751 #        if  dpkg --compare-versions $ffmpeg_version gt 0.7.2; then
2752 #          install_packages_DEB libavfilter-dev libavcodec-dev libavdevice-dev libavformat-dev libavutil-dev libswscale-dev
2753 #          clean_FFmpeg
2754 #        else
2755 #          compile_FFmpeg
2756 #        fi
2757 #      fi
2758 #    fi
2759     compile_FFmpeg
2760   fi
2761 }
2762
2763
2764 #### Install on RPM-like ####
2765 rpm_flavour() {
2766   if [ -f /etc/redhat-release ]; then
2767     if [ "`grep '6\.' /etc/redhat-release`" ]; then
2768       RPM="RHEL"
2769     else
2770       RPM="FEDORA"
2771     fi
2772   elif [ -f /etc/SuSE-release ]; then
2773     RPM="SUSE"
2774   fi
2775 }
2776
2777 get_package_version_RPM() {
2778   rpm_flavour
2779   if [ "$RPM" = "FEDORA" -o "$RPM" = "RHEL" ]; then
2780     yum info $1 | grep Version | tail -n 1 | sed -r 's/.*:\s+(([0-9]+\.?)+).*/\1/'
2781   elif [ "$RPM" = "SUSE" ]; then
2782     zypper info $1 | grep Version | tail -n 1 | sed -r 's/.*:\s+(([0-9]+\.?)+).*/\1/'
2783   fi
2784 }
2785
2786 check_package_RPM() {
2787   rpm_flavour
2788   if [ "$RPM" = "FEDORA" -o "$RPM" = "RHEL" ]; then
2789     r=`yum info $1 | grep -c 'Summary'`
2790   elif [ "$RPM" = "SUSE" ]; then
2791     r=`zypper info $1 | grep -c 'Summary'`
2792   fi
2793
2794   if [ $r -ge 1 ]; then
2795     return 0
2796   else
2797     return 1
2798   fi
2799 }
2800
2801 check_package_version_match_RPM() {
2802   v=`get_package_version_RPM $1`
2803
2804   if [ -z "$v" ]; then
2805     return 1
2806   fi
2807
2808   version_match $v $2
2809   return $?
2810 }
2811
2812 check_package_version_ge_RPM() {
2813   v=`get_package_version_RPM $1`
2814
2815   if [ -z "$v" ]; then
2816     return 1
2817   fi
2818
2819   version_ge $v $2
2820   return $?
2821 }
2822
2823 check_package_version_ge_lt_RPM() {
2824   v=`get_package_version_RPM $1`
2825
2826   if [ -z "$v" ]; then
2827     return 1
2828   fi
2829
2830   version_ge_lt $v $2 $3
2831   return $?
2832 }
2833
2834 install_packages_RPM() {
2835   rpm_flavour
2836   if [ "$RPM" = "FEDORA" -o "$RPM" = "RHEL" ]; then
2837     if [ ! $SUDO ]; then
2838       WARNING "--no-sudo enabled, impossible to run yum install for $@, you'll have to do it yourself..."
2839     else
2840       $SUDO yum install -y $@
2841       if [ $? -ge 1 ]; then
2842         ERROR "yum failed to install requested packages, exiting."
2843         exit 1
2844       fi
2845     fi
2846
2847   elif [ "$RPM" = "SUSE" ]; then
2848     if [ ! $SUDO ]; then
2849       WARNING "--no-sudo enabled, impossible to run zypper install for $@, you'll have to do it yourself..."
2850     else
2851       $SUDO zypper --non-interactive install --auto-agree-with-licenses $@
2852       if [ $? -ge 1 ]; then
2853         ERROR "zypper failed to install requested packages, exiting."
2854         exit 1
2855       fi
2856     fi
2857   fi
2858 }
2859
2860 install_RPM() {
2861   PRINT ""
2862   INFO "Installing dependencies for RPM-based distribution"
2863   PRINT ""
2864   PRINT "`eval _echo "$COMMON_INFO"`"
2865   PRINT ""
2866
2867   if [ "$NO_CONFIRM" = false ]; then
2868     read -p "Do you want to continue (Y/n)?"
2869     [ "$(echo ${REPLY:=Y} | tr [:upper:] [:lower:])" != "y" ] && exit
2870   fi
2871
2872   # Enable non-free repositories for all flavours
2873   if [ ! $SUDO ]; then
2874     WARNING "--no-sudo enabled, impossible to install third party repositories, you'll have to do it yourself..."
2875   else
2876     rpm_flavour
2877     if [ "$RPM" = "FEDORA" ]; then
2878       _fedora_rel="`egrep "[0-9]{1,}" /etc/fedora-release -o`"
2879       $SUDO yum -y localinstall --nogpgcheck \
2880       http://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-$_fedora_rel.noarch.rpm \
2881       http://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-$_fedora_rel.noarch.rpm
2882
2883       $SUDO yum -y update
2884
2885       # Install cmake now because of difference with RHEL
2886       $SUDO yum -y install cmake
2887
2888     elif [ "$RPM" = "RHEL" ]; then
2889       $SUDO yum -y localinstall --nogpgcheck \
2890       http://download.fedoraproject.org/pub/epel/6/$(uname -i)/epel-release-6-8.noarch.rpm \
2891       http://download1.rpmfusion.org/free/el/updates/6/$(uname -i)/rpmfusion-free-release-6-1.noarch.rpm \
2892       http://download1.rpmfusion.org/nonfree/el/updates/6/$(uname -i)/rpmfusion-nonfree-release-6-1.noarch.rpm
2893
2894       $SUDO yum -y update
2895
2896       # Install cmake 2.8 from other repo
2897       mkdir -p $SRC
2898       if [ -f $SRC/cmake-2.8.8-4.el6.$(uname -m).rpm ]; then
2899         PRINT ""
2900         INFO "Special cmake already installed"
2901       else
2902         curl -O ftp://ftp.pbone.net/mirror/atrpms.net/el6-$(uname -i)/atrpms/testing/cmake-2.8.8-4.el6.$(uname -m).rpm
2903         mv cmake-2.8.8-4.el6.$(uname -m).rpm $SRC/
2904         $SUDO rpm -ihv $SRC/cmake-2.8.8-4.el6.$(uname -m).rpm
2905       fi
2906
2907     elif [ "$RPM" = "SUSE" ]; then
2908       # Install this now to avoid using the version from packman repository...
2909       if [ "$WITH_ALL" = true ]; then
2910         install_packages_RPM libjack-devel
2911       fi
2912
2913       _suse_rel="`grep VERSION /etc/SuSE-release | gawk '{print $3}'`"
2914
2915       PRINT ""
2916       INFO "About to add 'packman' repository from http://packman.inode.at/suse/openSUSE_$_suse_rel/"
2917       INFO "This is only needed if you do not already have a packman repository enabled..."
2918       read -p "Do you want to add this repo (Y/n)?"
2919       if [ "$(echo ${REPLY:=Y} | tr [:upper:] [:lower:])" == "y" ]; then
2920         INFO "    Installing packman..."
2921         $SUDO zypper ar --refresh --name 'Packman Repository' http://ftp.gwdg.de/pub/linux/packman/suse/openSUSE_$_suse_rel/ ftp.gwdg.de-suse
2922         INFO "    Done."
2923       else
2924         INFO "    Skipping packman installation."
2925       fi
2926       $SUDO zypper --non-interactive --gpg-auto-import-keys update --auto-agree-with-licenses
2927     fi
2928   fi
2929
2930   # These libs should always be available in fedora/suse official repository...
2931   OPENJPEG_DEV="openjpeg-devel"
2932   VORBIS_DEV="libvorbis-devel"
2933   OGG_DEV="libogg-devel"
2934   THEORA_DEV="libtheora-devel"
2935
2936   _packages="gcc gcc-c++ git make cmake libtiff-devel libjpeg-devel\
2937              libpng-devel libX11-devel libXi-devel libXcursor-devel libXrandr-devel libXinerama-devel \
2938              wget ncurses-devel readline-devel $OPENJPEG_DEV openal-soft-devel \
2939              glew-devel yasm $THEORA_DEV $VORBIS_DEV $OGG_DEV patch \
2940              libxml2-devel yaml-cpp-devel tinyxml-devel"
2941
2942   OPENJPEG_USE=true
2943   VORBIS_USE=true
2944   OGG_USE=true
2945   THEORA_USE=true
2946
2947   if [ "$RPM" = "FEDORA" -o "$RPM" = "RHEL" ]; then
2948     OPENEXR_DEV="openexr-devel"
2949
2950     _packages="$_packages freetype-devel libsqlite3x-devel fftw-devel SDL-devel"
2951
2952     if [ "$WITH_ALL" = true ]; then
2953       _packages="$_packages jack-audio-connection-kit-devel"
2954     fi
2955
2956     PRINT ""
2957     install_packages_RPM $_packages
2958
2959     PRINT ""
2960     X264_DEV="x264-devel"
2961     check_package_version_ge_RPM $X264_DEV $X264_VERSION_MIN
2962     if [ $? -eq 0 ]; then
2963       install_packages_RPM $X264_DEV
2964       X264_USE=true
2965     fi
2966
2967     if [ "$WITH_ALL" = true ]; then
2968       PRINT ""
2969       XVID_DEV="xvidcore-devel"
2970       check_package_RPM $XVID_DEV
2971       if [ $? -eq 0 ]; then
2972         install_packages_RPM $XVID_DEV
2973         XVID_USE=true
2974       fi
2975
2976       PRINT ""
2977       MP3LAME_DEV="lame-devel"
2978       check_package_RPM $MP3LAME_DEV
2979       if [ $? -eq 0 ]; then
2980         install_packages_RPM $MP3LAME_DEV
2981         MP3LAME_USE=true
2982       fi
2983     fi
2984
2985   elif [ "$RPM" = "SUSE" ]; then
2986     OPENEXR_DEV="libopenexr-devel"
2987
2988     _packages="$_packages cmake freetype2-devel sqlite3-devel fftw3-devel libSDL-devel"
2989
2990     PRINT ""
2991     install_packages_RPM $_packages
2992
2993     PRINT ""
2994     X264_DEV="libx264-devel"
2995     check_package_version_ge_RPM $X264_DEV $X264_VERSION_MIN
2996     if [ $? -eq 0 ]; then
2997       install_packages_RPM $X264_DEV
2998       X264_USE=true
2999     fi
3000
3001     if [ "$WITH_ALL" = true ]; then
3002       PRINT ""
3003       XVID_DEV="libxvidcore-devel"
3004       check_package_RPM $XVID_DEV
3005       if [ $? -eq 0 ]; then
3006         install_packages_RPM $XVID_DEV
3007         XVID_USE=true
3008       fi
3009
3010       PRINT ""
3011       MP3LAME_DEV="libmp3lame-devel"
3012       check_package_RPM $MP3LAME_DEV
3013       if [ $? -eq 0 ]; then
3014         install_packages_RPM $MP3LAME_DEV
3015         MP3LAME_USE=true
3016       fi
3017     fi
3018   fi
3019
3020   PRINT""
3021   SNDFILE_DEV="libsndfile-devel"
3022   check_package_RPM $SNDFILE_DEV
3023   if [ $? -eq 0 ]; then
3024     install_packages_RPM $SNDFILE_DEV
3025   fi
3026
3027   if [ "$WITH_ALL" = true ]; then
3028     PRINT ""
3029     VPX_DEV="libvpx-devel"
3030     check_package_version_ge_RPM $VPX_DEV $VPX_VERSION_MIN
3031     if [ $? -eq 0 ]; then
3032       install_packages_RPM $VPX_DEV
3033       VPX_USE=true
3034     fi
3035     PRINT ""
3036     install_packages_RPM libspnav-devel
3037   fi
3038
3039
3040   PRINT ""
3041   _do_compile_python=false
3042   if [ "$PYTHON_SKIP" = true ]; then
3043     WARNING "Skipping Python installation, as requested..."
3044   elif [ "$PYTHON_FORCE_BUILD" = true ]; then
3045     INFO "Forced Python/NumPy building, as requested..."
3046     _do_compile_python=true
3047   else
3048     check_package_version_match_RPM python3-devel $PYTHON_VERSION_MIN
3049     if [ $? -eq 0 ]; then
3050       install_packages_RPM python3-devel
3051       clean_Python
3052       PRINT ""
3053       if [ "$NUMPY_SKIP" = true ]; then
3054         WARNING "Skipping NumPy installation, as requested..."
3055       else
3056         check_package_version_ge_RPM python3-numpy $NUMPY_VERSION_MIN
3057         if [ $? -eq 0 ]; then
3058           install_packages_RPM python3-numpy
3059         else
3060           WARNING "Sorry, using python package but no valid numpy package available!" \
3061                   "    Use --build-numpy to force building of both Python and NumPy."
3062         fi
3063       fi
3064     else
3065       _do_compile_python=true
3066     fi
3067   fi
3068
3069   if [ "$_do_compile_python" = true ]; then
3070     compile_Python
3071     PRINT ""
3072     if [ "$NUMPY_SKIP" = true ]; then
3073       WARNING "Skipping NumPy installation, as requested..."
3074     else
3075       compile_Numpy
3076     fi
3077   fi
3078
3079
3080   PRINT ""
3081   if [ "$BOOST_SKIP" = true ]; then
3082     WARNING "Skipping Boost installation, as requested..."
3083   elif [ "$BOOST_FORCE_BUILD" = true ]; then
3084     INFO "Forced Boost building, as requested..."
3085     compile_Boost
3086   else
3087     check_package_version_ge_RPM boost-devel $BOOST_VERSION
3088     if [ $? -eq 0 ]; then
3089       install_packages_RPM boost-devel
3090       clean_Boost
3091     else
3092       compile_Boost
3093     fi
3094   fi
3095
3096
3097   PRINT ""
3098   if [ "$OCIO_SKIP" = true ]; then
3099     WARNING "Skipping OpenColorIO installation, as requested..."
3100   elif [ "$OCIO_FORCE_BUILD" = true ]; then
3101     INFO "Forced OpenColorIO building, as requested..."
3102     compile_OCIO
3103   else
3104     # XXX Always force build of own OCIO, until linux distro guys update their package to default libyaml-cpp ver (0.5)!
3105     #check_package_version_ge_RPM OpenColorIO-devel $OCIO_VERSION_MIN
3106     #if [ $? -eq 0 ]; then
3107       #install_packages_RPM OpenColorIO-devel
3108       #clean_OCIO
3109     #else
3110       compile_OCIO
3111     #fi
3112   fi
3113
3114   PRINT ""
3115   if [ "$OPENEXR_SKIP" = true ]; then
3116     WARNING "Skipping ILMBase/OpenEXR installation, as requested..."
3117   elif [ "$OPENEXR_FORCE_BUILD" = true ]; then
3118     INFO "Forced ILMBase/OpenEXR building, as requested..."
3119     compile_OPENEXR
3120   else
3121     check_package_version_ge_RPM $OPENEXR_DEV $OPENEXR_VERSION_MIN
3122     if [ $? -eq 0 ]; then
3123       install_packages_RPM $OPENEXR_DEV
3124       OPENEXR_VERSION=`get_package_version_RPM $OPENEXR_DEV`
3125       ILMBASE_VERSION=$OPENEXR_VERSION
3126       clean_OPENEXR
3127     else
3128       compile_OPENEXR
3129     fi
3130   fi
3131
3132   PRINT ""
3133   if [ "$OIIO_SKIP" = true ]; then
3134     WARNING "Skipping OpenImageIO installation, as requested..."
3135   elif [ "$OIIO_FORCE_BUILD" = true ]; then
3136     INFO "Forced OpenImageIO building, as requested..."
3137     compile_OIIO
3138   else
3139     check_package_version_ge_lt_RPM OpenImageIO-devel $OIIO_VERSION_MIN $OIIO_VERSION_MAX
3140     if [ $? -eq 0 -a $_with_built_openexr == false ]; then
3141       install_packages_RPM OpenImageIO-devel
3142       clean_OIIO
3143     else
3144       compile_OIIO
3145     fi
3146   fi
3147
3148
3149   PRINT ""
3150   have_llvm=false
3151   _do_compile_llvm=false
3152   if [ "$LLVM_SKIP" = true ]; then
3153     WARNING "Skipping LLVM installation, as requested (this also implies skipping OSL!)..."
3154   elif [ "$LLVM_FORCE_BUILD" = true ]; then
3155     INFO "Forced LLVM building, as requested..."
3156     _do_compile_llvm=true
3157   else
3158     # Problem compiling with LLVM 3.2 so match version 3.1 ...
3159     check_package_version_match_RPM llvm $LLVM_VERSION
3160     if [ $? -eq 0 ]; then
3161       if [ "$RPM" = "SUSE" ]; then
3162         install_packages_RPM llvm-devel llvm-clang-devel
3163       else
3164         install_packages_RPM llvm-devel clang-devel
3165       fi
3166       have_llvm=true
3167       LLVM_VERSION_FOUND=$LLVM_VERSION
3168       clean_LLVM
3169     else
3170       #
3171       # Better to compile it than use minimum version from repo...
3172       #
3173       _do_compile_llvm=true
3174     fi
3175   fi
3176
3177   if [ "$_do_compile_llvm" = true ]; then
3178     install_packages_RPM libffi-devel
3179     # LLVM can't find the fedora ffi header dir...
3180     _FFI_INCLUDE_DIR=`rpm -ql libffi-devel | grep -e ".*/ffi.h" | sed -r 's/(.*)\/ffi.h/\1/'`
3181     PRINT ""
3182     compile_LLVM
3183     have_llvm=true
3184     LLVM_VERSION_FOUND=$LLVM_VERSION
3185   fi
3186
3187
3188   PRINT ""
3189   _do_compile_osl=false
3190   if [ "$OSL_SKIP" = true ]; then
3191     WARNING "Skipping OpenShadingLanguage installation, as requested..."
3192   elif [ "$OSL_FORCE_BUILD" = true ]; then
3193     INFO "Forced OpenShadingLanguage building, as requested..."
3194     _do_compile_osl=true
3195   else
3196     # No package currently!
3197     _do_compile_osl=true
3198   fi
3199
3200   if [ "$_do_compile_osl" = true ]; then
3201     if [ "$have_llvm" = true ]; then
3202       install_packages_RPM flex bison
3203       if [ "$RPM" = "FEDORA" -o "$RPM" = "RHEL" ]; then
3204         install_packages_RPM tbb-devel
3205       fi
3206       PRINT ""
3207       compile_OSL
3208     else
3209       WARNING "No LLVM available, cannot build OSL!"
3210     fi
3211   fi
3212
3213
3214   PRINT ""
3215   _do_compile_osd=false
3216   if [ "$OSD_SKIP" = true ]; then
3217     WARNING "Skipping OpenSubdiv installation, as requested..."
3218   elif [ "$OSD_FORCE_BUILD" = true ]; then
3219     INFO "Forced OpenSubdiv building, as requested..."
3220     _do_compile_osd=true
3221   else
3222     # No package currently!
3223     _do_compile_osd=true
3224   fi
3225
3226   if [ "$_do_compile_osd" = true ]; then
3227     install_packages_RPM flex bison
3228     if [ "$RPM" = "FEDORA" -o "$RPM" = "RHEL" ]; then
3229       install_packages_RPM tbb-devel
3230     fi
3231     PRINT ""
3232     compile_OSD
3233   fi
3234
3235
3236   if [ "$WITH_OPENCOLLADA" = true ]; then
3237     PRINT ""
3238     _do_compile_collada=false
3239     if [ "$OPENCOLLADA_SKIP" = true ]; then
3240       WARNING "Skipping OpenCOLLADA installation, as requested..."
3241     elif [ "$OPENCOLLADA_FORCE_BUILD" = true ]; then
3242       INFO "Forced OpenCollada building, as requested..."
3243       _do_compile_collada=true
3244     else
3245       # No package...
3246       _do_compile_collada=true
3247     fi
3248
3249     if [ "$_do_compile_collada" = true ]; then
3250       install_packages_RPM pcre-devel
3251       # Find path to libxml shared lib...
3252       _XML2_LIB=`rpm -ql libxml2-devel | grep -e ".*/libxml2.so"`
3253       PRINT ""
3254       compile_OpenCOLLADA
3255     fi
3256   fi
3257
3258
3259   PRINT ""
3260   if [ "$FFMPEG_SKIP" = true ]; then
3261     WARNING "Skipping FFMpeg installation, as requested..."
3262   elif [ "$FFMPEG_FORCE_BUILD" = true ]; then
3263     INFO "Forced FFMpeg building, as requested..."
3264     compile_FFmpeg
3265   else
3266     check_package_version_ge_RPM ffmpeg $FFMPEG_VERSION_MIN
3267     if [ $? -eq 0 ]; then
3268       install_packages_RPM ffmpeg ffmpeg-devel
3269       clean_FFmpeg
3270     else
3271       compile_FFmpeg
3272     fi
3273   fi
3274 }
3275
3276
3277 #### Install on ARCH-like ####
3278 get_package_version_ARCH() {
3279   pacman -Si $1 | grep Version | tail -n 1 | sed -r 's/.*:\s+(([0-9]+\.?)+).*/\1/'
3280 }
3281
3282 check_package_ARCH() {
3283   r=`pacman -Si $1 | grep -c 'Description'`
3284
3285   if [ $r -ge 1 ]; then
3286     return 0
3287   else
3288     return 1
3289   fi
3290 }
3291
3292 check_package_version_match_ARCH() {
3293   v=`get_package_version_ARCH $1`
3294
3295   if [ -z "$v" ]; then
3296     return 1
3297   fi
3298
3299   version_match $v $2
3300   return $?
3301 }
3302
3303 check_package_version_ge_ARCH() {
3304   v=`get_package_version_ARCH $1`
3305
3306   if [ -z "$v" ]; then
3307     return 1
3308   fi
3309
3310   version_ge $v $2
3311   return $?
3312 }
3313
3314 check_package_version_ge_lt_ARCH() {
3315   v=`get_package_version_ARCH $1`
3316
3317   if [ -z "$v" ]; then
3318     return 1
3319   fi
3320
3321   version_ge_lt $v $2 $3
3322   return $?
3323 }
3324
3325 install_packages_ARCH() {
3326   if [ ! $SUDO ]; then
3327     WARNING "--no-sudo enabled, impossible to run pacman for $@, you'll have to do it yourself..."
3328   else
3329     $SUDO pacman -S --needed --noconfirm $@
3330     if [ $? -ge 1 ]; then
3331       ERROR "pacman failed to install requested packages, exiting."
3332       exit 1
3333     fi
3334   fi
3335 }
3336
3337 install_ARCH() {
3338   PRINT ""
3339   INFO "Installing dependencies for ARCH-based distribution"
3340   PRINT ""
3341   PRINT "`eval _echo "$COMMON_INFO"`"
3342   PRINT ""
3343
3344   if [ "$NO_CONFIRM" = false ]; then
3345     read -p "Do you want to continue (Y/n)?"
3346     [ "$(echo ${REPLY:=Y} | tr [:upper:] [:lower:])" != "y" ] && exit
3347   fi
3348
3349   # Check for sudo...
3350   if [ $SUDO ]; then
3351     if [ ! -x "/usr/bin/sudo" ]; then
3352       PRINT ""
3353       ERROR "This script requires sudo but it is not installed."
3354       PRINT "Please setup sudo according to:"
3355       PRINT "https://wiki.archlinux.org/index.php/Sudo"
3356       PRINT "and try again."
3357       PRINT ""
3358       exit
3359     fi
3360   fi
3361
3362   if [ ! $SUDO ]; then
3363     WARNING "--no-sudo enabled, impossible to run pacman -Sy, you'll have to do it yourself..."
3364   else
3365     $SUDO pacman -Sy
3366   fi
3367
3368   # These libs should always be available in arch official repository...
3369   OPENJPEG_DEV="openjpeg"
3370   VORBIS_DEV="libvorbis"
3371   OGG_DEV="libogg"
3372   THEORA_DEV="libtheora"
3373
3374   _packages="base-devel git cmake \
3375              libxi libxcursor libxrandr libxinerama glew libpng libtiff wget openal \
3376              $OPENJPEG_DEV $VORBIS_DEV $OGG_DEV $THEORA_DEV yasm sdl fftw \
3377              libxml2 yaml-cpp tinyxml"
3378
3379   OPENJPEG_USE=true
3380   VORBIS_USE=true
3381   OGG_USE=true
3382   THEORA_USE=true
3383
3384   if [ "$WITH_ALL" = true ]; then
3385     # No libspacenav in official arch repos...
3386     _packages="$_packages jack"
3387   fi
3388
3389   PRINT ""
3390   install_packages_ARCH $_packages
3391
3392   PRINT""
3393   SNDFILE_DEV="libsndfile"
3394   check_package_ARCH $SNDFILE_DEV
3395   if [ $? -eq 0 ]; then
3396     install_packages_ARCH $SNDFILE_DEV
3397   fi
3398
3399   PRINT ""
3400   X264_DEV="x264"
3401   check_package_version_ge_ARCH $X264_DEV $X264_VERSION_MIN
3402   if [ $? -eq 0 ]; then
3403     install_packages_ARCH $X264_DEV
3404     X264_USE=true
3405   fi
3406
3407   if [ "$WITH_ALL" = true ]; then
3408     PRINT ""
3409     XVID_DEV="xvidcore"
3410     check_package_ARCH $XVID_DEV
3411     if [ $? -eq 0 ]; then
3412       install_packages_ARCH $XVID_DEV
3413       XVID_USE=true
3414     fi
3415
3416     PRINT ""
3417     MP3LAME_DEV="lame"
3418     check_package_ARCH $MP3LAME_DEV
3419     if [ $? -eq 0 ]; then
3420       install_packages_ARCH $MP3LAME_DEV
3421       MP3LAME_USE=true
3422     fi
3423
3424     PRINT ""
3425     VPX_DEV="libvpx"
3426     check_package_version_ge_ARCH $VPX_DEV $VPX_VERSION_MIN
3427     if [ $? -eq 0 ]; then
3428       install_packages_ARCH $VPX_DEV
3429       VPX_USE=true
3430     fi
3431   fi
3432
3433
3434   PRINT ""
3435   _do_compile_python=false
3436   if [ "$PYTHON_SKIP" = true ]; then
3437     WARNING "Skipping Python installation, as requested..."
3438   elif [ "$PYTHON_FORCE_BUILD" = true ]; then
3439     INFO "Forced Python/NumPy building, as requested..."
3440     _do_compile_python=true
3441   else
3442     check_package_version_ge_ARCH python $PYTHON_VERSION_MIN
3443     if [ $? -eq 0 ]; then
3444       install_packages_ARCH python
3445       clean_Python
3446       PRINT ""
3447       if [ "$WITH_NUMPY" = true ]; then
3448         if [ "$NUMPY_SKIP" = true ]; then
3449           WARNING "Skipping NumPy installation, as requested..."
3450         else
3451           check_package_version_ge_ARCH python-numpy $NUMPY_VERSION_MIN
3452           if [ $? -eq 0 ]; then
3453             install_packages_ARCH python-numpy
3454         else
3455           WARNING "Sorry, using python package but no valid numpy package available!" \
3456                   "    Use --build-numpy to force building of both Python and NumPy."
3457           fi
3458         fi
3459       fi
3460     else
3461       _do_compile_python=true
3462     fi
3463   fi
3464
3465   if [ "$_do_compile_python" = true ]; then
3466     compile_Python
3467     PRINT ""
3468     if [ "$NUMPY_SKIP" = true ]; then
3469       WARNING "Skipping NumPy installation, as requested..."
3470     else
3471       compile_Numpy
3472     fi
3473   fi
3474
3475
3476   PRINT ""
3477   if [ "$BOOST_SKIP" = true ]; then
3478     WARNING "Skipping Boost installation, as requested..."
3479   elif [ "$BOOST_FORCE_BUILD" = true ]; then
3480     INFO "Forced Boost building, as requested..."
3481     compile_Boost
3482   else
3483     check_package_version_ge_ARCH boost $BOOST_VERSION_MIN
3484     if [ $? -eq 0 ]; then
3485       install_packages_ARCH boost
3486       clean_Boost
3487     else
3488       compile_Boost
3489     fi
3490   fi
3491
3492   PRINT ""
3493   _do_compile_ocio=false
3494   if [ "$OCIO_SKIP" = true ]; then
3495     WARNING "Skipping OpenColorIO installation, as requested..."
3496   elif [ "$OCIO_FORCE_BUILD" = true ]; then
3497     INFO "Forced OpenColorIO building, as requested..."
3498     _do_compile_ocio=true
3499   else
3500     # XXX Always force build of own OCIO, until linux distro guys update their package to default libyaml-cpp ver (0.5)!
3501     #check_package_version_ge_ARCH opencolorio $OCIO_VERSION_MIN
3502     #if [ $? -eq 0 ]; then
3503       #install_packages_ARCH opencolorio yaml-cpp tinyxml
3504       #clean_OCIO
3505     #else
3506       _do_compile_ocio=true
3507     #fi
3508   fi
3509
3510   if [ "$_do_compile_ocio" = true ]; then
3511     install_packages_ARCH yaml-cpp tinyxml
3512     compile_OCIO
3513   fi
3514
3515
3516   PRINT ""
3517   if [ "$OPENEXR_SKIP" = true ]; then
3518     WARNING "Skipping ILMBase/OpenEXR installation, as requested..."
3519   elif [ "$OPENEXR_FORCE_BUILD" = true ]; then
3520     INFO "Forced ILMBase/OpenEXR building, as requested..."
3521     compile_OPENEXR
3522   else
3523     check_package_version_ge_ARCH openexr $OPENEXR_VERSION_MIN
3524     if [ $? -eq 0 ]; then
3525       install_packages_ARCH openexr
3526       OPENEXR_VERSION=`get_package_version_ARCH openexr`
3527       ILMBASE_VERSION=$OPENEXR_VERSION
3528       clean_OPENEXR
3529     else
3530       compile_OPENEXR
3531     fi
3532   fi
3533
3534
3535   PRINT ""
3536   if [ "$OIIO_SKIP" = true ]; then
3537     WARNING "Skipping OpenImageIO installation, as requested..."
3538   elif [ "$OIIO_FORCE_BUILD" = true ]; then
3539     INFO "Forced OpenImageIO building, as requested..."
3540     compile_OIIO
3541   else
3542     check_package_version_ge_lt_ARCH openimageio $OIIO_VERSION_MIN $OIIO_VERSION_MAX
3543     if [ $? -eq 0 ]; then
3544       install_packages_ARCH openimageio
3545       clean_OIIO
3546     else
3547       compile_OIIO
3548     fi
3549   fi
3550
3551
3552   PRINT ""
3553   have_llvm=false
3554   _do_compile_llvm=false
3555   if [ "$LLVM_SKIP" = true ]; then
3556     WARNING "Skipping LLVM installation, as requested (this also implies skipping OSL!)..."
3557   elif [ "$LLVM_FORCE_BUILD" = true ]; then
3558     INFO "Forced LLVM building, as requested..."
3559     _do_compile_llvm=true
3560   else
3561     check_package_version_ge_ARCH llvm $LLVM_VERSION_MIN
3562     if [ $? -eq 0 ]; then
3563       install_packages_ARCH llvm clang
3564       have_llvm=true
3565       LLVM_VERSION=`check_package_version_ge_ARCH llvm $LLVM_VERSION_MIN`
3566       LLVM_VERSION_FOUND=$LLVM_VERSION
3567       clean_LLVM
3568     else
3569       _do_compile_llvm=true
3570     fi
3571   fi
3572
3573   if [ "$_do_compile_llvm" = true ]; then
3574     install_packages_ARCH libffi
3575     # LLVM can't find the arch ffi header dir...
3576     _FFI_INCLUDE_DIR=`pacman -Ql libffi | grep -e ".*/ffi.h" | awk '{print $2}' | sed -r 's/(.*)\/ffi.h/\1/'`
3577     # LLVM 3.1 needs python2 to build and arch defaults to python3
3578     _PYTHON2_BIN="/usr/bin/python2"
3579     PRINT ""
3580     compile_LLVM
3581     have_llvm=true
3582     LLVM_VERSION_FOUND=$LLVM_VERSION
3583   fi
3584
3585
3586   PRINT ""
3587   _do_compile_osl=false
3588   if [ "$OSL_SKIP" = true ]; then
3589     WARNING "Skipping OpenShadingLanguage installation, as requested..."
3590   elif [ "$OSL_FORCE_BUILD" = true ]; then
3591     INFO "Forced OpenShadingLanguage building, as requested..."
3592     _do_compile_osl=true
3593   else
3594     check_package_version_ge_ARCH openshadinglanguage $OSL_VERSION_MIN
3595     if [ $? -eq 0 ]; then
3596       install_packages_ARCH openshadinglanguage
3597       clean_OSL
3598     else
3599       _do_compile_osl=true
3600     fi
3601   fi
3602
3603   if [ "$_do_compile_osl" = true ]; then
3604     if [ "$have_llvm" = true ]; then
3605       #XXX Note: will fail to build with LLVM 3.2!
3606       install_packages_ARCH intel-tbb
3607       PRINT ""
3608       compile_OSL
3609     else
3610       WARNING "No LLVM available, cannot build OSL!"
3611     fi
3612   fi
3613
3614
3615   PRINT ""
3616   _do_compile_osd=false
3617   if [ "$OSD_SKIP" = true ]; then
3618     WARNING "Skipping OpenSubdiv installation, as requested..."
3619   elif [ "$OSD_FORCE_BUILD" = true ]; then
3620     INFO "Forced OpenSubdiv building, as requested..."
3621     _do_compile_osd=true
3622   else
3623     # No package currently? Just build for now!
3624     _do_compile_osd=true
3625   fi
3626
3627   if [ "$_do_compile_osd" = true ]; then
3628     install_packages_ARCH intel-tbb
3629     PRINT ""
3630     compile_OSD
3631   fi
3632
3633
3634   if [ "$WITH_OPENCOLLADA" = true ]; then
3635     PRINT ""
3636     _do_compile_collada=false
3637     if [ "$OPENCOLLADA_SKIP" = true ]; then
3638       WARNING "Skipping OpenCOLLADA installation, as requested..."
3639     elif [ "$OPENCOLLADA_FORCE_BUILD" = true ]; then
3640       INFO "Forced OpenCollada building, as requested..."
3641       _do_compile_collada=true
3642     else
3643       check_package_ARCH opencollada
3644       if [ $? -eq 0 ]; then
3645         install_packages_ARCH opencollada
3646         clean_OpenCOLLADA
3647       else
3648         _do_compile_collada=true
3649       fi
3650     fi
3651
3652     if [ "$_do_compile_collada" = true ]; then
3653       install_packages_ARCH pcre
3654       # Find path to libxml shared lib...
3655       _XML2_LIB=`pacman -Ql libxml2 | grep -e ".*/libxml2.so$" | gawk '{print $2}'`
3656       PRINT ""
3657       compile_OpenCOLLADA
3658     fi
3659   fi
3660
3661
3662   PRINT ""
3663   if [ "$FFMPEG_SKIP" = true ]; then
3664     WARNING "Skipping FFMpeg installation, as requested..."
3665   elif [ "$FFMPEG_FORCE_BUILD" = true ]; then
3666     INFO "Forced FFMpeg building, as requested..."
3667     compile_FFmpeg
3668   else
3669     check_package_version_ge_ARCH ffmpeg $FFMPEG_VERSION_MIN
3670     if [ $? -eq 0 ]; then
3671       install_packages_ARCH ffmpeg
3672       clean_FFmpeg
3673     else
3674       compile_FFmpeg
3675     fi
3676   fi
3677 }
3678
3679
3680 #### Install on other distro (very limited!) ####
3681
3682 install_OTHER() {
3683   PRINT ""
3684   WARNING "Attempt to build main dependencies for other linux distributions."
3685   PRINT ""
3686   PRINT "`eval _echo "$COMMON_INFO"`"
3687   PRINT ""
3688
3689   ERROR "Failed to detect distribution type."
3690   PRINT ""
3691   PRINT "Your distribution is not supported by this script, you'll have to install dependencies and"
3692   PRINT "dev packages yourself. However, this script can still attempt to build main (complex) libraries for you,"
3693   PRINT "if you use '--build-foo' options (you can try '--build-all' one first)."
3694   PRINT ""
3695   PRINT "Quite obviously, it assumes dependencies from those libraries are already available, otherwise please"
3696   PRINT "install them (you can also use error messages printed out by build process to find missing libraries...)."
3697   PRINT ""
3698   PRINT "`eval _echo "$DEPS_COMMON_INFO"`"
3699   PRINT ""
3700   PRINT "`eval _echo "$DEPS_SPECIFIC_INFO"`"
3701   PRINT ""
3702
3703   if [ "$NO_CONFIRM" = false ]; then
3704     read -p "Do you want to continue (Y/n)?"
3705     [ "$(echo ${REPLY:=Y} | tr [:upper:] [:lower:])" != "y" ] && exit
3706   fi
3707
3708   PRINT ""
3709   _do_compile_python=false
3710   if [ "$PYTHON_SKIP" = true ]; then
3711     WARNING "Skipping Python/NumPy installation, as requested..."
3712   elif [ "$PYTHON_FORCE_BUILD" = true ]; then
3713     INFO "Forced Python/NumPy building, as requested..."
3714     _do_compile_python=true
3715   fi
3716
3717   if [ "$_do_compile_python" = true ]; then
3718     compile_Python
3719     PRINT ""
3720     if [ "$NUMPY_SKIP" = true ]; then
3721       WARNING "Skipping NumPy installation, as requested..."
3722     else
3723       compile_Numpy
3724     fi
3725   fi
3726
3727
3728   PRINT ""
3729   if [ "$BOOST_SKIP" = true ]; then
3730     WARNING "Skipping Boost installation, as requested..."
3731   elif [ "$BOOST_FORCE_BUILD" = true ]; then
3732     INFO "Forced Boost building, as requested..."
3733     compile_Boost
3734   fi
3735
3736
3737   PRINT ""
3738   if [ "$OCIO_SKIP" = true ]; then
3739     WARNING "Skipping OpenColorIO installation, as requested..."
3740   elif [ "$OCIO_FORCE_BUILD" = true ]; then
3741     INFO "Forced OpenColorIO building, as requested..."
3742     compile_OCIO
3743   fi
3744
3745
3746   PRINT ""
3747   if [ "$OPENEXR_SKIP" = true ]; then
3748     WARNING "Skipping ILMBase/OpenEXR installation, as requested..."
3749   elif [ "$OPENEXR_FORCE_BUILD" = true ]; then
3750     INFO "Forced ILMBase/OpenEXR building, as requested..."
3751     compile_OPENEXR
3752   fi
3753
3754
3755   PRINT ""
3756   if [ "$OIIO_SKIP" = true ]; then
3757     WARNING "Skipping OpenImageIO installation, as requested..."
3758   elif [ "$OIIO_FORCE_BUILD" = true ]; then
3759     INFO "Forced OpenImageIO building, as requested..."
3760     compile_OIIO
3761   fi
3762
3763
3764   PRINT ""
3765   have_llvm=false
3766   _do_compile_llvm=false
3767   if [ "$LLVM_SKIP" = true ]; then
3768     WARNING "Skipping LLVM installation, as requested (this also implies skipping OSL!)..."
3769   elif [ "$LLVM_FORCE_BUILD" = true ]; then
3770     INFO "Forced LLVM building, as requested..."
3771     _do_compile_llvm=true
3772   fi
3773
3774   if [ "$_do_compile_llvm" = true ]; then
3775     install_packages_DEB libffi-dev
3776     # LLVM can't find the debian ffi header dir
3777     _FFI_INCLUDE_DIR=`dpkg -L libffi-dev | grep -e ".*/ffi.h" | sed -r 's/(.*)\/ffi.h/\1/'`
3778     PRINT ""