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