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