ac3a0883875ef3161dc3310d746242594d88e98d
[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.7.1"
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 USE_FFMPEG=OFF"
1524     cmake_d="$cmake_d -D BUILD_TESTING=OFF"
1525     cmake_d="$cmake_d -D OIIO_BUILD_TESTS=OFF"
1526     cmake_d="$cmake_d -D OIIO_BUILD_TOOLS=OFF"
1527     #cmake_d="$cmake_d -D CMAKE_EXPORT_COMPILE_COMMANDS=ON"
1528     #cmake_d="$cmake_d -D CMAKE_VERBOSE_MAKEFILE=ON"
1529
1530     if [ -d $INST/boost ]; then
1531       cmake_d="$cmake_d -D BOOST_ROOT=$INST/boost -D Boost_NO_SYSTEM_PATHS=ON"
1532     fi
1533
1534     # Looks like we do not need ocio in oiio for now...
1535 #    if [ -d $INST/ocio ]; then
1536 #      cmake_d="$cmake_d -D OCIO_PATH=$INST/ocio"
1537 #    fi
1538     cmake_d="$cmake_d -D USE_OCIO=OFF"
1539
1540     if file /bin/cp | grep -q '32-bit'; then
1541       cflags="-fPIC -m32 -march=i686"
1542     else
1543       cflags="-fPIC"
1544     fi
1545
1546     cmake $cmake_d -D CMAKE_CXX_FLAGS="$cflags" -D CMAKE_EXE_LINKER_FLAGS="-lgcc_s -lgcc" ..
1547
1548     make -j$THREADS && make install
1549     make clean
1550
1551     if [ -d $_inst ]; then
1552       _create_inst_shortcut
1553     else
1554       ERROR "OpenImageIO-$OIIO_VERSION failed to compile, exiting"
1555       exit 1
1556     fi
1557
1558     magic_compile_set oiio-$OIIO_VERSION $oiio_magic
1559
1560     cd $CWD
1561     INFO "Done compiling OpenImageIO-$OIIO_VERSION!"
1562   else
1563     INFO "Own OpenImageIO-$OIIO_VERSION is up to date, nothing to do!"
1564     INFO "If you want to force rebuild of this lib, use the --force-oiio option."
1565   fi
1566
1567   # Just always run it, much simpler this way!
1568   run_ldconfig "oiio"
1569 }
1570
1571 #### Build LLVM ####
1572 _init_llvm() {
1573   _src=$SRC/LLVM-$LLVM_VERSION
1574   _src_clang=$SRC/CLANG-$LLVM_VERSION
1575   _git=false
1576   _inst=$INST/llvm-$LLVM_VERSION
1577   _inst_shortcut=$INST/llvm
1578 }
1579
1580 clean_LLVM() {
1581   _init_llvm
1582   _clean
1583 }
1584
1585 compile_LLVM() {
1586   # To be changed each time we make edits that would modify the compiled result!
1587   llvm_magic=3
1588   _init_llvm
1589
1590   # Clean install if needed!
1591   magic_compile_check llvm-$LLVM_VERSION $llvm_magic
1592   if [ $? -eq 1 -o "$LLVM_FORCE_REBUILD" = true ]; then
1593     clean_LLVM
1594   fi
1595
1596   if [ ! -d $_inst ]; then
1597     INFO "Building LLVM-$LLVM_VERSION (CLANG included!)"
1598
1599     # Rebuild dependecies as well!
1600     OSL_FORCE_BUILD=true
1601     OSL_FORCE_REBUILD=true
1602
1603     prepare_opt
1604
1605     if [ ! -d $_src -o true ]; then
1606       mkdir -p $SRC
1607       download LLVM_SOURCE[@] "$_src.tar.gz"
1608       download LLVM_CLANG_SOURCE[@] "$_src_clang.tar.gz"
1609
1610       INFO "Unpacking LLVM-$LLVM_VERSION"
1611       tar -C $SRC --transform "s,([^/]*/?)llvm-[^/]*(.*),\1LLVM-$LLVM_VERSION\2,x" \
1612           -xf $_src.tar.gz
1613       INFO "Unpacking CLANG-$LLVM_VERSION to $_src/tools/clang"
1614       # Stupid clang guys renamed 'clang' to 'cfe' for now handle both cases... :(
1615       tar -C $_src/tools \
1616           --transform "s,([^/]*/?)(clang|cfe)-[^/]*(.*),\1clang\3,x" \
1617           -xf $_src_clang.tar.gz
1618
1619       cd $_src
1620
1621       # XXX Ugly patching hack!
1622       patch -p1 -i "$SCRIPT_DIR/install_deps_patches/llvm.patch"
1623
1624       cd $CWD
1625
1626     fi
1627
1628     cd $_src
1629
1630     # Always refresh the whole build!
1631     if [ -d build ]; then
1632       rm -rf build
1633     fi
1634     mkdir build
1635     cd build
1636
1637     cmake_d="-D CMAKE_BUILD_TYPE=Release"
1638     cmake_d="$cmake_d -D CMAKE_INSTALL_PREFIX=$_inst"
1639     cmake_d="$cmake_d -D LLVM_ENABLE_FFI=ON"
1640     cmake_d="$cmake_d -D LLVM_TARGETS_TO_BUILD=X86"
1641     cmake_d="$cmake_d -D LLVM_ENABLE_TERMINFO=OFF"
1642
1643     if [ -d $_FFI_INCLUDE_DIR ]; then
1644       cmake_d="$cmake_d -D FFI_INCLUDE_DIR=$_FFI_INCLUDE_DIR"
1645     fi
1646
1647     cmake $cmake_d ..
1648
1649     make -j$THREADS && make install
1650     make clean
1651
1652     if [ -d $_inst ]; then
1653       _create_inst_shortcut
1654     else
1655       ERROR "LLVM-$LLVM_VERSION failed to compile, exiting"
1656       exit 1
1657     fi
1658
1659     magic_compile_set llvm-$LLVM_VERSION $llvm_magic
1660
1661     cd $CWD
1662     INFO "Done compiling LLVM-$LLVM_VERSION (CLANG included)!"
1663   else
1664     INFO "Own LLVM-$LLVM_VERSION (CLANG included) is up to date, nothing to do!"
1665     INFO "If you want to force rebuild of this lib, use the --force-llvm option."
1666   fi
1667 }
1668
1669 #### Build OSL ####
1670 _init_osl() {
1671   _src=$SRC/OpenShadingLanguage-$OSL_VERSION
1672   _git=true
1673   _inst=$INST/osl-$OSL_VERSION
1674   _inst_shortcut=$INST/osl
1675 }
1676
1677 clean_OSL() {
1678   _init_osl
1679   _clean
1680 }
1681
1682 compile_OSL() {
1683   # To be changed each time we make edits that would modify the compiled result!
1684   osl_magic=19
1685   _init_osl
1686
1687   # Clean install if needed!
1688   magic_compile_check osl-$OSL_VERSION $osl_magic
1689   if [ $? -eq 1 -o "$OSL_FORCE_REBUILD" = true ]; then
1690     #~ rm -Rf $_src  # XXX Radical, but not easy to change remote repo fully automatically
1691     clean_OSL
1692   fi
1693
1694   if [ ! -d $_inst ]; then
1695     INFO "Building OpenShadingLanguage-$OSL_VERSION"
1696
1697     prepare_opt
1698
1699     if [ ! -d $_src ]; then
1700       mkdir -p $SRC
1701
1702       if [ "$OSL_USE_REPO" = true ]; then
1703         git clone ${OSL_SOURCE_REPO[0]} $_src
1704       else
1705         download OSL_SOURCE[@] "$_src.tar.gz"
1706         INFO "Unpacking OpenShadingLanguage-$OSL_VERSION"
1707         tar -C $SRC --transform "s,(.*/?)OpenShadingLanguage-[^/]*(.*),\1OpenShadingLanguage-$OSL_VERSION\2,x" \
1708             -xf $_src.tar.gz
1709       fi
1710     fi
1711
1712     cd $_src
1713
1714     if [ "$OSL_USE_REPO" = true ]; then
1715       git remote set-url origin ${OSL_SOURCE_REPO[0]}
1716       # XXX For now, always update from latest repo...
1717       git pull --no-edit -X theirs origin $OSL_SOURCE_REPO_BRANCH
1718       # Stick to same rev as windows' libs...
1719       git checkout $OSL_SOURCE_REPO_UID
1720       git reset --hard
1721
1722       # XXX Ugly patching hack!
1723       patch -p1 -i "$SCRIPT_DIR/install_deps_patches/osl.patch"
1724     fi
1725
1726     # Always refresh the whole build!
1727     if [ -d build ]; then
1728       rm -rf build
1729     fi
1730     mkdir build
1731     cd build
1732
1733     cmake_d="-D CMAKE_BUILD_TYPE=Release"
1734     cmake_d="$cmake_d -D CMAKE_INSTALL_PREFIX=$_inst"
1735     cmake_d="$cmake_d -D BUILD_TESTING=OFF"
1736     cmake_d="$cmake_d -D STOP_ON_WARNING=OFF"
1737     cmake_d="$cmake_d -D BUILDSTATIC=OFF"
1738     cmake_d="$cmake_d -D OSL_BUILD_PLUGINS=OFF"
1739     cmake_d="$cmake_d -D OSL_BUILD_TESTS=OFF"
1740
1741     #~ cmake_d="$cmake_d -D ILMBASE_VERSION=$ILMBASE_VERSION"
1742
1743     if [ "$_with_built_openexr" = true ]; then
1744       INFO "ILMBASE_HOME=$INST/openexr"
1745       cmake_d="$cmake_d -D ILMBASE_HOME=$INST/openexr"
1746       # XXX Temp workaround... sigh, ILMBase really messed the things up by defining their custom names ON by default :(
1747       cmake_d="$cmake_d -D ILMBASE_CUSTOM=ON"
1748       cmake_d="$cmake_d -D ILMBASE_CUSTOM_LIBRARIES='Half;Iex;Imath;IlmThread'"
1749     fi
1750
1751     if [ -d $INST/boost ]; then
1752       cmake_d="$cmake_d -D BOOST_ROOT=$INST/boost -D Boost_NO_SYSTEM_PATHS=ON"
1753     fi
1754
1755     if [ -d $INST/oiio ]; then
1756       cmake_d="$cmake_d -D OPENIMAGEIOHOME=$INST/oiio"
1757     fi
1758
1759     if [ ! -z $LLVM_VERSION_FOUND ]; then
1760       cmake_d="$cmake_d -D LLVM_VERSION=$LLVM_VERSION_FOUND"
1761       if [ -d $INST/llvm ]; then
1762         cmake_d="$cmake_d -D LLVM_DIRECTORY=$INST/llvm"
1763         cmake_d="$cmake_d -D LLVM_STATIC=ON"
1764       fi
1765     fi
1766
1767     #~ cmake_d="$cmake_d -D CMAKE_EXPORT_COMPILE_COMMANDS=ON"
1768     #~ cmake_d="$cmake_d -D CMAKE_VERBOSE_MAKEFILE=ON"
1769
1770     cmake $cmake_d ..
1771
1772     make -j$THREADS && make install
1773     make clean
1774
1775     if [ -d $_inst ]; then
1776       _create_inst_shortcut
1777     else
1778       ERROR "OpenShadingLanguage-$OSL_VERSION failed to compile, exiting"
1779       exit 1
1780     fi
1781
1782     magic_compile_set osl-$OSL_VERSION $osl_magic
1783
1784     cd $CWD
1785     INFO "Done compiling OpenShadingLanguage-$OSL_VERSION!"
1786   else
1787     INFO "Own OpenShadingLanguage-$OSL_VERSION is up to date, nothing to do!"
1788     INFO "If you want to force rebuild of this lib, use the --force-osl option."
1789   fi
1790
1791   run_ldconfig "osl"
1792 }
1793
1794 #### Build OSD ####
1795 _init_osd() {
1796   _src=$SRC/OpenSubdiv-$OSD_VERSION
1797   _git=true
1798   _inst=$INST/osd-$OSD_VERSION
1799   _inst_shortcut=$INST/osd
1800 }
1801
1802 clean_OSD() {
1803   _init_osd
1804   _clean
1805 }
1806
1807 compile_OSD() {
1808   # To be changed each time we make edits that would modify the compiled result!
1809   osd_magic=0
1810   _init_osd
1811
1812   # Clean install if needed!
1813   magic_compile_check osd-$OSD_VERSION $osd_magic
1814   if [ $? -eq 1 -o "$OSD_FORCE_REBUILD" = true ]; then
1815     clean_OSD
1816   fi
1817
1818   if [ ! -d $_inst ]; then
1819     INFO "Building OpenSubdiv-$OSD_VERSION"
1820
1821     prepare_opt
1822
1823     if [ ! -d $_src ]; then
1824       mkdir -p $SRC
1825
1826       if [ "$OSD_USE_REPO" = true ]; then
1827         git clone ${OSD_SOURCE_REPO[0]} $_src
1828       else
1829         download OSD_SOURCE[@] "$_src.tar.gz"
1830         INFO "Unpacking OpenSubdiv-$OSD_VERSION"
1831         tar -C $SRC --transform "s,(.*/?)OpenSubdiv-[^/]*(.*),\1OpenSubdiv-$OSD_VERSION\2,x" \
1832             -xf $_src.tar.gz
1833       fi
1834     fi
1835
1836     cd $_src
1837
1838     if [ "$OSD_USE_REPO" = true ]; then
1839       git remote set-url origin ${OSD_SOURCE_REPO[0]}
1840       # XXX For now, always update from latest repo...
1841       git pull --no-edit -X theirs origin $OSD_SOURCE_REPO_BRANCH
1842       # Stick to same rev as windows' libs...
1843       git checkout $OSD_SOURCE_REPO_UID
1844       git reset --hard
1845     fi
1846
1847     # Always refresh the whole build!
1848     if [ -d build ]; then
1849       rm -rf build
1850     fi
1851     mkdir build
1852     cd build
1853
1854     cmake_d="-D CMAKE_BUILD_TYPE=Release"
1855     cmake_d="$cmake_d -D CMAKE_INSTALL_PREFIX=$_inst"
1856     # ptex is only needed when nicholas bishop is ready
1857     cmake_d="$cmake_d -D NO_PTEX=1"
1858     cmake_d="$cmake_d -D NO_CLEW=1"
1859     # maya plugin, docs, tutorials, regression tests and examples are not needed
1860     cmake_d="$cmake_d -D NO_MAYA=1 -D NO_DOC=1 -D NO_TUTORIALS=1 -D NO_REGRESSION=1 -DNO_EXAMPLES=1"
1861
1862     cmake $cmake_d ..
1863
1864     make -j$THREADS && make install
1865     make clean
1866
1867     if [ -d $_inst ]; then
1868       _create_inst_shortcut
1869     else
1870       ERROR "OpenSubdiv-$OSD_VERSION failed to compile, exiting"
1871       exit 1
1872     fi
1873
1874     magic_compile_set osd-$OSD_VERSION $osd_magic
1875
1876     cd $CWD
1877     INFO "Done compiling OpenSubdiv-$OSD_VERSION!"
1878   else
1879     INFO "Own OpenSubdiv-$OSD_VERSION is up to date, nothing to do!"
1880     INFO "If you want to force rebuild of this lib, use the --force-osd option."
1881   fi
1882
1883   run_ldconfig "osd"
1884 }
1885
1886 #### Build Blosc ####
1887 _init_blosc() {
1888   _src=$SRC/c-blosc-$OPENVDB_BLOSC_VERSION
1889   _git=false
1890   _inst=$INST/blosc-$OPENVDB_BLOSC_VERSION
1891   _inst_shortcut=$INST/blosc
1892 }
1893
1894 clean_BLOSC() {
1895   _init_blosc
1896   _clean
1897 }
1898
1899 compile_BLOSC() {
1900   # To be changed each time we make edits that would modify the compiled result!
1901   blosc_magic=0
1902   _init_blosc
1903
1904   # Clean install if needed!
1905   magic_compile_check blosc-$OPENVDB_BLOSC_VERSION $blosc_magic
1906   if [ $? -eq 1 -o "$OPENVDB_FORCE_REBUILD" = true ]; then
1907     clean_BLOSC
1908     rm -rf $_inst
1909   fi
1910
1911   if [ ! -d $_inst ]; then
1912     INFO "Building Blosc-$OPENVDB_BLOSC_VERSION"
1913
1914     # Rebuild dependecies as well!
1915     OPENVDB_FORCE_BUILD=true
1916     OPENVDB_FORCE_REBUILD=true
1917
1918     prepare_opt
1919
1920     if [ ! -d $_src ]; then
1921       INFO "Downloading Blosc-$OPENVDB_BLOSC_VERSION"
1922       mkdir -p $SRC
1923       download OPENVDB_BLOSC_SOURCE[@] $_src.tar.gz
1924
1925       INFO "Unpacking Blosc-$OPENVDB_BLOSC_VERSION"
1926       tar -C $SRC -xf $_src.tar.gz
1927     fi
1928
1929     cd $_src
1930     # Always refresh the whole build!
1931     if [ -d build ]; then
1932       rm -rf build
1933     fi
1934     mkdir build
1935     cd build
1936
1937     cmake_d="-D CMAKE_BUILD_TYPE=Release"
1938     cmake_d="$cmake_d -D CMAKE_INSTALL_PREFIX=$_inst"
1939     cmake_d="$cmake_d -D BUILD_STATIC=OFF"
1940     cmake_d="$cmake_d -D BUILD_TESTS=OFF"
1941     cmake_d="$cmake_d -D BUILD_BENCHMARKS=OFF"
1942     INFO "$cmake_d"
1943
1944     cmake $cmake_d ..
1945
1946     make -j$THREADS && make install
1947
1948     make clean
1949
1950     if [ -d $_inst ]; then
1951       _create_inst_shortcut
1952     else
1953       ERROR "Blosc-$OPENVDB_BLOSC_VERSION failed to compile, exiting"
1954       exit 1
1955     fi
1956     cd $CWD
1957     INFO "Done compiling Blosc-$OPENVDB_BLOSC_VERSION!"
1958   else
1959     INFO "Own Blosc-$OPENVDB_BLOSC_VERSION is up to date, nothing to do!"
1960     INFO "If you want to force rebuild of this lib (and openexr), use the --force-openvdb option."
1961   fi
1962
1963   magic_compile_set blosc-$OPENVDB_BLOSC_VERSION $blosc_magic
1964
1965   run_ldconfig "blosc"
1966 }
1967
1968 #### Build OpenVDB ####
1969 _init_openvdb() {
1970   _src=$SRC/openvdb-$OPENVDB_VERSION
1971   _git=false
1972   _inst=$INST/openvdb-$OPENVDB_VERSION
1973   _inst_shortcut=$INST/openvdb
1974 }
1975
1976 clean_OPENVDB() {
1977   _init_openvdb
1978   _clean
1979 }
1980
1981 compile_OPENVDB() {
1982   compile_BLOSC
1983   PRINT ""
1984
1985   # To be changed each time we make edits that would modify the compiled result!
1986   openvdb_magic=0
1987   _init_openvdb
1988
1989   # Clean install if needed!
1990   magic_compile_check openvdb-$OPENVDB_VERSION $openvdb_magic
1991   if [ $? -eq 1 -o "$OPENVDB_FORCE_REBUILD" = true ]; then
1992     clean_OPENVDB
1993   fi
1994
1995   if [ ! -d $_inst ]; then
1996     INFO "Building OpenVDB-$OPENVDB_VERSION"
1997
1998     prepare_opt
1999
2000     if [ ! -d $_src -o true ]; then
2001       mkdir -p $SRC
2002       download OPENVDB_SOURCE[@] "$_src.tar.gz"
2003
2004       INFO "Unpacking OpenVDB-$OPENVDB_VERSION"
2005       #~ tar -C $SRC --transform "s,(.*/?)OpenShadingLanguage-[^/]*(.*),\1OpenShadingLanguage-$OPENVDB_VERSION\2,x" \
2006           #~ -xf $_src.tar.gz
2007       tar -C $SRC -xf $_src.tar.gz
2008     fi
2009
2010     cd $_src
2011
2012     #~ if [ "$OPENVDB_USE_REPO" = true ]; then
2013       #~ git remote set-url origin ${OPENVDB_SOURCE_REPO[0]}
2014       #~ # XXX For now, always update from latest repo...
2015       #~ git pull --no-edit -X theirs origin $OPENVDB_SOURCE_REPO_BRANCH
2016       #~ # Stick to same rev as windows' libs...
2017       #~ git checkout $OPENVDB_SOURCE_REPO_UID
2018       #~ git reset --hard
2019     #~ fi
2020
2021     cd openvdb  # Grrrrrr...
2022
2023     # Always refresh the whole build!
2024     if [ -d build ]; then
2025       rm -rf build
2026     fi
2027     mkdir build
2028     cd build
2029
2030     make_d="DESTDIR=$_inst"
2031
2032     if [ -d $INST/boost ]; then
2033       make_d="$make_d -D BOOST_ROOT=$INST/boost -D Boost_NO_SYSTEM_PATHS=ON"
2034     fi
2035
2036     #~ if [ "$_with_built_openexr" = true ]; then
2037       #~ cmake_d="$cmake_d -D ILMBASE_HOME=$INST/openexr"
2038       #~ cmake_d="$cmake_d -D OPENEXR_HOME=$INST/openexr"
2039       #~ INFO "ILMBASE_HOME=$INST/openexr"
2040     #~ fi
2041
2042     #~ cmake_d="-D CMAKE_BUILD_TYPE=Release"
2043     #~ cmake_d="$cmake_d -D CMAKE_INSTALL_PREFIX=$_inst"
2044     #~ # ptex is only needed when nicholas bishop is ready
2045     #~ cmake_d="$cmake_d -D NO_PTEX=1"
2046     #~ cmake_d="$cmake_d -D NO_CLEW=1"
2047     #~ # maya plugin, docs, tutorials, regression tests and examples are not needed
2048     #~ cmake_d="$cmake_d -D NO_MAYA=1 -D NO_DOC=1 -D NO_TUTORIALS=1 -D NO_REGRESSION=1 -DNO_EXAMPLES=1"
2049
2050     #~ cmake $cmake_d ..
2051
2052     #~ make -j$THREADS && make install
2053     #~ make clean
2054
2055     #~ if [ -d $_inst ]; then
2056       #~ _create_inst_shortcut
2057     #~ else
2058       #~ ERROR "OpenSubdiv-$OSD_VERSION failed to compile, exiting"
2059       #~ exit 1
2060     #~ fi
2061
2062     #~ magic_compile_set osd-$OSD_VERSION $osd_magic
2063
2064     cd $CWD
2065     INFO "Done compiling OpenVDB-$OPENVDB_VERSION!"
2066   else
2067     INFO "Own OpenVDB-$OPENVDB_VERSION is up to date, nothing to do!"
2068     INFO "If you want to force rebuild of this lib, use the --force-openvdb option."
2069   fi
2070
2071   run_ldconfig "openvdb"
2072 }
2073
2074 #### Build OpenCOLLADA ####
2075 _init_opencollada() {
2076   _src=$SRC/OpenCOLLADA-$OPENCOLLADA_VERSION
2077   _git=true
2078   _inst=$INST/opencollada-$OPENCOLLADA_VERSION
2079   _inst_shortcut=$INST/opencollada
2080 }
2081
2082 clean_OpenCOLLADA() {
2083   _init_opencollada
2084   _clean
2085 }
2086
2087 compile_OpenCOLLADA() {
2088   # To be changed each time we make edits that would modify the compiled results!
2089   opencollada_magic=9
2090   _init_opencollada
2091
2092   # Clean install if needed!
2093   magic_compile_check opencollada-$OPENCOLLADA_VERSION $opencollada_magic
2094   if [ $? -eq 1 -o "$OPENCOLLADA_FORCE_REBUILD" = true ]; then
2095     clean_OpenCOLLADA
2096   fi
2097
2098   if [ ! -d $_inst ]; then
2099     INFO "Building OpenCOLLADA-$OPENCOLLADA_VERSION"
2100
2101     prepare_opt
2102
2103     if [ ! -d $_src ]; then
2104       mkdir -p $SRC
2105       git clone $OPENCOLLADA_SOURCE $_src
2106     fi
2107
2108     cd $_src
2109
2110     # XXX For now, always update from latest repo...
2111     git pull origin $OPENCOLLADA_REPO_BRANCH
2112
2113     # Stick to same rev as windows' libs...
2114     git checkout $OPENCOLLADA_REPO_UID
2115     git reset --hard
2116
2117     # Always refresh the whole build!
2118     if [ -d build ]; then
2119       rm -rf build
2120     fi
2121     mkdir build
2122     cd build
2123
2124     cmake_d="-D CMAKE_BUILD_TYPE=Release"
2125     cmake_d="$cmake_d -D CMAKE_INSTALL_PREFIX=$_inst"
2126     cmake_d="$cmake_d -D USE_EXPAT=OFF"
2127     cmake_d="$cmake_d -D USE_LIBXML=ON"
2128     # XXX Does not work!
2129 #    cmake_d="$cmake_d -D USE_STATIC=OFF"
2130     cmake_d="$cmake_d -D USE_STATIC=ON"
2131
2132     cmake $cmake_d ../
2133
2134     make -j$THREADS && make install
2135     make clean
2136
2137     if [ -d $_inst ]; then
2138       _create_inst_shortcut
2139     else
2140       ERROR "OpenCOLLADA-$OPENCOLLADA_VERSION failed to compile, exiting"
2141       exit 1
2142     fi
2143
2144     magic_compile_set opencollada-$OPENCOLLADA_VERSION $opencollada_magic
2145
2146     cd $CWD
2147     INFO "Done compiling OpenCOLLADA-$OPENCOLLADA_VERSION!"
2148   else
2149     INFO "Own OpenCOLLADA-$OPENCOLLADA_VERSION is up to date, nothing to do!"
2150     INFO "If you want to force rebuild of this lib, use the --force-opencollada option."
2151   fi
2152 }
2153
2154 #### Build FFMPEG ####
2155 _init_ffmpeg() {
2156   _src=$SRC/ffmpeg-$FFMPEG_VERSION
2157   _inst=$INST/ffmpeg-$FFMPEG_VERSION
2158   _inst_shortcut=$INST/ffmpeg
2159 }
2160
2161 clean_FFmpeg() {
2162   _init_ffmpeg
2163   _clean
2164 }
2165
2166 compile_FFmpeg() {
2167   # To be changed each time we make edits that would modify the compiled result!
2168   ffmpeg_magic=4
2169   _init_ffmpeg
2170
2171   # Clean install if needed!
2172   magic_compile_check ffmpeg-$FFMPEG_VERSION $ffmpeg_magic
2173   if [ $? -eq 1 -o "$FFMPEG_FORCE_REBUILD" = true ]; then
2174     clean_FFmpeg
2175   fi
2176
2177   if [ ! -d $_inst ]; then
2178     INFO "Building ffmpeg-$FFMPEG_VERSION"
2179
2180     prepare_opt
2181
2182     if [ ! -d $_src ]; then
2183       INFO "Downloading ffmpeg-$FFMPEG_VERSION"
2184       mkdir -p $SRC
2185       download FFMPEG_SOURCE[@] "$_src.tar.bz2"
2186
2187       INFO "Unpacking ffmpeg-$FFMPEG_VERSION"
2188       tar -C $SRC -xf $_src.tar.bz2
2189     fi
2190
2191     cd $_src
2192
2193     extra=""
2194
2195     if [ "$VORBIS_USE" = true ]; then
2196       extra="$extra --enable-libvorbis"
2197     fi
2198
2199     if [ "$THEORA_USE" = true ]; then
2200       extra="$extra --enable-libtheora"
2201     fi
2202
2203     if [ "$XVID_USE" = true ]; then
2204       extra="$extra --enable-libxvid"
2205     fi
2206
2207     if [ "$X264_USE" = true ]; then
2208       extra="$extra --enable-libx264"
2209     fi
2210
2211     if [ "$VPX_USE" = true ]; then
2212       extra="$extra --enable-libvpx"
2213     fi
2214
2215     if [ "$MP3LAME_USE" = true ]; then
2216       extra="$extra --enable-libmp3lame"
2217     fi
2218
2219     if [ "$OPENJPEG_USE" = true ]; then
2220       extra="$extra --enable-libopenjpeg"
2221     fi
2222
2223     ./configure --cc="gcc -Wl,--as-needed" \
2224         --extra-ldflags="-pthread -static-libgcc" \
2225         --prefix=$_inst --enable-static \
2226         --disable-ffplay --disable-ffserver --disable-doc \
2227         --enable-gray \
2228         --enable-avfilter --disable-vdpau \
2229         --disable-bzlib --disable-libgsm --disable-libspeex \
2230         --enable-pthreads --enable-zlib --enable-stripping --enable-runtime-cpudetect \
2231         --disable-vaapi --disable-libfaac --disable-nonfree --enable-gpl \
2232         --disable-postproc --disable-librtmp --disable-libopencore-amrnb \
2233         --disable-libopencore-amrwb --disable-libdc1394 --disable-version3 --disable-outdev=sdl \
2234         --disable-libxcb \
2235         --disable-outdev=xv \
2236         --disable-outdev=alsa --disable-indev=sdl --disable-indev=alsa --disable-indev=jack \
2237         --disable-indev=lavfi $extra
2238
2239     make -j$THREADS && make install
2240     make clean
2241
2242     if [ -d $_inst ]; then
2243       _create_inst_shortcut
2244     else
2245       ERROR "FFmpeg-$FFMPEG_VERSION failed to compile, exiting"
2246       exit 1
2247     fi
2248
2249     magic_compile_set ffmpeg-$FFMPEG_VERSION $ffmpeg_magic
2250
2251     cd $CWD
2252     INFO "Done compiling ffmpeg-$FFMPEG_VERSION!"
2253   else
2254     INFO "Own ffmpeg-$FFMPEG_VERSION is up to date, nothing to do!"
2255     INFO "If you want to force rebuild of this lib, use the --force-ffmpeg option."
2256   fi
2257 }
2258
2259
2260 #### Install on DEB-like ####
2261 get_package_version_DEB() {
2262     dpkg-query -W -f '${Version}' $1 | sed -r 's/.*:\s*([0-9]+:)(([0-9]+\.?)+).*/\2/'
2263 }
2264
2265 check_package_DEB() {
2266   r=`apt-cache show $1 | grep -c 'Package:'`
2267
2268   if [ $r -ge 1 ]; then
2269     return 0
2270   else
2271     return 1
2272   fi
2273 }
2274
2275 check_package_installed_DEB() {
2276   r=`dpkg-query -W -f='${Status}' $1 | grep -c "install ok"`
2277
2278   if [ $r -ge 1 ]; then
2279     return 0
2280   else
2281     return 1
2282   fi
2283 }
2284
2285 check_package_version_match_DEB() {
2286   v=`apt-cache policy $1 | grep 'Candidate:' | sed -r 's/.*:\s*([0-9]+:)(([0-9]+\.?)+).*/\2/'`
2287
2288   if [ -z "$v" ]; then
2289     return 1
2290   fi
2291
2292   version_match $v $2
2293   return $?
2294 }
2295
2296 check_package_version_ge_DEB() {
2297   v=`apt-cache policy $1 | grep 'Candidate:' | sed -r 's/.*:\s*([0-9]+:)?(([0-9]+\.?)+).*/\2/'`
2298
2299   if [ -z "$v" ]; then
2300     return 1
2301   fi
2302
2303   version_ge $v $2
2304   return $?
2305 }
2306
2307 check_package_version_ge_lt_DEB() {
2308   v=`apt-cache policy $1 | grep 'Candidate:' | sed -r 's/.*:\s*([0-9]+:)?(([0-9]+\.?)+).*/\2/'`
2309
2310   if [ -z "$v" ]; then
2311     return 1
2312   fi
2313
2314   version_ge_lt $v $2 $3
2315   return $?
2316 }
2317
2318 install_packages_DEB() {
2319   if [ ! $SUDO ]; then
2320     WARNING "--no-sudo enabled, impossible to run apt-get install for $@, you'll have to do it yourself..."
2321   else
2322     $SUDO apt-get install -y --force-yes $@
2323     if [ $? -ge 1 ]; then
2324       ERROR "apt-get failed to install requested packages, exiting."
2325       exit 1
2326     fi
2327   fi
2328 }
2329
2330 install_DEB() {
2331   PRINT ""
2332   INFO "Installing dependencies for DEB-based distribution"
2333   PRINT ""
2334   PRINT "`eval _echo "$COMMON_INFO"`"
2335   PRINT ""
2336
2337   if [ "$NO_CONFIRM" = false ]; then
2338     read -p "Do you want to continue (Y/n)?"
2339     [ "$(echo ${REPLY:=Y} | tr [:upper:] [:lower:])" != "y" ] && exit
2340   fi
2341
2342   if [ ! -z "`cat /etc/debian_version | grep ^6`"  ]; then
2343     if [ -z "`cat /etc/apt/sources.list | grep backports.debian.org`"  ]; then
2344       WARNING "Looks like you're using Debian Squeeze which does have broken CMake"
2345       PRINT "It is highly recommended to install cmake from backports, otherwise"
2346       PRINT "compilation of some libraries could fail"
2347       PRINT ""
2348       PRINT "You could install newer CMake from debian-backports repository"
2349       PRINT "Add this this line to your /etc/apt/sources.lixt:"
2350       PRINT ""
2351       PRINT "deb http://backports.debian.org/debian-backports squeeze-backports main"
2352       PRINT ""
2353       PRINT "and then run:"
2354       PRINT ""
2355       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"
2356       PRINT ""
2357       PRINT "(you could also add this reporisotry using GUI like synaptic)"
2358       PRINT ""
2359       PRINT "Hit Enter to continue running the script, or hit Ctrl-C to abort the script"
2360
2361       read
2362       PRINT ""
2363     fi
2364   fi
2365
2366   if [ ! $SUDO ]; then
2367     WARNING "--no-sudo enabled, impossible to run apt-get update, you'll have to do it yourself..."
2368   else
2369     $SUDO apt-get update
2370   fi
2371
2372   # These libs should always be available in debian/ubuntu official repository...
2373   OPENJPEG_DEV="libopenjpeg-dev"
2374   VORBIS_DEV="libvorbis-dev"
2375   OGG_DEV="libogg-dev"
2376   THEORA_DEV="libtheora-dev"
2377
2378   _packages="gawk cmake cmake-curses-gui build-essential libjpeg-dev libpng-dev \
2379              libfreetype6-dev libx11-dev \
2380              libxcursor-dev libxi-dev wget libsqlite3-dev libxrandr-dev libxinerama-dev \
2381              libbz2-dev libncurses5-dev libssl-dev liblzma-dev libreadline-dev $OPENJPEG_DEV \
2382              libopenal-dev libglew-dev libglewmx-dev yasm $THEORA_DEV $VORBIS_DEV $OGG_DEV \
2383              libsdl1.2-dev libfftw3-dev patch bzip2 libxml2-dev libtinyxml-dev"
2384
2385   OPENJPEG_USE=true
2386   VORBIS_USE=true
2387   OGG_USE=true
2388   THEORA_USE=true
2389
2390   PRINT "$LIBYAML_CPP_VER"
2391   # Some not-so-old distro (ubuntu 12.4) do not have it, do not fail in this case, just warn.
2392   YAMLCPP_DEV="libyaml-cpp-dev"
2393   check_package_DEB $YAMLCPP_DEV
2394   if [ $? -eq 0 ]; then
2395     # Another Ubuntu hack - in 14.4, ocio uses (old) 0.3, while default is now 0.5... grrrrr.
2396     if $LIBYAML_CPP_VER_DEFINED; then
2397       YAMLCPP_VER_DEV="libyaml-cpp$LIBYAML_CPP_VER-dev"
2398       check_package_DEB $YAMLCPP_VER_DEV
2399       if [ $? -eq 0 ]; then
2400         YAMLCPP_DEV=$YAMLCPP_VER_DEV
2401       else
2402         PRINT ""
2403         WARNING "libyaml-cpp$LIBYAML_CPP_VER-dev not found!"
2404         PRINT ""
2405       fi
2406     fi
2407     _packages="$_packages $YAMLCPP_DEV"
2408   else
2409     PRINT ""
2410     WARNING "libyaml-cpp-dev not found, you may have to install it by hand to get Blender compiling..."
2411     PRINT ""
2412   fi
2413
2414   # Install newest libtiff-dev in debian/ubuntu.
2415   TIFF="libtiff"
2416   check_package_DEB $TIFF
2417   if [ $? -eq 0 ]; then
2418     _packages="$_packages $TIFF-dev"
2419   else
2420     TIFF="libtiff5"
2421     check_package_DEB $TIFF
2422     if [ $? -eq 0 ]; then
2423       _packages="$_packages $TIFF-dev"
2424     else
2425       TIFF="libtiff4"  # Some old distro, like e.g. ubuntu 10.04 :/
2426       check_package_DEB $TIFF
2427       if [ $? -eq 0 ]; then
2428         _packages="$_packages $TIFF-dev"
2429       fi
2430     fi
2431   fi
2432
2433   GIT="git"
2434   check_package_DEB $GIT
2435   if [ $? -eq 0 ]; then
2436     _packages="$_packages $GIT"
2437   else
2438     GIT="git-core"  # Some old distro, like e.g. ubuntu 10.04 :/
2439     check_package_DEB $GIT
2440     if [ $? -eq 0 ]; then
2441       _packages="$_packages $GIT"
2442     fi
2443   fi
2444
2445   if [ "$WITH_ALL" = true ]; then
2446     _packages="$_packages libspnav-dev"
2447     # Only install jack if jack2 is not already installed!
2448     JACK="libjack-dev"
2449     JACK2="libjack-jackd2-dev"
2450     check_package_installed_DEB $JACK2
2451     if [ $? -eq 0 ]; then
2452       _packages="$_packages $JACK2"
2453     else
2454       _packages="$_packages $JACK"
2455     fi
2456   fi
2457
2458   PRINT ""
2459   install_packages_DEB $_packages
2460
2461   PRINT""
2462   SNDFILE_DEV="libsndfile1-dev"
2463   check_package_DEB $SNDFILE_DEV
2464   if [ $? -eq 0 ]; then
2465     install_packages_DEB $SNDFILE_DEV
2466   fi
2467
2468   PRINT ""
2469   X264_DEV="libx264-dev"
2470   check_package_version_ge_DEB $X264_DEV $X264_VERSION_MIN
2471   if [ $? -eq 0 ]; then
2472     install_packages_DEB $X264_DEV
2473     X264_USE=true
2474   fi
2475
2476   if [ "$WITH_ALL" = true ]; then
2477     PRINT ""
2478     # Grmpf, debian is libxvidcore-dev and ubuntu libxvidcore4-dev!
2479     # Note: not since ubuntu 10.04
2480     XVID_DEV="libxvidcore-dev"
2481     check_package_DEB $XVID_DEV
2482     if [ $? -eq 0 ]; then
2483       install_packages_DEB $XVID_DEV
2484       XVID_USE=true
2485     else
2486       XVID_DEV="libxvidcore4-dev"
2487       check_package_DEB $XVID_DEV
2488       if [ $? -eq 0 ]; then
2489         install_packages_DEB $XVID_DEV
2490         XVID_USE=true
2491       fi
2492     fi
2493
2494     PRINT ""
2495     MP3LAME_DEV="libmp3lame-dev"
2496     check_package_DEB $MP3LAME_DEV
2497     if [ $? -eq 0 ]; then
2498       install_packages_DEB $MP3LAME_DEV
2499       MP3LAME_USE=true
2500     fi
2501
2502     PRINT ""
2503     VPX_DEV="libvpx-dev"
2504     check_package_version_ge_DEB $VPX_DEV $VPX_VERSION_MIN
2505     if [ $? -eq 0 ]; then
2506       install_packages_DEB $VPX_DEV
2507       VPX_USE=true
2508     fi
2509   fi
2510
2511
2512   PRINT ""
2513   _do_compile_python=false
2514   if [ "$PYTHON_SKIP" = true ]; then
2515     WARNING "Skipping Python/NumPy installation, as requested..."
2516   elif [ "$PYTHON_FORCE_BUILD" = true ]; then
2517     INFO "Forced Python/NumPy building, as requested..."
2518     _do_compile_python=true
2519   else
2520     check_package_DEB python$PYTHON_VERSION_MIN-dev
2521     if [ $? -eq 0 ]; then
2522       install_packages_DEB python$PYTHON_VERSION_MIN-dev
2523       clean_Python
2524       PRINT ""
2525       if [ "$NUMPY_SKIP" = true ]; then
2526         WARNING "Skipping NumPy installation, as requested..."
2527       else
2528         check_package_DEB python3-numpy
2529         if [ $? -eq 0 ]; then
2530           install_packages_DEB python3-numpy
2531         else
2532           WARNING "Sorry, using python package but no valid numpy package available!" \
2533                   "    Use --build-numpy to force building of both Python and NumPy."
2534         fi
2535       fi
2536     else
2537       _do_compile_python=true
2538     fi
2539   fi
2540
2541   if $_do_compile_python; then
2542     compile_Python
2543     PRINT ""
2544     if [ "$NUMPY_SKIP" = true ]; then
2545       WARNING "Skipping NumPy installation, as requested..."
2546     else
2547       compile_Numpy
2548     fi
2549   fi
2550
2551
2552   PRINT ""
2553   if [ "$BOOST_SKIP" = true ]; then
2554     WARNING "Skipping Boost installation, as requested..."
2555   elif [ "$BOOST_FORCE_BUILD" = true ]; then
2556     INFO "Forced Boost building, as requested..."
2557     compile_Boost
2558   else
2559     check_package_version_ge_DEB libboost-dev $BOOST_VERSION_MIN
2560     if [ $? -eq 0 ]; then
2561       install_packages_DEB libboost-dev
2562
2563       boost_version=$(echo `get_package_version_DEB libboost-dev` | sed -r 's/^([0-9]+\.[0-9]+).*/\1/')
2564
2565       check_package_DEB libboost-locale$boost_version-dev
2566       if [ $? -eq 0 ]; then
2567         install_packages_DEB libboost-locale$boost_version-dev libboost-filesystem$boost_version-dev \
2568                              libboost-regex$boost_version-dev libboost-system$boost_version-dev \
2569                              libboost-thread$boost_version-dev libboost-wave$boost_version-dev
2570         clean_Boost
2571       else
2572         compile_Boost
2573       fi
2574     else
2575       compile_Boost
2576     fi
2577   fi
2578
2579
2580   PRINT ""
2581   if [ "$OCIO_SKIP" = true ]; then
2582     WARNING "Skipping OpenColorIO installation, as requested..."
2583   elif [ "$OCIO_FORCE_BUILD" = true ]; then
2584     INFO "Forced OpenColorIO building, as requested..."
2585     compile_OCIO
2586   else
2587     # XXX Always force build of own OCIO, until linux distro guys update their package to default libyaml-cpp ver (0.5)!
2588     #check_package_version_ge_DEB libopencolorio-dev $OCIO_VERSION_MIN
2589     #if [ $? -eq 0 ]; then
2590       #install_packages_DEB libopencolorio-dev
2591       #clean_OCIO
2592     #else
2593       compile_OCIO
2594     #fi
2595   fi
2596
2597
2598   PRINT ""
2599   if [ "$OPENEXR_SKIP" = true ]; then
2600     WARNING "Skipping ILMBase/OpenEXR installation, as requested..."
2601   elif [ "$OPENEXR_FORCE_BUILD" = true ]; then
2602     INFO "Forced ILMBase/OpenEXR building, as requested..."
2603     compile_OPENEXR
2604   else
2605     check_package_version_ge_DEB libopenexr-dev $OPENEXR_VERSION_MIN
2606     if [ $? -eq 0 ]; then
2607       install_packages_DEB libopenexr-dev
2608       OPENEXR_VERSION=`get_package_version_DEB libopenexr-dev`
2609       ILMBASE_VERSION=$OPENEXR_VERSION
2610       clean_OPENEXR
2611     else
2612       compile_OPENEXR
2613     fi
2614   fi
2615
2616
2617   PRINT ""
2618   if [ "$OIIO_SKIP" = true ]; then
2619     WARNING "Skipping OpenImageIO installation, as requested..."
2620   elif [ "$OIIO_FORCE_BUILD" = true ]; then
2621     INFO "Forced OpenImageIO building, as requested..."
2622     compile_OIIO
2623   else
2624     check_package_version_ge_lt_DEB libopenimageio-dev $OIIO_VERSION_MIN $OIIO_VERSION_MAX
2625     if [ $? -eq 0 -a "$_with_built_openexr" = false ]; then
2626       install_packages_DEB libopenimageio-dev
2627       clean_OIIO
2628     else
2629       compile_OIIO
2630     fi
2631   fi
2632
2633
2634   PRINT ""
2635   have_llvm=false
2636   _do_compile_llvm=false
2637   if [ "$LLVM_SKIP" = true ]; then
2638     WARNING "Skipping LLVM installation, as requested (this also implies skipping OSL!)..."
2639   elif [ "$LLVM_FORCE_BUILD" = true ]; then
2640     INFO "Forced LLVM building, as requested..."
2641     _do_compile_llvm=true
2642   else
2643     check_package_DEB llvm-$LLVM_VERSION-dev
2644     if [ $? -eq 0 ]; then
2645       install_packages_DEB llvm-$LLVM_VERSION-dev clang-$LLVM_VERSION
2646       have_llvm=true
2647       LLVM_VERSION_FOUND=$LLVM_VERSION
2648       clean_LLVM
2649     else
2650       check_package_version_ge_DEB llvm-dev $LLVM_VERSION_MIN
2651       if [ $? -eq 0 ]; then
2652         install_packages_DEB llvm-dev clang
2653         have_llvm=true
2654         LLVM_VERSION_FOUND=""  # Using default one, no need to specify it!
2655         clean_LLVM
2656       else
2657         _do_compile_llvm=true
2658       fi
2659     fi
2660   fi
2661
2662   if [ "$_do_compile_llvm" = true ]; then
2663     install_packages_DEB libffi-dev
2664     # LLVM can't find the debian ffi header dir
2665     _FFI_INCLUDE_DIR=`dpkg -L libffi-dev | grep -e ".*/ffi.h" | sed -r 's/(.*)\/ffi.h/\1/'`
2666     PRINT ""
2667     compile_LLVM
2668     have_llvm=true
2669     LLVM_VERSION_FOUND=$LLVM_VERSION
2670   fi
2671
2672
2673   PRINT ""
2674   _do_compile_osl=false
2675   if [ "$OSL_SKIP" = true ]; then
2676     WARNING "Skipping OpenShadingLanguage installation, as requested..."
2677   elif [ "$OSL_FORCE_BUILD" = true ]; then
2678     INFO "Forced OpenShadingLanguage building, as requested..."
2679     _do_compile_osl=true
2680   else
2681       # No package currently!
2682     _do_compile_osl=true
2683   fi
2684
2685   if [ "$_do_compile_osl" = true ]; then
2686     if [ "$have_llvm" = true ]; then
2687       install_packages_DEB flex bison libtbb-dev
2688       PRINT ""
2689       compile_OSL
2690     else
2691       WARNING "No LLVM available, cannot build OSL!"
2692     fi
2693   fi
2694
2695
2696   PRINT ""
2697   _do_compile_osd=false
2698   if [ "$OSD_SKIP" = true ]; then
2699     WARNING "Skipping OpenSubdiv installation, as requested..."
2700   elif [ "$OSD_FORCE_BUILD" = true ]; then
2701     INFO "Forced OpenSubdiv building, as requested..."
2702     _do_compile_osd=true
2703   else
2704       # No package currently!
2705     _do_compile_osd=true
2706   fi
2707
2708   if [ "$_do_compile_osd" = true ]; then
2709     install_packages_DEB flex bison libtbb-dev
2710     PRINT ""
2711     compile_OSD
2712   fi
2713
2714
2715   if [ "$WITH_OPENCOLLADA" = true ]; then
2716     _do_compile_collada=false
2717     PRINT ""
2718     if [ "$OPENCOLLADA_SKIP" = true ]; then
2719       WARNING "Skipping OpenCOLLADA installation, as requested..."
2720     elif [ "$OPENCOLLADA_FORCE_BUILD" = true ]; then
2721       INFO "Forced OpenCollada building, as requested..."
2722       _do_compile_collada=true
2723     else
2724         # No package currently!
2725       _do_compile_collada=true
2726     fi
2727
2728     if [ "$_do_compile_collada" = true ]; then
2729       install_packages_DEB libpcre3-dev
2730       # Find path to libxml shared lib...
2731       _XML2_LIB=`dpkg -L libxml2-dev | grep -e ".*/libxml2.so"`
2732       # No package
2733       PRINT ""
2734       compile_OpenCOLLADA
2735     fi
2736   fi
2737
2738
2739   PRINT ""
2740   if [ "$FFMPEG_SKIP" = true ]; then
2741     WARNING "Skipping FFMpeg installation, as requested..."
2742   elif [ "$FFMPEG_FORCE_BUILD" = true ]; then
2743     INFO "Forced FFMpeg building, as requested..."
2744     compile_FFmpeg
2745   else
2746 #    XXX Debian features libav packages as ffmpeg, those are not really compatible with blender code currently :/
2747 #        So for now, always build our own ffmpeg.
2748 #    check_package_DEB ffmpeg
2749 #    if [ $? -eq 0 ]; then
2750 #      install_packages_DEB ffmpeg
2751 #      ffmpeg_version=`get_package_version_DEB ffmpeg`
2752 #      PRINT "ffmpeg version: $ffmpeg_version"
2753 #      if [ ! -z "$ffmpeg_version" ]; then
2754 #        if  dpkg --compare-versions $ffmpeg_version gt 0.7.2; then
2755 #          install_packages_DEB libavfilter-dev libavcodec-dev libavdevice-dev libavformat-dev libavutil-dev libswscale-dev
2756 #          clean_FFmpeg
2757 #        else
2758 #          compile_FFmpeg
2759 #        fi
2760 #      fi
2761 #    fi
2762     compile_FFmpeg
2763   fi
2764 }
2765
2766
2767 #### Install on RPM-like ####
2768 rpm_flavour() {
2769   if [ -f /etc/redhat-release ]; then
2770     if [ "`grep '6\.' /etc/redhat-release`" ]; then
2771       RPM="RHEL"
2772     else
2773       RPM="FEDORA"
2774     fi
2775   elif [ -f /etc/SuSE-release ]; then
2776     RPM="SUSE"
2777   fi
2778 }
2779
2780 get_package_version_RPM() {
2781   rpm_flavour
2782   if [ "$RPM" = "FEDORA" -o "$RPM" = "RHEL" ]; then
2783     yum info $1 | grep Version | tail -n 1 | sed -r 's/.*:\s+(([0-9]+\.?)+).*/\1/'
2784   elif [ "$RPM" = "SUSE" ]; then
2785     zypper info $1 | grep Version | tail -n 1 | sed -r 's/.*:\s+(([0-9]+\.?)+).*/\1/'
2786   fi
2787 }
2788
2789 check_package_RPM() {
2790   rpm_flavour
2791   if [ "$RPM" = "FEDORA" -o "$RPM" = "RHEL" ]; then
2792     r=`yum info $1 | grep -c 'Summary'`
2793   elif [ "$RPM" = "SUSE" ]; then
2794     r=`zypper info $1 | grep -c 'Summary'`
2795   fi
2796
2797   if [ $r -ge 1 ]; then
2798     return 0
2799   else
2800     return 1
2801   fi
2802 }
2803
2804 check_package_version_match_RPM() {
2805   v=`get_package_version_RPM $1`
2806
2807   if [ -z "$v" ]; then
2808     return 1
2809   fi
2810
2811   version_match $v $2
2812   return $?
2813 }
2814
2815 check_package_version_ge_RPM() {
2816   v=`get_package_version_RPM $1`
2817
2818   if [ -z "$v" ]; then
2819     return 1
2820   fi
2821
2822   version_ge $v $2
2823   return $?
2824 }
2825
2826 check_package_version_ge_lt_RPM() {
2827   v=`get_package_version_RPM $1`
2828
2829   if [ -z "$v" ]; then
2830     return 1
2831   fi
2832
2833   version_ge_lt $v $2 $3
2834   return $?
2835 }
2836
2837 install_packages_RPM() {
2838   rpm_flavour
2839   if [ "$RPM" = "FEDORA" -o "$RPM" = "RHEL" ]; then
2840     if [ ! $SUDO ]; then
2841       WARNING "--no-sudo enabled, impossible to run yum install for $@, you'll have to do it yourself..."
2842     else
2843       $SUDO yum install -y $@
2844       if [ $? -ge 1 ]; then
2845         ERROR "yum failed to install requested packages, exiting."
2846         exit 1
2847       fi
2848     fi
2849
2850   elif [ "$RPM" = "SUSE" ]; then
2851     if [ ! $SUDO ]; then
2852       WARNING "--no-sudo enabled, impossible to run zypper install for $@, you'll have to do it yourself..."
2853     else
2854       $SUDO zypper --non-interactive install --auto-agree-with-licenses $@
2855       if [ $? -ge 1 ]; then
2856         ERROR "zypper failed to install requested packages, exiting."
2857         exit 1
2858       fi
2859     fi
2860   fi
2861 }
2862
2863 install_RPM() {
2864   PRINT ""
2865   INFO "Installing dependencies for RPM-based distribution"
2866   PRINT ""
2867   PRINT "`eval _echo "$COMMON_INFO"`"
2868   PRINT ""
2869
2870   if [ "$NO_CONFIRM" = false ]; then
2871     read -p "Do you want to continue (Y/n)?"
2872     [ "$(echo ${REPLY:=Y} | tr [:upper:] [:lower:])" != "y" ] && exit
2873   fi
2874
2875   # Enable non-free repositories for all flavours
2876   if [ ! $SUDO ]; then
2877     WARNING "--no-sudo enabled, impossible to install third party repositories, you'll have to do it yourself..."
2878   else
2879     rpm_flavour
2880     if [ "$RPM" = "FEDORA" ]; then
2881       _fedora_rel="`egrep "[0-9]{1,}" /etc/fedora-release -o`"
2882       $SUDO yum -y localinstall --nogpgcheck \
2883       http://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-$_fedora_rel.noarch.rpm \
2884       http://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-$_fedora_rel.noarch.rpm
2885
2886       $SUDO yum -y update
2887
2888       # Install cmake now because of difference with RHEL
2889       $SUDO yum -y install cmake
2890
2891     elif [ "$RPM" = "RHEL" ]; then
2892       $SUDO yum -y localinstall --nogpgcheck \
2893       http://download.fedoraproject.org/pub/epel/6/$(uname -i)/epel-release-6-8.noarch.rpm \
2894       http://download1.rpmfusion.org/free/el/updates/6/$(uname -i)/rpmfusion-free-release-6-1.noarch.rpm \
2895       http://download1.rpmfusion.org/nonfree/el/updates/6/$(uname -i)/rpmfusion-nonfree-release-6-1.noarch.rpm
2896
2897       $SUDO yum -y update
2898
2899       # Install cmake 2.8 from other repo
2900       mkdir -p $SRC
2901       if [ -f $SRC/cmake-2.8.8-4.el6.$(uname -m).rpm ]; then
2902         PRINT ""
2903         INFO "Special cmake already installed"
2904       else
2905         curl -O ftp://ftp.pbone.net/mirror/atrpms.net/el6-$(uname -i)/atrpms/testing/cmake-2.8.8-4.el6.$(uname -m).rpm
2906         mv cmake-2.8.8-4.el6.$(uname -m).rpm $SRC/
2907         $SUDO rpm -ihv $SRC/cmake-2.8.8-4.el6.$(uname -m).rpm
2908       fi
2909
2910     elif [ "$RPM" = "SUSE" ]; then
2911       # Install this now to avoid using the version from packman repository...
2912       if [ "$WITH_ALL" = true ]; then
2913         install_packages_RPM libjack-devel
2914       fi
2915
2916       _suse_rel="`grep VERSION /etc/SuSE-release | gawk '{print $3}'`"
2917
2918       PRINT ""
2919       INFO "About to add 'packman' repository from http://packman.inode.at/suse/openSUSE_$_suse_rel/"
2920       INFO "This is only needed if you do not already have a packman repository enabled..."
2921       read -p "Do you want to add this repo (Y/n)?"
2922       if [ "$(echo ${REPLY:=Y} | tr [:upper:] [:lower:])" == "y" ]; then
2923         INFO "    Installing packman..."
2924         $SUDO zypper ar --refresh --name 'Packman Repository' http://ftp.gwdg.de/pub/linux/packman/suse/openSUSE_$_suse_rel/ ftp.gwdg.de-suse
2925         INFO "    Done."
2926       else
2927         INFO "    Skipping packman installation."
2928       fi
2929       $SUDO zypper --non-interactive --gpg-auto-import-keys update --auto-agree-with-licenses
2930     fi
2931   fi
2932
2933   # These libs should always be available in fedora/suse official repository...
2934   OPENJPEG_DEV="openjpeg-devel"
2935   VORBIS_DEV="libvorbis-devel"
2936   OGG_DEV="libogg-devel"
2937   THEORA_DEV="libtheora-devel"
2938
2939   _packages="gcc gcc-c++ git make cmake libtiff-devel libjpeg-devel\
2940              libpng-devel libX11-devel libXi-devel libXcursor-devel libXrandr-devel libXinerama-devel \
2941              wget ncurses-devel readline-devel $OPENJPEG_DEV openal-soft-devel \
2942              glew-devel yasm $THEORA_DEV $VORBIS_DEV $OGG_DEV patch \
2943              libxml2-devel yaml-cpp-devel tinyxml-devel"
2944
2945   OPENJPEG_USE=true
2946   VORBIS_USE=true
2947   OGG_USE=true
2948   THEORA_USE=true
2949
2950   if [ "$RPM" = "FEDORA" -o "$RPM" = "RHEL" ]; then
2951     OPENEXR_DEV="openexr-devel"
2952
2953     _packages="$_packages freetype-devel libsqlite3x-devel fftw-devel SDL-devel"
2954
2955     if [ "$WITH_ALL" = true ]; then
2956       _packages="$_packages jack-audio-connection-kit-devel"
2957     fi
2958
2959     PRINT ""
2960     install_packages_RPM $_packages
2961
2962     PRINT ""
2963     X264_DEV="x264-devel"
2964     check_package_version_ge_RPM $X264_DEV $X264_VERSION_MIN
2965     if [ $? -eq 0 ]; then
2966       install_packages_RPM $X264_DEV
2967       X264_USE=true
2968     fi
2969
2970     if [ "$WITH_ALL" = true ]; then
2971       PRINT ""
2972       XVID_DEV="xvidcore-devel"
2973       check_package_RPM $XVID_DEV
2974       if [ $? -eq 0 ]; then
2975         install_packages_RPM $XVID_DEV
2976         XVID_USE=true
2977       fi
2978
2979       PRINT ""
2980       MP3LAME_DEV="lame-devel"
2981       check_package_RPM $MP3LAME_DEV
2982       if [ $? -eq 0 ]; then
2983         install_packages_RPM $MP3LAME_DEV
2984         MP3LAME_USE=true
2985       fi
2986     fi
2987
2988   elif [ "$RPM" = "SUSE" ]; then
2989     OPENEXR_DEV="libopenexr-devel"
2990
2991     _packages="$_packages cmake freetype2-devel sqlite3-devel fftw3-devel libSDL-devel"
2992
2993     PRINT ""
2994     install_packages_RPM $_packages
2995
2996     PRINT ""
2997     X264_DEV="libx264-devel"
2998     check_package_version_ge_RPM $X264_DEV $X264_VERSION_MIN
2999     if [ $? -eq 0 ]; then
3000       install_packages_RPM $X264_DEV
3001       X264_USE=true
3002     fi
3003
3004     if [ "$WITH_ALL" = true ]; then
3005       PRINT ""
3006       XVID_DEV="libxvidcore-devel"
3007       check_package_RPM $XVID_DEV
3008       if [ $? -eq 0 ]; then
3009         install_packages_RPM $XVID_DEV
3010         XVID_USE=true
3011       fi
3012
3013       PRINT ""
3014       MP3LAME_DEV="libmp3lame-devel"
3015       check_package_RPM $MP3LAME_DEV
3016       if [ $? -eq 0 ]; then
3017         install_packages_RPM $MP3LAME_DEV
3018         MP3LAME_USE=true
3019       fi
3020     fi
3021   fi
3022
3023   PRINT""
3024   SNDFILE_DEV="libsndfile-devel"
3025   check_package_RPM $SNDFILE_DEV
3026   if [ $? -eq 0 ]; then
3027     install_packages_RPM $SNDFILE_DEV
3028   fi
3029
3030   if [ "$WITH_ALL" = true ]; then
3031     PRINT ""
3032     VPX_DEV="libvpx-devel"
3033     check_package_version_ge_RPM $VPX_DEV $VPX_VERSION_MIN
3034     if [ $? -eq 0 ]; then
3035       install_packages_RPM $VPX_DEV
3036       VPX_USE=true
3037     fi
3038     PRINT ""
3039     install_packages_RPM libspnav-devel
3040   fi
3041
3042
3043   PRINT ""
3044   _do_compile_python=false
3045   if [ "$PYTHON_SKIP" = true ]; then
3046     WARNING "Skipping Python installation, as requested..."
3047   elif [ "$PYTHON_FORCE_BUILD" = true ]; then
3048     INFO "Forced Python/NumPy building, as requested..."
3049     _do_compile_python=true
3050   else
3051     check_package_version_match_RPM python3-devel $PYTHON_VERSION_MIN
3052     if [ $? -eq 0 ]; then
3053       install_packages_RPM python3-devel
3054       clean_Python
3055       PRINT ""
3056       if [ "$NUMPY_SKIP" = true ]; then
3057         WARNING "Skipping NumPy installation, as requested..."
3058       else
3059         check_package_version_ge_RPM python3-numpy $NUMPY_VERSION_MIN
3060         if [ $? -eq 0 ]; then
3061           install_packages_RPM python3-numpy
3062         else
3063           WARNING "Sorry, using python package but no valid numpy package available!" \
3064                   "    Use --build-numpy to force building of both Python and NumPy."
3065         fi
3066       fi
3067     else
3068       _do_compile_python=true
3069     fi
3070   fi
3071
3072   if [ "$_do_compile_python" = true ]; then
3073     compile_Python
3074     PRINT ""
3075     if [ "$NUMPY_SKIP" = true ]; then
3076       WARNING "Skipping NumPy installation, as requested..."
3077     else
3078       compile_Numpy
3079     fi
3080   fi
3081
3082
3083   PRINT ""
3084   if [ "$BOOST_SKIP" = true ]; then
3085     WARNING "Skipping Boost installation, as requested..."
3086   elif [ "$BOOST_FORCE_BUILD" = true ]; then
3087     INFO "Forced Boost building, as requested..."
3088     compile_Boost
3089   else
3090     check_package_version_ge_RPM boost-devel $BOOST_VERSION
3091     if [ $? -eq 0 ]; then
3092       install_packages_RPM boost-devel
3093       clean_Boost
3094     else
3095       compile_Boost
3096     fi
3097   fi
3098
3099
3100   PRINT ""
3101   if [ "$OCIO_SKIP" = true ]; then
3102     WARNING "Skipping OpenColorIO installation, as requested..."
3103   elif [ "$OCIO_FORCE_BUILD" = true ]; then
3104     INFO "Forced OpenColorIO building, as requested..."
3105     compile_OCIO
3106   else
3107     # XXX Always force build of own OCIO, until linux distro guys update their package to default libyaml-cpp ver (0.5)!
3108     #check_package_version_ge_RPM OpenColorIO-devel $OCIO_VERSION_MIN
3109     #if [ $? -eq 0 ]; then
3110       #install_packages_RPM OpenColorIO-devel
3111       #clean_OCIO
3112     #else
3113       compile_OCIO
3114     #fi
3115   fi
3116
3117   PRINT ""
3118   if [ "$OPENEXR_SKIP" = true ]; then
3119     WARNING "Skipping ILMBase/OpenEXR installation, as requested..."
3120   elif [ "$OPENEXR_FORCE_BUILD" = true ]; then
3121     INFO "Forced ILMBase/OpenEXR building, as requested..."
3122     compile_OPENEXR
3123   else
3124     check_package_version_ge_RPM $OPENEXR_DEV $OPENEXR_VERSION_MIN
3125     if [ $? -eq 0 ]; then
3126       install_packages_RPM $OPENEXR_DEV
3127       OPENEXR_VERSION=`get_package_version_RPM $OPENEXR_DEV`
3128       ILMBASE_VERSION=$OPENEXR_VERSION
3129       clean_OPENEXR
3130     else
3131       compile_OPENEXR
3132     fi
3133   fi
3134
3135   PRINT ""
3136   if [ "$OIIO_SKIP" = true ]; then
3137     WARNING "Skipping OpenImageIO installation, as requested..."
3138   elif [ "$OIIO_FORCE_BUILD" = true ]; then
3139     INFO "Forced OpenImageIO building, as requested..."
3140     compile_OIIO
3141   else
3142     check_package_version_ge_lt_RPM OpenImageIO-devel $OIIO_VERSION_MIN $OIIO_VERSION_MAX
3143     if [ $? -eq 0 -a $_with_built_openexr == false ]; then
3144       install_packages_RPM OpenImageIO-devel
3145       clean_OIIO
3146     else
3147       compile_OIIO
3148     fi
3149   fi
3150
3151
3152   PRINT ""
3153   have_llvm=false
3154   _do_compile_llvm=false
3155   if [ "$LLVM_SKIP" = true ]; then
3156     WARNING "Skipping LLVM installation, as requested (this also implies skipping OSL!)..."
3157   elif [ "$LLVM_FORCE_BUILD" = true ]; then
3158     INFO "Forced LLVM building, as requested..."
3159     _do_compile_llvm=true
3160   else
3161     # Problem compiling with LLVM 3.2 so match version 3.1 ...
3162     check_package_version_match_RPM llvm $LLVM_VERSION
3163     if [ $? -eq 0 ]; then
3164       if [ "$RPM" = "SUSE" ]; then
3165         install_packages_RPM llvm-devel llvm-clang-devel
3166       else
3167         install_packages_RPM llvm-devel clang-devel
3168       fi
3169       have_llvm=true
3170       LLVM_VERSION_FOUND=$LLVM_VERSION
3171       clean_LLVM
3172     else
3173       #
3174       # Better to compile it than use minimum version from repo...
3175       #
3176       _do_compile_llvm=true
3177     fi
3178   fi
3179
3180   if [ "$_do_compile_llvm" = true ]; then
3181     install_packages_RPM libffi-devel
3182     # LLVM can't find the fedora ffi header dir...
3183     _FFI_INCLUDE_DIR=`rpm -ql libffi-devel | grep -e ".*/ffi.h" | sed -r 's/(.*)\/ffi.h/\1/'`
3184     PRINT ""
3185     compile_LLVM
3186     have_llvm=true
3187     LLVM_VERSION_FOUND=$LLVM_VERSION
3188   fi
3189
3190
3191   PRINT ""
3192   _do_compile_osl=false
3193   if [ "$OSL_SKIP" = true ]; then
3194     WARNING "Skipping OpenShadingLanguage installation, as requested..."
3195   elif [ "$OSL_FORCE_BUILD" = true ]; then
3196     INFO "Forced OpenShadingLanguage building, as requested..."
3197     _do_compile_osl=true
3198   else
3199     # No package currently!
3200     _do_compile_osl=true
3201   fi
3202
3203   if [ "$_do_compile_osl" = true ]; then
3204     if [ "$have_llvm" = true ]; then
3205       install_packages_RPM flex bison
3206       if [ "$RPM" = "FEDORA" -o "$RPM" = "RHEL" ]; then
3207         install_packages_RPM tbb-devel
3208       fi
3209       PRINT ""
3210       compile_OSL
3211     else
3212       WARNING "No LLVM available, cannot build OSL!"
3213     fi
3214   fi
3215
3216
3217   PRINT ""
3218   _do_compile_osd=false
3219   if [ "$OSD_SKIP" = true ]; then
3220     WARNING "Skipping OpenSubdiv installation, as requested..."
3221   elif [ "$OSD_FORCE_BUILD" = true ]; then
3222     INFO "Forced OpenSubdiv building, as requested..."
3223     _do_compile_osd=true
3224   else
3225     # No package currently!
3226     _do_compile_osd=true
3227   fi
3228
3229   if [ "$_do_compile_osd" = true ]; then
3230     install_packages_RPM flex bison
3231     if [ "$RPM" = "FEDORA" -o "$RPM" = "RHEL" ]; then
3232       install_packages_RPM tbb-devel
3233     fi
3234     PRINT ""
3235     compile_OSD
3236   fi
3237
3238
3239   if [ "$WITH_OPENCOLLADA" = true ]; then
3240     PRINT ""
3241     _do_compile_collada=false
3242     if [ "$OPENCOLLADA_SKIP" = true ]; then
3243       WARNING "Skipping OpenCOLLADA installation, as requested..."
3244     elif [ "$OPENCOLLADA_FORCE_BUILD" = true ]; then
3245       INFO "Forced OpenCollada building, as requested..."
3246       _do_compile_collada=true
3247     else
3248       # No package...
3249       _do_compile_collada=true
3250     fi
3251
3252     if [ "$_do_compile_collada" = true ]; then
3253       install_packages_RPM pcre-devel
3254       # Find path to libxml shared lib...
3255       _XML2_LIB=`rpm -ql libxml2-devel | grep -e ".*/libxml2.so"`
3256       PRINT ""
3257       compile_OpenCOLLADA
3258     fi
3259   fi
3260
3261
3262   PRINT ""
3263   if [ "$FFMPEG_SKIP" = true ]; then
3264     WARNING "Skipping FFMpeg installation, as requested..."
3265   elif [ "$FFMPEG_FORCE_BUILD" = true ]; then
3266     INFO "Forced FFMpeg building, as requested..."
3267     compile_FFmpeg
3268   else
3269     check_package_version_ge_RPM ffmpeg $FFMPEG_VERSION_MIN
3270     if [ $? -eq 0 ]; then
3271       install_packages_RPM ffmpeg ffmpeg-devel
3272       clean_FFmpeg
3273     else
3274       compile_FFmpeg
3275     fi
3276   fi
3277 }
3278
3279
3280 #### Install on ARCH-like ####
3281 get_package_version_ARCH() {
3282   pacman -Si $1 | grep Version | tail -n 1 | sed -r 's/.*:\s+(([0-9]+\.?)+).*/\1/'
3283 }
3284
3285 check_package_ARCH() {
3286   r=`pacman -Si $1 | grep -c 'Description'`
3287
3288   if [ $r -ge 1 ]; then
3289     return 0
3290   else
3291     return 1
3292   fi
3293 }
3294
3295 check_package_version_match_ARCH() {
3296   v=`get_package_version_ARCH $1`
3297
3298   if [ -z "$v" ]; then
3299     return 1
3300   fi
3301
3302   version_match $v $2
3303   return $?
3304 }
3305
3306 check_package_version_ge_ARCH() {
3307   v=`get_package_version_ARCH $1`
3308
3309   if [ -z "$v" ]; then
3310     return 1
3311   fi
3312
3313   version_ge $v $2
3314   return $?
3315 }
3316
3317 check_package_version_ge_lt_ARCH() {
3318   v=`get_package_version_ARCH $1`
3319
3320   if [ -z "$v" ]; then
3321     return 1
3322   fi
3323
3324   version_ge_lt $v $2 $3
3325   return $?
3326 }
3327
3328 install_packages_ARCH() {
3329   if [ ! $SUDO ]; then
3330     WARNING "--no-sudo enabled, impossible to run pacman for $@, you'll have to do it yourself..."
3331   else
3332     $SUDO pacman -S --needed --noconfirm $@
3333     if [ $? -ge 1 ]; then
3334       ERROR "pacman failed to install requested packages, exiting."
3335       exit 1
3336     fi
3337   fi
3338 }
3339
3340 install_ARCH() {
3341   PRINT ""
3342   INFO "Installing dependencies for ARCH-based distribution"
3343   PRINT ""
3344   PRINT "`eval _echo "$COMMON_INFO"`"
3345   PRINT ""
3346
3347   if [ "$NO_CONFIRM" = false ]; then
3348     read -p "Do you want to continue (Y/n)?"
3349     [ "$(echo ${REPLY:=Y} | tr [:upper:] [:lower:])" != "y" ] && exit
3350   fi
3351
3352   # Check for sudo...
3353   if [ $SUDO ]; then
3354     if [ ! -x "/usr/bin/sudo" ]; then
3355       PRINT ""
3356       ERROR "This script requires sudo but it is not installed."
3357       PRINT "Please setup sudo according to:"
3358       PRINT "https://wiki.archlinux.org/index.php/Sudo"
3359       PRINT "and try again."
3360       PRINT ""
3361       exit
3362     fi
3363   fi
3364
3365   if [ ! $SUDO ]; then
3366     WARNING "--no-sudo enabled, impossible to run pacman -Sy, you'll have to do it yourself..."
3367   else
3368     $SUDO pacman -Sy
3369   fi
3370
3371   # These libs should always be available in arch official repository...
3372   OPENJPEG_DEV="openjpeg"
3373   VORBIS_DEV="libvorbis"
3374   OGG_DEV="libogg"
3375   THEORA_DEV="libtheora"
3376
3377   _packages="base-devel git cmake \
3378              libxi libxcursor libxrandr libxinerama glew libpng libtiff wget openal \
3379              $OPENJPEG_DEV $VORBIS_DEV $OGG_DEV $THEORA_DEV yasm sdl fftw \
3380              libxml2 yaml-cpp tinyxml"
3381
3382   OPENJPEG_USE=true
3383   VORBIS_USE=true
3384   OGG_USE=true
3385   THEORA_USE=true
3386
3387   if [ "$WITH_ALL" = true ]; then
3388     # No libspacenav in official arch repos...
3389     _packages="$_packages jack"
3390   fi
3391
3392   PRINT ""
3393   install_packages_ARCH $_packages
3394
3395   PRINT""
3396   SNDFILE_DEV="libsndfile"
3397   check_package_ARCH $SNDFILE_DEV
3398   if [ $? -eq 0 ]; then
3399     install_packages_ARCH $SNDFILE_DEV
3400   fi
3401
3402   PRINT ""
3403   X264_DEV="x264"
3404   check_package_version_ge_ARCH $X264_DEV $X264_VERSION_MIN
3405   if [ $? -eq 0 ]; then
3406     install_packages_ARCH $X264_DEV
3407     X264_USE=true
3408   fi
3409
3410   if [ "$WITH_ALL" = true ]; then
3411     PRINT ""
3412     XVID_DEV="xvidcore"
3413     check_package_ARCH $XVID_DEV
3414     if [ $? -eq 0 ]; then
3415       install_packages_ARCH $XVID_DEV
3416       XVID_USE=true
3417     fi
3418
3419     PRINT ""
3420     MP3LAME_DEV="lame"
3421     check_package_ARCH $MP3LAME_DEV
3422     if [ $? -eq 0 ]; then
3423       install_packages_ARCH $MP3LAME_DEV
3424       MP3LAME_USE=true
3425     fi
3426
3427     PRINT ""
3428     VPX_DEV="libvpx"
3429     check_package_version_ge_ARCH $VPX_DEV $VPX_VERSION_MIN
3430     if [ $? -eq 0 ]; then
3431       install_packages_ARCH $VPX_DEV
3432       VPX_USE=true
3433     fi
3434   fi
3435
3436
3437   PRINT ""
3438   _do_compile_python=false
3439   if [ "$PYTHON_SKIP" = true ]; then
3440     WARNING "Skipping Python installation, as requested..."
3441   elif [ "$PYTHON_FORCE_BUILD" = true ]; then
3442     INFO "Forced Python/NumPy building, as requested..."
3443     _do_compile_python=true
3444   else
3445     check_package_version_ge_ARCH python $PYTHON_VERSION_MIN
3446     if [ $? -eq 0 ]; then
3447       install_packages_ARCH python
3448       clean_Python
3449       PRINT ""
3450       if [ "$WITH_NUMPY" = true ]; then
3451         if [ "$NUMPY_SKIP" = true ]; then
3452           WARNING "Skipping NumPy installation, as requested..."
3453         else
3454           check_package_version_ge_ARCH python-numpy $NUMPY_VERSION_MIN
3455           if [ $? -eq 0 ]; then
3456             install_packages_ARCH python-numpy
3457         else
3458           WARNING "Sorry, using python package but no valid numpy package available!" \
3459                   "    Use --build-numpy to force building of both Python and NumPy."
3460           fi
3461         fi
3462       fi
3463     else
3464       _do_compile_python=true
3465     fi
3466   fi
3467
3468   if [ "$_do_compile_python" = true ]; then
3469     compile_Python
3470     PRINT ""
3471     if [ "$NUMPY_SKIP" = true ]; then
3472       WARNING "Skipping NumPy installation, as requested..."
3473     else
3474       compile_Numpy
3475     fi
3476   fi
3477
3478
3479   PRINT ""
3480   if [ "$BOOST_SKIP" = true ]; then
3481     WARNING "Skipping Boost installation, as requested..."
3482   elif [ "$BOOST_FORCE_BUILD" = true ]; then
3483     INFO "Forced Boost building, as requested..."
3484     compile_Boost
3485   else
3486     check_package_version_ge_ARCH boost $BOOST_VERSION_MIN
3487     if [ $? -eq 0 ]; then
3488       install_packages_ARCH boost
3489       clean_Boost
3490     else
3491       compile_Boost
3492     fi
3493   fi
3494
3495   PRINT ""
3496   _do_compile_ocio=false
3497   if [ "$OCIO_SKIP" = true ]; then
3498     WARNING "Skipping OpenColorIO installation, as requested..."
3499   elif [ "$OCIO_FORCE_BUILD" = true ]; then
3500     INFO "Forced OpenColorIO building, as requested..."
3501     _do_compile_ocio=true
3502   else
3503     # XXX Always force build of own OCIO, until linux distro guys update their package to default libyaml-cpp ver (0.5)!
3504     #check_package_version_ge_ARCH opencolorio $OCIO_VERSION_MIN
3505     #if [ $? -eq 0 ]; then
3506       #install_packages_ARCH opencolorio yaml-cpp tinyxml
3507       #clean_OCIO
3508     #else
3509       _do_compile_ocio=true
3510     #fi
3511   fi
3512
3513   if [ "$_do_compile_ocio" = true ]; then
3514     install_packages_ARCH yaml-cpp tinyxml
3515     compile_OCIO
3516   fi
3517
3518
3519   PRINT ""
3520   if [ "$OPENEXR_SKIP" = true ]; then
3521     WARNING "Skipping ILMBase/OpenEXR installation, as requested..."
3522   elif [ "$OPENEXR_FORCE_BUILD" = true ]; then
3523     INFO "Forced ILMBase/OpenEXR building, as requested..."
3524     compile_OPENEXR
3525   else
3526     check_package_version_ge_ARCH openexr $OPENEXR_VERSION_MIN
3527     if [ $? -eq 0 ]; then
3528       install_packages_ARCH openexr
3529       OPENEXR_VERSION=`get_package_version_ARCH openexr`
3530       ILMBASE_VERSION=$OPENEXR_VERSION
3531       clean_OPENEXR
3532     else
3533       compile_OPENEXR
3534     fi
3535   fi
3536
3537
3538   PRINT ""
3539   if [ "$OIIO_SKIP" = true ]; then
3540     WARNING "Skipping OpenImageIO installation, as requested..."
3541   elif [ "$OIIO_FORCE_BUILD" = true ]; then
3542     INFO "Forced OpenImageIO building, as requested..."
3543     compile_OIIO
3544   else
3545     check_package_version_ge_lt_ARCH openimageio $OIIO_VERSION_MIN $OIIO_VERSION_MAX
3546     if [ $? -eq 0 ]; then
3547       install_packages_ARCH openimageio
3548       clean_OIIO
3549     else
3550       compile_OIIO
3551     fi
3552   fi
3553
3554
3555   PRINT ""
3556   have_llvm=false
3557   _do_compile_llvm=false
3558   if [ "$LLVM_SKIP" = true ]; then
3559     WARNING "Skipping LLVM installation, as requested (this also implies skipping OSL!)..."
3560   elif [ "$LLVM_FORCE_BUILD" = true ]; then
3561     INFO "Forced LLVM building, as requested..."
3562     _do_compile_llvm=true
3563   else
3564     check_package_version_ge_ARCH llvm $LLVM_VERSION_MIN
3565     if [ $? -eq 0 ]; then
3566       install_packages_ARCH llvm clang
3567       have_llvm=true
3568       LLVM_VERSION=`check_package_version_ge_ARCH llvm $LLVM_VERSION_MIN`
3569       LLVM_VERSION_FOUND=$LLVM_VERSION
3570       clean_LLVM
3571     else
3572       _do_compile_llvm=true
3573     fi
3574   fi
3575
3576   if [ "$_do_compile_llvm" = true ]; then
3577     install_packages_ARCH libffi
3578     # LLVM can't find the arch ffi header dir...
3579     _FFI_INCLUDE_DIR=`pacman -Ql libffi | grep -e ".*/ffi.h" | awk '{print $2}' | sed -r 's/(.*)\/ffi.h/\1/'`
3580     # LLVM 3.1 needs python2 to build and arch defaults to python3
3581     _PYTHON2_BIN="/usr/bin/python2"
3582     PRINT ""
3583     compile_LLVM
3584     have_llvm=true
3585     LLVM_VERSION_FOUND=$LLVM_VERSION
3586   fi
3587
3588
3589   PRINT ""
3590   _do_compile_osl=false
3591   if [ "$OSL_SKIP" = true ]; then
3592     WARNING "Skipping OpenShadingLanguage installation, as requested..."
3593   elif [ "$OSL_FORCE_BUILD" = true ]; then
3594     INFO "Forced OpenShadingLanguage building, as requested..."
3595     _do_compile_osl=true
3596   else
3597     check_package_version_ge_ARCH openshadinglanguage $OSL_VERSION_MIN
3598     if [ $? -eq 0 ]; then
3599       install_packages_ARCH openshadinglanguage
3600       clean_OSL
3601     else
3602       _do_compile_osl=true
3603     fi
3604   fi
3605
3606   if [ "$_do_compile_osl" = true ]; then
3607     if [ "$have_llvm" = true ]; then
3608       #XXX Note: will fail to build with LLVM 3.2!
3609       install_packages_ARCH intel-tbb
3610       PRINT ""
3611       compile_OSL
3612     else
3613       WARNING "No LLVM available, cannot build OSL!"
3614     fi
3615   fi
3616
3617
3618   PRINT ""
3619   _do_compile_osd=false
3620   if [ "$OSD_SKIP" = true ]; then
3621     WARNING "Skipping OpenSubdiv installation, as requested..."
3622   elif [ "$OSD_FORCE_BUILD" = true ]; then
3623     INFO "Forced OpenSubdiv building, as requested..."
3624     _do_compile_osd=true
3625   else
3626     # No package currently? Just build for now!
3627     _do_compile_osd=true
3628   fi
3629
3630   if [ "$_do_compile_osd" = true ]; then
3631     install_packages_ARCH intel-tbb
3632     PRINT ""
3633     compile_OSD
3634   fi
3635
3636
3637   if [ "$WITH_OPENCOLLADA" = true ]; then
3638     PRINT ""
3639     _do_compile_collada=false
3640     if [ "$OPENCOLLADA_SKIP" = true ]; then
3641       WARNING "Skipping OpenCOLLADA installation, as requested..."
3642     elif [ "$OPENCOLLADA_FORCE_BUILD" = true ]; then
3643       INFO "Forced OpenCollada building, as requested..."
3644       _do_compile_collada=true
3645     else
3646       check_package_ARCH opencollada
3647       if [ $? -eq 0 ]; then
3648         install_packages_ARCH opencollada
3649         clean_OpenCOLLADA
3650       else
3651         _do_compile_collada=true
3652       fi
3653     fi
3654
3655     if [ "$_do_compile_collada" = true ]; then
3656       install_packages_ARCH pcre
3657       # Find path to libxml shared lib...
3658       _XML2_LIB=`pacman -Ql libxml2 | grep -e ".*/libxml2.so$" | gawk '{print $2}'`
3659       PRINT ""
3660       compile_OpenCOLLADA
3661     fi
3662   fi
3663
3664
3665   PRINT ""
3666   if [ "$FFMPEG_SKIP" = true ]; then
3667     WARNING "Skipping FFMpeg installation, as requested..."
3668   elif [ "$FFMPEG_FORCE_BUILD" = true ]; then
3669     INFO "Forced FFMpeg building, as requested..."
3670     compile_FFmpeg
3671   else
3672     check_package_version_ge_ARCH ffmpeg $FFMPEG_VERSION_MIN
3673     if [ $? -eq 0 ]; then
3674       install_packages_ARCH ffmpeg
3675       clean_FFmpeg
3676     else
3677       compile_FFmpeg
3678     fi
3679   fi
3680 }
3681
3682
3683 #### Install on other distro (very limited!) ####
3684
3685 install_OTHER() {
3686   PRINT ""
3687   WARNING "Attempt to build main dependencies for other linux distributions."
3688   PRINT ""
3689   PRINT "`eval _echo "$COMMON_INFO"`"
3690   PRINT ""
3691
3692   ERROR "Failed to detect distribution type."
3693   PRINT ""
3694   PRINT "Your distribution is not supported by this script, you'll have to install dependencies and"
3695   PRINT "dev packages yourself. However, this script can still attempt to build main (complex) libraries for you,"
3696   PRINT "if you use '--build-foo' options (you can try '--build-all' one first)."
3697   PRINT ""
3698   PRINT "Quite obviously, it assumes dependencies from those libraries are already available, otherwise please"
3699   PRINT "install them (you can also use error messages printed out by build process to find missing libraries...)."
3700   PRINT ""
3701   PRINT "`eval _echo "$DEPS_COMMON_INFO"`"
3702   PRINT ""
3703   PRINT "`eval _echo "$DEPS_SPECIFIC_INFO"`"
3704   PRINT ""
3705
3706   if [ "$NO_CONFIRM" = false ]; then
3707     read -p "Do you want to continue (Y/n)?"
3708     [ "$(echo ${REPLY:=Y} | tr [:upper:] [:lower:])" != "y" ] && exit
3709   fi
3710
3711   PRINT ""
3712   _do_compile_python=false
3713   if [ "$PYTHON_SKIP" = true ]; then
3714     WARNING "Skipping Python/NumPy installation, as requested..."
3715   elif [ "$PYTHON_FORCE_BUILD" = true ]; then
3716     INFO "Forced Python/NumPy building, as requested..."
3717     _do_compile_python=true
3718   fi
3719
3720   if [ "$_do_compile_python" = true ]; then
3721     compile_Python
3722     PRINT ""
3723     if [ "$NUMPY_SKIP" = true ]; then
3724       WARNING "Skipping NumPy installation, as requested..."
3725     else
3726       compile_Numpy
3727     fi
3728   fi
3729
3730
3731   PRINT ""
3732   if [ "$BOOST_SKIP" = true ]; then
3733     WARNING "Skipping Boost installation, as requested..."
3734   elif [ "$BOOST_FORCE_BUILD" = true ]; then
3735     INFO "Forced Boost building, as requested..."
3736     compile_Boost
3737   fi
3738
3739
3740   PRINT ""
3741   if [ "$OCIO_SKIP" = true ]; then
3742     WARNING "Skipping OpenColorIO installation, as requested..."
3743   elif [ "$OCIO_FORCE_BUILD" = true ]; then
3744     INFO "Forced OpenColorIO building, as requested..."
3745     compile_OCIO
3746   fi
3747
3748
3749   PRINT ""
3750   if [ "$OPENEXR_SKIP" = true ]; then
3751     WARNING "Skipping ILMBase/OpenEXR installation, as requested..."
3752   elif [ "$OPENEXR_FORCE_BUILD" = true ]; then
3753     INFO "Forced ILMBase/OpenEXR building, as requested..."
3754     compile_OPENEXR
3755   fi
3756
3757
3758   PRINT ""
3759   if [ "$OIIO_SKIP" = true ]; then
3760     WARNING "Skipping OpenImageIO installation, as requested..."
3761   elif [ "$OIIO_FORCE_BUILD" = true ]; then
3762     INFO "Forced OpenImageIO building, as requested..."
3763     compile_OIIO
3764   fi
3765
3766
3767   PRINT ""
3768   have_llvm=false
3769   _do_compile_llvm=false
3770   if [ "$LLVM_SKIP" = true ]; then
3771     WARNING "Skipping LLVM installation, as requested (this also implies skipping OSL!)..."
3772   elif [ "$LLVM_FORCE_BUILD" = true ]; then
3773     INFO "Forced LLVM building, as requested..."
3774     _do_compile_llvm=true
3775   fi
3776
3777   if [ "$_do_compile_llvm" = true ]; then
3778     install_packages_DEB libffi-dev