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