Install dependencies: disable OSL for now
[blender.git] / build_files / build_environment / install_deps.sh
1 #!/bin/bash
2
3 DISTRO=""
4 SRC="$HOME/src/blender-deps"
5 INST="/opt/lib"
6 CWD=$PWD
7
8 # OSL is horror for manual building even
9 # i would want it to be setteled for manual build first,
10 # and only then do it automatically
11 BUILD_OSL=false
12
13 THREADS=`cat /proc/cpuinfo | grep cores | uniq | sed -e "s/.*: *\(.*\)/\\1/"`
14
15 PYTHON_VERSION="3.3.0"
16 PYTHON_VERSION_MIN="3.3"
17 PYTHON_SOURCE="http://python.org/ftp/python/$PYTHON_VERSION/Python-$PYTHON_VERSION.tar.bz2"
18
19 BOOST_VERSION="1.51.0"
20 _boost_version_nodots=`echo "$BOOST_VERSION" | sed -r 's/\./_/g'`
21 BOOST_SOURCE="http://sourceforge.net/projects/boost/files/boost/$BOOST_VERSION/boost_$_boost_version_nodots.tar.bz2/download"
22 BOOST_VERSION_MIN="1.49"
23
24 OCIO_VERSION="1.0.7"
25 OCIO_SOURCE="https://github.com/imageworks/OpenColorIO/tarball/v$OCIO_VERSION"
26 OCIO_VERSION_MIN="1.0"
27
28 OIIO_VERSION="1.1.1"
29 OIIO_SOURCE="https://github.com/OpenImageIO/oiio/tarball/Release-$OIIO_VERSION"
30 OIIO_VERSION_MIN="1.1"
31
32 LLVM_VERSION="3.1"
33 LLVM_VERSION_MIN="3.0"
34
35 # OSL needs to be compiled for now!
36 OSL_VERSION="1.2.0"
37 OSL_SOURCE="https://github.com/mont29/OpenShadingLanguage/archive/blender-fixes.tar.gz"
38
39 FFMPEG_VERSION="1.0"
40 FFMPEG_SOURCE="http://ffmpeg.org/releases/ffmpeg-$FFMPEG_VERSION.tar.bz2"
41 FFMPEG_VERSION_MIN="0.7.6"
42 _ffmpeg_list_sep=";"
43
44 # FFMPEG optional libs.
45 VORBIS_USE=false
46 VORBIS_DEV=""
47 SCHRO_USE=false
48 SCRHO_DEV=""
49 THEORA_USE=false
50 THEORA_DEV=""
51 XVID_USE=false
52 XVID_DEV=""
53 X264_USE=false
54 X264_DEV=""
55 VPX_USE=false
56 VPX_VERSION_MIN=0.9.7
57 VPX_DEV=""
58 MP3LAME_USE=false
59 MP3LAME_DEV=""
60 OPENJPEG_USE=false
61 OPENJPEG_DEV=""
62
63 # Switch to english language, else some things (like check_package_DEB()) won't work!
64 LANG_BACK=$LANG
65 LANG=""
66 export LANG
67
68 ERROR() {
69   echo "${@}"
70 }
71
72 INFO() {
73   echo "${@}"
74 }
75
76 # Return 0 if $1 >= $2, else 1.
77 # $1 and $2 should be version numbers made of numbers only.
78 version_ge() {
79   if [ $(echo -e "$1\n$2" | sort --version-sort | head --lines=1) = "$1" ]; then
80     return 1
81   else
82     return 0
83   fi
84 }
85
86 # 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.
87 # $1 and $2 should be version numbers made of numbers only.
88 # $1 should be at least as long as $2!
89 version_match() {
90   backIFS=$IFS
91   IFS='.'
92
93   # Split both version numbers into their numeric elements.
94   arr1=( $1 )
95   arr2=( $2 )
96
97   ret=1
98
99   count1=${#arr1[@]}
100   count2=${#arr2[@]}
101   if [ $count1 -ge $count2 ]; then
102     ret=0
103     for (( i=0; $i < $count2; i++ ))
104     do
105       if [ $(( 10#${arr1[$i]} )) -ne $(( 10#${arr2[$i]} )) ]; then
106         ret=1
107         break
108       fi
109     done
110   fi
111
112   IFS=$backIFS
113   return $ret
114 }
115
116 detect_distro() {
117   if [ -f /etc/debian_version ]; then
118     DISTRO="DEB"
119   elif [ -f /etc/redhat-release ]; then
120     DISTRO="RPM"
121   elif [ -f /etc/SuSE-release ]; then
122     DISTRO="SUSE"
123   fi
124 }
125
126 prepare_opt() {
127   INFO "Ensuring $INST exists and is writable by us"
128   sudo mkdir -p $INST
129   sudo chown $USER $INST
130   sudo chmod 775 $INST
131 }
132
133 # Check whether the current package needs to be recompiled, based on a dummy file containing a magic number in its name...
134 magic_compile_check() {
135   if [ -f $INST/.$1-magiccheck-$2 ]; then
136     return 0
137   else
138     return 1
139   fi
140 }
141
142 magic_compile_set() {
143   rm -f $INST/.$1-magiccheck-*
144   touch $INST/.$1-magiccheck-$2
145 }
146
147 compile_Python() {
148   # To be changed each time we make edits that would modify the compiled result!
149   py_magic=0
150
151   _src=$SRC/Python-$PYTHON_VERSION
152   _inst=$INST/python-$PYTHON_VERSION
153
154   # Clean install if needed!
155   magic_compile_check python-$PYTHON_VERSION $py_magic
156   if [ $? -eq 1 ]; then
157     rm -rf $_inst
158   fi
159
160   if [ ! -d $_inst ]; then
161     INFO "Building Python-$PYTHON_VERSION"
162
163     prepare_opt
164
165     if [ ! -d $_src ]; then
166       mkdir -p $SRC
167       wget -c $PYTHON_SOURCE -O $_src.tar.bz2
168
169       INFO "Unpacking Python-$PYTHON_VERSION"
170       tar -C $SRC -xf $_src.tar.bz2
171     fi
172
173     cd $_src
174
175     ./configure --prefix=$_inst --enable-ipv6 \
176         --enable-loadable-sqlite-extensions --with-dbmliborder=bdb \
177         --with-computed-gotos --with-pymalloc
178
179     make -j$THREADS && make install
180     make clean
181
182     if [ -d $_inst ]; then
183       rm -f $INST/python-3.3
184       ln -s python-$PYTHON_VERSION $INST/python-3.3
185     fi
186
187     magic_compile_set python-$PYTHON_VERSION $py_magic
188
189     cd $CWD
190   else
191     INFO "Own Python-$PYTHON_VERSION is up to date, nothing to do!"
192     INFO "If you want to force rebuild of this lib, delete the '$_src' directory."
193   fi
194 }
195
196 compile_Boost() {
197   # To be changed each time we make edits that would modify the compiled result!
198   boost_magic=7
199
200   _src=$SRC/boost-$BOOST_VERSION
201   _inst=$INST/boost-$BOOST_VERSION
202
203   # Clean install if needed!
204   magic_compile_check boost-$BOOST_VERSION $boost_magic
205   if [ $? -eq 1 ]; then
206     rm -rf $_inst
207   fi
208
209   if [ ! -d $_inst ]; then
210     INFO "Building Boost-$BOOST_VERSION"
211
212     prepare_opt
213
214     if [ ! -d $_src ]; then
215       INFO "Downloading Boost-$BOOST_VERSION"
216       mkdir -p $SRC
217       wget -c $BOOST_SOURCE -O $_src.tar.bz2
218       tar -C $SRC --transform "s,(.*/?)boost_1_[^/]+(.*),\1boost-$BOOST_VERSION\2,x" -xf $_src.tar.bz2
219     fi
220
221     cd $_src
222     if [ ! -f $_src/b2 ]; then
223       ./bootstrap.sh
224     fi
225     ./b2 -j$THREADS -a --with-system --with-filesystem --with-thread --with-regex --with-locale --with-date_time \
226          --prefix=$_inst --disable-icu boost.locale.icu=off install
227     ./b2 --clean
228
229     if [ -d $_inst ]; then
230       rm -f $INST/boost
231       ln -s boost-$BOOST_VERSION $INST/boost
232     fi
233
234     magic_compile_set boost-$BOOST_VERSION $boost_magic
235
236     cd $CWD
237   else
238     INFO "Own Boost-$BOOST_VERSION is up to date, nothing to do!"
239     INFO "If you want to force rebuild of this lib, delete the '$_src' directory."
240   fi
241 }
242
243 compile_OCIO() {
244   # To be changed each time we make edits that would modify the compiled result!
245   ocio_magic=1
246
247   _src=$SRC/OpenColorIO-$OCIO_VERSION
248   _inst=$INST/ocio-$OCIO_VERSION
249
250   # Clean install if needed!
251   magic_compile_check ocio-$OCIO_VERSION $ocio_magic
252   if [ $? -eq 1 ]; then
253     rm -rf $_inst
254   fi
255
256   if [ ! -d $_inst ]; then
257     INFO "Building OpenColorIO-$OCIO_VERSION"
258
259     prepare_opt
260
261     if [ ! -d $_src ]; then
262       INFO "Downloading OpenColorIO-$OCIO_VERSION"
263       mkdir -p $SRC
264       wget -c $OCIO_SOURCE -O $_src.tar.gz
265
266       INFO "Unpacking OpenColorIO-$OCIO_VERSION"
267       tar -C $SRC --transform "s,(.*/?)imageworks-OpenColorIO[^/]*(.*),\1OpenColorIO-$OCIO_VERSION\2,x" \
268           -xf $_src.tar.gz
269     fi
270
271     cd $_src
272     # Always refresh the whole build!
273     if [ -d build ]; then
274       rm -rf build
275     fi    
276     mkdir build
277     cd build
278
279     if file /bin/cp | grep -q '32-bit'; then
280       cflags="-fPIC -m32 -march=i686"
281     else
282       cflags="-fPIC"
283     fi
284
285     cmake -D CMAKE_BUILD_TYPE=Release \
286           -D CMAKE_PREFIX_PATH=$_inst \
287           -D CMAKE_INSTALL_PREFIX=$_inst \
288           -D CMAKE_CXX_FLAGS="$cflags" \
289           -D CMAKE_EXE_LINKER_FLAGS="-lgcc_s -lgcc" \
290           ..
291
292     make -j$THREADS && make install
293
294     # Force linking against static libs
295     rm -f $_inst/lib/*.so*
296
297     # Additional depencencies
298     cp ext/dist/lib/libtinyxml.a $_inst/lib
299     cp ext/dist/lib/libyaml-cpp.a $_inst/lib
300
301     make clean
302
303     if [ -d $_inst ]; then
304       rm -f $INST/ocio
305       ln -s ocio-$OCIO_VERSION $INST/ocio
306     fi
307
308     magic_compile_set ocio-$OCIO_VERSION $ocio_magic
309
310     cd $CWD
311   else
312     INFO "Own OpenColorIO-$OCIO_VERSION is up to date, nothing to do!"
313     INFO "If you want to force rebuild of this lib, delete the '$_src' directory."
314   fi
315 }
316
317 compile_OIIO() {
318   # To be changed each time we make edits that would modify the compiled result!
319   oiio_magic=5
320
321   _src=$SRC/OpenImageIO-$OIIO_VERSION
322   _inst=$INST/oiio-$OIIO_VERSION
323
324   # Clean install if needed!
325   magic_compile_check oiio-$OIIO_VERSION $oiio_magic
326   if [ $? -eq 1 ]; then
327     rm -rf $_inst
328   fi
329
330   if [ ! -d $_inst ]; then
331     INFO "Building OpenImageIO-$OIIO_VERSION"
332
333     prepare_opt
334
335     if [ ! -d $_src ]; then
336       wget -c $OIIO_SOURCE -O "$_src.tar.gz"
337
338       INFO "Unpacking OpenImageIO-$OIIO_VERSION"
339       tar -C $SRC --transform "s,(.*/?)OpenImageIO-oiio[^/]*(.*),\1OpenImageIO-$OIIO_VERSION\2,x" \
340           -xf $_src.tar.gz
341     fi
342
343     cd $_src
344     # Always refresh the whole build!
345     if [ -d build ]; then
346       rm -rf build
347     fi    
348     mkdir build
349     cd build
350
351     cmake_d="-D CMAKE_BUILD_TYPE=Release \
352              -D CMAKE_PREFIX_PATH=$_inst \
353              -D CMAKE_INSTALL_PREFIX=$_inst \
354              -D BUILDSTATIC=ON"
355
356     if [ -d $INST/boost ]; then
357       cmake_d="$cmake_d -D BOOST_ROOT=$INST/boost -D Boost_NO_SYSTEM_PATHS=ON"
358     fi
359
360     # Looks like we do not need ocio in oiio for now...
361 #    if [ -d $INST/ocio ]; then
362 #      cmake_d="$cmake_d -D OCIO_PATH=$INST/ocio"
363 #    fi
364
365     if file /bin/cp | grep -q '32-bit'; then
366       cflags="-fPIC -m32 -march=i686"
367     else
368       cflags="-fPIC"
369     fi
370
371     cmake $cmake_d -D CMAKE_CXX_FLAGS="$cflags" -D CMAKE_EXE_LINKER_FLAGS="-lgcc_s -lgcc" ../src
372
373     make -j$THREADS && make install
374     make clean
375
376     if [ -d $_inst ]; then
377       rm -f $INST/oiio
378       ln -s oiio-$OIIO_VERSION $INST/oiio
379     fi
380
381     magic_compile_set oiio-$OIIO_VERSION $oiio_magic
382
383     cd $CWD
384   else
385     INFO "Own OpenImageIO-$OIIO_VERSION is up to date, nothing to do!"
386     INFO "If you want to force rebuild of this lib, delete the '$_src' directory."
387   fi
388 }
389
390 compile_OSL() {
391   # To be changed each time we make edits that would modify the compiled result!
392   osl_magic=4
393
394   _src=$SRC/OpenShadingLanguage-$OSL_VERSION
395   _inst=$INST/osl-$OSL_VERSION
396
397   # Clean install if needed!
398   magic_compile_check osl-$OSL_VERSION $osl_magic
399   if [ $? -eq 1 ]; then
400     rm -rf $_inst
401   fi
402
403   if [ ! -d $_inst ]; then
404     INFO "Building OpenShadingLanguage-$OSL_VERSION"
405
406     prepare_opt
407
408     if [ ! -d $_src ]; then
409       # XXX Using git on my own repo for now, looks like archives are not updated immediately... :/
410 #      wget -c $OSL_SOURCE -O "$_src.tar.gz"
411
412 #      INFO "Unpacking OpenShadingLanguage-$OSL_VERSION"
413 #      tar -C $SRC --transform "s,(.*/?)OpenShadingLanguage-[^/]*(.*),\1OpenShadingLanguage-$OSL_VERSION\2,x" \
414 #          -xf $_src.tar.gz
415       git clone https://github.com/mont29/OpenShadingLanguage.git $_src
416       cd $_src
417       git checkout blender-fixes
418       cd $CWD
419     fi
420
421     cd $_src
422     # XXX For now, always update from latest repo...
423     git checkout .
424
425     # Always refresh the whole build!
426     if [ -d build ]; then
427       rm -rf build
428     fi    
429     mkdir build
430     cd build
431
432     cmake_d="-D CMAKE_BUILD_TYPE=Release \
433              -D CMAKE_INSTALL_PREFIX=$_inst
434              -D BUILDSTATIC=ON \
435              -D BUILD_TESTING=OFF"
436
437     if [ -d $INST/boost ]; then
438       cmake_d="$cmake_d -D BOOST_ROOT=$INST/boost"
439     fi
440
441     if [ -d $INST/oiio ]; then
442       cmake_d="$cmake_d -D OPENIMAGEIOHOME=$INST/oiio"
443     fi
444
445     cmake $cmake_d ../src
446
447     make -j$THREADS && make install
448     make clean
449
450     if [ -d $_inst ]; then
451       rm -f $INST/osl
452       ln -s osl-$OSL_VERSION $INST/osl
453     fi
454
455     magic_compile_set osl-$OSL_VERSION $osl_magic
456
457     cd $CWD
458   else
459     INFO "Own OpenShadingLanguage-$OSL_VERSION is up to date, nothing to do!"
460     INFO "If you want to force rebuild of this lib, delete the '$_src' directory."
461   fi
462 }
463
464 compile_FFmpeg() {
465   # To be changed each time we make edits that would modify the compiled result!
466   ffmpeg_magic=0
467
468   _src=$SRC/ffmpeg-$FFMPEG_VERSION
469   _inst=$INST/ffmpeg-$FFMPEG_VERSION
470
471   # Clean install if needed!
472   magic_compile_check ffmpeg-$FFMPEG_VERSION $ffmpeg_magic
473   if [ $? -eq 1 ]; then
474     rm -rf $_inst
475   fi
476
477   if [ ! -d $_inst ]; then
478     INFO "Building ffmpeg-$FFMPEG_VERSION"
479
480     prepare_opt
481
482     if [ ! -d $_src ]; then
483       INFO "Downloading ffmpeg-$FFMPEG_VERSION"
484       wget -c $FFMPEG_SOURCE -O "$_src.tar.bz2"
485
486       INFO "Unpacking ffmpeg-$FFMPEG_VERSION"
487       tar -C $SRC -xf $_src.tar.bz2
488     fi
489
490     cd $_src
491
492     extra=""
493
494     if $VORBIS_USE; then
495       extra="$extra --enable-libvorbis"
496     fi
497
498     if $THEORA_USE; then
499       extra="$extra --enable-libtheora"
500     fi
501
502     if $SCHRO_USE; then
503       extra="$extra --enable-libschroedinger"
504     fi
505
506     if $XVID_USE; then
507       extra="$extra --enable-libxvid"
508     fi
509
510     if $X264_USE; then
511       extra="$extra --enable-libx264"
512     fi
513
514     if $VPX_USE; then
515       extra="$extra --enable-libvpx"
516     fi
517
518     if $MP3LAME_USE; then
519       extra="$extra --enable-libmp3lame"
520     fi
521
522     if $OPENJPEG_USE; then
523       extra="$extra --enable-libopenjpeg"
524     fi
525
526     ./configure --cc="gcc -Wl,--as-needed" --extra-ldflags="-pthread -static-libgcc" \
527         --prefix=$_inst --enable-static --enable-avfilter --disable-vdpau \
528         --disable-bzlib --disable-libgsm --disable-libspeex \
529         --enable-pthreads --enable-zlib --enable-stripping --enable-runtime-cpudetect \
530         --disable-vaapi  --disable-libfaac --disable-nonfree --enable-gpl \
531         --disable-postproc --disable-x11grab  --disable-librtmp  --disable-libopencore-amrnb \
532         --disable-libopencore-amrwb --disable-libdc1394 --disable-version3  --disable-outdev=sdl \
533         --disable-outdev=alsa --disable-indev=sdl --disable-indev=alsa --disable-indev=jack \
534         --disable-indev=lavfi $extra
535
536     make -j$THREADS && make install
537     make clean
538
539     if [ -d $_inst ]; then
540       rm -f $INST/ffmpeg
541       ln -s ffmpeg-$FFMPEG_VERSION $INST/ffmpeg
542     fi
543
544     magic_compile_set ffmpeg-$FFMPEG_VERSION $ffmpeg_magic
545
546     cd $CWD
547   else
548     INFO "Own ffmpeg-$FFMPEG_VERSION is up to date, nothing to do!"
549     INFO "If you want to force rebuild of this lib, delete the '$_src' directory."
550   fi
551 }
552
553 deb_version() {
554     dpkg-query -W -f '${Version}' $1 | sed -r 's/^([0-9]\.[0-9]+).*/\1/'
555 }
556
557 check_package_DEB() {
558   r=`apt-cache policy $1 | grep -c 'Candidate:'`
559
560   if [ $r -ge 1 ]; then
561     return 0
562   else
563     return 1
564   fi
565 }
566
567 check_package_version_match_DEB() {
568   v=`apt-cache policy $1 | grep 'Candidate:' | sed -r 's/.*:\s*(([0-9]+\.?)+).*/\1/'`
569
570   if [ -z "$v" ]; then
571     return 1
572   fi
573
574   version_match $v $2
575   return $?
576 }
577
578 check_package_version_ge_DEB() {
579   v=`apt-cache policy $1 | grep 'Candidate:' | sed -r 's/.*:\s*(([0-9]+\.?)+).*/\1/'`
580
581   if [ -z "$v" ]; then
582     return 1
583   fi
584
585   version_ge $v $2
586   return $?
587 }
588
589 install_DEB() {
590   INFO "Installing dependencies for DEB-based distribution"
591   INFO "Source code of dependencies needed to be compiled will be downloaded and extracted into $SRC"
592   INFO "Built libs of dependencies needed to be compiled will be installed into $INST"
593   INFO "Please edit \$SRC and/or \$INST variables at the begining of this script if you want to use other paths!"
594
595   sudo apt-get update
596 # XXX Why in hell? Let's let this stuff to the user's responsability!!!
597 #  sudo apt-get -y upgrade
598
599   # These libs should always be available in debian/ubuntu official repository...
600   OPENJPEG_DEV="libopenjpeg-dev"
601   SCHRO_DEV="libschroedinger-dev"
602   VORBIS_DEV="libvorbis-dev"
603   THEORA_DEV="libtheora-dev"
604
605   sudo apt-get install -y cmake scons gcc g++ libjpeg-dev libpng-dev libtiff-dev \
606     libfreetype6-dev libx11-dev libxi-dev wget libsqlite3-dev libbz2-dev libncurses5-dev \
607     libssl-dev liblzma-dev libreadline-dev $OPENJPEG_DEV libopenexr-dev libopenal-dev \
608     libglew-dev yasm $SCHRO_DEV $THEORA_DEV $VORBIS_DEV libsdl1.2-dev \
609     libfftw3-dev libjack-dev python-dev patch flex bison libtbb-dev git
610
611   OPENJPEG_USE=true
612   SCHRO_USE=true
613   VORBIS_USE=true
614   THEORA_USE=true
615
616   # Grmpf, debian is libxvidcore-dev and ubuntu libxvidcore4-dev!
617   XVID_DEV="libxvidcore-dev"
618   check_package_DEB $XVID_DEV
619   if [ $? -eq 0 ]; then
620     sudo apt-get install -y $XVID_DEV
621     XVID_USE=true
622   else
623     XVID_DEV="libxvidcore4-dev"
624     check_package_DEB $XVID_DEV
625     if [ $? -eq 0 ]; then
626       sudo apt-get install -y $XVID_DEV
627       XVID_USE=true
628     fi
629   fi
630
631   MP3LAME_DEV="libmp3lame-dev"
632   check_package_DEB $MP3LAME_DEV
633   if [ $? -eq 0 ]; then
634     sudo apt-get install -y $MP3LAME_DEV
635     MP3LAME_USE=true
636   fi
637
638   X264_DEV="libx264-dev"
639   check_package_DEB $X264_DEV
640   if [ $? -eq 0 ]; then
641     sudo apt-get install -y $X264_DEV
642     X264_USE=true
643   fi
644
645   VPX_DEV="libvpx-dev"
646   check_package_version_ge_DEB $VPX_DEV $VPX_VERSION_MIN
647   if [ $? -eq 0 ]; then
648     sudo apt-get install -y $VPX_DEV
649     VPX_USE=true
650   fi
651
652   check_package_DEB libspnav-dev
653   if [ $? -eq 0 ]; then
654     sudo apt-get install -y libspnav-dev
655   fi
656
657   check_package_DEB python3.3-dev
658   if [ $? -eq 0 ]; then
659     sudo apt-get install -y python3.3-dev
660   else
661     compile_Python
662   fi
663
664   check_package_version_ge_DEB libboost-dev $BOOST_VERSION_MIN
665   if [ $? -eq 0 ]; then
666     sudo apt-get install -y libboost-dev
667
668     boost_version=`deb_version libboost-dev`
669
670     check_package_DEB libboost-locale$boost_version-dev
671     if [ $? -eq 0 ]; then
672       sudo apt-get install -y libboost-locale$boost_version-dev libboost-filesystem$boost_version-dev \
673                               libboost-regex$boost_version-dev libboost-system$boost_version-dev \
674                               libboost-thread$boost_version-dev
675     else
676       compile_Boost
677     fi
678   else
679     compile_Boost
680   fi
681
682   check_package_version_ge_DEB libopencolorio-dev $OCIO_VERSION_MIN
683   if [ $? -eq 0 ]; then
684     sudo apt-get install -y libopencolorio-dev
685   else
686     compile_OCIO
687   fi
688
689   check_package_version_ge_DEB libopenimageio-dev $OIIO_VERSION_MIN
690   if [ $? -eq 0 ]; then
691     sudo apt-get install -y libopenimageio-dev
692   else
693     compile_OIIO
694   fi
695
696   if $BUILD_OSL; then
697     have_llvm=false
698
699     check_package_DEB llvm-$LLVM_VERSION-dev
700     if [ $? -eq 0 ]; then
701       sudo apt-get install -y llvm-$LLVM_VERSION-dev clang
702       have_llvm=true
703     else
704       check_package_DEB llvm-$LLVM_VERSION_MIN-dev
705       if [ $? -eq 0 ]; then
706         sudo apt-get install -y llvm-$LLVM_VERSION_MIN-dev clang
707         have_llvm=true
708       fi
709     fi
710
711     if $have_llvm; then
712       # No package currently!
713       compile_OSL
714     fi
715   fi
716
717 #  XXX Debian features libav packages as ffmpeg, those are not really compatible with blender code currently :/
718 #      So for now, always build our own ffmpeg.
719 #  check_package_DEB ffmpeg
720 #  if [ $? -eq 0 ]; then
721 #    sudo apt-get install -y ffmpeg
722 #    ffmpeg_version=`deb_version ffmpeg`
723 #    INFO "ffmpeg version: $ffmpeg_version"
724 #    if [ ! -z "$ffmpeg_version" ]; then
725 #      if  dpkg --compare-versions $ffmpeg_version gt 0.7.2; then
726 #        sudo apt-get install -y libavfilter-dev libavcodec-dev libavdevice-dev libavformat-dev libavutil-dev libswscale-dev
727 #      else
728 #        compile_FFmpeg
729 #      fi
730 #    fi
731 #  fi
732   compile_FFmpeg
733 }
734
735 check_package_RPM() {
736   r=`yum info $1 | grep -c 'Summary'`
737
738   if [ $r -ge 1 ]; then
739     return 0
740   else
741     return 1
742   fi
743 }
744
745 check_package_version_match_RPM() {
746   v=`yum info $1 | grep Version | tail -n 1 | sed -r 's/.*:\s+(([0-9]+\.?)+).*/\1/'`
747
748   if [ -z "$v" ]; then
749     return 1
750   fi
751
752   version_match $v $2
753   return $?
754 }
755
756 check_package_version_ge_RPM() {
757   v=`yum info $1 | grep Version | tail -n 1 | sed -r 's/.*:\s+(([0-9]+\.?)+).*/\1/'`
758
759   if [ -z "$v" ]; then
760     return 1
761   fi
762
763   version_ge $v $2
764   return $?
765 }
766
767 install_RPM() {
768   INFO "Installing dependencies for RPM-based distribution"
769   INFO "Source code of dependencies needed to be compiled will be downloaded and extracted into $SRC"
770   INFO "Built libs of dependencies needed to be compiled will be installed into $INST"
771   INFO "Please edit \$SRC and/or \$INST variables at the begining of this script if you want to use other paths!"
772
773   sudo yum -y update
774
775   sudo yum -y install gcc gcc-c++ cmake scons libpng-devel libtiff-devel \
776     freetype-devel libX11-devel libXi-devel wget libsqlite3x-devel ncurses-devel \
777     readline-devel openjpeg-devel openexr-devel openal-soft-devel \
778     glew-devel yasm schroedinger-devel libtheora-devel libvorbis-devel SDL-devel \
779     fftw-devel lame-libs jack-audio-connection-kit-devel libspnav-devel \
780     libjpeg-devel patch python-devel
781
782   OPENJPEG_USE=true
783   SCHRO_USE=true
784
785   check_package_RPM x264-devel
786   if [ $? -eq 0 ]; then
787     sudo yum install -y x264-devel
788     X264_USE=true
789   fi
790
791   check_package_RPM xvidcore-devel
792   if [ $? -eq 0 ]; then
793     sudo yum install -y xvidcore-devel
794     XVID_USE=true
795     XVID_DEV="xvidcore-devel"
796   fi
797
798   check_package_version_ge_RPM libvpx-devel 0.9.7
799   if [ $? -eq 0 ]; then
800     sudo yum install -y libvpx-devel
801     VPX_USE=true
802   fi
803
804   check_package_RPM lame-devel
805   if [ $? -eq 0 ]; then
806     sudo yum install -y lame-devel
807     MP3LAME_USE=true
808   fi
809
810   check_package_version_match_RPM python3-devel 3.3
811   if [ $? -eq 0 ]; then
812     sudo yum install -y python-devel
813   else
814     compile_Python
815   fi
816
817   check_package_RPM boost-devel
818   if [ $? -eq 0 ]; then
819     sudo yum install -y boost-devel
820   else
821     compile_Boost
822   fi
823
824   check_package_RPM OpenColorIO-devel
825   if [ $? -eq 0 ]; then
826     sudo yum install -y OpenColorIO-devel
827   else
828     compile_OCIO
829   fi
830
831   check_package_RPM OpenImageIO-devel
832   if [ $? -eq 0 ]; then
833     sudo yum install -y OpenImageIO-devel
834   else
835     compile_OIIO
836   fi
837
838   # Always for now, not sure which packages should be installed
839   compile_FFmpeg
840 }
841
842 check_package_SUSE() {
843   r=`zypper info $1 | grep -c 'Summary'`
844
845   if [ $r -ge 1 ]; then
846     return 0
847   else
848     return 1
849   fi
850 }
851
852 check_package_version_SUSE() {
853   v=`zypper info $1 | grep Version | tail -n 1 | sed -r 's/.*:\s+(([0-9]+\.?)+).*/\1/'`
854
855   # for now major and minor versions only (as if x.y, not x.y.z)
856   r=`echo $v | grep -c $2`
857
858   if [ $r -ge 1 ]; then
859     return 0
860   else
861     return 1
862   fi
863 }
864
865 install_SUSE() {
866   INFO "Installing dependencies for SuSE-based distribution"
867   INFO "Source code of dependencies needed to be compiled will be downloaded and extracted into $SRC"
868   INFO "Built libs of dependencies needed to be compiled will be installed into $INST"
869   INFO "Please edit \$SRC and/or \$INST variables at the begining of this script if you want to use other paths!"
870
871   sudo zypper --non-interactive update --auto-agree-with-licenses
872
873   sudo zypper --non-interactive install --auto-agree-with-licenses \
874     gcc gcc-c++ libSDL-devel openal-soft-devel libpng12-devel libjpeg62-devel \
875     libtiff-devel OpenEXR-devel yasm libtheora-devel libvorbis-devel cmake \
876     scons patch
877
878   check_package_version_SUSE python3-devel 3.3.
879   if [ $? -eq 0 ]; then
880     sudo zypper --non-interactive install --auto-agree-with-licenses python3-devel
881   else
882     compile_Python
883   fi
884
885   # can not see boost_locale in repo, so let's build own boost
886   compile_Boost
887
888   # this libraries are also missing in the repo
889   compile_OCIO
890   compile_OIIO
891   compile_FFmpeg
892 }
893
894 print_info_ffmpeglink_DEB() {
895   _packages="libtheora-dev"
896
897   if $XVID_USE; then
898     _packages="$_packages $XVID_DEV"
899   fi
900
901   if $VPX_USE; then
902     _packages="$_packages libvpx-dev"
903   fi
904
905   if $MP3LAME_USE; then
906     _packages="$_packages libmp3lame-dev"
907   fi
908
909   if $X264_USE; then
910     _packages="$_packages libx264-dev"
911   fi
912
913   if $OPENJPEG_USE; then
914     _packages="$_packages libopenjpeg-dev"
915   fi
916
917   if $SCHRO_USE; then
918     _packages="$_packages libschroedinger-dev"
919   fi
920
921   dpkg -L $_packages | grep -e ".*\/lib[^\/]\+\.so" | awk '{ printf(nlines ? "'"$_ffmpeg_list_sep"'%s" : "%s", gensub(/.*lib([^\/]+)\.so/, "\\1", "g", $0)); nlines++ }'
922 }
923
924 print_info_ffmpeglink_RPM() {
925   _packages="libtheora-devel libvorbis-devel"
926
927   if $XVID_USE; then
928     _packages="$_packages $XVID_DEV"
929   fi
930
931   if $VPX_USE; then
932     _packages="$_packages libvpx-devel"
933   fi
934
935   if $MP3LAME_USE; then
936     _packages="$_packages lame-devel"
937   fi
938
939   if $X264_USE; then
940     _packages="$_packages x264-devel"
941   fi
942
943   if $OPENJPEG_USE; then
944     _packages="$_packages openjpeg-devel"
945   fi
946
947   if $SCHRO_USE; then
948     _packages="$_packages schroedinger-devel"
949   fi
950
951   rpm -ql $_packages | grep -e ".*\/lib[^\/]\+\.so" | awk '{ printf(nlines ? "'"$_ffmpeg_list_sep"'%s" : "%s", gensub(/.*lib([^\/]+)\.so/, "\\1", "g", $0)); nlines++ }'
952 }
953
954 print_info_ffmpeglink() {
955   # This func must only print a ';'-separated list of libs...
956   if [ -z "$DISTRO" ]; then
957     ERROR "Failed to detect distribution type"
958     exit 1
959   elif [ "$DISTRO" = "DEB" ]; then
960     print_info_ffmpeglink_DEB
961   elif [ "$DISTRO" = "RPM" ]; then
962     print_info_ffmpeglink_RPM
963   # XXX TODO!
964   else INFO "<Could not determine additional link libraries needed for ffmpeg, replace this by valid list of libs...>"
965 #  elif [ "$DISTRO" = "SUSE" ]; then
966 #    print_info_ffmpeglink_SUSE
967   fi
968 }
969
970 print_info() {
971   INFO ""
972   INFO "If you're using CMake add this to your configuration flags:"
973
974   if [ -d $INST/boost ]; then
975     INFO "  -D BOOST_ROOT=$INST/boost"
976     INFO "  -D Boost_NO_SYSTEM_PATHS=ON"
977   fi
978
979   if [ -d $INST/osl ]; then
980     INFO "  -D CYCLES_OSL=$INST/osl"
981     INFO "  -D WITH_CYCLES_OSL=ON"
982   fi
983
984   if [ -d $INST/ffmpeg ]; then
985     INFO "  -D WITH_CODEC_FFMPEG=ON"
986     INFO "  -D FFMPEG=$INST/ffmpeg"
987     INFO "  -D FFMPEG_LIBRARIES='avformat;avcodec;avutil;avdevice;swscale;rt;`print_info_ffmpeglink`'"
988   fi
989
990   INFO ""
991   INFO "If you're using SCons add this to your user-config:"
992
993   if [ -d $INST/python-3.3 ]; then
994     INFO "BF_PYTHON='$INST/python-3.3'"
995     INFO "BF_PYTHON_ABI_FLAGS='m'"
996   fi
997
998   if [ -d $INST/ocio ]; then
999     INFO "BF_OCIO='$INST/ocio'"
1000   fi
1001
1002   if [ -d $INST/oiio ]; then
1003     INFO "BF_OIIO='$INST/oiio'"
1004   fi
1005
1006   if [ -d $INST/boost ]; then
1007     INFO "BF_BOOST='$INST/boost'"
1008   fi
1009
1010   if [ -d $INST/ffmpeg ]; then
1011     INFO "BF_FFMPEG='$INST/ffmpeg'"
1012     _ffmpeg_list_sep=" "
1013     INFO "BF_FFMPEG_LIB='avformat avcodec swscale avutil avdevice `print_info_ffmpeglink`'"
1014   fi
1015 }
1016
1017 # Detect distributive type used on this machine
1018 detect_distro
1019
1020 if [ -z "$DISTRO" ]; then
1021   ERROR "Failed to detect distribution type"
1022   exit 1
1023 elif [ "$DISTRO" = "DEB" ]; then
1024   install_DEB
1025 elif [ "$DISTRO" = "RPM" ]; then
1026   install_RPM
1027 elif [ "$DISTRO" = "SUSE" ]; then
1028   install_SUSE
1029 fi
1030
1031 print_info
1032
1033 # Switch back to user language.
1034 LANG=LANG_BACK
1035 export LANG