Install dependencies: made it sure llvm-3.1 or llvm-3.0 is installing
[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   have_llvm=false
594
595   sudo apt-get install -y cmake scons gcc g++ libjpeg-dev libpng-dev libtiff-dev \
596     libfreetype6-dev libx11-dev libxi-dev wget libsqlite3-dev libbz2-dev libncurses5-dev \
597     libssl-dev liblzma-dev libreadline-dev $OPENJPEG_DEV libopenexr-dev libopenal-dev \
598     libglew-dev yasm $SCHRO_DEV $THEORA_DEV $VORBIS_DEV libsdl1.2-dev \
599     libfftw3-dev libjack-dev python-dev patch flex bison libtbb-dev git
600
601   OPENJPEG_USE=true
602   SCHRO_USE=true
603   VORBIS_USE=true
604   THEORA_USE=true
605
606   # Grmpf, debian is libxvidcore-dev and ubuntu libxvidcore4-dev!
607   XVID_DEV="libxvidcore-dev"
608   check_package_DEB $XVID_DEV
609   if [ $? -eq 0 ]; then
610     sudo apt-get install -y $XVID_DEV
611     XVID_USE=true
612   else
613     XVID_DEV="libxvidcore4-dev"
614     check_package_DEB $XVID_DEV
615     if [ $? -eq 0 ]; then
616       sudo apt-get install -y $XVID_DEV
617       XVID_USE=true
618     fi
619   fi
620
621   MP3LAME_DEV="libmp3lame-dev"
622   check_package_DEB $MP3LAME_DEV
623   if [ $? -eq 0 ]; then
624     sudo apt-get install -y $MP3LAME_DEV
625     MP3LAME_USE=true
626   fi
627
628   X264_DEV="libx264-dev"
629   check_package_DEB $X264_DEV
630   if [ $? -eq 0 ]; then
631     sudo apt-get install -y $X264_DEV
632     X264_USE=true
633   fi
634
635   VPX_DEV="libvpx-dev"
636   check_package_version_ge_DEB $VPX_DEV $VPX_VERSION_MIN
637   if [ $? -eq 0 ]; then
638     sudo apt-get install -y $VPX_DEV
639     VPX_USE=true
640   fi
641
642   check_package_DEB libspnav-dev
643   if [ $? -eq 0 ]; then
644     sudo apt-get install -y libspnav-dev
645   fi
646
647   check_package_DEB python3.3-dev
648   if [ $? -eq 0 ]; then
649     sudo apt-get install -y python3.3-dev
650   else
651     compile_Python
652   fi
653
654   check_package_version_ge_DEB libboost-dev $BOOST_VERSION_MIN
655   if [ $? -eq 0 ]; then
656     sudo apt-get install -y libboost-dev
657
658     boost_version=`deb_version libboost-dev`
659
660     check_package_DEB libboost-locale$boost_version-dev
661     if [ $? -eq 0 ]; then
662       sudo apt-get install -y libboost-locale$boost_version-dev libboost-filesystem$boost_version-dev \
663                               libboost-regex$boost_version-dev libboost-system$boost_version-dev \
664                               libboost-thread$boost_version-dev
665     else
666       compile_Boost
667     fi
668   else
669     compile_Boost
670   fi
671
672   check_package_version_ge_DEB libopencolorio-dev $OCIO_VERSION_MIN
673   if [ $? -eq 0 ]; then
674     sudo apt-get install -y libopencolorio-dev
675   else
676     compile_OCIO
677   fi
678
679   check_package_version_ge_DEB libopenimageio-dev $OIIO_VERSION_MIN
680   if [ $? -eq 0 ]; then
681     sudo apt-get install -y libopenimageio-dev
682   else
683     compile_OIIO
684   fi
685
686   check_package_DEB llvm-$LLVM_VERSION-dev
687   if [ $? -eq 0 ]; then
688     sudo apt-get install -y llvm-$LLVM_VERSION-dev clang
689     have_llvm=true
690   else
691     check_package_DEB llvm-$LLVM_VERSION_MIN-dev
692     if [ $? -eq 0 ]; then
693       sudo apt-get install -y llvm-$LLVM_VERSION_MIN-dev clang
694       have_llvm=true
695     fi
696   fi
697
698   if $have_llvm; then
699     # No package currently!
700     compile_OSL
701   fi
702
703 #  XXX Debian features libav packages as ffmpeg, those are not really compatible with blender code currently :/
704 #      So for now, always build our own ffmpeg.
705 #  check_package_DEB ffmpeg
706 #  if [ $? -eq 0 ]; then
707 #    sudo apt-get install -y ffmpeg
708 #    ffmpeg_version=`deb_version ffmpeg`
709 #    INFO "ffmpeg version: $ffmpeg_version"
710 #    if [ ! -z "$ffmpeg_version" ]; then
711 #      if  dpkg --compare-versions $ffmpeg_version gt 0.7.2; then
712 #        sudo apt-get install -y libavfilter-dev libavcodec-dev libavdevice-dev libavformat-dev libavutil-dev libswscale-dev
713 #      else
714 #        compile_FFmpeg
715 #      fi
716 #    fi
717 #  fi
718   compile_FFmpeg
719 }
720
721 check_package_RPM() {
722   r=`yum info $1 | grep -c 'Summary'`
723
724   if [ $r -ge 1 ]; then
725     return 0
726   else
727     return 1
728   fi
729 }
730
731 check_package_version_match_RPM() {
732   v=`yum info $1 | grep Version | tail -n 1 | sed -r 's/.*:\s+(([0-9]+\.?)+).*/\1/'`
733
734   if [ -z "$v" ]; then
735     return 1
736   fi
737
738   version_match $v $2
739   return $?
740 }
741
742 check_package_version_ge_RPM() {
743   v=`yum info $1 | grep Version | tail -n 1 | sed -r 's/.*:\s+(([0-9]+\.?)+).*/\1/'`
744
745   if [ -z "$v" ]; then
746     return 1
747   fi
748
749   version_ge $v $2
750   return $?
751 }
752
753 install_RPM() {
754   INFO "Installing dependencies for RPM-based distribution"
755   INFO "Source code of dependencies needed to be compiled will be downloaded and extracted into $SRC"
756   INFO "Built libs of dependencies needed to be compiled will be installed into $INST"
757   INFO "Please edit \$SRC and/or \$INST variables at the begining of this script if you want to use other paths!"
758
759   sudo yum -y update
760
761   sudo yum -y install gcc gcc-c++ cmake scons libpng-devel libtiff-devel \
762     freetype-devel libX11-devel libXi-devel wget libsqlite3x-devel ncurses-devel \
763     readline-devel openjpeg-devel openexr-devel openal-soft-devel \
764     glew-devel yasm schroedinger-devel libtheora-devel libvorbis-devel SDL-devel \
765     fftw-devel lame-libs jack-audio-connection-kit-devel libspnav-devel \
766     libjpeg-devel patch python-devel
767
768   OPENJPEG_USE=true
769   SCHRO_USE=true
770
771   check_package_RPM x264-devel
772   if [ $? -eq 0 ]; then
773     sudo yum install -y x264-devel
774     X264_USE=true
775   fi
776
777   check_package_RPM xvidcore-devel
778   if [ $? -eq 0 ]; then
779     sudo yum install -y xvidcore-devel
780     XVID_USE=true
781     XVID_DEV="xvidcore-devel"
782   fi
783
784   check_package_version_ge_RPM libvpx-devel 0.9.7
785   if [ $? -eq 0 ]; then
786     sudo yum install -y libvpx-devel
787     VPX_USE=true
788   fi
789
790   check_package_RPM lame-devel
791   if [ $? -eq 0 ]; then
792     sudo yum install -y lame-devel
793     MP3LAME_USE=true
794   fi
795
796   check_package_version_match_RPM python3-devel 3.3
797   if [ $? -eq 0 ]; then
798     sudo yum install -y python-devel
799   else
800     compile_Python
801   fi
802
803   check_package_RPM boost-devel
804   if [ $? -eq 0 ]; then
805     sudo yum install -y boost-devel
806   else
807     compile_Boost
808   fi
809
810   check_package_RPM OpenColorIO-devel
811   if [ $? -eq 0 ]; then
812     sudo yum install -y OpenColorIO-devel
813   else
814     compile_OCIO
815   fi
816
817   check_package_RPM OpenImageIO-devel
818   if [ $? -eq 0 ]; then
819     sudo yum install -y OpenImageIO-devel
820   else
821     compile_OIIO
822   fi
823
824   # Always for now, not sure which packages should be installed
825   compile_FFmpeg
826 }
827
828 check_package_SUSE() {
829   r=`zypper info $1 | grep -c 'Summary'`
830
831   if [ $r -ge 1 ]; then
832     return 0
833   else
834     return 1
835   fi
836 }
837
838 check_package_version_SUSE() {
839   v=`zypper info $1 | grep Version | tail -n 1 | sed -r 's/.*:\s+(([0-9]+\.?)+).*/\1/'`
840
841   # for now major and minor versions only (as if x.y, not x.y.z)
842   r=`echo $v | grep -c $2`
843
844   if [ $r -ge 1 ]; then
845     return 0
846   else
847     return 1
848   fi
849 }
850
851 install_SUSE() {
852   INFO "Installing dependencies for SuSE-based distribution"
853   INFO "Source code of dependencies needed to be compiled will be downloaded and extracted into $SRC"
854   INFO "Built libs of dependencies needed to be compiled will be installed into $INST"
855   INFO "Please edit \$SRC and/or \$INST variables at the begining of this script if you want to use other paths!"
856
857   sudo zypper --non-interactive update --auto-agree-with-licenses
858
859   sudo zypper --non-interactive install --auto-agree-with-licenses \
860     gcc gcc-c++ libSDL-devel openal-soft-devel libpng12-devel libjpeg62-devel \
861     libtiff-devel OpenEXR-devel yasm libtheora-devel libvorbis-devel cmake \
862     scons patch
863
864   check_package_version_SUSE python3-devel 3.3.
865   if [ $? -eq 0 ]; then
866     sudo zypper --non-interactive install --auto-agree-with-licenses python3-devel
867   else
868     compile_Python
869   fi
870
871   # can not see boost_locale in repo, so let's build own boost
872   compile_Boost
873
874   # this libraries are also missing in the repo
875   compile_OCIO
876   compile_OIIO
877   compile_FFmpeg
878 }
879
880 print_info_ffmpeglink_DEB() {
881   _packages="libtheora-dev"
882
883   if $XVID_USE; then
884     _packages="$_packages $XVID_DEV"
885   fi
886
887   if $VPX_USE; then
888     _packages="$_packages libvpx-dev"
889   fi
890
891   if $MP3LAME_USE; then
892     _packages="$_packages libmp3lame-dev"
893   fi
894
895   if $X264_USE; then
896     _packages="$_packages libx264-dev"
897   fi
898
899   if $OPENJPEG_USE; then
900     _packages="$_packages libopenjpeg-dev"
901   fi
902
903   if $SCHRO_USE; then
904     _packages="$_packages libschroedinger-dev"
905   fi
906
907   dpkg -L $_packages | grep -e ".*\/lib[^\/]\+\.so" | awk '{ printf(nlines ? "'"$_ffmpeg_list_sep"'%s" : "%s", gensub(/.*lib([^\/]+)\.so/, "\\1", "g", $0)); nlines++ }'
908 }
909
910 print_info_ffmpeglink_RPM() {
911   _packages="libtheora-devel libvorbis-devel"
912
913   if $XVID_USE; then
914     _packages="$_packages $XVID_DEV"
915   fi
916
917   if $VPX_USE; then
918     _packages="$_packages libvpx-devel"
919   fi
920
921   if $MP3LAME_USE; then
922     _packages="$_packages lame-devel"
923   fi
924
925   if $X264_USE; then
926     _packages="$_packages x264-devel"
927   fi
928
929   if $OPENJPEG_USE; then
930     _packages="$_packages openjpeg-devel"
931   fi
932
933   if $SCHRO_USE; then
934     _packages="$_packages schroedinger-devel"
935   fi
936
937   rpm -ql $_packages | grep -e ".*\/lib[^\/]\+\.so" | awk '{ printf(nlines ? "'"$_ffmpeg_list_sep"'%s" : "%s", gensub(/.*lib([^\/]+)\.so/, "\\1", "g", $0)); nlines++ }'
938 }
939
940 print_info_ffmpeglink() {
941   # This func must only print a ';'-separated list of libs...
942   if [ -z "$DISTRO" ]; then
943     ERROR "Failed to detect distribution type"
944     exit 1
945   elif [ "$DISTRO" = "DEB" ]; then
946     print_info_ffmpeglink_DEB
947   elif [ "$DISTRO" = "RPM" ]; then
948     print_info_ffmpeglink_RPM
949   # XXX TODO!
950   else INFO "<Could not determine additional link libraries needed for ffmpeg, replace this by valid list of libs...>"
951 #  elif [ "$DISTRO" = "SUSE" ]; then
952 #    print_info_ffmpeglink_SUSE
953   fi
954 }
955
956 print_info() {
957   INFO ""
958   INFO "If you're using CMake add this to your configuration flags:"
959
960   if [ -d $INST/boost ]; then
961     INFO "  -D BOOST_ROOT=$INST/boost"
962     INFO "  -D Boost_NO_SYSTEM_PATHS=ON"
963   fi
964
965   if [ -d $INST/osl ]; then
966     INFO "  -D CYCLES_OSL=$INST/osl"
967     INFO "  -D WITH_CYCLES_OSL=ON"
968   fi
969
970   if [ -d $INST/ffmpeg ]; then
971     INFO "  -D WITH_CODEC_FFMPEG=ON"
972     INFO "  -D FFMPEG=$INST/ffmpeg"
973     INFO "  -D FFMPEG_LIBRARIES='avformat;avcodec;avutil;avdevice;swscale;rt;`print_info_ffmpeglink`'"
974   fi
975
976   INFO ""
977   INFO "If you're using SCons add this to your user-config:"
978
979   if [ -d $INST/python-3.3 ]; then
980     INFO "BF_PYTHON='$INST/python-3.3'"
981     INFO "BF_PYTHON_ABI_FLAGS='m'"
982   fi
983
984   if [ -d $INST/ocio ]; then
985     INFO "BF_OCIO='$INST/ocio'"
986   fi
987
988   if [ -d $INST/oiio ]; then
989     INFO "BF_OIIO='$INST/oiio'"
990   fi
991
992   if [ -d $INST/boost ]; then
993     INFO "BF_BOOST='$INST/boost'"
994   fi
995
996   if [ -d $INST/ffmpeg ]; then
997     INFO "BF_FFMPEG='$INST/ffmpeg'"
998     _ffmpeg_list_sep=" "
999     INFO "BF_FFMPEG_LIB='avformat avcodec swscale avutil avdevice `print_info_ffmpeglink`'"
1000   fi
1001 }
1002
1003 # Detect distributive type used on this machine
1004 detect_distro
1005
1006 if [ -z "$DISTRO" ]; then
1007   ERROR "Failed to detect distribution type"
1008   exit 1
1009 elif [ "$DISTRO" = "DEB" ]; then
1010   install_DEB
1011 elif [ "$DISTRO" = "RPM" ]; then
1012   install_RPM
1013 elif [ "$DISTRO" = "SUSE" ]; then
1014   install_SUSE
1015 fi
1016
1017 print_info
1018
1019 # Switch back to user language.
1020 LANG=LANG_BACK
1021 export LANG