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