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