Various "user-friendly" edits, mostly adding command-line args parsing... So now...
[blender.git] / build_files / build_environment / install_deps.sh
1 #!/bin/bash
2
3 # Parse command line!
4 ARGS=$( \
5 getopt \
6 -o s:i:t:h \
7 --long source:,install:,threads:,help,with-osl,all-static,force-python,force-boost,\
8 force-ocio,force-oiio,force-llvm,force-osl,force-ffmpeg \
9 -- "$@" \
10 )
11
12 DISTRO=""
13 SRC="$HOME/src/blender-deps"
14 INST="/opt/lib"
15 CWD=$PWD
16
17 # Do not yet enable osl, use --build-osl option to try it.
18 BUILD_OSL=false
19
20 # Try to link everything statically. Use this to produce protable versions of blender.
21 ALL_STATIC=false
22
23 THREADS=`cat /proc/cpuinfo | grep cores | uniq | sed -e "s/.*: *\(.*\)/\\1/"`
24 if [ -z "$THREADS" ]; then
25   THREADS=1
26 fi
27
28 COMMON_INFO="\"Source code of dependencies needed to be compiled will be downloaded and extracted into '\$SRC'.
29 Built libs of dependencies needed to be compiled will be installed into '\$INST'.
30 Please edit \\\$SRC and/or \\\$INST variables at the begining of this script,
31 or use --source/--install options, if you want to use other paths!
32
33 Number of threads for building: \$THREADS (automatically detected, use --threads=<nbr> to override it).
34 Building OSL: \$BUILD_OSL (use --with-osl option to enable it).
35 All static linking: \$ALL_STATIC (use --all-static option to enable it).\""
36
37 PYTHON_VERSION="3.3.0"
38 PYTHON_VERSION_MIN="3.3"
39 PYTHON_SOURCE="http://python.org/ftp/python/$PYTHON_VERSION/Python-$PYTHON_VERSION.tar.bz2"
40 PYTHON_FORCE_REBUILD=false
41
42 BOOST_VERSION="1.51.0"
43 _boost_version_nodots=`echo "$BOOST_VERSION" | sed -r 's/\./_/g'`
44 BOOST_SOURCE="http://sourceforge.net/projects/boost/files/boost/$BOOST_VERSION/boost_$_boost_version_nodots.tar.bz2/download"
45 BOOST_VERSION_MIN="1.49"
46 BOOST_FORCE_REBUILD=false
47
48 OCIO_VERSION="1.0.7"
49 OCIO_SOURCE="https://github.com/imageworks/OpenColorIO/tarball/v$OCIO_VERSION"
50 OCIO_VERSION_MIN="1.0"
51 OCIO_FORCE_REBUILD=false
52
53 OIIO_VERSION="1.1.1"
54 OIIO_SOURCE="https://github.com/OpenImageIO/oiio/tarball/Release-$OIIO_VERSION"
55 OIIO_VERSION_MIN="1.1"
56 OIIO_FORCE_REBUILD=false
57
58 LLVM_VERSION="3.1"
59 LLVM_VERSION_MIN="3.0"
60 LLVM_VERSION_FOUND=""
61 LLVM_SOURCE="http://llvm.org/releases/$LLVM_VERSION/llvm-$LLVM_VERSION.src.tar.gz"
62 LLVM_CLANG_SOURCE="http://llvm.org/releases/$LLVM_VERSION/clang-$LLVM_VERSION.src.tar.gz"
63 LLVM_FORCE_REBUILD=false
64
65 # OSL needs to be compiled for now!
66 OSL_VERSION="1.2.0"
67 OSL_SOURCE="https://github.com/mont29/OpenShadingLanguage/archive/blender-fixes.tar.gz"
68 OSL_FORCE_REBUILD=false
69
70 FFMPEG_VERSION="1.0"
71 FFMPEG_SOURCE="http://ffmpeg.org/releases/ffmpeg-$FFMPEG_VERSION.tar.bz2"
72 FFMPEG_VERSION_MIN="0.7.6"
73 FFMPEG_FORCE_REBUILD=false
74 _ffmpeg_list_sep=";"
75
76 # FFMPEG optional libs.
77 VORBIS_USE=false
78 VORBIS_DEV=""
79 SCHRO_USE=false
80 SCRHO_DEV=""
81 THEORA_USE=false
82 THEORA_DEV=""
83 XVID_USE=false
84 XVID_DEV=""
85 X264_USE=false
86 X264_DEV=""
87 X264_VERSION_MIN=0.118
88 VPX_USE=false
89 VPX_VERSION_MIN=0.9.7
90 VPX_DEV=""
91 MP3LAME_USE=false
92 MP3LAME_DEV=""
93 OPENJPEG_USE=false
94 OPENJPEG_DEV=""
95
96 # Switch to english language, else some things (like check_package_DEB()) won't work!
97 LANG_BACK=$LANG
98 LANG=""
99 export LANG
100
101
102 _echo() {
103   if [ "X$1" = "X-n" ]; then
104      shift; printf "%s" "$@"
105   else
106      printf "%s\n" "$@"
107   fi
108 }
109
110 ERROR() {
111   _echo "$@"
112 }
113
114 INFO() {
115   _echo "$@"
116 }
117
118 # Finish parsing the commandline args.
119 eval set -- "$ARGS"
120 while true; do
121   case $1 in
122     -s|--source)
123       SRC="$2"; shift; shift; continue
124     ;;
125     -i|--install)
126       INST="$2"; shift; shift; continue
127     ;;
128     -t|--threads)
129       THREADS="$2"; shift; shift; continue
130     ;;
131     -h|--help)
132       INFO ""
133       INFO "USAGE:"
134       INFO ""
135       INFO "`eval _echo "$COMMON_INFO"`"
136       INFO ""
137       exit 0
138     ;;
139     --with-osl)
140       BUILD_OSL=true; shift; continue
141     ;;
142     --all-static)
143       ALL_STATIC=true; shift; continue
144     ;;
145     --force-python)
146       PYTHON_FORCE_REBUILD=true; shift; continue
147     ;;
148     --force-boost)
149       BOOST_FORCE_REBUILD=true; shift; continue
150     ;;
151     --force-ocio)
152       OCIO_FORCE_REBUILD=true; shift; continue
153     ;;
154     --force-oiio)
155       OIIO_FORCE_REBUILD=true; shift; continue
156     ;;
157     --force-llvm)
158       LLVM_FORCE_REBUILD=true; shift; continue
159     ;;
160     --force-osl)
161       OSL_FORCE_REBUILD=true; shift; continue
162     ;;
163     --force-ffmpeg)
164       FFMPEG_FORCE_REBUILD=true; shift; continue
165     ;;
166     --)
167       # no more arguments to parse
168       break
169     ;;
170     *)
171       INFO ""
172       INFO "Wrong parameter! Usage:"
173       INFO ""
174       INFO "`eval _echo "$COMMON_INFO"`"
175       INFO ""
176       exit 1
177     ;;
178   esac
179 done
180
181 # Return 0 if $1 = $2 (i.e. 1.01.0 = 1.1, but 1.1.1 != 1.1), else 1.
182 # $1 and $2 should be version numbers made of numbers only.
183 version_eq() {
184   backIFS=$IFS
185   IFS='.'
186
187   # Split both version numbers into their numeric elements.
188   arr1=( $1 )
189   arr2=( $2 )
190
191   ret=1
192
193   count1=${#arr1[@]}
194   count2=${#arr2[@]}
195   if [ $count2 -ge $count1 ]; then
196     _t=$count1
197     count1=$count2
198     count2=$_t
199     arr1=( $2 )
200     arr2=( $1 )
201   fi
202
203   ret=0
204   for (( i=0; $i < $count2; i++ ))
205   do
206     if [ $(( 10#${arr1[$i]} )) -ne $(( 10#${arr2[$i]} )) ]; then
207       ret=1
208       break
209     fi
210   done
211
212   for (( i=$count2; $i < $count1; i++ ))
213   do
214     if [ $(( 10#${arr1[$i]} )) -ne 0 ]; then
215       ret=1
216       break
217     fi
218   done
219
220   IFS=$backIFS
221   return $ret
222 }
223
224 # Return 0 if $1 >= $2, else 1.
225 # $1 and $2 should be version numbers made of numbers only.
226 version_ge() {
227   version_eq $1 $2
228   if [ $? -eq 1 -a $(_echo "$1\n$2" | sort --version-sort | head --lines=1) = "$1" ]; then
229     return 1
230   else
231     return 0
232   fi
233 }
234
235 # 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.
236 # $1 and $2 should be version numbers made of numbers only.
237 # $1 should be at least as long as $2!
238 version_match() {
239   backIFS=$IFS
240   IFS='.'
241
242   # Split both version numbers into their numeric elements.
243   arr1=( $1 )
244   arr2=( $2 )
245
246   ret=1
247
248   count1=${#arr1[@]}
249   count2=${#arr2[@]}
250   if [ $count1 -ge $count2 ]; then
251     ret=0
252     for (( i=0; $i < $count2; i++ ))
253     do
254       if [ $(( 10#${arr1[$i]} )) -ne $(( 10#${arr2[$i]} )) ]; then
255         ret=1
256         break
257       fi
258     done
259   fi
260
261   IFS=$backIFS
262   return $ret
263 }
264
265 detect_distro() {
266   if [ -f /etc/debian_version ]; then
267     DISTRO="DEB"
268   elif [ -f /etc/redhat-release ]; then
269     DISTRO="RPM"
270   elif [ -f /etc/SuSE-release ]; then
271     DISTRO="SUSE"
272   fi
273 }
274
275 prepare_opt() {
276   INFO "Ensuring $INST exists and is writable by us"
277   if [ ! -d  $INST ]; then
278     sudo mkdir -p $INST
279   fi
280
281   if [ ! -w $INST ]; then
282     sudo chown $USER $INST
283     sudo chmod 775 $INST
284   fi
285 }
286
287 # Check whether the current package needs to be recompiled, based on a dummy file containing a magic number in its name...
288 magic_compile_check() {
289   if [ -f $INST/.$1-magiccheck-$2 ]; then
290     return 0
291   else
292     return 1
293   fi
294 }
295
296 magic_compile_set() {
297   rm -f $INST/.$1-magiccheck-*
298   touch $INST/.$1-magiccheck-$2
299 }
300
301 compile_Python() {
302   # To be changed each time we make edits that would modify the compiled result!
303   py_magic=0
304
305   _src=$SRC/Python-$PYTHON_VERSION
306   _inst=$INST/python-$PYTHON_VERSION
307
308   # Clean install if needed!
309   magic_compile_check python-$PYTHON_VERSION $py_magic
310   if [ $? -eq 1 -o $PYTHON_FORCE_REBUILD == true ]; then
311     rm -rf $_inst
312   fi
313
314   if [ ! -d $_inst ]; then
315     INFO "Building Python-$PYTHON_VERSION"
316
317     prepare_opt
318
319     if [ ! -d $_src ]; then
320       mkdir -p $SRC
321       wget -c $PYTHON_SOURCE -O $_src.tar.bz2
322
323       INFO "Unpacking Python-$PYTHON_VERSION"
324       tar -C $SRC -xf $_src.tar.bz2
325     fi
326
327     cd $_src
328
329     ./configure --prefix=$_inst --enable-ipv6 \
330         --enable-loadable-sqlite-extensions --with-dbmliborder=bdb \
331         --with-computed-gotos --with-pymalloc
332
333     make -j$THREADS && make install
334     make clean
335
336     if [ -d $_inst ]; then
337       rm -f $INST/python-3.3
338       ln -s python-$PYTHON_VERSION $INST/python-3.3
339     else
340       ERROR "Python--$PYTHON_VERSION failed to compile, exiting"
341       exit 1
342     fi
343
344     magic_compile_set python-$PYTHON_VERSION $py_magic
345
346     cd $CWD
347     INFO "Done compiling Python-$PYTHON_VERSION!"
348   else
349     INFO "Own Python-$PYTHON_VERSION is up to date, nothing to do!"
350     INFO "If you want to force rebuild of this lib, use the --force-python option."
351   fi
352 }
353
354 compile_Boost() {
355   # To be changed each time we make edits that would modify the compiled result!
356   boost_magic=7
357
358   _src=$SRC/boost-$BOOST_VERSION
359   _inst=$INST/boost-$BOOST_VERSION
360
361   # Clean install if needed!
362   magic_compile_check boost-$BOOST_VERSION $boost_magic
363   if [ $? -eq 1 -o $BOOST_FORCE_REBUILD == true ]; then
364     rm -rf $_inst
365   fi
366
367   if [ ! -d $_inst ]; then
368     INFO "Building Boost-$BOOST_VERSION"
369
370     prepare_opt
371
372     if [ ! -d $_src ]; then
373       INFO "Downloading Boost-$BOOST_VERSION"
374       mkdir -p $SRC
375       wget -c $BOOST_SOURCE -O $_src.tar.bz2
376       tar -C $SRC --transform "s,(.*/?)boost_1_[^/]+(.*),\1boost-$BOOST_VERSION\2,x" -xf $_src.tar.bz2
377     fi
378
379     cd $_src
380     if [ ! -f $_src/b2 ]; then
381       ./bootstrap.sh
382     fi
383     ./b2 -j$THREADS -a --with-system --with-filesystem --with-thread --with-regex --with-locale --with-date_time \
384          --prefix=$_inst --disable-icu boost.locale.icu=off install
385     ./b2 --clean
386
387     if [ -d $_inst ]; then
388       rm -f $INST/boost
389       ln -s boost-$BOOST_VERSION $INST/boost
390     else
391       ERROR "Boost-$BOOST_VERSION failed to compile, exiting"
392       exit 1
393     fi
394
395     magic_compile_set boost-$BOOST_VERSION $boost_magic
396
397     # Rebuild dependecies as well!
398     OIIO_FORCE_REBUILD=true
399     OSL_FORCE_REBUILD=true
400
401     cd $CWD
402     INFO "Done compiling Boost-$BOOST_VERSION!"
403   else
404     INFO "Own Boost-$BOOST_VERSION is up to date, nothing to do!"
405     INFO "If you want to force rebuild of this lib, use the --force-boost option."
406   fi
407 }
408
409 compile_OCIO() {
410   # To be changed each time we make edits that would modify the compiled result!
411   ocio_magic=1
412
413   _src=$SRC/OpenColorIO-$OCIO_VERSION
414   _inst=$INST/ocio-$OCIO_VERSION
415
416   # Clean install if needed!
417   magic_compile_check ocio-$OCIO_VERSION $ocio_magic
418   if [ $? -eq 1 -o $OCIO_FORCE_REBUILD == true ]; then
419     rm -rf $_inst
420   fi
421
422   if [ ! -d $_inst ]; then
423     INFO "Building OpenColorIO-$OCIO_VERSION"
424
425     prepare_opt
426
427     if [ ! -d $_src ]; then
428       INFO "Downloading OpenColorIO-$OCIO_VERSION"
429       mkdir -p $SRC
430       wget -c $OCIO_SOURCE -O $_src.tar.gz
431
432       INFO "Unpacking OpenColorIO-$OCIO_VERSION"
433       tar -C $SRC --transform "s,(.*/?)imageworks-OpenColorIO[^/]*(.*),\1OpenColorIO-$OCIO_VERSION\2,x" \
434           -xf $_src.tar.gz
435     fi
436
437     cd $_src
438     # Always refresh the whole build!
439     if [ -d build ]; then
440       rm -rf build
441     fi    
442     mkdir build
443     cd build
444
445     if file /bin/cp | grep -q '32-bit'; then
446       cflags="-fPIC -m32 -march=i686"
447     else
448       cflags="-fPIC"
449     fi
450
451     cmake -D CMAKE_BUILD_TYPE=Release \
452           -D CMAKE_PREFIX_PATH=$_inst \
453           -D CMAKE_INSTALL_PREFIX=$_inst \
454           -D CMAKE_CXX_FLAGS="$cflags" \
455           -D CMAKE_EXE_LINKER_FLAGS="-lgcc_s -lgcc" \
456           -D OCIO_BUILD_APPS=OFF \
457           -D OCIO_BUILD_PYGLUE=OFF \
458           ..
459
460     make -j$THREADS && make install
461
462     # Force linking against static libs
463     rm -f $_inst/lib/*.so*
464
465     # Additional depencencies
466     cp ext/dist/lib/libtinyxml.a $_inst/lib
467     cp ext/dist/lib/libyaml-cpp.a $_inst/lib
468
469     make clean
470
471     if [ -d $_inst ]; then
472       rm -f $INST/ocio
473       ln -s ocio-$OCIO_VERSION $INST/ocio
474     else
475       ERROR "OpenColorIO-$OCIO_VERSION failed to compile, exiting"
476       exit 1
477     fi
478
479     magic_compile_set ocio-$OCIO_VERSION $ocio_magic
480
481     cd $CWD
482     INFO "Done compiling OpenColorIO-$OCIO_VERSION!"
483   else
484     INFO "Own OpenColorIO-$OCIO_VERSION is up to date, nothing to do!"
485     INFO "If you want to force rebuild of this lib, use the --force-ocio option."
486   fi
487 }
488
489 compile_OIIO() {
490   # To be changed each time we make edits that would modify the compiled result!
491   oiio_magic=6
492
493   _src=$SRC/OpenImageIO-$OIIO_VERSION
494   _inst=$INST/oiio-$OIIO_VERSION
495
496   # Clean install if needed!
497   magic_compile_check oiio-$OIIO_VERSION $oiio_magic
498   if [ $? -eq 1 -o $OIIO_FORCE_REBUILD == true ]; then
499     rm -rf $_inst
500   fi
501
502   if [ ! -d $_inst ]; then
503     INFO "Building OpenImageIO-$OIIO_VERSION"
504
505     prepare_opt
506
507     if [ ! -d $_src ]; then
508       mkdir -p $SRC
509       wget -c $OIIO_SOURCE -O "$_src.tar.gz"
510
511       INFO "Unpacking OpenImageIO-$OIIO_VERSION"
512       tar -C $SRC --transform "s,(.*/?)OpenImageIO-oiio[^/]*(.*),\1OpenImageIO-$OIIO_VERSION\2,x" \
513           -xf $_src.tar.gz
514
515       cd $_src
516
517       # XXX Ugly patching hack!
518       cat << EOF | patch -p1
519 diff --git a/src/libutil/SHA1.cpp b/src/libutil/SHA1.cpp
520 index b9e6c8b..c761185 100644
521 --- a/src/libutil/SHA1.cpp
522 +++ b/src/libutil/SHA1.cpp
523 @@ -8,9 +8,9 @@
524  
525  // If compiling with MFC, you might want to add #include "StdAfx.h"
526  
527 +#include "SHA1.h"
528  #include "hash.h"
529  #include "dassert.h"
530 -#include "SHA1.h"
531  
532  #ifdef SHA1_UTILITY_FUNCTIONS
533  #define SHA1_MAX_FILE_BUFFER 8000
534 EOF
535
536       cd $CWD
537
538     fi
539
540     cd $_src
541     # Always refresh the whole build!
542     if [ -d build ]; then
543       rm -rf build
544     fi    
545     mkdir build
546     cd build
547
548     cmake_d="-D CMAKE_BUILD_TYPE=Release"
549     cmake_d="$cmake_d -D CMAKE_PREFIX_PATH=$_inst"
550     cmake_d="$cmake_d -D CMAKE_INSTALL_PREFIX=$_inst"
551     cmake_d="$cmake_d -D BUILDSTATIC=ON"
552
553     # linking statically could give issues on Debian/Ubuntu (and probably other distros
554     # which doesn't like static linking) when linking shared oiio library due to missing
555     # text symbols (static libs should be compiled with -fPIC)
556     # cmake_d="$cmake_d -D LINKSTATIC=ON"
557
558     if [ -d $INST/boost ]; then
559       cmake_d="$cmake_d -D BOOST_ROOT=$INST/boost -D Boost_NO_SYSTEM_PATHS=ON"
560       if $ALL_STATIC; then
561         cmake_d="$cmake_d -D Boost_USE_STATIC_LIBS=ON"
562       fi
563     fi
564
565     # Looks like we do not need ocio in oiio for now...
566 #    if [ -d $INST/ocio ]; then
567 #      cmake_d="$cmake_d -D OCIO_PATH=$INST/ocio"
568 #    fi
569
570     if file /bin/cp | grep -q '32-bit'; then
571       cflags="-fPIC -m32 -march=i686"
572     else
573       cflags="-fPIC"
574     fi
575
576     cmake $cmake_d -D CMAKE_CXX_FLAGS="$cflags" -D CMAKE_EXE_LINKER_FLAGS="-lgcc_s -lgcc" ../src
577
578     make -j$THREADS && make install
579     make clean
580
581     if [ -d $_inst ]; then
582       rm -f $INST/oiio
583       ln -s oiio-$OIIO_VERSION $INST/oiio
584     else
585       ERROR "OpenImageIO-$OIIO_VERSION failed to compile, exiting"
586       exit 1
587     fi
588
589     magic_compile_set oiio-$OIIO_VERSION $oiio_magic
590
591     # Rebuild dependecies as well!
592     OSL_FORCE_REBUILD=true
593
594     cd $CWD
595     INFO "Done compiling OpenImageIO-$OIIO_VERSION!"
596   else
597     INFO "Own OpenImageIO-$OIIO_VERSION is up to date, nothing to do!"
598     INFO "If you want to force rebuild of this lib, use the --force-oiio option."
599   fi
600 }
601
602 compile_LLVM() {
603   # To be changed each time we make edits that would modify the compiled result!
604   llvm_magic=1
605
606   _src=$SRC/LLVM-$LLVM_VERSION
607   _inst=$INST/llvm-$LLVM_VERSION
608   _src_clang=$SRC/CLANG-$LLVM_VERSION
609
610   # Clean install if needed!
611   magic_compile_check llvm-$LLVM_VERSION $llvm_magic
612   if [ $? -eq 1 -o $LLVM_FORCE_REBUILD == true ]; then
613     rm -rf $_inst
614     rm -rf $_inst_clang
615   fi
616
617   if [ ! -d $_inst ]; then
618     INFO "Building LLVM-$LLVM_VERSION (CLANG included!)"
619
620     prepare_opt
621
622     if [ ! -d $_src -o true ]; then
623       mkdir -p $SRC
624       wget -c $LLVM_SOURCE -O "$_src.tar.gz"
625       wget -c $LLVM_CLANG_SOURCE -O "$_src_clang.tar.gz"
626
627       INFO "Unpacking LLVM-$LLVM_VERSION"
628       tar -C $SRC --transform "s,([^/]*/?)llvm-[^/]*(.*),\1LLVM-$LLVM_VERSION\2,x" \
629           -xf $_src.tar.gz
630       INFO "Unpacking CLANG-$LLVM_VERSION to $_src/tools/clang"
631       tar -C $_src/tools \
632           --transform "s,([^/]*/?)clang-[^/]*(.*),\1clang\2,x" \
633           -xf $_src_clang.tar.gz
634
635       cd $_src
636
637       # XXX Ugly patching hack!
638       cat << EOF | patch -p1
639 --- a/CMakeLists.txt
640 +++ b/CMakeLists.txt
641 @@ -13,7 +13,7 @@
642  set(LLVM_VERSION_MAJOR 3)
643  set(LLVM_VERSION_MINOR 1)
644  
645 -set(PACKAGE_VERSION "\${LLVM_VERSION_MAJOR}.\${LLVM_VERSION_MINOR}svn")
646 +set(PACKAGE_VERSION "\${LLVM_VERSION_MAJOR}.\${LLVM_VERSION_MINOR}")
647  
648  set_property(GLOBAL PROPERTY USE_FOLDERS ON)
649  
650 EOF
651
652       cd $CWD
653
654     fi
655
656     cd $_src
657
658     # Always refresh the whole build!
659     if [ -d build ]; then
660       rm -rf build
661     fi    
662     mkdir build
663     cd build
664
665     cmake_d="-D CMAKE_BUILD_TYPE=Release"
666     cmake_d="$cmake_d -D CMAKE_INSTALL_PREFIX=$_inst"
667     cmake_d="$cmake_d -D LLVM_ENABLE_FFI=ON"
668
669     if [ -d $_FFI_INCLUDE_DIR ]; then
670       cmake_d="$cmake_d -D FFI_INCLUDE_DIR=$_FFI_INCLUDE_DIR"
671     fi
672
673     cmake $cmake_d ..
674
675     make -j$THREADS && make install
676     make clean
677
678     if [ -d $_inst ]; then
679       rm -f $INST/llvm
680       ln -s llvm-$LLVM_VERSION $INST/llvm
681     else
682       ERROR "LLVM-$LLVM_VERSION failed to compile, exiting"
683       exit 1
684     fi
685
686     magic_compile_set llvm-$LLVM_VERSION $llvm_magic
687
688     # Rebuild dependecies as well!
689     OSL_FORCE_REBUILD=true
690
691     cd $CWD
692     INFO "Done compiling LLVM-$LLVM_VERSION (CLANG included)!"
693   else
694     INFO "Own LLVM-$LLVM_VERSION (CLANG included) is up to date, nothing to do!"
695     INFO "If you want to force rebuild of this lib, use the --force-llvm option."
696   fi
697 }
698
699 compile_OSL() {
700   # To be changed each time we make edits that would modify the compiled result!
701   osl_magic=7
702
703   _src=$SRC/OpenShadingLanguage-$OSL_VERSION
704   _inst=$INST/osl-$OSL_VERSION
705
706   # Clean install if needed!
707   magic_compile_check osl-$OSL_VERSION $osl_magic
708   if [ $? -eq 1 -o $OSL_FORCE_REBUILD == true ]; then
709     rm -rf $_inst
710   fi
711
712   if [ ! -d $_inst ]; then
713     INFO "Building OpenShadingLanguage-$OSL_VERSION"
714
715     prepare_opt
716
717     if [ ! -d $_src ]; then
718       mkdir -p $SRC
719
720       # XXX Using git on my own repo for now, looks like archives are not updated immediately... :/
721 #      wget -c $OSL_SOURCE -O "$_src.tar.gz"
722
723 #      INFO "Unpacking OpenShadingLanguage-$OSL_VERSION"
724 #      tar -C $SRC --transform "s,(.*/?)OpenShadingLanguage-[^/]*(.*),\1OpenShadingLanguage-$OSL_VERSION\2,x" \
725 #          -xf $_src.tar.gz
726       git clone https://github.com/mont29/OpenShadingLanguage.git $_src
727       cd $_src
728       git checkout blender-fixes
729       cd $CWD
730     fi
731
732     cd $_src
733     # XXX For now, always update from latest repo...
734     git pull origin
735
736     # Always refresh the whole build!
737     if [ -d build ]; then
738       rm -rf build
739     fi    
740     mkdir build
741     cd build
742
743     cmake_d="-D CMAKE_BUILD_TYPE=Release"
744     cmake_d="$cmake_d -D CMAKE_INSTALL_PREFIX=$_inst"
745     cmake_d="$cmake_d -D BUILDSTATIC=ON"
746     cmake_d="$cmake_d -D BUILD_TESTING=OFF"
747
748     if [ -d $INST/boost ]; then
749       cmake_d="$cmake_d -D BOOST_ROOT=$INST/boost -D Boost_NO_SYSTEM_PATHS=ON"
750       if $ALL_STATIC; then
751         cmake_d="$cmake_d -D Boost_USE_STATIC_LIBS=ON"        
752       fi
753     fi
754
755     if [ -d $INST/oiio ]; then
756       cmake_d="$cmake_d -D OPENIMAGEIOHOME=$INST/oiio"
757     fi
758
759     if [ ! -z $LLVM_VERSION_FOUND ]; then
760       cmake_d="$cmake_d -D LLVM_VERSION=$LLVM_VERSION_FOUND"
761       if [ -d $INST/llvm ]; then
762         cmake_d="$cmake_d -D LLVM_DIRECTORY=$INST/llvm"
763         cmake_d="$cmake_d -D LLVM_STATIC=ON"
764       fi
765     fi
766
767     cmake $cmake_d ../src
768
769     make -j$THREADS && make install
770     make clean
771
772     if [ -d $_inst ]; then
773       rm -f $INST/osl
774       ln -s osl-$OSL_VERSION $INST/osl
775     else
776       ERROR "OpenShadingLanguage-$OSL_VERSION failed to compile, exiting"
777       exit 1
778     fi
779
780     magic_compile_set osl-$OSL_VERSION $osl_magic
781
782     cd $CWD
783     INFO "Done compiling OpenShadingLanguage-$OSL_VERSION!"
784   else
785     INFO "Own OpenShadingLanguage-$OSL_VERSION is up to date, nothing to do!"
786     INFO "If you want to force rebuild of this lib, use the --force-osl option."
787   fi
788 }
789
790 compile_FFmpeg() {
791   # To be changed each time we make edits that would modify the compiled result!
792   ffmpeg_magic=3
793
794   _src=$SRC/ffmpeg-$FFMPEG_VERSION
795   _inst=$INST/ffmpeg-$FFMPEG_VERSION
796
797   # Clean install if needed!
798   magic_compile_check ffmpeg-$FFMPEG_VERSION $ffmpeg_magic
799   if [ $? -eq 1 -o $FFMPEG_FORCE_REBUILD == true ]; then
800     rm -rf $_inst
801   fi
802
803   if [ ! -d $_inst ]; then
804     INFO "Building ffmpeg-$FFMPEG_VERSION"
805
806     prepare_opt
807
808     if [ ! -d $_src ]; then
809       INFO "Downloading ffmpeg-$FFMPEG_VERSION"
810       mkdir -p $SRC
811       wget -c $FFMPEG_SOURCE -O "$_src.tar.bz2"
812
813       INFO "Unpacking ffmpeg-$FFMPEG_VERSION"
814       tar -C $SRC -xf $_src.tar.bz2
815     fi
816
817     cd $_src
818
819     extra=""
820
821     if $VORBIS_USE; then
822       extra="$extra --enable-libvorbis"
823     fi
824
825     if $THEORA_USE; then
826       extra="$extra --enable-libtheora"
827     fi
828
829     # XXX At least under Debian, static schro gives problem at blender linking time... :/
830     if $SCHRO_USE && ! $ALL_STATIC; then
831       extra="$extra --enable-libschroedinger"
832     fi
833
834     if $XVID_USE; then
835       extra="$extra --enable-libxvid"
836     fi
837
838     if $X264_USE; then
839       extra="$extra --enable-libx264"
840     fi
841
842     if $VPX_USE; then
843       extra="$extra --enable-libvpx"
844     fi
845
846     if $MP3LAME_USE; then
847       extra="$extra --enable-libmp3lame"
848     fi
849
850     if $OPENJPEG_USE; then
851       extra="$extra --enable-libopenjpeg"
852     fi
853
854     ./configure --cc="gcc -Wl,--as-needed" \
855         --extra-ldflags="-pthread -static-libgcc" \
856         --prefix=$_inst --enable-static \
857         --disable-ffplay --disable-ffserver --disable-doc \
858         --enable-gray \
859         --enable-avfilter --disable-vdpau \
860         --disable-bzlib --disable-libgsm --disable-libspeex \
861         --enable-pthreads --enable-zlib --enable-stripping --enable-runtime-cpudetect \
862         --disable-vaapi  --disable-libfaac --disable-nonfree --enable-gpl \
863         --disable-postproc --disable-x11grab  --disable-librtmp  --disable-libopencore-amrnb \
864         --disable-libopencore-amrwb --disable-libdc1394 --disable-version3  --disable-outdev=sdl \
865         --disable-outdev=alsa --disable-indev=sdl --disable-indev=alsa --disable-indev=jack \
866         --disable-indev=lavfi $extra
867
868     make -j$THREADS && make install
869     make clean
870
871     if [ -d $_inst ]; then
872       rm -f $INST/ffmpeg
873       ln -s ffmpeg-$FFMPEG_VERSION $INST/ffmpeg
874     else
875       ERROR "FFmpeg-$FFMPEG_VERSION failed to compile, exiting"
876       exit 1
877     fi
878
879     magic_compile_set ffmpeg-$FFMPEG_VERSION $ffmpeg_magic
880
881     cd $CWD
882     INFO "Done compiling ffmpeg-$FFMPEG_VERSION!"
883   else
884     INFO "Own ffmpeg-$FFMPEG_VERSION is up to date, nothing to do!"
885     INFO "If you want to force rebuild of this lib, use the --force-ffmpeg option."
886   fi
887 }
888
889 get_package_version_DEB() {
890     dpkg-query -W -f '${Version}' $1 | sed -r 's/.*:\s*([0-9]+:)(([0-9]+\.?)+).*/\2/'
891 }
892
893 check_package_DEB() {
894   r=`apt-cache policy $1 | grep -c 'Candidate:'`
895
896   if [ $r -ge 1 ]; then
897     return 0
898   else
899     return 1
900   fi
901 }
902
903 check_package_version_match_DEB() {
904   v=`apt-cache policy $1 | grep 'Candidate:' | sed -r 's/.*:\s*([0-9]+:)(([0-9]+\.?)+).*/\2/'`
905
906   if [ -z "$v" ]; then
907     return 1
908   fi
909
910   version_match $v $2
911   return $?
912 }
913
914 check_package_version_ge_DEB() {
915   v=`apt-cache policy $1 | grep 'Candidate:' | sed -r 's/.*:\s*([0-9]+:)?(([0-9]+\.?)+).*/\2/'`
916
917   if [ -z "$v" ]; then
918     return 1
919   fi
920
921   version_ge $v $2
922   return $?
923 }
924
925 install_DEB() {
926   INFO ""
927   INFO "Installing dependencies for DEB-based distribution"
928   INFO ""
929   INFO "`eval _echo "$COMMON_INFO"`"
930   INFO ""
931
932   if [ ! -z "`cat /etc/debian_version | grep ^6`"  ]; then
933     if [ -z "`cat /etc/apt/sources.list | grep backports.debian.org`"  ]; then
934       INFO "Looks like you're using Debian Squeeze which does have broken CMake"
935       INFO "It is highly recommended to install cmake from backports, otherwise"
936       INFO "compilation of some libraries could fail"
937       INFO ""
938       INFO "You could install newer CMake from debian-backports repository"
939       INFO "Add this this line to your /etc/apt/sources.lixt:"
940       INFO ""
941       INFO "deb http://backports.debian.org/debian-backports squeeze-backports main"
942       INFO ""
943       INFO "and then run:"
944       INFO ""
945       INFO "sudo apt-get update && sudo apt-get install cmake=2.8.7-4~bpo60+1 sudo apt-get install cmake=2.8.7-4~bpo60+1"
946       INFO ""
947       INFO "(you could also add this reporisotry using GUI like synaptic)"
948       INFO ""
949       INFO "Hit Enter to continue running the script, or hit Ctrl-C to abort the script"
950
951       read
952       INFO ""
953     fi
954   fi
955
956   sudo apt-get update
957 # XXX Why in hell? Let's let this stuff to the user's responsability!!!
958 #  sudo apt-get -y upgrade
959
960   # These libs should always be available in debian/ubuntu official repository...
961   OPENJPEG_DEV="libopenjpeg-dev"
962   SCHRO_DEV="libschroedinger-dev"
963   VORBIS_DEV="libvorbis-dev"
964   THEORA_DEV="libtheora-dev"
965
966   INFO ""
967   sudo apt-get install -y gawk cmake scons gcc g++ libjpeg-dev libpng-dev libtiff-dev \
968     libfreetype6-dev libx11-dev libxi-dev wget libsqlite3-dev libbz2-dev libncurses5-dev \
969     libssl-dev liblzma-dev libreadline-dev $OPENJPEG_DEV libopenexr-dev libopenal-dev \
970     libglew-dev yasm $SCHRO_DEV $THEORA_DEV $VORBIS_DEV libsdl1.2-dev \
971     libfftw3-dev libjack-dev python-dev patch bzip2
972
973   OPENJPEG_USE=true
974   SCHRO_USE=true
975   VORBIS_USE=true
976   THEORA_USE=true
977
978   INFO ""
979   # Grmpf, debian is libxvidcore-dev and ubuntu libxvidcore4-dev!
980   XVID_DEV="libxvidcore-dev"
981   check_package_DEB $XVID_DEV
982   if [ $? -eq 0 ]; then
983     sudo apt-get install -y $XVID_DEV
984     XVID_USE=true
985   else
986     XVID_DEV="libxvidcore4-dev"
987     check_package_DEB $XVID_DEV
988     if [ $? -eq 0 ]; then
989       sudo apt-get install -y $XVID_DEV
990       XVID_USE=true
991     fi
992   fi
993
994   INFO ""
995   MP3LAME_DEV="libmp3lame-dev"
996   check_package_DEB $MP3LAME_DEV
997   if [ $? -eq 0 ]; then
998     sudo apt-get install -y $MP3LAME_DEV
999     MP3LAME_USE=true
1000   fi
1001
1002   INFO ""
1003   X264_DEV="libx264-dev"
1004   check_package_version_ge_DEB $X264_DEV $X264_VERSION_MIN
1005   if [ $? -eq 0 ]; then
1006     sudo apt-get install -y $X264_DEV
1007     X264_USE=true
1008   fi
1009
1010   INFO ""
1011   VPX_DEV="libvpx-dev"
1012   check_package_version_ge_DEB $VPX_DEV $VPX_VERSION_MIN
1013   if [ $? -eq 0 ]; then
1014     sudo apt-get install -y $VPX_DEV
1015     VPX_USE=true
1016   fi
1017
1018   INFO ""
1019   check_package_DEB libspnav-dev
1020   if [ $? -eq 0 ]; then
1021     sudo apt-get install -y libspnav-dev
1022   fi
1023
1024   INFO ""
1025   check_package_DEB python3.3-dev
1026   if [ $? -eq 0 ]; then
1027     sudo apt-get install -y python3.3-dev
1028   else
1029     compile_Python
1030   fi
1031
1032   INFO ""
1033   check_package_version_ge_DEB libboost-dev $BOOST_VERSION_MIN
1034   if [ $? -eq 0 ]; then
1035     sudo apt-get install -y libboost-dev
1036
1037     boost_version=$(echo `get_package_version_DEB libboost-dev` | sed -r 's/^([0-9]+\.[0-9]+).*/\1/')
1038
1039     check_package_DEB libboost-locale$boost_version-dev
1040     if [ $? -eq 0 ]; then
1041       sudo apt-get install -y libboost-locale$boost_version-dev libboost-filesystem$boost_version-dev \
1042                               libboost-regex$boost_version-dev libboost-system$boost_version-dev \
1043                               libboost-thread$boost_version-dev
1044     else
1045       compile_Boost
1046     fi
1047   else
1048     compile_Boost
1049   fi
1050
1051   INFO ""
1052   check_package_version_ge_DEB libopencolorio-dev $OCIO_VERSION_MIN
1053   if [ $? -eq 0 ]; then
1054     sudo apt-get install -y libopencolorio-dev
1055   else
1056     compile_OCIO
1057   fi
1058
1059   INFO ""
1060   check_package_version_ge_DEB libopenimageio-dev $OIIO_VERSION_MIN
1061   if [ $? -eq 0 ]; then
1062     sudo apt-get install -y libopenimageio-dev
1063   else
1064     compile_OIIO
1065   fi
1066
1067   if $BUILD_OSL; then
1068     have_llvm=false
1069
1070     INFO ""
1071     check_package_DEB llvm-$LLVM_VERSION-dev
1072     if [ $? -eq 0 ]; then
1073       sudo apt-get install -y llvm-$LLVM_VERSION-dev
1074       have_llvm=true
1075       LLVM_VERSION_FOUND=$LLVM_VERSION
1076     else
1077       check_package_DEB llvm-$LLVM_VERSION_MIN-dev
1078       if [ $? -eq 0 ]; then
1079         sudo apt-get install -y llvm-$LLVM_VERSION_MIN-dev
1080         have_llvm=true
1081         LLVM_VERSION_FOUND=$LLVM_VERSION_MIN
1082       else
1083         sudo apt-get install -y libffi-dev
1084         INFO ""
1085         compile_LLVM
1086         have_llvm=true
1087         LLVM_VERSION_FOUND=$LLVM_VERSION
1088       fi
1089     fi
1090
1091     if $have_llvm; then
1092       INFO ""
1093       sudo apt-get install -y clang flex bison libtbb-dev git
1094       # No package currently!
1095       INFO ""
1096       compile_OSL
1097     fi
1098   fi
1099
1100 #  XXX Debian features libav packages as ffmpeg, those are not really compatible with blender code currently :/
1101 #      So for now, always build our own ffmpeg.
1102 #  check_package_DEB ffmpeg
1103 #  if [ $? -eq 0 ]; then
1104 #    sudo apt-get install -y ffmpeg
1105 #    ffmpeg_version=`get_package_version_DEB ffmpeg`
1106 #    INFO "ffmpeg version: $ffmpeg_version"
1107 #    if [ ! -z "$ffmpeg_version" ]; then
1108 #      if  dpkg --compare-versions $ffmpeg_version gt 0.7.2; then
1109 #        sudo apt-get install -y libavfilter-dev libavcodec-dev libavdevice-dev libavformat-dev libavutil-dev libswscale-dev
1110 #      else
1111 #        compile_FFmpeg
1112 #      fi
1113 #    fi
1114 #  fi
1115   INFO ""
1116   compile_FFmpeg
1117 }
1118
1119 get_package_version_RPM() {
1120   yum info $1 | grep Version | tail -n 1 | sed -r 's/.*:\s+(([0-9]+\.?)+).*/\1/'
1121 }
1122
1123 check_package_RPM() {
1124   r=`yum info $1 | grep -c 'Summary'`
1125
1126   if [ $r -ge 1 ]; then
1127     return 0
1128   else
1129     return 1
1130   fi
1131 }
1132
1133 check_package_version_match_RPM() {
1134   v=`get_package_version_RPM $1`
1135
1136   if [ -z "$v" ]; then
1137     return 1
1138   fi
1139
1140   version_match $v $2
1141   return $?
1142 }
1143
1144 check_package_version_ge_RPM() {
1145   v=`get_package_version_RPM $1`
1146
1147   if [ -z "$v" ]; then
1148     return 1
1149   fi
1150
1151   version_ge $v $2
1152   return $?
1153 }
1154
1155 install_RPM() {
1156   INFO ""
1157   INFO "Installing dependencies for RPM-based distribution"
1158   INFO ""
1159   INFO "`eval _echo "$COMMON_INFO"`"
1160   INFO ""
1161
1162   sudo yum -y update
1163
1164   # These libs should always be available in debian/ubuntu official repository...
1165   OPENJPEG_DEV="openjpeg-devel"
1166   SCHRO_DEV="schroedinger-devel"
1167   VORBIS_DEV="libvorbis-devel"
1168   THEORA_DEV="libtheora-devel"
1169
1170   INFO ""
1171   sudo yum -y install gawk gcc gcc-c++ cmake scons libpng-devel libtiff-devel \
1172     freetype-devel libX11-devel libXi-devel wget libsqlite3x-devel ncurses-devel \
1173     readline-devel $OPENJPEG_DEV openexr-devel openal-soft-devel \
1174     glew-devel yasm $SCHRO_DEV $THEORA_DEV $VORBIS_DEV SDL-devel \
1175     fftw-devel lame-libs jack-audio-connection-kit-devel libspnav-devel \
1176     libjpeg-devel patch python-devel
1177
1178   OPENJPEG_USE=true
1179   SCHRO_USE=true
1180   VORBIS_USE=true
1181   THEORA_USE=true
1182
1183   INFO ""
1184   X264_DEV="x264-devel"
1185   check_package_version_ge_RPM $X264_DEV $X264_VERSION_MIN
1186   if [ $? -eq 0 ]; then
1187     sudo yum install -y $X264_DEV
1188     X264_USE=true
1189   fi
1190
1191   INFO ""
1192   XVID_DEV="xvidcore-devel"
1193   check_package_RPM $XVID_DEV
1194   if [ $? -eq 0 ]; then
1195     sudo yum install -y $XVID_DEV
1196     XVID_USE=true
1197   fi
1198
1199   INFO ""
1200   VPX_DEV="libvpx-devel"
1201   check_package_version_ge_RPM $VPX_DEV $VPX_VERSION_MIN
1202   if [ $? -eq 0 ]; then
1203     sudo yum install -y $VPX_DEV
1204     VPX_USE=true
1205   fi
1206
1207   INFO ""
1208   MP3LAME_DEV="lame-devel"
1209   check_package_RPM $MP3LAME_DEV
1210   if [ $? -eq 0 ]; then
1211     sudo yum install -y $MP3LAME_DEV
1212     MP3LAME_USE=true
1213   fi
1214
1215   INFO ""
1216   check_package_version_match_RPM python3-devel $PYTHON_VERSION_MIN
1217   if [ $? -eq 0 ]; then
1218     sudo yum install -y python3-devel
1219   else
1220     compile_Python
1221   fi
1222
1223   INFO ""
1224   check_package_version_ge_RPM boost-devel $BOOST_VERSION_MIN
1225   if [ $? -eq 0 ]; then
1226     sudo yum install -y boost-devel
1227   else
1228     compile_Boost
1229   fi
1230
1231   INFO ""
1232   check_package_version_ge_RPM OpenColorIO-devel $OCIO_VERSION_MIN
1233   if [ $? -eq 0 ]; then
1234     sudo yum install -y OpenColorIO-devel
1235   else
1236     compile_OCIO
1237   fi
1238
1239   INFO ""
1240   check_package_version_ge_RPM OpenImageIO-devel $OIIO_VERSION_MIN
1241   if [ $? -eq 0 ]; then
1242     sudo yum install -y OpenImageIO-devel
1243   else
1244     compile_OIIO
1245   fi
1246
1247   if $BUILD_OSL; then
1248     have_llvm=false
1249
1250     INFO ""
1251     check_package_RPM llvm-$LLVM_VERSION-devel
1252     if [ $? -eq 0 ]; then
1253       sudo yum install -y llvm-$LLVM_VERSION-devel
1254       have_llvm=true
1255       LLVM_VERSION_FOUND=$LLVM_VERSION
1256     else
1257 #      check_package_RPM llvm-$LLVM_VERSION_MIN-devel
1258 #      if [ $? -eq 0 ]; then
1259 #        sudo yum install -y llvm-$LLVM_VERSION_MIN-devel
1260 #        have_llvm=true
1261 #        LLVM_VERSION_FOUND=$LLVM_VERSION_MIN
1262 #      else
1263 #        check_package_version_ge_RPM llvm-devel $LLVM_VERSION_MIN
1264 #        if [ $? -eq 0 ]; then
1265 #          sudo yum install -y llvm-devel
1266 #          have_llvm=true
1267 #          LLVM_VERSION_FOUND=`get_package_version_RPM llvm-devel`
1268 #        fi
1269 #      fi
1270     sudo yum install -y libffi-devel
1271     # XXX Stupid fedora puts ffi header into a darn stupid dir!
1272     _FFI_INCLUDE_DIR=`rpm -ql libffi-devel | grep -e ".*/ffi.h" | sed -r 's/(.*)\/ffi.h/\1/'`
1273     INFO ""
1274     compile_LLVM
1275     have_llvm=true
1276     LLVM_VERSION_FOUND=$LLVM_VERSION
1277     fi
1278
1279     if $have_llvm; then
1280       INFO ""
1281       sudo yum install -y flex bison clang tbb-devel git
1282       # No package currently!
1283       INFO ""
1284       compile_OSL
1285     fi
1286   fi
1287
1288   # Always for now, not sure which packages should be installed
1289   INFO ""
1290   compile_FFmpeg
1291 }
1292
1293 get_package_version_SUSE() {
1294   zypper info $1 | grep Version | tail -n 1 | sed -r 's/.*:\s+(([0-9]+\.?)+).*/\1/'
1295 }
1296
1297 check_package_SUSE() {
1298   r=`zypper info $1 | grep -c 'Summary'`
1299
1300   if [ $r -ge 1 ]; then
1301     return 0
1302   else
1303     return 1
1304   fi
1305 }
1306
1307 check_package_version_match_SUSE() {
1308   v=`get_package_version_SUSE $1`
1309
1310   if [ -z "$v" ]; then
1311     return 1
1312   fi
1313
1314   version_match $v $2
1315   return $?
1316 }
1317
1318 check_package_version_ge_SUSE() {
1319   v=`get_package_version_SUSE $1`
1320
1321   if [ -z "$v" ]; then
1322     return 1
1323   fi
1324
1325   version_ge $v $2
1326   return $?
1327 }
1328
1329 install_SUSE() {
1330   INFO ""
1331   INFO "Installing dependencies for SuSE-based distribution"
1332   INFO ""
1333   INFO "`eval _echo "$COMMON_INFO"`"
1334   INFO ""
1335
1336   sudo zypper --non-interactive update --auto-agree-with-licenses
1337
1338   # These libs should always be available in debian/ubuntu official repository...
1339   OPENJPEG_DEV="openjpeg-devel"
1340   SCHRO_DEV="schroedinger-devel"
1341   VORBIS_DEV="libvorbis-devel"
1342   THEORA_DEV="libtheora-devel"
1343
1344   INFO ""
1345   sudo zypper --non-interactive install --auto-agree-with-licenses \
1346     gawk gcc gcc-c++ cmake scons libpng12-devel libtiff-devel \
1347     freetype-devel libX11-devel libXi-devel wget sqlite3-devel ncurses-devel \
1348     readline-devel $OPENJPEG_DEV libopenexr-devel openal-soft-devel \
1349     glew-devel yasm $SCHRO_DEV $THEORA_DEV $VORBIS_DEV libSDL-devel \
1350     fftw3-devel libjack-devel libspnav-devel \
1351     libjpeg62-devel patch python-devel
1352
1353   OPENJPEG_USE=true
1354   SCHRO_USE=true
1355   VORBIS_USE=true
1356   THEORA_USE=true
1357
1358   INFO ""
1359   X264_DEV="x264-devel"
1360   check_package_version_ge_SUSE $X264_DEV $X264_VERSION_MIN
1361   if [ $? -eq 0 ]; then
1362     sudo zypper --non-interactive install --auto-agree-with-licenses $X264_DEV
1363     X264_USE=true
1364   fi
1365
1366   INFO ""
1367   XVID_DEV="xvidcore-devel"
1368   check_package_SUSE $XVID_DEV
1369   if [ $? -eq 0 ]; then
1370     sudo zypper --non-interactive install --auto-agree-with-licenses $XVID_DEV
1371     XVID_USE=true
1372   fi
1373
1374   INFO ""
1375   VPX_DEV="libvpx-devel"
1376   check_package_version_ge_SUSE $VPX_DEV $VPX_VERSION_MIN
1377   if [ $? -eq 0 ]; then
1378     sudo zypper --non-interactive install --auto-agree-with-licenses $VPX_DEV
1379     VPX_USE=true
1380   fi
1381
1382   INFO ""
1383   # No mp3 in suse, it seems.
1384   MP3LAME_DEV="lame-devel"
1385   check_package_SUSE $MP3LAME_DEV
1386   if [ $? -eq 0 ]; then
1387     sudo zypper --non-interactive install --auto-agree-with-licenses $MP3LAME_DEV
1388     MP3LAME_USE=true
1389   fi
1390
1391   INFO ""
1392   check_package_version_match_SUSE python3-devel 3.3.
1393   if [ $? -eq 0 ]; then
1394     sudo zypper --non-interactive install --auto-agree-with-licenses python3-devel
1395   else
1396     compile_Python
1397   fi
1398
1399   INFO ""
1400   # No boost_locale currently available, so let's build own boost.
1401   compile_Boost
1402
1403   INFO ""
1404   # No ocio currently available, so let's build own boost.
1405   compile_OCIO
1406
1407   INFO ""
1408   # No oiio currently available, so let's build own boost.
1409   compile_OIIO
1410
1411   if $BUILD_OSL; then
1412     have_llvm=false
1413
1414     INFO ""
1415     # Suse llvm package *_$SUCKS$_* (tm) !!!
1416 #    check_package_version_ge_SUSE llvm-devel $LLVM_VERSION_MIN
1417 #    if [ $? -eq 0 ]; then
1418 #      sudo zypper --non-interactive install --auto-agree-with-licenses llvm-devel
1419 #      have_llvm=true
1420 #      LLVM_VERSION_FOUND=`get_package_version_SUSE llvm-devel`
1421 #    fi
1422
1423     sudo zypper --non-interactive install --auto-agree-with-licenses libffi47-devel
1424     INFO ""
1425     compile_LLVM
1426     have_llvm=true
1427     LLVM_VERSION_FOUND=$LLVM_VERSION
1428
1429     if $have_llvm; then
1430       INFO ""
1431       # XXX No tbb lib!
1432       sudo zypper --non-interactive install --auto-agree-with-licenses flex bison git
1433       # No package currently!
1434       INFO ""
1435       compile_OSL
1436     fi
1437   fi
1438
1439   # No ffmpeg currently available, so let's build own boost.
1440   INFO ""
1441   compile_FFmpeg
1442 }
1443
1444 print_info_ffmpeglink_DEB() {
1445   if $ALL_STATIC; then
1446     dpkg -L $_packages | grep -e ".*\/lib[^\/]\+\.a" | gawk '{ printf(nlines ? "'"$_ffmpeg_list_sep"'%s" : "%s", $0); nlines++ }'
1447   else
1448     dpkg -L $_packages | grep -e ".*\/lib[^\/]\+\.so" | gawk '{ printf(nlines ? "'"$_ffmpeg_list_sep"'%s" : "%s", gensub(/.*lib([^\/]+)\.so/, "\\1", "g", $0)); nlines++ }'
1449   fi
1450 }
1451
1452 print_info_ffmpeglink_RPM() {
1453   if $ALL_STATIC; then
1454     rpm -ql $_packages | grep -e ".*\/lib[^\/]\+\.a" | gawk '{ printf(nlines ? "'"$_ffmpeg_list_sep"'%s" : "%s", $0); nlines++ }'
1455   else
1456     rpm -ql $_packages | grep -e ".*\/lib[^\/]\+\.so" | gawk '{ printf(nlines ? "'"$_ffmpeg_list_sep"'%s" : "%s", gensub(/.*lib([^\/]+)\.so/, "\\1", "g", $0)); nlines++ }'
1457   fi
1458 }
1459
1460 print_info_ffmpeglink_SUSE() {
1461   if $ALL_STATIC; then
1462     rpm -ql $_packages | grep -e ".*\/lib[^\/]\+\.a" | gawk '{ printf(nlines ? "'"$_ffmpeg_list_sep"'%s" : "%s", $0); nlines++ }'
1463   else
1464     rpm -ql $_packages | grep -e ".*\/lib[^\/]\+\.so" | gawk '{ printf(nlines ? "'"$_ffmpeg_list_sep"'%s" : "%s", gensub(/.*lib([^\/]+)\.so/, "\\1", "g", $0)); nlines++ }'
1465   fi
1466 }
1467
1468 print_info_ffmpeglink() {
1469   # This func must only print a ';'-separated list of libs...
1470   if [ -z "$DISTRO" ]; then
1471     ERROR "Failed to detect distribution type"
1472     exit 1
1473   fi
1474
1475   # Create list of packages from which to get libs names...
1476   _packages=""
1477
1478   if $THEORA_USE; then
1479     _packages="$_packages $THEORA_DEV"
1480   fi
1481
1482   if $VORBIS_USE; then
1483     _packages="$_packages $VORBIS_DEV"
1484   fi
1485
1486   if $XVID_USE; then
1487     _packages="$_packages $XVID_DEV"
1488   fi
1489
1490   if $VPX_USE; then
1491     _packages="$_packages $VPX_DEV"
1492   fi
1493
1494   if $MP3LAME_USE; then
1495     _packages="$_packages $MP3LAME_DEV"
1496   fi
1497
1498   if $X264_USE; then
1499     _packages="$_packages $X264_DEV"
1500   fi
1501
1502   if $OPENJPEG_USE; then
1503     _packages="$_packages $OPENJPEG_DEV"
1504   fi
1505
1506   # XXX At least under Debian, static schro give problem at blender linking time... :/
1507   if $SCHRO_USE && ! $ALL_STATIC; then
1508     _packages="$_packages $SCHRO_DEV"
1509   fi
1510
1511   if [ "$DISTRO" = "DEB" ]; then
1512     print_info_ffmpeglink_DEB
1513   elif [ "$DISTRO" = "RPM" ]; then
1514     print_info_ffmpeglink_RPM
1515   elif [ "$DISTRO" = "SUSE" ]; then
1516     print_info_ffmpeglink_SUSE
1517   # XXX TODO!
1518   else INFO "<Could not determine additional link libraries needed for ffmpeg, replace this by valid list of libs...>"
1519   fi
1520 }
1521
1522 print_info() {
1523   INFO ""
1524   INFO "If you're using CMake add this to your configuration flags:"
1525
1526   if $ALL_STATIC; then
1527     INFO "  -D WITH_STATIC_LIBS=ON"
1528   fi
1529
1530   if [ -d $INST/boost ]; then
1531     INFO "  -D BOOST_ROOT=$INST/boost"
1532     INFO "  -D Boost_NO_SYSTEM_PATHS=ON"
1533   elif $ALL_STATIC; then
1534     INFO "  -D Boost_USE_ICU=ON"
1535   fi
1536
1537   if [ -d $INST/osl -a $BUILD_OSL == true ]; then
1538     INFO "  -D CYCLES_OSL=$INST/osl"
1539     INFO "  -D WITH_CYCLES_OSL=ON"
1540     INFO "  -D LLVM_VERSION=$LLVM_VERSION_FOUND"
1541     if [ -d $INST/llvm ]; then
1542       INFO "  -D LLVM_DIRECTORY=$INST/llvm"
1543       INFO "  -D LLVM_STATIC=ON"
1544     fi
1545   fi
1546
1547   if [ -d $INST/ffmpeg ]; then
1548     INFO "  -D WITH_CODEC_FFMPEG=ON"
1549     INFO "  -D FFMPEG=$INST/ffmpeg"
1550     INFO "  -D FFMPEG_LIBRARIES='avformat;avcodec;avutil;avdevice;swscale;rt;`print_info_ffmpeglink`'"
1551   fi
1552
1553   INFO ""
1554   INFO "If you're using SCons add this to your user-config:"
1555
1556   if [ -d $INST/python-3.3 ]; then
1557     INFO "BF_PYTHON = '$INST/python-3.3'"
1558     INFO "BF_PYTHON_ABI_FLAGS = 'm'"
1559   fi
1560
1561   if [ -d $INST/ocio ]; then
1562     INFO "BF_OCIO = '$INST/ocio'"
1563   fi
1564
1565   if [ -d $INST/oiio ]; then
1566     INFO "BF_OIIO = '$INST/oiio'"
1567   fi
1568
1569   if [ -d $INST/boost ]; then
1570     INFO "BF_BOOST = '$INST/boost'"
1571   fi
1572
1573   if [ -d $INST/ffmpeg ]; then
1574     INFO "BF_FFMPEG = '$INST/ffmpeg'"
1575     _ffmpeg_list_sep=" "
1576     INFO "BF_FFMPEG_LIB = 'avformat avcodec swscale avutil avdevice `print_info_ffmpeglink`'"
1577   fi
1578
1579   INFO ""
1580   INFO ""
1581   INFO "WARNING: If this script had to build boost into $INST, and you are dynamically linking "
1582   INFO "         blender against it, you will have to run those commands as root user:"
1583   INFO ""
1584   INFO "    echo \"$INST/boost/lib\" > /etc/ld.so.conf.d/boost.conf"
1585   INFO "    ldconfig"
1586   INFO ""
1587 }
1588
1589 # Detect distributive type used on this machine
1590 detect_distro
1591
1592 if [ -z "$DISTRO" ]; then
1593   ERROR "Failed to detect distribution type"
1594   exit 1
1595 elif [ "$DISTRO" = "DEB" ]; then
1596   install_DEB
1597 elif [ "$DISTRO" = "RPM" ]; then
1598   install_RPM
1599 elif [ "$DISTRO" = "SUSE" ]; then
1600   install_SUSE
1601 fi
1602
1603 print_info
1604
1605 # Switch back to user language.
1606 LANG=LANG_BACK
1607 export LANG