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