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