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