Another nuch of fixes/improvements to install_deps script, among which:
[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.0"
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/DingTo/OpenShadingLanguage/archive/blender-fixes.zip"
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   # Clean install if needed!
147   magic_compile_check python-$PYTHON_VERSION $py_magic
148   if [ $? -eq 1 ]; then
149     rm -rf $INST/python-$PYTHON_VERSION
150   fi
151
152   if [ ! -d $INST/python-$PYTHON_VERSION ]; then
153     INFO "Building Python-$PYTHON_VERSION"
154
155     prepare_opt
156
157     if [ ! -d $SRC/Python-$PYTHON_VERSION ]; then
158       mkdir -p $SRC
159       wget -c $PYTHON_SOURCE -P $SRC
160
161       INFO "Unpacking Python-$PYTHON_VERSION"
162       tar -C $SRC -xf $SRC/Python-$PYTHON_VERSION.tar.bz2
163     fi
164
165     cd $SRC/Python-$PYTHON_VERSION
166
167     ./configure --prefix=$INST/python-$PYTHON_VERSION --enable-ipv6 \
168         --enable-loadable-sqlite-extensions --with-dbmliborder=bdb \
169         --with-computed-gotos --with-pymalloc
170
171     make -j$THREADS
172     make install
173     make clean
174
175     rm -f $INST/python-3.3
176     ln -s python-$PYTHON_VERSION $INST/python-3.3
177
178     magic_compile_set python-$PYTHON_VERSION $py_magic
179
180     cd $CWD
181   else
182     INFO "Own Python-$PYTHON_VERSION is up to date, nothing to do!"
183   fi
184 }
185
186 compile_Boost() {
187   # To be changed each time we make edits that would modify the compiled result!
188   boost_magic=7
189
190   # Clean install if needed!
191   magic_compile_check boost-$BOOST_VERSION $boost_magic
192   if [ $? -eq 1 ]; then
193     rm -rf $INST/boost-$BOOST_VERSION
194   fi
195
196   if [ ! -d $INST/boost-$BOOST_VERSION ]; then
197     INFO "Building Boost-$BOOST_VERSION"
198
199     prepare_opt
200
201     if [ ! -d $SRC/boost-$BOOST_VERSION ]; then
202       INFO "Downloading Boost-$BOOST_VERSION"
203       mkdir -p $SRC
204       wget -c $BOOST_SOURCE -O $SRC/boost-$BOOST_VERSION.tar.bz2
205       tar -C $SRC --transform "s,(.*/?)boost_1_[^/]+(.*),\1boost-$BOOST_VERSION\2,x" -xf $SRC/boost-$BOOST_VERSION.tar.bz2
206     fi
207
208     cd $SRC/boost-$BOOST_VERSION
209     if [ ! -f $SRC/boost-$BOOST_VERSION/b2 ]; then
210       ./bootstrap.sh
211     fi
212     ./b2 -j$THREADS -a --with-system --with_filesystem --with-thread --with-regex --with-locale --with-date_time \
213          --prefix=$INST/boost-$BOOST_VERSION --disable-icu boost.locale.icu=off install
214     ./b2 --clean
215
216     rm -f $INST/boost
217     ln -s boost-$BOOST_VERSION $INST/boost
218
219     magic_compile_set boost-$BOOST_VERSION $boost_magic
220
221     cd $CWD
222   else
223     INFO "Own Boost-$BOOST_VERSION is up to date, nothing to do!"
224   fi
225 }
226
227 compile_OCIO() {
228   # To be changed each time we make edits that would modify the compiled result!
229   ocio_magic=1
230
231   # Clean install if needed!
232   magic_compile_check ocio-$OCIO_VERSION $ocio_magic
233   if [ $? -eq 1 ]; then
234     rm -rf $INST/ocio-$OCIO_VERSION
235   fi
236
237   if [ ! -d $INST/ocio-$OCIO_VERSION ]; then
238     INFO "Building OpenColorIO-$OCIO_VERSION"
239
240     prepare_opt
241
242     if [ ! -d $SRC/OpenColorIO-$OCIO_VERSION ]; then
243       INFO "Downloading OpenColorIO-$OCIO_VERSION"
244       mkdir -p $SRC
245       wget -c $OCIO_SOURCE -O $SRC/OpenColorIO-$OCIO_VERSION.tar.gz
246
247       INFO "Unpacking OpenColorIO-$OCIO_VERSION"
248       tar -C $SRC --transform "s,(.*/?)imageworks-OpenColorIO[^/]*(.*),\1OpenColorIO-$OCIO_VERSION\2,x" \
249           -xf $SRC/OpenColorIO-$OCIO_VERSION.tar.gz
250     fi
251
252     cd $SRC/OpenColorIO-$OCIO_VERSION
253     # Always refresh the whole build!
254     if [ -d build ]; then
255       rm -rf build
256     fi    
257     mkdir build
258     cd build
259
260     if file /bin/cp | grep -q '32-bit'; then
261       cflags="-fPIC -m32 -march=i686"
262     else
263       cflags="-fPIC"
264     fi
265
266     cmake -D CMAKE_BUILD_TYPE=Release \
267         -D CMAKE_PREFIX_PATH=$INST/ocio-$OCIO_VERSION \
268         -D CMAKE_INSTALL_PREFIX=$INST/ocio-$OCIO_VERSION \
269         -D CMAKE_CXX_FLAGS="$cflags" \
270         -D CMAKE_EXE_LINKER_FLAGS="-lgcc_s -lgcc" \
271         ..
272
273     make -j$THREADS
274     make install
275
276     # Force linking against static libs
277     rm -f $INST/ocio-$OCIO_VERSION/lib/*.so*
278
279     # Additional depencencies
280     cp ext/dist/lib/libtinyxml.a $INST/ocio-$OCIO_VERSION/lib
281     cp ext/dist/lib/libyaml-cpp.a $INST/ocio-$OCIO_VERSION/lib
282
283     make clean
284
285     rm -f $INST/ocio
286     ln -s ocio-$OCIO_VERSION $INST/ocio
287
288     magic_compile_set ocio-$OCIO_VERSION $ocio_magic
289
290     cd $CWD
291   else
292     INFO "Own OpenColorIO-$OCIO_VERSION is up to date, nothing to do!"
293   fi
294 }
295
296 compile_OIIO() {
297   # To be changed each time we make edits that would modify the compiled result!
298   oiio_magic=1
299
300   # Clean install if needed!
301   magic_compile_check oiio-$OIIO_VERSION $oiio_magic
302   if [ $? -eq 1 ]; then
303     rm -rf $INST/oiio-$OIIO_VERSION
304   fi
305
306   if [ ! -d $INST/oiio-$OIIO_VERSION ]; then
307     INFO "Building OpenImageIO-$OIIO_VERSION"
308
309     prepare_opt
310
311     if [ ! -d $SRC/OpenImageIO-$OIIO_VERSION ]; then
312       wget -c $OIIO_SOURCE -O "$SRC/OpenImageIO-$OIIO_VERSION.tar.gz"
313
314       INFO "Unpacking OpenImageIO-$OIIO_VERSION"
315       tar -C $SRC --transform "s,(.*/?)OpenImageIO-oiio[^/]*(.*),\1OpenImageIO-$OIIO_VERSION\2,x" \
316           -xf $SRC/OpenImageIO-$OIIO_VERSION.tar.gz
317     fi
318
319     cd $SRC/OpenImageIO-$OIIO_VERSION
320     # Always refresh the whole build!
321     if [ -d build ]; then
322       rm -rf build
323     fi    
324     mkdir build
325     cd build
326
327     if [ -d $INST/boost ]; then
328       boost_root="$INST/boost"
329     else
330       boost_root="/usr"
331     fi
332
333     if file /bin/cp | grep -q '32-bit'; then
334       cflags="-fPIC -m32 -march=i686"
335     else
336       cflags="-fPIC"
337     fi
338
339     cmake -D CMAKE_BUILD_TYPE=Release \
340           -D CMAKE_PREFIX_PATH=$INST/oiio-$OIIO_VERSION \
341           -D CMAKE_INSTALL_PREFIX=$INST/oiio-$OIIO_VERSION \
342           -D BUILDSTATIC=ON \
343           -D CMAKE_CXX_FLAGS="$cflags" \
344           -D CMAKE_EXE_LINKER_FLAGS="-lgcc_s -lgcc" \
345           -D BOOST_ROOT="$boost_root" \
346           ../src
347
348     make -j$THREADS
349     make install
350     make clean
351
352     rm -f $INST/oiio
353     ln -s oiio-$OIIO_VERSION $INST/oiio
354
355     magic_compile_set oiio-$OIIO_VERSION $oiio_magic
356
357     cd $CWD
358   else
359     INFO "Own OpenImageIO-$OIIO_VERSION is up to date, nothing to do!"
360   fi
361 }
362
363 compile_FFmpeg() {
364   # To be changed each time we make edits that would modify the compiled result!
365   ffmpeg_magic=0
366
367   # Clean install if needed!
368   magic_compile_check ffmpeg-$FFMPEG_VERSION $ffmpeg_magic
369   if [ $? -eq 1 ]; then
370     rm -rf $INST/ffmpeg-$FFMPEG_VERSION
371   fi
372
373   if [ ! -d $INST/ffmpeg-$FFMPEG_VERSION ]; then
374     INFO "Building ffmpeg-$FFMPEG_VERSION"
375
376     prepare_opt
377
378     if [ ! -d $SRC/ffmpeg-$FFMPEG_VERSION ]; then
379       INFO "Downloading ffmpeg-$FFMPEG_VERSION"
380       wget -c $FFMPEG_SOURCE -P $SRC
381
382       INFO "Unpacking ffmpeg-$FFMPEG_VERSION"
383       tar -C $SRC -xf $SRC/ffmpeg-$FFMPEG_VERSION.tar.bz2
384     fi
385
386     cd $SRC/ffmpeg-$FFMPEG_VERSION
387
388     extra=""
389
390     if $VORBIS_USE; then
391       extra="$extra --enable-libvorbis"
392     fi
393
394     if $THEORA_USE; then
395       extra="$extra --enable-libtheora"
396     fi
397
398     if $SCHRO_USE; then
399       extra="$extra --enable-libschroedinger"
400     fi
401
402     if $XVID_USE; then
403       extra="$extra --enable-libxvid"
404     fi
405
406     if $X264_USE; then
407       extra="$extra --enable-libx264"
408     fi
409
410     if $VPX_USE; then
411       extra="$extra --enable-libvpx"
412     fi
413
414     if $MP3LAME_USE; then
415       extra="$extra --enable-libmp3lame"
416     fi
417
418     if $OPENJPEG_USE; then
419       extra="$extra --enable-libopenjpeg"
420     fi
421
422     ./configure --cc="gcc -Wl,--as-needed" --extra-ldflags="-pthread -static-libgcc" \
423         --prefix=$INST/ffmpeg-$FFMPEG_VERSION --enable-static --enable-avfilter --disable-vdpau \
424         --disable-bzlib --disable-libgsm --disable-libspeex \
425         --enable-pthreads --enable-zlib --enable-stripping --enable-runtime-cpudetect \
426         --disable-vaapi  --disable-libfaac --disable-nonfree --enable-gpl \
427         --disable-postproc --disable-x11grab  --disable-librtmp  --disable-libopencore-amrnb \
428         --disable-libopencore-amrwb --disable-libdc1394 --disable-version3  --disable-outdev=sdl \
429         --disable-outdev=alsa --disable-indev=sdl --disable-indev=alsa --disable-indev=jack \
430         --disable-indev=lavfi $extra
431
432     make -j$THREADS
433     make install
434     make clean
435
436     rm -f $INST/ffmpeg
437     ln -s ffmpeg-$FFMPEG_VERSION $INST/ffmpeg
438
439     magic_compile_set ffmpeg-$FFMPEG_VERSION $ffmpeg_magic
440
441     cd $CWD
442   else
443     INFO "Own ffmpeg-$FFMPEG_VERSION is up to date, nothing to do!"
444   fi
445 }
446
447 deb_version() {
448     dpkg-query -W -f '${Version}' $1 | sed -r 's/^([0-9]\.[0-9]+).*/\1/'
449 }
450
451 check_package_DEB() {
452   r=`apt-cache policy $1 | grep -c 'Candidate:'`
453
454   if [ $r -ge 1 ]; then
455     return 0
456   else
457     return 1
458   fi
459 }
460
461 check_package_version_match_DEB() {
462   v=`apt-cache policy $1 | grep 'Candidate:' | sed -r 's/.*:\s*(([0-9]+\.?)+).*/\1/'`
463
464   if [ -z "$v" ]; then
465     return 1
466   fi
467
468   version_match $v $2
469   return $?
470 }
471
472 check_package_version_ge_DEB() {
473   v=`apt-cache policy $1 | grep 'Candidate:' | sed -r 's/.*:\s*(([0-9]+\.?)+).*/\1/'`
474
475   if [ -z "$v" ]; then
476     return 1
477   fi
478
479   version_ge $v $2
480   return $?
481 }
482
483 install_DEB() {
484   INFO "Installing dependencies for DEB-based distribution"
485   INFO "Source code of dependencies needed to be compiled will be downloaded and extracted into $SRC"
486   INFO "Built libs of dependencies needed to be compiled will be installed into $INST"
487   INFO "Please edit \$SRC and/or \$INST variables at the begining of this script if you want to use other paths!"
488
489   sudo apt-get update
490 # XXX Why in hell? Let's let this stuff to the user's responsability!!!
491 #  sudo apt-get -y upgrade
492
493   # These libs should always be available in debian/ubuntu official repository...
494   OPENJPEG_DEV="libopenjpeg-dev"
495   SCHRO_DEV="libschroedinger-dev"
496   VORBIS_DEV="libvorbis-dev"
497   THEORA_DEV="libtheora-dev"
498
499   sudo apt-get install -y cmake scons gcc g++ libjpeg-dev libpng-dev libtiff-dev \
500     libfreetype6-dev libx11-dev libxi-dev wget libsqlite3-dev libbz2-dev libncurses5-dev \
501     libssl-dev liblzma-dev libreadline-dev $OPENJPEG_DEV libopenexr-dev libopenal-dev \
502     libglew-dev yasm $SCHRO_DEV $THEORA_DEV $VORBIS_DEV libsdl1.2-dev \
503     libfftw3-dev libjack-dev python-dev patch flex bison
504
505   OPENJPEG_USE=true
506   SCHRO_USE=true
507   VORBIS_USE=true
508   THEORA_USE=true
509
510   # Grmpf, debian is libxvidcore-dev and ubuntu libxvidcore4-dev!
511   XVID_DEV="libxvidcore-dev"
512   check_package_DEB $XVID_DEV
513   if [ $? -eq 0 ]; then
514     sudo apt-get install -y $XVID_DEV
515     XVID_USE=true
516   else
517     XVID_DEV="libxvidcore4-dev"
518     check_package_DEB $XVID_DEV
519     if [ $? -eq 0 ]; then
520       sudo apt-get install -y $XVID_DEV
521       XVID_USE=true
522     fi
523   fi
524
525   MP3LAME_DEV="libmp3lame-dev"
526   check_package_DEB $MP3LAME_DEV
527   if [ $? -eq 0 ]; then
528     sudo apt-get install -y $MP3LAME_DEV
529     MP3LAME_USE=true
530   fi
531
532   X264_DEV="libx264-dev"
533   check_package_DEB $X264_DEV
534   if [ $? -eq 0 ]; then
535     sudo apt-get install -y $X264_DEV
536     X264_USE=true
537   fi
538
539   VPX_DEV="libvpx-dev"
540   check_package_version_ge_DEB $VPX_DEV $VPX_VERSION_MIN
541   if [ $? -eq 0 ]; then
542     sudo apt-get install -y $VPX_DEV
543     VPX_USE=true
544   fi
545
546   check_package_DEB libspnav-dev
547   if [ $? -eq 0 ]; then
548     sudo apt-get install -y libspnav-dev
549   fi
550
551   check_package_DEB python3.3-dev
552   if [ $? -eq 0 ]; then
553     sudo apt-get install -y python3.3-dev
554   else
555     compile_Python
556   fi
557
558   check_package_version_ge_DEB libboost-dev $BOOST_VERSION_MIN
559   if [ $? -eq 0 ]; then
560     sudo apt-get install -y libboost-dev
561
562     boost_version=`deb_version libboost-dev`
563
564     check_package_DEB libboost-locale$boost_version-dev
565     if [ $? -eq 0 ]; then
566       sudo apt-get install -y libboost-locale$boost_version-dev libboost-filesystem$boost_version-dev \
567         libboost-regex$boost_version-dev libboost-system$boost_version-dev libboost-thread$boost_version-dev
568     else
569       compile_Boost
570     fi
571   else
572     compile_Boost
573   fi
574
575   check_package_version_ge_DEB libopencolorio-dev $OCIO_VERSION_MIN
576   if [ $? -eq 0 ]; then
577     sudo apt-get install -y libopencolorio-dev
578   else
579     compile_OCIO
580   fi
581
582   check_package_version_ge_DEB libopenimageio-dev $OIIO_VERSION_MIN
583   if [ $? -eq 0 ]; then
584     sudo apt-get install -y libopenimageio-dev
585   else
586     compile_OIIO
587   fi
588
589 #  XXX Debian features libav packages as ffmpeg, those are not really compatible with blender code currently :/
590 #      So for now, always build our own ffmpeg.
591 #  check_package_DEB ffmpeg
592 #  if [ $? -eq 0 ]; then
593 #    sudo apt-get install -y ffmpeg
594 #    ffmpeg_version=`deb_version ffmpeg`
595 #    INFO "ffmpeg version: $ffmpeg_version"
596 #    if [ ! -z "$ffmpeg_version" ]; then
597 #      if  dpkg --compare-versions $ffmpeg_version gt 0.7.2; then
598 #        sudo apt-get install -y libavfilter-dev libavcodec-dev libavdevice-dev libavformat-dev libavutil-dev libswscale-dev
599 #      else
600 #        compile_FFmpeg
601 #      fi
602 #    fi
603 #  fi
604   compile_FFmpeg
605 }
606
607 check_package_RPM() {
608   r=`yum info $1 | grep -c 'Summary'`
609
610   if [ $r -ge 1 ]; then
611     return 0
612   else
613     return 1
614   fi
615 }
616
617 check_package_version_match_RPM() {
618   v=`yum info $1 | grep Version | tail -n 1 | sed -r 's/.*:\s+(([0-9]+\.?)+).*/\1/'`
619
620   if [ -z "$v" ]; then
621     return 1
622   fi
623
624   version_match $v $2
625   return $?
626 }
627
628 check_package_version_ge_RPM() {
629   v=`yum info $1 | grep Version | tail -n 1 | sed -r 's/.*:\s+(([0-9]+\.?)+).*/\1/'`
630
631   if [ -z "$v" ]; then
632     return 1
633   fi
634
635   version_ge $v $2
636   return $?
637 }
638
639 install_RPM() {
640   INFO "Installing dependencies for RPM-based distribution"
641   INFO "Source code of dependencies needed to be compiled will be downloaded and extracted into $SRC"
642   INFO "Built libs of dependencies needed to be compiled will be installed into $INST"
643   INFO "Please edit \$SRC and/or \$INST variables at the begining of this script if you want to use other paths!"
644
645   sudo yum -y update
646
647   sudo yum -y install gcc gcc-c++ cmake scons libpng-devel libtiff-devel \
648     freetype-devel libX11-devel libXi-devel wget libsqlite3x-devel ncurses-devel \
649     readline-devel openjpeg-devel openexr-devel openal-soft-devel \
650     glew-devel yasm schroedinger-devel libtheora-devel libvorbis-devel SDL-devel \
651     fftw-devel lame-libs jack-audio-connection-kit-devel libspnav-devel \
652     libjpeg-devel patch python-devel
653
654   OPENJPEG_USE=true
655   SCHRO_USE=true
656
657   check_package_RPM x264-devel
658   if [ $? -eq 0 ]; then
659     sudo yum install -y x264-devel
660     X264_USE=true
661   fi
662
663   check_package_RPM xvidcore-devel
664   if [ $? -eq 0 ]; then
665     sudo yum install -y xvidcore-devel
666     XVID_USE=true
667     XVID_DEV="xvidcore-devel"
668   fi
669
670   check_package_version_ge_RPM libvpx-devel 0.9.7
671   if [ $? -eq 0 ]; then
672     sudo yum install -y libvpx-devel
673     VPX_USE=true
674   fi
675
676   check_package_RPM lame-devel
677   if [ $? -eq 0 ]; then
678     sudo yum install -y lame-devel
679     MP3LAME_USE=true
680   fi
681
682   check_package_version_match_RPM python3-devel 3.3
683   if [ $? -eq 0 ]; then
684     sudo yum install -y python-devel
685   else
686     compile_Python
687   fi
688
689   check_package_RPM boost-devel
690   if [ $? -eq 0 ]; then
691     sudo yum install -y boost-devel
692   else
693     compile_Boost
694   fi
695
696   check_package_RPM OpenColorIO-devel
697   if [ $? -eq 0 ]; then
698     sudo yum install -y OpenColorIO-devel
699   else
700     compile_OCIO
701   fi
702
703   check_package_RPM OpenImageIO-devel
704   if [ $? -eq 0 ]; then
705     sudo yum install -y OpenImageIO-devel
706   else
707     compile_OIIO
708   fi
709
710   # Always for now, not sure which packages should be installed
711   compile_FFmpeg
712 }
713
714 check_package_SUSE() {
715   r=`zypper info $1 | grep -c 'Summary'`
716
717   if [ $r -ge 1 ]; then
718     return 0
719   else
720     return 1
721   fi
722 }
723
724 check_package_version_SUSE() {
725   v=`zypper info $1 | grep Version | tail -n 1 | sed -r 's/.*:\s+(([0-9]+\.?)+).*/\1/'`
726
727   # for now major and minor versions only (as if x.y, not x.y.z)
728   r=`echo $v | grep -c $2`
729
730   if [ $r -ge 1 ]; then
731     return 0
732   else
733     return 1
734   fi
735 }
736
737 install_SUSE() {
738   INFO "Installing dependencies for SuSE-based distribution"
739   INFO "Source code of dependencies needed to be compiled will be downloaded and extracted into $SRC"
740   INFO "Built libs of dependencies needed to be compiled will be installed into $INST"
741   INFO "Please edit \$SRC and/or \$INST variables at the begining of this script if you want to use other paths!"
742
743   sudo zypper --non-interactive update --auto-agree-with-licenses
744
745   sudo zypper --non-interactive install --auto-agree-with-licenses \
746     gcc gcc-c++ libSDL-devel openal-soft-devel libpng12-devel libjpeg62-devel \
747     libtiff-devel OpenEXR-devel yasm libtheora-devel libvorbis-devel cmake \
748     scons patch
749
750   check_package_version_SUSE python3-devel 3.3.
751   if [ $? -eq 0 ]; then
752     sudo zypper --non-interactive install --auto-agree-with-licenses python3-devel
753   else
754     compile_Python
755   fi
756
757   # can not see boost_locale in repo, so let's build own boost
758   compile_Boost
759
760   # this libraries are also missing in the repo
761   compile_OCIO
762   compile_OIIO
763   compile_FFmpeg
764 }
765
766 print_info_ffmpeglink_DEB() {
767   _packages="libtheora-dev"
768
769   if $XVID_USE; then
770     _packages="$_packages $XVID_DEV"
771   fi
772
773   if $VPX_USE; then
774     _packages="$_packages libvpx-dev"
775   fi
776
777   if $MP3LAME_USE; then
778     _packages="$_packages libmp3lame-dev"
779   fi
780
781   if $X264_USE; then
782     _packages="$_packages libx264-dev"
783   fi
784
785   if $OPENJPEG_USE; then
786     _packages="$_packages libopenjpeg-dev"
787   fi
788
789   if $SCHRO_USE; then
790     _packages="$_packages libschroedinger-dev"
791   fi
792
793   dpkg -L $_packages | grep -e ".*\/lib[^\/]\+\.so" | awk '{ printf(nlines ? "'"$_ffmpeg_list_sep"'%s" : "%s", gensub(/.*lib([^\/]+)\.so/, "\\1", "g", $0)); nlines++ }'
794 }
795
796 print_info_ffmpeglink_RPM() {
797   _packages="libtheora-devel libvorbis-devel"
798
799   if $XVID_USE; then
800     _packages="$_packages $XVID_DEV"
801   fi
802
803   if $VPX_USE; then
804     _packages="$_packages libvpx-devel"
805   fi
806
807   if $MP3LAME_USE; then
808     _packages="$_packages lame-devel"
809   fi
810
811   if $X264_USE; then
812     _packages="$_packages x264-devel"
813   fi
814
815   if $OPENJPEG_USE; then
816     _packages="$_packages openjpeg-devel"
817   fi
818
819   if $SCHRO_USE; then
820     _packages="$_packages schroedinger-devel"
821   fi
822
823   rpm -ql $_packages | grep -e ".*\/lib[^\/]\+\.so" | awk '{ printf(nlines ? "'"$_ffmpeg_list_sep"'%s" : "%s", gensub(/.*lib([^\/]+)\.so/, "\\1", "g", $0)); nlines++ }'
824 }
825
826 print_info_ffmpeglink() {
827   # This func must only print a ';'-separated list of libs...
828   if [ -z "$DISTRO" ]; then
829     ERROR "Failed to detect distribution type"
830     exit 1
831   elif [ "$DISTRO" = "DEB" ]; then
832     print_info_ffmpeglink_DEB
833   elif [ "$DISTRO" = "RPM" ]; then
834     print_info_ffmpeglink_RPM
835   # XXX TODO!
836   else INFO "<Could not determine additional link libraries needed for ffmpeg, replace this by valid list of libs...>"
837 #  elif [ "$DISTRO" = "SUSE" ]; then
838 #    print_info_ffmpeglink_SUSE
839   fi
840 }
841
842 print_info() {
843   INFO ""
844   INFO "If you're using CMake add this to your configuration flags:"
845
846   if [ -d $INST/boost ]; then
847     INFO "  -D BOOST_ROOT=$INST/boost"
848     INFO "  -D Boost_NO_SYSTEM_PATHS=ON"
849   fi
850
851   if [ -d $INST/ffmpeg ]; then
852     INFO "  -D WITH_CODEC_FFMPEG=ON"
853     INFO "  -D FFMPEG=$INST/ffmpeg"
854     INFO "  -D FFMPEG_LIBRARIES='avformat;avcodec;avutil;avdevice;swscale;rt;`print_info_ffmpeglink`'"
855   fi
856
857   INFO ""
858   INFO "If you're using SCons add this to your user-config:"
859
860   if [ -d $INST/python-3.3 ]; then
861     INFO "BF_PYTHON='$INST/python-3.3'"
862     INFO "BF_PYTHON_ABI_FLAGS='m'"
863   fi
864
865   if [ -d $INST/ocio ]; then
866     INFO "BF_OCIO='$INST/ocio'"
867   fi
868
869   if [ -d $INST/oiio ]; then
870     INFO "BF_OIIO='$INST/oiio'"
871   fi
872
873   if [ -d $INST/boost ]; then
874     INFO "BF_BOOST='$INST/boost'"
875   fi
876
877   if [ -d $INST/ffmpeg ]; then
878     INFO "BF_FFMPEG='$INST/ffmpeg'"
879     _ffmpeg_list_sep=" "
880     INFO "BF_FFMPEG_LIB='avformat avcodec swscale avutil avdevice `print_info_ffmpeglink`'"
881   fi
882 }
883
884 # Detect distributive type used on this machine
885 detect_distro
886
887 if [ -z "$DISTRO" ]; then
888   ERROR "Failed to detect distribution type"
889   exit 1
890 elif [ "$DISTRO" = "DEB" ]; then
891   install_DEB
892 elif [ "$DISTRO" = "RPM" ]; then
893   install_RPM
894 elif [ "$DISTRO" = "SUSE" ]; then
895   install_SUSE
896 fi
897
898 print_info
899
900 # Switch back to user language.
901 LANG=LANG_BACK
902 export LANG