forked from bartvdbraak/blender
2409 lines
62 KiB
Bash
Executable File
2409 lines
62 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# ##### BEGIN GPL LICENSE BLOCK #####
|
|
#
|
|
# This program is free software; you can redistribute it and/or
|
|
# modify it under the terms of the GNU General Public License
|
|
# as published by the Free Software Foundation; either version 2
|
|
# of the License, or (at your option) any later version.
|
|
#
|
|
# This program is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with this program; if not, write to the Free Software Foundation,
|
|
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
#
|
|
# ##### END GPL LICENSE BLOCK #####
|
|
|
|
# A shell script installing/building all needed dependencies to build Blender, for some Linux distributions.
|
|
|
|
# Parse command line!
|
|
ARGS=$( \
|
|
getopt \
|
|
-o s:i:t:h \
|
|
--long source:,install:,threads:,help,with-all,with-osl,with-opencollada,all-static,force-all,\
|
|
force-python,force-numpy,force-boost,force-ocio,force-oiio,force-llvm,force-osl,force-opencollada,\
|
|
force-ffmpeg,skip-python,skip-numpy,skip-boost,skip-ocio,skip-oiio,skip-llvm,skip-osl,skip-ffmpeg,\
|
|
skip-opencollada \
|
|
-- "$@" \
|
|
)
|
|
|
|
DISTRO=""
|
|
RPM=""
|
|
SRC="$HOME/src/blender-deps"
|
|
INST="/opt/lib"
|
|
CWD=$PWD
|
|
|
|
# Do not install some optional, potentially conflicting libs by default...
|
|
WITH_ALL=false
|
|
|
|
# Do not yet enable osl, use --with-osl (or --with-all) option to try it.
|
|
WITH_OSL=false
|
|
|
|
# Do not yet enable opencollada, use --with-opencollada (or --with-all) option to try it.
|
|
WITH_OPENCOLLADA=false
|
|
|
|
# Try to link everything statically. Use this to produce portable versions of blender.
|
|
ALL_STATIC=false
|
|
|
|
THREADS=`cat /proc/cpuinfo | grep cores | uniq | sed -e "s/.*: *\(.*\)/\\1/"`
|
|
if [ -z "$THREADS" ]; then
|
|
THREADS=1
|
|
fi
|
|
|
|
COMMON_INFO="\"Source code of dependencies needed to be compiled will be downloaded and extracted into '\$SRC'.
|
|
Built libs of dependencies needed to be compiled will be installed into '\$INST'.
|
|
Please edit \\\$SRC and/or \\\$INST variables at the beginning of this script,
|
|
or use --source/--install options, if you want to use other paths!
|
|
|
|
Number of threads for building: \$THREADS (automatically detected, use --threads=<nbr> to override it).
|
|
Full install: \$WITH_ALL (use --with-all option to enable it).
|
|
Building OSL: \$WITH_OSL (use --with-osl option to enable it).
|
|
Building OpenCOLLADA: \$WITH_OPENCOLLADA (use --with-opencollada option to enable it).
|
|
All static linking: \$ALL_STATIC (use --all-static option to enable it).
|
|
|
|
Example:
|
|
Full install without OpenCOLLADA: --with-all --skip-opencollada
|
|
|
|
Use --help to show all available options!\""
|
|
|
|
ARGUMENTS_INFO="\"COMMAND LINE ARGUMENTS:
|
|
-h, --help
|
|
Show this message and exit.
|
|
|
|
-s <path>, --source=<path>
|
|
Use a specific path where to store downloaded libraries sources (defaults to '\$SRC').
|
|
|
|
-i <path>, --install=<path>
|
|
Use a specific path where to install built libraries (defaults to '\$INST').
|
|
|
|
-t n, --threads=n
|
|
Use a specific number of threads when building the libraries (auto-detected as '\$THREADS').
|
|
|
|
--with-all
|
|
By default, a number of optional and not-so-often needed libraries are not installed.
|
|
This option will try to install them, at the cost of potential conflicts (depending on
|
|
how your package system is set…).
|
|
Note this option also implies all other (more specific) --with-foo options below.
|
|
|
|
--with-osl
|
|
Try to install or build the OpenShadingLanguage libraries (and their dependencies).
|
|
Still experimental!
|
|
|
|
--with-opencollada
|
|
Build and install the OpenCOLLADA libraries.
|
|
|
|
--all-static
|
|
Build libraries as statically as possible, to create static builds of Blender.
|
|
|
|
--force-all
|
|
Force the rebuild of all built libraries.
|
|
|
|
--force-python
|
|
Force the rebuild of Python.
|
|
|
|
--force-numpy
|
|
Force the rebuild of NumPy.
|
|
|
|
--force-boost
|
|
Force the rebuild of Boost.
|
|
|
|
--force-ocio
|
|
Force the rebuild of OpenColorIO.
|
|
|
|
--force-oiio
|
|
Force the rebuild of OpenImageIO.
|
|
|
|
--force-llvm
|
|
Force the rebuild of LLVM.
|
|
|
|
--force-osl
|
|
Force the rebuild of OpenShadingLanguage.
|
|
|
|
--force-opencollada
|
|
Force the rebuild of OpenCOLLADA.
|
|
|
|
--force-ffmpeg
|
|
Force the rebuild of FFMpeg.
|
|
|
|
Note about the --force-foo options:
|
|
* They obviously only have an effect if those libraries are built by this script
|
|
(i.e. if there is no available and satisfactory package)!
|
|
* If the “force-rebuilt” library is a dependency of others, it will force the rebuild
|
|
of those libraries too (e.g. --force-boost will also rebuild oiio and osl...).
|
|
* Do not forget --with-osl if you built it and still want it!
|
|
|
|
--skip-python
|
|
Unconditionally skip Python installation/building.
|
|
|
|
--skip-numpy
|
|
Unconditionally skip NumPy installation/building.
|
|
|
|
--skip-boost
|
|
Unconditionally skip Boost installation/building.
|
|
|
|
--skip-ocio
|
|
Unconditionally skip OpenColorIO installation/building.
|
|
|
|
--skip-oiio
|
|
Unconditionally skip OpenImageIO installation/building.
|
|
|
|
--skip-llvm
|
|
Unconditionally skip LLVM installation/building.
|
|
|
|
--skip-osl
|
|
Unconditionally skip OpenShadingLanguage installation/building.
|
|
|
|
--skip-opencollada
|
|
Unconditionally skip OpenCOLLADA installation/building.
|
|
|
|
--skip-ffmpeg
|
|
Unconditionally skip FFMpeg installation/building.\""
|
|
|
|
PYTHON_VERSION="3.3.0"
|
|
PYTHON_VERSION_MIN="3.3"
|
|
PYTHON_SOURCE="http://python.org/ftp/python/$PYTHON_VERSION/Python-$PYTHON_VERSION.tar.bz2"
|
|
PYTHON_FORCE_REBUILD=false
|
|
PYTHON_SKIP=false
|
|
|
|
NUMPY_VERSION="1.7.0"
|
|
NUMPY_VERSION_MIN="1.7"
|
|
NUMPY_SOURCE="http://sourceforge.net/projects/numpy/files/NumPy/$NUMPY_VERSION/numpy-$NUMPY_VERSION.tar.gz"
|
|
NUMPY_FORCE_REBUILD=false
|
|
NUMPY_SKIP=false
|
|
|
|
BOOST_VERSION="1.51.0"
|
|
_boost_version_nodots=`echo "$BOOST_VERSION" | sed -r 's/\./_/g'`
|
|
BOOST_SOURCE="http://sourceforge.net/projects/boost/files/boost/$BOOST_VERSION/boost_$_boost_version_nodots.tar.bz2/download"
|
|
BOOST_VERSION_MIN="1.49"
|
|
BOOST_FORCE_REBUILD=false
|
|
BOOST_SKIP=false
|
|
|
|
OCIO_VERSION="1.0.7"
|
|
OCIO_SOURCE="https://github.com/imageworks/OpenColorIO/tarball/v$OCIO_VERSION"
|
|
OCIO_VERSION_MIN="1.0"
|
|
OCIO_FORCE_REBUILD=false
|
|
OCIO_SKIP=false
|
|
|
|
OIIO_VERSION="1.1.7"
|
|
OIIO_SOURCE="https://github.com/OpenImageIO/oiio/tarball/Release-$OIIO_VERSION"
|
|
OIIO_VERSION_MIN="1.1"
|
|
OIIO_FORCE_REBUILD=false
|
|
OIIO_SKIP=false
|
|
|
|
LLVM_VERSION="3.1"
|
|
LLVM_VERSION_MIN="3.0"
|
|
LLVM_VERSION_FOUND=""
|
|
LLVM_SOURCE="http://llvm.org/releases/$LLVM_VERSION/llvm-$LLVM_VERSION.src.tar.gz"
|
|
LLVM_CLANG_SOURCE="http://llvm.org/releases/$LLVM_VERSION/clang-$LLVM_VERSION.src.tar.gz"
|
|
LLVM_FORCE_REBUILD=false
|
|
LLVM_SKIP=false
|
|
|
|
# OSL needs to be compiled for now!
|
|
OSL_VERSION="1.3.0"
|
|
OSL_SOURCE="https://github.com/imageworks/OpenShadingLanguage/archive/Release-1.3.0.tar.gz"
|
|
OSL_FORCE_REBUILD=false
|
|
OSL_SKIP=false
|
|
|
|
# Version??
|
|
OPENCOLLADA_VERSION="1.3"
|
|
OPENCOLLADA_SOURCE="https://github.com/KhronosGroup/OpenCOLLADA.git"
|
|
OPENCOLLADA_FORCE_REBUILD=false
|
|
OPENCOLLADA_SKIP=false
|
|
|
|
FFMPEG_VERSION="1.0"
|
|
FFMPEG_SOURCE="http://ffmpeg.org/releases/ffmpeg-$FFMPEG_VERSION.tar.bz2"
|
|
FFMPEG_VERSION_MIN="0.7.6"
|
|
FFMPEG_FORCE_REBUILD=false
|
|
FFMPEG_SKIP=false
|
|
_ffmpeg_list_sep=";"
|
|
|
|
# FFMPEG optional libs.
|
|
VORBIS_USE=false
|
|
VORBIS_DEV=""
|
|
THEORA_USE=false
|
|
THEORA_DEV=""
|
|
XVID_USE=false
|
|
XVID_DEV=""
|
|
X264_USE=false
|
|
X264_DEV=""
|
|
X264_VERSION_MIN=0.118
|
|
VPX_USE=false
|
|
VPX_VERSION_MIN=0.9.7
|
|
VPX_DEV=""
|
|
MP3LAME_USE=false
|
|
MP3LAME_DEV=""
|
|
OPENJPEG_USE=false
|
|
OPENJPEG_DEV=""
|
|
|
|
# Switch to english language, else some things (like check_package_DEB()) won't work!
|
|
LANG_BACK=$LANG
|
|
LANG=""
|
|
export LANG
|
|
|
|
|
|
_echo() {
|
|
if [ "X$1" = "X-n" ]; then
|
|
shift; printf "%s" "$@"
|
|
else
|
|
printf "%s\n" "$@"
|
|
fi
|
|
}
|
|
|
|
ERROR() {
|
|
_echo "$@"
|
|
}
|
|
|
|
INFO() {
|
|
_echo "$@"
|
|
}
|
|
|
|
# Finish parsing the commandline args.
|
|
eval set -- "$ARGS"
|
|
while true; do
|
|
case $1 in
|
|
-s|--source)
|
|
SRC="$2"; shift; shift; continue
|
|
;;
|
|
-i|--install)
|
|
INST="$2"; shift; shift; continue
|
|
;;
|
|
-t|--threads)
|
|
THREADS="$2"; shift; shift; continue
|
|
;;
|
|
-h|--help)
|
|
INFO ""
|
|
INFO "USAGE:"
|
|
INFO ""
|
|
INFO "`eval _echo "$COMMON_INFO"`"
|
|
INFO ""
|
|
INFO "`eval _echo "$ARGUMENTS_INFO"`"
|
|
INFO ""
|
|
exit 0
|
|
;;
|
|
--with-all)
|
|
WITH_ALL=true; shift; continue
|
|
;;
|
|
--with-osl)
|
|
WITH_OSL=true; shift; continue
|
|
;;
|
|
--with-opencollada)
|
|
WITH_OPENCOLLADA=true; shift; continue
|
|
;;
|
|
--all-static)
|
|
ALL_STATIC=true; shift; continue
|
|
;;
|
|
--force-all)
|
|
PYTHON_FORCE_REBUILD=true
|
|
NUMPY_FORCE_REBUILD=true
|
|
BOOST_FORCE_REBUILD=true
|
|
OCIO_FORCE_REBUILD=true
|
|
OIIO_FORCE_REBUILD=true
|
|
LLVM_FORCE_REBUILD=true
|
|
OSL_FORCE_REBUILD=true
|
|
OPENCOLLADA_FORCE_REBUILD=true
|
|
FFMPEG_FORCE_REBUILD=true
|
|
shift; continue
|
|
;;
|
|
--force-python)
|
|
PYTHON_FORCE_REBUILD=true; shift; continue
|
|
;;
|
|
--force-numpy)
|
|
NUMPY_FORCE_REBUILD=true; shift; continue
|
|
;;
|
|
--force-boost)
|
|
BOOST_FORCE_REBUILD=true; shift; continue
|
|
;;
|
|
--force-ocio)
|
|
OCIO_FORCE_REBUILD=true; shift; continue
|
|
;;
|
|
--force-oiio)
|
|
OIIO_FORCE_REBUILD=true; shift; continue
|
|
;;
|
|
--force-llvm)
|
|
LLVM_FORCE_REBUILD=true; shift; continue
|
|
;;
|
|
--force-osl)
|
|
OSL_FORCE_REBUILD=true; shift; continue
|
|
;;
|
|
--force-opencollada)
|
|
OPENCOLLADA_FORCE_REBUILD=true; shift; continue
|
|
;;
|
|
--force-ffmpeg)
|
|
FFMPEG_FORCE_REBUILD=true; shift; continue
|
|
;;
|
|
--skip-python)
|
|
PYTHON_SKIP=true; shift; continue
|
|
;;
|
|
--skip-numpy)
|
|
NUMPY_SKIP=true; shift; continue
|
|
;;
|
|
--skip-boost)
|
|
BOOST_SKIP=true; shift; continue
|
|
;;
|
|
--skip-ocio)
|
|
OCIO_SKIP=true; shift; continue
|
|
;;
|
|
--skip-oiio)
|
|
OIIO_SKIP=true; shift; continue
|
|
;;
|
|
--skip-llvm)
|
|
LLVM_SKIP=true; shift; continue
|
|
;;
|
|
--skip-osl)
|
|
OSL_SKIP=true; shift; continue
|
|
;;
|
|
--skip-opencollada)
|
|
OPENCOLLADA_SKIP=true; shift; continue
|
|
;;
|
|
--skip-ffmpeg)
|
|
FFMPEG_SKIP=true; shift; continue
|
|
;;
|
|
--)
|
|
# no more arguments to parse
|
|
break
|
|
;;
|
|
*)
|
|
INFO ""
|
|
INFO "Wrong parameter! Usage:"
|
|
INFO ""
|
|
INFO "`eval _echo "$COMMON_INFO"`"
|
|
INFO ""
|
|
exit 1
|
|
;;
|
|
esac
|
|
done
|
|
|
|
if $WITH_ALL; then
|
|
WITH_OSL=true
|
|
WITH_OPENCOLLADA=true
|
|
fi
|
|
|
|
# Return 0 if $1 = $2 (i.e. 1.01.0 = 1.1, but 1.1.1 != 1.1), else 1.
|
|
# $1 and $2 should be version numbers made of numbers only.
|
|
version_eq() {
|
|
backIFS=$IFS
|
|
IFS='.'
|
|
|
|
# Split both version numbers into their numeric elements.
|
|
arr1=( $1 )
|
|
arr2=( $2 )
|
|
|
|
ret=1
|
|
|
|
count1=${#arr1[@]}
|
|
count2=${#arr2[@]}
|
|
if [ $count2 -ge $count1 ]; then
|
|
_t=$count1
|
|
count1=$count2
|
|
count2=$_t
|
|
arr1=( $2 )
|
|
arr2=( $1 )
|
|
fi
|
|
|
|
ret=0
|
|
for (( i=0; $i < $count2; i++ ))
|
|
do
|
|
if [ $(( 10#${arr1[$i]} )) -ne $(( 10#${arr2[$i]} )) ]; then
|
|
ret=1
|
|
break
|
|
fi
|
|
done
|
|
|
|
for (( i=$count2; $i < $count1; i++ ))
|
|
do
|
|
if [ $(( 10#${arr1[$i]} )) -ne 0 ]; then
|
|
ret=1
|
|
break
|
|
fi
|
|
done
|
|
|
|
IFS=$backIFS
|
|
return $ret
|
|
}
|
|
|
|
# Return 0 if $1 >= $2, else 1.
|
|
# $1 and $2 should be version numbers made of numbers only.
|
|
version_ge() {
|
|
version_eq $1 $2
|
|
if [ $? -eq 1 -a $(_echo "$1" "$2" | sort --version-sort | head --lines=1) = "$1" ]; then
|
|
return 1
|
|
else
|
|
return 0
|
|
fi
|
|
}
|
|
|
|
# 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.
|
|
# $1 and $2 should be version numbers made of numbers only.
|
|
# $1 should be at least as long as $2!
|
|
version_match() {
|
|
backIFS=$IFS
|
|
IFS='.'
|
|
|
|
# Split both version numbers into their numeric elements.
|
|
arr1=( $1 )
|
|
arr2=( $2 )
|
|
|
|
ret=1
|
|
|
|
count1=${#arr1[@]}
|
|
count2=${#arr2[@]}
|
|
if [ $count1 -ge $count2 ]; then
|
|
ret=0
|
|
for (( i=0; $i < $count2; i++ ))
|
|
do
|
|
if [ $(( 10#${arr1[$i]} )) -ne $(( 10#${arr2[$i]} )) ]; then
|
|
ret=1
|
|
break
|
|
fi
|
|
done
|
|
fi
|
|
|
|
IFS=$backIFS
|
|
return $ret
|
|
}
|
|
|
|
detect_distro() {
|
|
if [ -f /etc/debian_version ]; then
|
|
DISTRO="DEB"
|
|
elif [ -f /etc/arch-release ]; then
|
|
DISTRO="ARCH"
|
|
elif [ -f /etc/redhat-release -o /etc/SuSE-release ]; then
|
|
DISTRO="RPM"
|
|
fi
|
|
}
|
|
|
|
rpm_flavour() {
|
|
if [ -f /etc/redhat-release ]; then
|
|
if [ "`grep '6\.' /etc/redhat-release`" ]; then
|
|
RPM="RHEL"
|
|
else
|
|
RPM="FEDORA"
|
|
fi
|
|
elif [ -f /etc/SuSE-release ]; then
|
|
RPM="SUSE"
|
|
fi
|
|
}
|
|
|
|
prepare_opt() {
|
|
INFO "Ensuring $INST exists and is writable by us"
|
|
if [ ! -d $INST ]; then
|
|
sudo mkdir -p $INST
|
|
fi
|
|
|
|
if [ ! -w $INST ]; then
|
|
sudo chown $USER $INST
|
|
sudo chmod 775 $INST
|
|
fi
|
|
}
|
|
|
|
# Check whether the current package needs to be recompiled, based on a dummy file containing a magic number in its name...
|
|
magic_compile_check() {
|
|
if [ -f $INST/.$1-magiccheck-$2 ]; then
|
|
return 0
|
|
else
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
magic_compile_set() {
|
|
rm -f $INST/.$1-magiccheck-*
|
|
touch $INST/.$1-magiccheck-$2
|
|
}
|
|
|
|
compile_Python() {
|
|
# To be changed each time we make edits that would modify the compiled result!
|
|
py_magic=0
|
|
|
|
_src=$SRC/Python-$PYTHON_VERSION
|
|
_inst=$INST/python-$PYTHON_VERSION
|
|
|
|
# Clean install if needed!
|
|
magic_compile_check python-$PYTHON_VERSION $py_magic
|
|
if [ $? -eq 1 -o $PYTHON_FORCE_REBUILD == true ]; then
|
|
rm -rf $_inst
|
|
fi
|
|
|
|
if [ ! -d $_inst ]; then
|
|
INFO "Building Python-$PYTHON_VERSION"
|
|
|
|
prepare_opt
|
|
|
|
if [ ! -d $_src ]; then
|
|
mkdir -p $SRC
|
|
wget -c $PYTHON_SOURCE -O $_src.tar.bz2
|
|
|
|
INFO "Unpacking Python-$PYTHON_VERSION"
|
|
tar -C $SRC -xf $_src.tar.bz2
|
|
fi
|
|
|
|
cd $_src
|
|
|
|
./configure --prefix=$_inst --enable-ipv6 \
|
|
--enable-loadable-sqlite-extensions --with-dbmliborder=bdb \
|
|
--with-computed-gotos --with-pymalloc
|
|
|
|
make -j$THREADS && make install
|
|
make clean
|
|
|
|
if [ -d $_inst ]; then
|
|
rm -f $INST/python-3.3
|
|
ln -s python-$PYTHON_VERSION $INST/python-3.3
|
|
else
|
|
ERROR "Python--$PYTHON_VERSION failed to compile, exiting"
|
|
exit 1
|
|
fi
|
|
|
|
magic_compile_set python-$PYTHON_VERSION $py_magic
|
|
|
|
cd $CWD
|
|
INFO "Done compiling Python-$PYTHON_VERSION!"
|
|
else
|
|
INFO "Own Python-$PYTHON_VERSION is up to date, nothing to do!"
|
|
INFO "If you want to force rebuild of this lib, use the --force-python option."
|
|
fi
|
|
}
|
|
|
|
compile_Numpy() {
|
|
# To be changed each time we make edits that would modify the compiled result!
|
|
py_magic=0
|
|
|
|
_src=$SRC/numpy-$NUMPY_VERSION
|
|
_inst=$INST/numpy-$NUMPY_VERSION
|
|
_python=$INST/python-$PYTHON_VERSION
|
|
_site=lib/python3.3/site-packages
|
|
|
|
# Clean install if needed!
|
|
magic_compile_check numpy-$NUMPY_VERSION $py_magic
|
|
if [ $? -eq 1 -o $NUMPY_FORCE_REBUILD == true ]; then
|
|
rm -rf $_inst
|
|
fi
|
|
|
|
if [ ! -d $_inst ]; then
|
|
INFO "Building Numpy-$NUMPY_VERSION"
|
|
|
|
prepare_opt
|
|
|
|
if [ ! -d $_src ]; then
|
|
mkdir -p $SRC
|
|
wget -c $NUMPY_SOURCE -O $_src.tar.gz
|
|
|
|
INFO "Unpacking Numpy-$NUMPY_VERSION"
|
|
tar -C $SRC -xf $_src.tar.gz
|
|
fi
|
|
|
|
cd $_src
|
|
|
|
$_python/bin/python3 setup.py install --prefix=$_inst
|
|
|
|
if [ -d $_inst ]; then
|
|
rm -f $_python/$_site/numpy
|
|
ln -s $_inst/$_site/numpy $_python/$_site/numpy
|
|
else
|
|
ERROR "Numpy-$NUMPY_VERSION failed to compile, exiting"
|
|
exit 1
|
|
fi
|
|
|
|
magic_compile_set numpy-$NUMPY_VERSION $py_magic
|
|
|
|
cd $CWD
|
|
INFO "Done compiling Numpy-$NUMPY_VERSION!"
|
|
else
|
|
INFO "Own Numpy-$NUMPY_VERSION is up to date, nothing to do!"
|
|
INFO "If you want to force rebuild of this lib, use the --force-numpy option."
|
|
fi
|
|
}
|
|
|
|
compile_Boost() {
|
|
# To be changed each time we make edits that would modify the compiled result!
|
|
boost_magic=7
|
|
|
|
_src=$SRC/boost-$BOOST_VERSION
|
|
_inst=$INST/boost-$BOOST_VERSION
|
|
|
|
# Clean install if needed!
|
|
magic_compile_check boost-$BOOST_VERSION $boost_magic
|
|
if [ $? -eq 1 -o $BOOST_FORCE_REBUILD == true ]; then
|
|
rm -rf $_inst
|
|
fi
|
|
|
|
if [ ! -d $_inst ]; then
|
|
INFO "Building Boost-$BOOST_VERSION"
|
|
|
|
prepare_opt
|
|
|
|
if [ ! -d $_src ]; then
|
|
INFO "Downloading Boost-$BOOST_VERSION"
|
|
mkdir -p $SRC
|
|
wget -c $BOOST_SOURCE -O $_src.tar.bz2
|
|
tar -C $SRC --transform "s,(.*/?)boost_1_[^/]+(.*),\1boost-$BOOST_VERSION\2,x" -xf $_src.tar.bz2
|
|
fi
|
|
|
|
cd $_src
|
|
if [ ! -f $_src/b2 ]; then
|
|
./bootstrap.sh
|
|
fi
|
|
./b2 -j$THREADS -a --with-system --with-filesystem --with-thread --with-regex --with-locale --with-date_time \
|
|
--prefix=$_inst --disable-icu boost.locale.icu=off install
|
|
./b2 --clean
|
|
|
|
if [ -d $_inst ]; then
|
|
rm -f $INST/boost
|
|
ln -s boost-$BOOST_VERSION $INST/boost
|
|
else
|
|
ERROR "Boost-$BOOST_VERSION failed to compile, exiting"
|
|
exit 1
|
|
fi
|
|
|
|
magic_compile_set boost-$BOOST_VERSION $boost_magic
|
|
|
|
# Rebuild dependecies as well!
|
|
OIIO_FORCE_REBUILD=true
|
|
OSL_FORCE_REBUILD=true
|
|
|
|
cd $CWD
|
|
INFO "Done compiling Boost-$BOOST_VERSION!"
|
|
else
|
|
INFO "Own Boost-$BOOST_VERSION is up to date, nothing to do!"
|
|
INFO "If you want to force rebuild of this lib, use the --force-boost option."
|
|
fi
|
|
}
|
|
|
|
compile_OCIO() {
|
|
# To be changed each time we make edits that would modify the compiled result!
|
|
ocio_magic=1
|
|
|
|
_src=$SRC/OpenColorIO-$OCIO_VERSION
|
|
_inst=$INST/ocio-$OCIO_VERSION
|
|
|
|
# Clean install if needed!
|
|
magic_compile_check ocio-$OCIO_VERSION $ocio_magic
|
|
if [ $? -eq 1 -o $OCIO_FORCE_REBUILD == true ]; then
|
|
rm -rf $_inst
|
|
fi
|
|
|
|
if [ ! -d $_inst ]; then
|
|
INFO "Building OpenColorIO-$OCIO_VERSION"
|
|
|
|
prepare_opt
|
|
|
|
if [ ! -d $_src ]; then
|
|
INFO "Downloading OpenColorIO-$OCIO_VERSION"
|
|
mkdir -p $SRC
|
|
wget -c $OCIO_SOURCE -O $_src.tar.gz
|
|
|
|
INFO "Unpacking OpenColorIO-$OCIO_VERSION"
|
|
tar -C $SRC --transform "s,(.*/?)imageworks-OpenColorIO[^/]*(.*),\1OpenColorIO-$OCIO_VERSION\2,x" \
|
|
-xf $_src.tar.gz
|
|
fi
|
|
|
|
cd $_src
|
|
# Always refresh the whole build!
|
|
if [ -d build ]; then
|
|
rm -rf build
|
|
fi
|
|
mkdir build
|
|
cd build
|
|
|
|
if file /bin/cp | grep -q '32-bit'; then
|
|
cflags="-fPIC -m32 -march=i686"
|
|
else
|
|
cflags="-fPIC"
|
|
fi
|
|
|
|
cmake -D CMAKE_BUILD_TYPE=Release \
|
|
-D CMAKE_PREFIX_PATH=$_inst \
|
|
-D CMAKE_INSTALL_PREFIX=$_inst \
|
|
-D CMAKE_CXX_FLAGS="$cflags" \
|
|
-D CMAKE_EXE_LINKER_FLAGS="-lgcc_s -lgcc" \
|
|
-D OCIO_BUILD_APPS=OFF \
|
|
-D OCIO_BUILD_PYGLUE=OFF \
|
|
..
|
|
|
|
make -j$THREADS && make install
|
|
|
|
# Force linking against static libs
|
|
rm -f $_inst/lib/*.so*
|
|
|
|
# Additional depencencies
|
|
cp ext/dist/lib/libtinyxml.a $_inst/lib
|
|
cp ext/dist/lib/libyaml-cpp.a $_inst/lib
|
|
|
|
make clean
|
|
|
|
if [ -d $_inst ]; then
|
|
rm -f $INST/ocio
|
|
ln -s ocio-$OCIO_VERSION $INST/ocio
|
|
else
|
|
ERROR "OpenColorIO-$OCIO_VERSION failed to compile, exiting"
|
|
exit 1
|
|
fi
|
|
|
|
magic_compile_set ocio-$OCIO_VERSION $ocio_magic
|
|
|
|
cd $CWD
|
|
INFO "Done compiling OpenColorIO-$OCIO_VERSION!"
|
|
else
|
|
INFO "Own OpenColorIO-$OCIO_VERSION is up to date, nothing to do!"
|
|
INFO "If you want to force rebuild of this lib, use the --force-ocio option."
|
|
fi
|
|
}
|
|
|
|
compile_OIIO() {
|
|
# To be changed each time we make edits that would modify the compiled result!
|
|
oiio_magic=7
|
|
|
|
_src=$SRC/OpenImageIO-$OIIO_VERSION
|
|
_inst=$INST/oiio-$OIIO_VERSION
|
|
|
|
# Clean install if needed!
|
|
magic_compile_check oiio-$OIIO_VERSION $oiio_magic
|
|
if [ $? -eq 1 -o $OIIO_FORCE_REBUILD == true ]; then
|
|
rm -rf $_inst
|
|
fi
|
|
|
|
if [ ! -d $_inst ]; then
|
|
INFO "Building OpenImageIO-$OIIO_VERSION"
|
|
|
|
prepare_opt
|
|
|
|
if [ ! -d $_src ]; then
|
|
mkdir -p $SRC
|
|
wget -c $OIIO_SOURCE -O "$_src.tar.gz"
|
|
|
|
INFO "Unpacking OpenImageIO-$OIIO_VERSION"
|
|
tar -C $SRC --transform "s,(.*/?)OpenImageIO-oiio[^/]*(.*),\1OpenImageIO-$OIIO_VERSION\2,x" \
|
|
-xf $_src.tar.gz
|
|
|
|
cd $CWD
|
|
|
|
fi
|
|
|
|
cd $_src
|
|
# Always refresh the whole build!
|
|
if [ -d build ]; then
|
|
rm -rf build
|
|
fi
|
|
mkdir build
|
|
cd build
|
|
|
|
cmake_d="-D CMAKE_BUILD_TYPE=Release"
|
|
cmake_d="$cmake_d -D CMAKE_PREFIX_PATH=$_inst"
|
|
cmake_d="$cmake_d -D CMAKE_INSTALL_PREFIX=$_inst"
|
|
cmake_d="$cmake_d -D BUILDSTATIC=ON"
|
|
|
|
# Optional tests and cmd tools
|
|
cmake_d="$cmake_d -D USE_QT=OFF"
|
|
cmake_d="$cmake_d -D OIIO_BUILD_TOOLS=OFF"
|
|
cmake_d="$cmake_d -D OIIO_BUILD_TESTS=OFF"
|
|
|
|
# linking statically could give issues on Debian/Ubuntu (and probably other distros
|
|
# which doesn't like static linking) when linking shared oiio library due to missing
|
|
# text symbols (static libs should be compiled with -fPIC)
|
|
# cmake_d="$cmake_d -D LINKSTATIC=ON"
|
|
|
|
if [ -d $INST/boost ]; then
|
|
cmake_d="$cmake_d -D BOOST_ROOT=$INST/boost -D Boost_NO_SYSTEM_PATHS=ON"
|
|
if $ALL_STATIC; then
|
|
cmake_d="$cmake_d -D Boost_USE_STATIC_LIBS=ON"
|
|
fi
|
|
fi
|
|
|
|
# Looks like we do not need ocio in oiio for now...
|
|
# if [ -d $INST/ocio ]; then
|
|
# cmake_d="$cmake_d -D OCIO_PATH=$INST/ocio"
|
|
# fi
|
|
|
|
if file /bin/cp | grep -q '32-bit'; then
|
|
cflags="-fPIC -m32 -march=i686"
|
|
else
|
|
cflags="-fPIC"
|
|
fi
|
|
|
|
cmake $cmake_d -D CMAKE_CXX_FLAGS="$cflags" -D CMAKE_EXE_LINKER_FLAGS="-lgcc_s -lgcc" ../src
|
|
|
|
make -j$THREADS && make install
|
|
make clean
|
|
|
|
if [ -d $_inst ]; then
|
|
rm -f $INST/oiio
|
|
ln -s oiio-$OIIO_VERSION $INST/oiio
|
|
else
|
|
ERROR "OpenImageIO-$OIIO_VERSION failed to compile, exiting"
|
|
exit 1
|
|
fi
|
|
|
|
magic_compile_set oiio-$OIIO_VERSION $oiio_magic
|
|
|
|
# Rebuild dependecies as well!
|
|
OSL_FORCE_REBUILD=true
|
|
|
|
cd $CWD
|
|
INFO "Done compiling OpenImageIO-$OIIO_VERSION!"
|
|
else
|
|
INFO "Own OpenImageIO-$OIIO_VERSION is up to date, nothing to do!"
|
|
INFO "If you want to force rebuild of this lib, use the --force-oiio option."
|
|
fi
|
|
}
|
|
|
|
compile_LLVM() {
|
|
# To be changed each time we make edits that would modify the compiled result!
|
|
llvm_magic=1
|
|
|
|
_src=$SRC/LLVM-$LLVM_VERSION
|
|
_inst=$INST/llvm-$LLVM_VERSION
|
|
_src_clang=$SRC/CLANG-$LLVM_VERSION
|
|
|
|
# Clean install if needed!
|
|
magic_compile_check llvm-$LLVM_VERSION $llvm_magic
|
|
if [ $? -eq 1 -o $LLVM_FORCE_REBUILD == true ]; then
|
|
rm -rf $_inst
|
|
rm -rf $_inst_clang
|
|
fi
|
|
|
|
if [ ! -d $_inst ]; then
|
|
INFO "Building LLVM-$LLVM_VERSION (CLANG included!)"
|
|
|
|
prepare_opt
|
|
|
|
if [ ! -d $_src -o true ]; then
|
|
mkdir -p $SRC
|
|
wget -c $LLVM_SOURCE -O "$_src.tar.gz"
|
|
wget -c $LLVM_CLANG_SOURCE -O "$_src_clang.tar.gz"
|
|
|
|
INFO "Unpacking LLVM-$LLVM_VERSION"
|
|
tar -C $SRC --transform "s,([^/]*/?)llvm-[^/]*(.*),\1LLVM-$LLVM_VERSION\2,x" \
|
|
-xf $_src.tar.gz
|
|
INFO "Unpacking CLANG-$LLVM_VERSION to $_src/tools/clang"
|
|
tar -C $_src/tools \
|
|
--transform "s,([^/]*/?)clang-[^/]*(.*),\1clang\2,x" \
|
|
-xf $_src_clang.tar.gz
|
|
|
|
cd $_src
|
|
|
|
# XXX Ugly patching hack!
|
|
cat << EOF | patch -p1
|
|
--- a/CMakeLists.txt
|
|
+++ b/CMakeLists.txt
|
|
@@ -13,7 +13,7 @@
|
|
set(LLVM_VERSION_MAJOR 3)
|
|
set(LLVM_VERSION_MINOR 1)
|
|
|
|
-set(PACKAGE_VERSION "\${LLVM_VERSION_MAJOR}.\${LLVM_VERSION_MINOR}svn")
|
|
+set(PACKAGE_VERSION "\${LLVM_VERSION_MAJOR}.\${LLVM_VERSION_MINOR}")
|
|
|
|
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
|
|
|
|
EOF
|
|
|
|
cd $CWD
|
|
|
|
fi
|
|
|
|
cd $_src
|
|
|
|
# Always refresh the whole build!
|
|
if [ -d build ]; then
|
|
rm -rf build
|
|
fi
|
|
mkdir build
|
|
cd build
|
|
|
|
cmake_d="-D CMAKE_BUILD_TYPE=Release"
|
|
cmake_d="$cmake_d -D CMAKE_INSTALL_PREFIX=$_inst"
|
|
cmake_d="$cmake_d -D LLVM_ENABLE_FFI=ON"
|
|
cmake_d="$cmake_d -D LLVM_TARGETS_TO_BUILD=X86"
|
|
|
|
if [ -d $_FFI_INCLUDE_DIR ]; then
|
|
cmake_d="$cmake_d -D FFI_INCLUDE_DIR=$_FFI_INCLUDE_DIR"
|
|
fi
|
|
|
|
cmake $cmake_d ..
|
|
|
|
make -j$THREADS && make install
|
|
make clean
|
|
|
|
if [ -d $_inst ]; then
|
|
rm -f $INST/llvm
|
|
ln -s llvm-$LLVM_VERSION $INST/llvm
|
|
else
|
|
ERROR "LLVM-$LLVM_VERSION failed to compile, exiting"
|
|
exit 1
|
|
fi
|
|
|
|
magic_compile_set llvm-$LLVM_VERSION $llvm_magic
|
|
|
|
# Rebuild dependecies as well!
|
|
OSL_FORCE_REBUILD=true
|
|
|
|
cd $CWD
|
|
INFO "Done compiling LLVM-$LLVM_VERSION (CLANG included)!"
|
|
else
|
|
INFO "Own LLVM-$LLVM_VERSION (CLANG included) is up to date, nothing to do!"
|
|
INFO "If you want to force rebuild of this lib, use the --force-llvm option."
|
|
fi
|
|
}
|
|
|
|
compile_OSL() {
|
|
# To be changed each time we make edits that would modify the compiled result!
|
|
osl_magic=8
|
|
|
|
_src=$SRC/OpenShadingLanguage-$OSL_VERSION
|
|
_inst=$INST/osl-$OSL_VERSION
|
|
|
|
# Clean install if needed!
|
|
magic_compile_check osl-$OSL_VERSION $osl_magic
|
|
if [ $? -eq 1 -o $OSL_FORCE_REBUILD == true ]; then
|
|
rm -rf $_inst
|
|
fi
|
|
|
|
if [ ! -d $_inst ]; then
|
|
INFO "Building OpenShadingLanguage-$OSL_VERSION"
|
|
|
|
prepare_opt
|
|
|
|
if [ ! -d $_src ]; then
|
|
mkdir -p $SRC
|
|
|
|
# XXX Using git on my own repo for now, looks like archives are not updated immediately... :/
|
|
# wget -c $OSL_SOURCE -O "$_src.tar.gz"
|
|
|
|
# INFO "Unpacking OpenShadingLanguage-$OSL_VERSION"
|
|
# tar -C $SRC --transform "s,(.*/?)OpenShadingLanguage-[^/]*(.*),\1OpenShadingLanguage-$OSL_VERSION\2,x" \
|
|
# -xf $_src.tar.gz
|
|
git clone https://github.com/mont29/OpenShadingLanguage.git $_src
|
|
cd $_src
|
|
git checkout blender-fixes
|
|
cd $CWD
|
|
fi
|
|
|
|
cd $_src
|
|
# XXX For now, always update from latest repo...
|
|
git pull origin
|
|
|
|
# Always refresh the whole build!
|
|
if [ -d build ]; then
|
|
rm -rf build
|
|
fi
|
|
mkdir build
|
|
cd build
|
|
|
|
cmake_d="-D CMAKE_BUILD_TYPE=Release"
|
|
cmake_d="$cmake_d -D CMAKE_INSTALL_PREFIX=$_inst"
|
|
cmake_d="$cmake_d -D BUILDSTATIC=ON"
|
|
cmake_d="$cmake_d -D BUILD_TESTING=OFF"
|
|
cmake_d="$cmake_d -D STOP_ON_WARNING=OFF"
|
|
|
|
if [ -d $INST/boost ]; then
|
|
cmake_d="$cmake_d -D BOOST_ROOT=$INST/boost -D Boost_NO_SYSTEM_PATHS=ON"
|
|
if $ALL_STATIC; then
|
|
cmake_d="$cmake_d -D Boost_USE_STATIC_LIBS=ON"
|
|
fi
|
|
fi
|
|
|
|
if [ -d $INST/oiio ]; then
|
|
cmake_d="$cmake_d -D OPENIMAGEIOHOME=$INST/oiio"
|
|
fi
|
|
|
|
if [ ! -z $LLVM_VERSION_FOUND ]; then
|
|
cmake_d="$cmake_d -D LLVM_VERSION=$LLVM_VERSION_FOUND"
|
|
if [ -d $INST/llvm ]; then
|
|
cmake_d="$cmake_d -D LLVM_DIRECTORY=$INST/llvm"
|
|
cmake_d="$cmake_d -D LLVM_STATIC=ON"
|
|
fi
|
|
fi
|
|
|
|
cmake $cmake_d ../src
|
|
|
|
make -j$THREADS && make install
|
|
make clean
|
|
|
|
if [ -d $_inst ]; then
|
|
rm -f $INST/osl
|
|
ln -s osl-$OSL_VERSION $INST/osl
|
|
else
|
|
ERROR "OpenShadingLanguage-$OSL_VERSION failed to compile, exiting"
|
|
exit 1
|
|
fi
|
|
|
|
magic_compile_set osl-$OSL_VERSION $osl_magic
|
|
|
|
cd $CWD
|
|
INFO "Done compiling OpenShadingLanguage-$OSL_VERSION!"
|
|
else
|
|
INFO "Own OpenShadingLanguage-$OSL_VERSION is up to date, nothing to do!"
|
|
INFO "If you want to force rebuild of this lib, use the --force-osl option."
|
|
fi
|
|
}
|
|
|
|
compile_OpenCOLLADA() {
|
|
# To be changed each time we make edits that would modify the compiled results!
|
|
opencollada_magic=6
|
|
|
|
_src=$SRC/OpenCOLLADA-$OPENCOLLADA_VERSION
|
|
_inst=$INST/opencollada-$OPENCOLLADA_VERSION
|
|
|
|
# Clean install if needed!
|
|
magic_compile_check opencollada-$OPENCOLLADA_VERSION $opencollada_magic
|
|
if [ $? -eq 1 -o $OPENCOLLADA_FORCE_REBUILD == true ]; then
|
|
rm -rf $_inst
|
|
fi
|
|
|
|
if [ ! -d $_inst ]; then
|
|
INFO "Building OpenCOLLADA-$OPENCOLLADA_VERSION"
|
|
|
|
prepare_opt
|
|
|
|
if [ ! -d $_src ]; then
|
|
mkdir -p $SRC
|
|
git clone $OPENCOLLADA_SOURCE $_src
|
|
fi
|
|
|
|
cd $_src
|
|
|
|
# XXX For now, always update from latest repo...
|
|
git pull origin master
|
|
|
|
# Stick to same rev as windows' libs...
|
|
git checkout e886e196673222f2f4bc32b936dc96419fff815f
|
|
git reset --hard
|
|
|
|
# Always refresh the whole build!
|
|
if [ -d build ]; then
|
|
rm -rf build
|
|
fi
|
|
mkdir build
|
|
cd build
|
|
|
|
cmake_d="-D CMAKE_BUILD_TYPE=Release"
|
|
cmake_d="$cmake_d -D CMAKE_INSTALL_PREFIX=$_inst"
|
|
cmake_d="$cmake_d -D USE_EXPAT=OFF"
|
|
cmake_d="$cmake_d -D USE_LIBXML=ON"
|
|
cmake_d="$cmake_d -D USE_STATIC=ON"
|
|
|
|
cmake $cmake_d ../
|
|
|
|
make -j$THREADS && make install
|
|
make clean
|
|
|
|
if [ -d $_inst ]; then
|
|
rm -f $INST/opencollada
|
|
ln -s opencollada-$OPENCOLLADA_VERSION $INST/opencollada
|
|
else
|
|
ERROR "OpenCOLLADA-$OPENCOLLADA_VERSION failed to compile, exiting"
|
|
exit 1
|
|
fi
|
|
|
|
magic_compile_set opencollada-$OPENCOLLADA_VERSION $opencollada_magic
|
|
|
|
cd $CWD
|
|
INFO "Done compiling OpenCOLLADA-$OPENCOLLADA_VERSION!"
|
|
else
|
|
INFO "Own OpenCOLLADA-$OPENCOLLADA_VERSION is up to date, nothing to do!"
|
|
INFO "If you want to force rebuild of this lib, use the --force-opencollada option."
|
|
fi
|
|
}
|
|
|
|
compile_FFmpeg() {
|
|
# To be changed each time we make edits that would modify the compiled result!
|
|
ffmpeg_magic=3
|
|
|
|
_src=$SRC/ffmpeg-$FFMPEG_VERSION
|
|
_inst=$INST/ffmpeg-$FFMPEG_VERSION
|
|
|
|
# Clean install if needed!
|
|
magic_compile_check ffmpeg-$FFMPEG_VERSION $ffmpeg_magic
|
|
if [ $? -eq 1 -o $FFMPEG_FORCE_REBUILD == true ]; then
|
|
rm -rf $_inst
|
|
fi
|
|
|
|
if [ ! -d $_inst ]; then
|
|
INFO "Building ffmpeg-$FFMPEG_VERSION"
|
|
|
|
prepare_opt
|
|
|
|
if [ ! -d $_src ]; then
|
|
INFO "Downloading ffmpeg-$FFMPEG_VERSION"
|
|
mkdir -p $SRC
|
|
wget -c $FFMPEG_SOURCE -O "$_src.tar.bz2"
|
|
|
|
INFO "Unpacking ffmpeg-$FFMPEG_VERSION"
|
|
tar -C $SRC -xf $_src.tar.bz2
|
|
fi
|
|
|
|
cd $_src
|
|
|
|
extra=""
|
|
|
|
if $VORBIS_USE; then
|
|
extra="$extra --enable-libvorbis"
|
|
fi
|
|
|
|
if $THEORA_USE; then
|
|
extra="$extra --enable-libtheora"
|
|
fi
|
|
|
|
if $XVID_USE; then
|
|
extra="$extra --enable-libxvid"
|
|
fi
|
|
|
|
if $X264_USE; then
|
|
extra="$extra --enable-libx264"
|
|
fi
|
|
|
|
if $VPX_USE; then
|
|
extra="$extra --enable-libvpx"
|
|
fi
|
|
|
|
if $MP3LAME_USE; then
|
|
extra="$extra --enable-libmp3lame"
|
|
fi
|
|
|
|
if $OPENJPEG_USE; then
|
|
extra="$extra --enable-libopenjpeg"
|
|
fi
|
|
|
|
./configure --cc="gcc -Wl,--as-needed" \
|
|
--extra-ldflags="-pthread -static-libgcc" \
|
|
--prefix=$_inst --enable-static \
|
|
--disable-ffplay --disable-ffserver --disable-doc \
|
|
--enable-gray \
|
|
--enable-avfilter --disable-vdpau \
|
|
--disable-bzlib --disable-libgsm --disable-libspeex \
|
|
--enable-pthreads --enable-zlib --enable-stripping --enable-runtime-cpudetect \
|
|
--disable-vaapi --disable-libfaac --disable-nonfree --enable-gpl \
|
|
--disable-postproc --disable-x11grab --disable-librtmp --disable-libopencore-amrnb \
|
|
--disable-libopencore-amrwb --disable-libdc1394 --disable-version3 --disable-outdev=sdl \
|
|
--disable-outdev=alsa --disable-indev=sdl --disable-indev=alsa --disable-indev=jack \
|
|
--disable-indev=lavfi $extra
|
|
|
|
make -j$THREADS && make install
|
|
make clean
|
|
|
|
if [ -d $_inst ]; then
|
|
rm -f $INST/ffmpeg
|
|
ln -s ffmpeg-$FFMPEG_VERSION $INST/ffmpeg
|
|
else
|
|
ERROR "FFmpeg-$FFMPEG_VERSION failed to compile, exiting"
|
|
exit 1
|
|
fi
|
|
|
|
magic_compile_set ffmpeg-$FFMPEG_VERSION $ffmpeg_magic
|
|
|
|
cd $CWD
|
|
INFO "Done compiling ffmpeg-$FFMPEG_VERSION!"
|
|
else
|
|
INFO "Own ffmpeg-$FFMPEG_VERSION is up to date, nothing to do!"
|
|
INFO "If you want to force rebuild of this lib, use the --force-ffmpeg option."
|
|
fi
|
|
}
|
|
|
|
|
|
|
|
get_package_version_DEB() {
|
|
dpkg-query -W -f '${Version}' $1 | sed -r 's/.*:\s*([0-9]+:)(([0-9]+\.?)+).*/\2/'
|
|
}
|
|
|
|
check_package_DEB() {
|
|
r=`apt-cache show $1 | grep -c 'Package:'`
|
|
|
|
if [ $r -ge 1 ]; then
|
|
return 0
|
|
else
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
check_package_version_match_DEB() {
|
|
v=`apt-cache policy $1 | grep 'Candidate:' | sed -r 's/.*:\s*([0-9]+:)(([0-9]+\.?)+).*/\2/'`
|
|
|
|
if [ -z "$v" ]; then
|
|
return 1
|
|
fi
|
|
|
|
version_match $v $2
|
|
return $?
|
|
}
|
|
|
|
check_package_version_ge_DEB() {
|
|
v=`apt-cache policy $1 | grep 'Candidate:' | sed -r 's/.*:\s*([0-9]+:)?(([0-9]+\.?)+).*/\2/'`
|
|
|
|
if [ -z "$v" ]; then
|
|
return 1
|
|
fi
|
|
|
|
version_ge $v $2
|
|
return $?
|
|
}
|
|
|
|
install_packages_DEB() {
|
|
sudo apt-get install -y --force-yes $@
|
|
if [ $? -ge 1 ]; then
|
|
ERROR "apt-get failed to install requested packages, exiting."
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
install_DEB() {
|
|
INFO ""
|
|
INFO "Installing dependencies for DEB-based distribution"
|
|
INFO ""
|
|
INFO "`eval _echo "$COMMON_INFO"`"
|
|
INFO ""
|
|
|
|
read -p "Do you want to continue (Y/n)?"
|
|
[ "$(echo ${REPLY:=Y} | tr [:upper:] [:lower:])" != "y" ] && exit
|
|
|
|
if [ ! -z "`cat /etc/debian_version | grep ^6`" ]; then
|
|
if [ -z "`cat /etc/apt/sources.list | grep backports.debian.org`" ]; then
|
|
INFO "Looks like you're using Debian Squeeze which does have broken CMake"
|
|
INFO "It is highly recommended to install cmake from backports, otherwise"
|
|
INFO "compilation of some libraries could fail"
|
|
INFO ""
|
|
INFO "You could install newer CMake from debian-backports repository"
|
|
INFO "Add this this line to your /etc/apt/sources.lixt:"
|
|
INFO ""
|
|
INFO "deb http://backports.debian.org/debian-backports squeeze-backports main"
|
|
INFO ""
|
|
INFO "and then run:"
|
|
INFO ""
|
|
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"
|
|
INFO ""
|
|
INFO "(you could also add this reporisotry using GUI like synaptic)"
|
|
INFO ""
|
|
INFO "Hit Enter to continue running the script, or hit Ctrl-C to abort the script"
|
|
|
|
read
|
|
INFO ""
|
|
fi
|
|
fi
|
|
|
|
sudo apt-get update
|
|
|
|
# These libs should always be available in debian/ubuntu official repository...
|
|
OPENJPEG_DEV="libopenjpeg-dev"
|
|
VORBIS_DEV="libvorbis-dev"
|
|
THEORA_DEV="libtheora-dev"
|
|
|
|
_packages="gawk cmake cmake-curses-gui scons build-essential libjpeg-dev libpng-dev \
|
|
libfreetype6-dev libx11-dev libxi-dev wget libsqlite3-dev libbz2-dev \
|
|
libncurses5-dev libssl-dev liblzma-dev libreadline-dev $OPENJPEG_DEV \
|
|
libopenexr-dev libopenal-dev libglew-dev yasm $THEORA_DEV $VORBIS_DEV \
|
|
libsdl1.2-dev libfftw3-dev patch bzip2"
|
|
|
|
OPENJPEG_USE=true
|
|
VORBIS_USE=true
|
|
THEORA_USE=true
|
|
|
|
# Install newest libtiff-dev in debian/ubuntu.
|
|
TIFF="libtiff"
|
|
check_package_DEB $TIFF
|
|
if [ $? -eq 0 ]; then
|
|
_packages="$_packages $TIFF-dev"
|
|
else
|
|
TIFF="libtiff5"
|
|
check_package_DEB $TIFF
|
|
if [ $? -eq 0 ]; then
|
|
_packages="$_packages $TIFF-dev"
|
|
else
|
|
TIFF="libtiff4" # Some old distro, like e.g. ubuntu 10.04 :/
|
|
check_package_DEB $TIFF
|
|
if [ $? -eq 0 ]; then
|
|
_packages="$_packages $TIFF-dev"
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
GIT="git"
|
|
check_package_DEB $GIT
|
|
if [ $? -eq 0 ]; then
|
|
INFO $GIT
|
|
_packages="$_packages $GIT"
|
|
else
|
|
GIT="git-core" # Some old distro, like e.g. ubuntu 10.04 :/
|
|
check_package_DEB $GIT
|
|
if [ $? -eq 0 ]; then
|
|
INFO $GIT
|
|
_packages="$_packages $GIT"
|
|
fi
|
|
fi
|
|
|
|
if $WITH_ALL; then
|
|
_packages="$_packages libspnav-dev libjack-dev"
|
|
fi
|
|
|
|
INFO ""
|
|
install_packages_DEB $_packages
|
|
|
|
INFO ""
|
|
X264_DEV="libx264-dev"
|
|
check_package_version_ge_DEB $X264_DEV $X264_VERSION_MIN
|
|
if [ $? -eq 0 ]; then
|
|
install_packages_DEB $X264_DEV
|
|
X264_USE=true
|
|
fi
|
|
|
|
if $WITH_ALL; then
|
|
INFO ""
|
|
# Grmpf, debian is libxvidcore-dev and ubuntu libxvidcore4-dev!
|
|
# Note: not since ubuntu 10.04
|
|
XVID_DEV="libxvidcore-dev"
|
|
check_package_DEB $XVID_DEV
|
|
if [ $? -eq 0 ]; then
|
|
install_packages_DEB $XVID_DEV
|
|
XVID_USE=true
|
|
else
|
|
XVID_DEV="libxvidcore4-dev"
|
|
check_package_DEB $XVID_DEV
|
|
if [ $? -eq 0 ]; then
|
|
install_packages_DEB $XVID_DEV
|
|
XVID_USE=true
|
|
fi
|
|
fi
|
|
|
|
INFO ""
|
|
MP3LAME_DEV="libmp3lame-dev"
|
|
check_package_DEB $MP3LAME_DEV
|
|
if [ $? -eq 0 ]; then
|
|
install_packages_DEB $MP3LAME_DEV
|
|
MP3LAME_USE=true
|
|
fi
|
|
|
|
INFO ""
|
|
VPX_DEV="libvpx-dev"
|
|
check_package_version_ge_DEB $VPX_DEV $VPX_VERSION_MIN
|
|
if [ $? -eq 0 ]; then
|
|
install_packages_DEB $VPX_DEV
|
|
VPX_USE=true
|
|
fi
|
|
fi
|
|
|
|
INFO ""
|
|
if $PYTHON_SKIP; then
|
|
INFO "WARNING! Skipping Python installation, as requested..."
|
|
else
|
|
check_package_DEB python$PYTHON_VERSION_MIN-dev
|
|
if [ $? -eq 0 ]; then
|
|
install_packages_DEB python$PYTHON_VERSION_MIN-dev
|
|
INFO ""
|
|
if $NUMPY_SKIP; then
|
|
INFO "WARNING! Skipping NumPy installation, as requested..."
|
|
else
|
|
check_package_DEB python$PYTHON_VERSION_MIN-numpy
|
|
if [ $? -eq 0 ]; then
|
|
install_packages_DEB python$PYTHON_VERSION_MIN-numpy
|
|
else
|
|
INFO "WARNING! Sorry, using python package but no numpy package available!"
|
|
fi
|
|
fi
|
|
else
|
|
compile_Python
|
|
INFO ""
|
|
if $NUMPY_SKIP; then
|
|
INFO "WARNING! Skipping NumPy installation, as requested..."
|
|
else
|
|
compile_Numpy
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
INFO ""
|
|
if $BOOST_SKIP; then
|
|
INFO "WARNING! Skipping Boost installation, as requested..."
|
|
else
|
|
check_package_version_ge_DEB libboost-dev $BOOST_VERSION_MIN
|
|
if [ $? -eq 0 ]; then
|
|
install_packages_DEB libboost-dev
|
|
|
|
boost_version=$(echo `get_package_version_DEB libboost-dev` | sed -r 's/^([0-9]+\.[0-9]+).*/\1/')
|
|
|
|
check_package_DEB libboost-locale$boost_version-dev
|
|
if [ $? -eq 0 ]; then
|
|
install_packages_DEB libboost-locale$boost_version-dev libboost-filesystem$boost_version-dev \
|
|
libboost-regex$boost_version-dev libboost-system$boost_version-dev \
|
|
libboost-thread$boost_version-dev
|
|
else
|
|
compile_Boost
|
|
fi
|
|
else
|
|
compile_Boost
|
|
fi
|
|
fi
|
|
|
|
INFO ""
|
|
if $OCIO_SKIP; then
|
|
INFO "WARNING! Skipping OpenColorIO installation, as requested..."
|
|
else
|
|
check_package_version_ge_DEB libopencolorio-dev $OCIO_VERSION_MIN
|
|
if [ $? -eq 0 ]; then
|
|
install_packages_DEB libopencolorio-dev
|
|
else
|
|
compile_OCIO
|
|
fi
|
|
fi
|
|
|
|
INFO ""
|
|
if $OIIO_SKIP; then
|
|
INFO "WARNING! Skipping OpenImageIO installation, as requested..."
|
|
else
|
|
check_package_version_ge_DEB libopenimageio-dev $OIIO_VERSION_MIN
|
|
if [ $? -eq 0 ]; then
|
|
install_packages_DEB libopenimageio-dev
|
|
else
|
|
compile_OIIO
|
|
fi
|
|
fi
|
|
|
|
if $WITH_OSL; then
|
|
have_llvm=false
|
|
|
|
if $LLVM_SKIP; then
|
|
INFO "WARNING! Skipping LLVM installation, as requested (this also implies skipping OSL!)..."
|
|
else
|
|
INFO ""
|
|
check_package_DEB llvm-$LLVM_VERSION-dev
|
|
if [ $? -eq 0 ]; then
|
|
install_packages_DEB llvm-$LLVM_VERSION-dev clang
|
|
have_llvm=true
|
|
LLVM_VERSION_FOUND=$LLVM_VERSION
|
|
else
|
|
check_package_DEB llvm-$LLVM_VERSION_MIN-dev
|
|
if [ $? -eq 0 ]; then
|
|
install_packages_DEB llvm-$LLVM_VERSION_MIN-dev clang
|
|
have_llvm=true
|
|
LLVM_VERSION_FOUND=$LLVM_VERSION_MIN
|
|
else
|
|
install_packages_DEB libffi-dev
|
|
# LLVM can't find the debian ffi header dir
|
|
_FFI_INCLUDE_DIR=`dpkg -L libffi-dev | grep -e ".*/ffi.h" | sed -r 's/(.*)\/ffi.h/\1/'`
|
|
INFO ""
|
|
compile_LLVM
|
|
have_llvm=true
|
|
LLVM_VERSION_FOUND=$LLVM_VERSION
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
if $OSL_SKIP; then
|
|
INFO "WARNING! Skipping OpenShadingLanguage installation, as requested..."
|
|
else
|
|
if $have_llvm; then
|
|
INFO ""
|
|
install_packages_DEB flex bison libtbb-dev
|
|
# No package currently!
|
|
INFO ""
|
|
compile_OSL
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
if $WITH_OPENCOLLADA; then
|
|
if $OPENCOLLADA_SKIP; then
|
|
INFO "WARNING! Skipping OpenCOLLADA installation, as requested..."
|
|
else
|
|
INFO ""
|
|
install_packages_DEB libpcre3-dev libxml2-dev
|
|
# Find path to libxml shared lib...
|
|
_XML2_LIB=`dpkg -L libxml2-dev | grep -e ".*/libxml2.so"`
|
|
# No package
|
|
INFO ""
|
|
compile_OpenCOLLADA
|
|
fi
|
|
fi
|
|
|
|
INFO ""
|
|
if $FFMPEG_SKIP; then
|
|
INFO "WARNING! Skipping FFMpeg installation, as requested..."
|
|
else
|
|
# XXX Debian features libav packages as ffmpeg, those are not really compatible with blender code currently :/
|
|
# So for now, always build our own ffmpeg.
|
|
# check_package_DEB ffmpeg
|
|
# if [ $? -eq 0 ]; then
|
|
# install_packages_DEB ffmpeg
|
|
# ffmpeg_version=`get_package_version_DEB ffmpeg`
|
|
# INFO "ffmpeg version: $ffmpeg_version"
|
|
# if [ ! -z "$ffmpeg_version" ]; then
|
|
# if dpkg --compare-versions $ffmpeg_version gt 0.7.2; then
|
|
# install_packages_DEB libavfilter-dev libavcodec-dev libavdevice-dev libavformat-dev libavutil-dev libswscale-dev
|
|
# else
|
|
# compile_FFmpeg
|
|
# fi
|
|
# fi
|
|
# fi
|
|
compile_FFmpeg
|
|
fi
|
|
}
|
|
|
|
|
|
|
|
get_package_version_RPM() {
|
|
rpm_flavour
|
|
if [ $RPM = "FEDORA" -o $RPM = "RHEL" ]; then
|
|
yum info $1 | grep Version | tail -n 1 | sed -r 's/.*:\s+(([0-9]+\.?)+).*/\1/'
|
|
elif [ $RPM = "SUSE" ]; then
|
|
zypper info $1 | grep Version | tail -n 1 | sed -r 's/.*:\s+(([0-9]+\.?)+).*/\1/'
|
|
fi
|
|
}
|
|
|
|
check_package_RPM() {
|
|
rpm_flavour
|
|
if [ $RPM = "FEDORA" -o $RPM = "RHEL" ]; then
|
|
r=`yum info $1 | grep -c 'Summary'`
|
|
elif [ $RPM = "SUSE" ]; then
|
|
r=`zypper info $1 | grep -c 'Summary'`
|
|
fi
|
|
|
|
if [ $r -ge 1 ]; then
|
|
return 0
|
|
else
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
check_package_version_match_RPM() {
|
|
v=`get_package_version_RPM $1`
|
|
|
|
if [ -z "$v" ]; then
|
|
return 1
|
|
fi
|
|
|
|
version_match $v $2
|
|
return $?
|
|
}
|
|
|
|
check_package_version_ge_RPM() {
|
|
v=`get_package_version_RPM $1`
|
|
|
|
if [ -z "$v" ]; then
|
|
return 1
|
|
fi
|
|
|
|
version_ge $v $2
|
|
return $?
|
|
}
|
|
|
|
install_packages_RPM() {
|
|
rpm_flavour
|
|
if [ $RPM = "FEDORA" -o $RPM = "RHEL" ]; then
|
|
sudo yum install -y $@
|
|
if [ $? -ge 1 ]; then
|
|
ERROR "yum failed to install requested packages, exiting."
|
|
exit 1
|
|
fi
|
|
|
|
elif [ $RPM = "SUSE" ]; then
|
|
sudo zypper --non-interactive install --auto-agree-with-licenses $@
|
|
if [ $? -ge 1 ]; then
|
|
ERROR "zypper failed to install requested packages, exiting."
|
|
exit 1
|
|
fi
|
|
fi
|
|
}
|
|
|
|
install_RPM() {
|
|
INFO ""
|
|
INFO "Installing dependencies for RPM-based distribution"
|
|
INFO ""
|
|
INFO "`eval _echo "$COMMON_INFO"`"
|
|
INFO ""
|
|
|
|
read -p "Do you want to continue (Y/n)?"
|
|
[ "$(echo ${REPLY:=Y} | tr [:upper:] [:lower:])" != "y" ] && exit
|
|
|
|
# Enable non-free repositories for all flavours
|
|
rpm_flavour
|
|
if [ $RPM = "FEDORA" ]; then
|
|
_fedora_rel="`egrep "[0-9]{1,}" /etc/fedora-release -o`"
|
|
sudo yum -y localinstall --nogpgcheck \
|
|
http://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-$_fedora_rel.noarch.rpm \
|
|
http://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-$_fedora_rel.noarch.rpm
|
|
|
|
sudo yum -y update
|
|
|
|
# Install cmake now because of difference with RHEL
|
|
sudo yum -y install cmake
|
|
|
|
elif [ $RPM = "RHEL" ]; then
|
|
sudo yum -y localinstall --nogpgcheck \
|
|
http://download.fedoraproject.org/pub/epel/6/$(uname -i)/epel-release-6-8.noarch.rpm \
|
|
http://download1.rpmfusion.org/free/el/updates/6/$(uname -i)/rpmfusion-free-release-6-1.noarch.rpm \
|
|
http://download1.rpmfusion.org/nonfree/el/updates/6/$(uname -i)/rpmfusion-nonfree-release-6-1.noarch.rpm
|
|
|
|
sudo yum -y update
|
|
|
|
# Install cmake 2.8 from other repo
|
|
mkdir -p $SRC
|
|
if [ -f $SRC/cmake-2.8.8-4.el6.$(uname -m).rpm ]; then
|
|
INFO ""
|
|
INFO "Special cmake already installed"
|
|
else
|
|
curl -O ftp://ftp.pbone.net/mirror/atrpms.net/el6-$(uname -i)/atrpms/testing/cmake-2.8.8-4.el6.$(uname -m).rpm
|
|
mv cmake-2.8.8-4.el6.$(uname -m).rpm $SRC/
|
|
sudo rpm -ihv $SRC/cmake-2.8.8-4.el6.$(uname -m).rpm
|
|
fi
|
|
|
|
elif [ $RPM = "SUSE" ]; then
|
|
# Install this now to avoid using the version from packman repository...
|
|
if $WITH_ALL; then
|
|
install_packages_RPM libjack-devel
|
|
fi
|
|
|
|
_suse_rel="`grep VERSION /etc/SuSE-release | gawk '{print $3}'`"
|
|
sudo zypper ar -f http://packman.inode.at/suse/openSUSE_$_suse_rel/ packman
|
|
|
|
sudo zypper --non-interactive --gpg-auto-import-keys update --auto-agree-with-licenses
|
|
fi
|
|
|
|
# These libs should always be available in fedora/suse official repository...
|
|
OPENJPEG_DEV="openjpeg-devel"
|
|
VORBIS_DEV="libvorbis-devel"
|
|
THEORA_DEV="libtheora-devel"
|
|
|
|
_packages="gcc gcc-c++ make scons libtiff-devel freetype-devel libjpeg-devel\
|
|
libpng-devel libX11-devel libXi-devel wget ncurses-devel \
|
|
readline-devel $OPENJPEG_DEV openal-soft-devel \
|
|
glew-devel yasm $THEORA_DEV $VORBIS_DEV patch"
|
|
|
|
OPENJPEG_USE=true
|
|
VORBIS_USE=true
|
|
THEORA_USE=true
|
|
|
|
if [ $RPM = "FEDORA" -o $RPM = "RHEL" ]; then
|
|
|
|
_packages="$_packages libsqlite3x-devel openexr-devel fftw-devel SDL-devel"
|
|
|
|
if $WITH_ALL; then
|
|
_packages="$_packages jack-audio-connection-kit-devel"
|
|
fi
|
|
|
|
INFO ""
|
|
install_packages_RPM $_packages
|
|
|
|
INFO ""
|
|
X264_DEV="x264-devel"
|
|
check_package_version_ge_RPM $X264_DEV $X264_VERSION_MIN
|
|
if [ $? -eq 0 ]; then
|
|
install_packages_RPM $X264_DEV
|
|
X264_USE=true
|
|
fi
|
|
|
|
if $WITH_ALL; then
|
|
INFO ""
|
|
XVID_DEV="xvidcore-devel"
|
|
check_package_RPM $XVID_DEV
|
|
if [ $? -eq 0 ]; then
|
|
install_packages_RPM $XVID_DEV
|
|
XVID_USE=true
|
|
fi
|
|
|
|
INFO ""
|
|
MP3LAME_DEV="lame-devel"
|
|
check_package_RPM $MP3LAME_DEV
|
|
if [ $? -eq 0 ]; then
|
|
install_packages_RPM $MP3LAME_DEV
|
|
MP3LAME_USE=true
|
|
fi
|
|
fi
|
|
|
|
elif [ $RPM = "SUSE" ]; then
|
|
|
|
_packages="$_packages cmake sqlite3-devel libopenexr-devel fftw3-devel libSDL-devel"
|
|
|
|
INFO ""
|
|
install_packages_RPM $_packages
|
|
|
|
INFO ""
|
|
X264_DEV="libx264-devel"
|
|
check_package_version_ge_RPM $X264_DEV $X264_VERSION_MIN
|
|
if [ $? -eq 0 ]; then
|
|
install_packages_RPM $X264_DEV
|
|
X264_USE=true
|
|
fi
|
|
|
|
if $WITH_ALL; then
|
|
INFO ""
|
|
XVID_DEV="libxvidcore-devel"
|
|
check_package_RPM $XVID_DEV
|
|
if [ $? -eq 0 ]; then
|
|
install_packages_RPM $XVID_DEV
|
|
XVID_USE=true
|
|
fi
|
|
|
|
INFO ""
|
|
MP3LAME_DEV="libmp3lame-devel"
|
|
check_package_RPM $MP3LAME_DEV
|
|
if [ $? -eq 0 ]; then
|
|
install_packages_RPM $MP3LAME_DEV
|
|
MP3LAME_USE=true
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
if $WITH_ALL; then
|
|
INFO ""
|
|
VPX_DEV="libvpx-devel"
|
|
check_package_version_ge_RPM $VPX_DEV $VPX_VERSION_MIN
|
|
if [ $? -eq 0 ]; then
|
|
install_packages_RPM $VPX_DEV
|
|
VPX_USE=true
|
|
fi
|
|
INFO ""
|
|
install_packages_RPM libspnav-devel
|
|
fi
|
|
|
|
INFO ""
|
|
if $PYTHON_SKIP; then
|
|
INFO "WARNING! Skipping Python installation, as requested..."
|
|
else
|
|
check_package_version_match_RPM python3-devel $PYTHON_VERSION_MIN
|
|
if [ $? -eq 0 ]; then
|
|
install_packages_RPM python3-devel
|
|
INFO ""
|
|
if $NUMPY_SKIP; then
|
|
INFO "WARNING! Skipping NumPy installation, as requested..."
|
|
else
|
|
check_package_version_match_RPM python3-numpy $NUMPY_VERSION_MIN
|
|
if [ $? -eq 0 ]; then
|
|
install_packages_RPM python3-numpy
|
|
else
|
|
INFO "WARNING! Sorry, using python package but no numpy package available!"
|
|
fi
|
|
fi
|
|
else
|
|
compile_Python
|
|
INFO ""
|
|
if $NUMPY_SKIP; then
|
|
INFO "WARNING! Skipping NumPy installation, as requested..."
|
|
else
|
|
compile_Numpy
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
INFO ""
|
|
if $BOOST_SKIP; then
|
|
INFO "WARNING! Skipping Boost installation, as requested..."
|
|
else
|
|
check_package_version_ge_RPM boost-devel $BOOST_VERSION
|
|
if [ $? -eq 0 ]; then
|
|
install_packages_RPM boost-devel
|
|
else
|
|
compile_Boost
|
|
fi
|
|
fi
|
|
|
|
INFO ""
|
|
if $OCIO_SKIP; then
|
|
INFO "WARNING! Skipping OpenColorIO installation, as requested..."
|
|
else
|
|
check_package_version_ge_RPM OpenColorIO-devel $OCIO_VERSION_MIN
|
|
if [ $? -eq 0 ]; then
|
|
install_packages_RPM OpenColorIO-devel
|
|
else
|
|
compile_OCIO
|
|
fi
|
|
fi
|
|
|
|
INFO ""
|
|
if $OIIO_SKIP; then
|
|
INFO "WARNING! Skipping OpenImageIO installation, as requested..."
|
|
else
|
|
check_package_version_ge_RPM OpenImageIO-devel $OIIO_VERSION_MIN
|
|
if [ $? -eq 0 ]; then
|
|
install_packages_RPM OpenImageIO-devel
|
|
else
|
|
compile_OIIO
|
|
fi
|
|
fi
|
|
|
|
if $WITH_OSL; then
|
|
have_llvm=false
|
|
|
|
INFO ""
|
|
if $LLVM_SKIP; then
|
|
INFO "WARNING! Skipping LLVM installation, as requested (this also implies skipping OSL!)..."
|
|
else
|
|
# Problem compiling with LLVM 3.2 so match version 3.1 ...
|
|
check_package_version_match_RPM llvm $LLVM_VERSION
|
|
if [ $? -eq 0 ]; then
|
|
if [ $RPM = "SUSE" ]; then
|
|
install_packages_RPM llvm-devel llvm-clang-devel
|
|
else
|
|
install_packages_RPM llvm-devel clang-devel
|
|
fi
|
|
have_llvm=true
|
|
LLVM_VERSION_FOUND=$LLVM_VERSION
|
|
else
|
|
#
|
|
# Better to compile it than use minimum version from repo...
|
|
#
|
|
install_packages_RPM libffi-devel
|
|
# LLVM can't find the fedora ffi header dir...
|
|
_FFI_INCLUDE_DIR=`rpm -ql libffi-devel | grep -e ".*/ffi.h" | sed -r 's/(.*)\/ffi.h/\1/'`
|
|
INFO ""
|
|
compile_LLVM
|
|
have_llvm=true
|
|
LLVM_VERSION_FOUND=$LLVM_VERSION
|
|
fi
|
|
fi
|
|
|
|
if $OSL_SKIP; then
|
|
INFO ""
|
|
INFO "WARNING! Skipping OpenShadingLanguage installation, as requested..."
|
|
else
|
|
if $have_llvm; then
|
|
# No package currently!
|
|
INFO ""
|
|
install_packages_RPM flex bison git
|
|
if [ $RPM = "FEDORA" -o $RPM = "RHEL" ]; then
|
|
install_packages_RPM tbb-devel
|
|
fi
|
|
INFO ""
|
|
compile_OSL
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
if $WITH_OPENCOLLADA; then
|
|
if $OPENCOLLADA_SKIP; then
|
|
INFO "WARNING! Skipping OpenCOLLADA installation, as requested..."
|
|
else
|
|
INFO ""
|
|
install_packages_RPM pcre-devel libxml2-devel git
|
|
# Find path to libxml shared lib...
|
|
_XML2_LIB=`rpm -ql libxml2-devel | grep -e ".*/libxml2.so"`
|
|
# No package...
|
|
INFO ""
|
|
compile_OpenCOLLADA
|
|
fi
|
|
fi
|
|
|
|
if $FFMPEG_SKIP; then
|
|
INFO "WARNING! Skipping FFMpeg installation, as requested..."
|
|
else
|
|
check_package_version_ge_RPM ffmpeg $FFMPEG_VERSION_MIN
|
|
if [ $? -eq 0 ]; then
|
|
install_packages_RPM ffmpeg ffmpeg-devel
|
|
else
|
|
INFO ""
|
|
compile_FFmpeg
|
|
fi
|
|
fi
|
|
}
|
|
|
|
|
|
get_package_version_ARCH() {
|
|
pacman -Si $1 | grep Version | tail -n 1 | sed -r 's/.*:\s+(([0-9]+\.?)+).*/\1/'
|
|
}
|
|
|
|
check_package_ARCH() {
|
|
r=`pacman -Si $1 | grep -c 'Description'`
|
|
|
|
if [ $r -ge 1 ]; then
|
|
return 0
|
|
else
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
check_package_version_match_ARCH() {
|
|
v=`get_package_version_ARCH $1`
|
|
|
|
if [ -z "$v" ]; then
|
|
return 1
|
|
fi
|
|
|
|
version_match $v $2
|
|
return $?
|
|
}
|
|
|
|
check_package_version_ge_ARCH() {
|
|
v=`get_package_version_ARCH $1`
|
|
|
|
if [ -z "$v" ]; then
|
|
return 1
|
|
fi
|
|
|
|
version_ge $v $2
|
|
return $?
|
|
}
|
|
|
|
install_packages_ARCH() {
|
|
sudo pacman -S --needed --noconfirm $@
|
|
if [ $? -ge 1 ]; then
|
|
ERROR "pacman failed to install requested packages, exiting."
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
install_ARCH() {
|
|
INFO ""
|
|
INFO "Installing dependencies for ARCH-based distribution"
|
|
INFO ""
|
|
INFO "`eval _echo "$COMMON_INFO"`"
|
|
INFO ""
|
|
|
|
read -p "Do you want to continue (Y/n)?"
|
|
[ "$(echo ${REPLY:=Y} | tr [:upper:] [:lower:])" != "y" ] && exit
|
|
|
|
# Check for sudo...
|
|
if [ ! -x "/usr/bin/sudo" ]; then
|
|
INFO ""
|
|
INFO "This script requires sudo but it is not installed."
|
|
INFO "Please setup sudo according to:"
|
|
INFO "https://wiki.archlinux.org/index.php/Sudo"
|
|
INFO "and try again."
|
|
INFO ""
|
|
exit
|
|
fi
|
|
|
|
sudo pacman -Sy
|
|
|
|
# These libs should always be available in arch official repository...
|
|
OPENJPEG_DEV="openjpeg"
|
|
VORBIS_DEV="libvorbis"
|
|
THEORA_DEV="libtheora"
|
|
|
|
_packages="base-devel scons cmake libxi glew libpng libtiff wget openal \
|
|
$OPENJPEG_DEV $VORBIS_DEV $THEORA_DEV openexr yasm sdl fftw"
|
|
|
|
OPENJPEG_USE=true
|
|
VORBIS_USE=true
|
|
THEORA_USE=true
|
|
|
|
if $WITH_ALL; then
|
|
# No libspacenav in official arch repos...
|
|
_packages="$_packages jack"
|
|
fi
|
|
|
|
INFO ""
|
|
install_packages_ARCH $_packages
|
|
|
|
INFO ""
|
|
X264_DEV="x264"
|
|
check_package_version_ge_ARCH $X264_DEV $X264_VERSION_MIN
|
|
if [ $? -eq 0 ]; then
|
|
install_packages_ARCH $X264_DEV
|
|
X264_USE=true
|
|
fi
|
|
|
|
if $WITH_ALL; then
|
|
INFO ""
|
|
XVID_DEV="xvidcore"
|
|
check_package_ARCH $XVID_DEV
|
|
if [ $? -eq 0 ]; then
|
|
install_packages_ARCH $XVID_DEV
|
|
XVID_USE=true
|
|
fi
|
|
|
|
INFO ""
|
|
MP3LAME_DEV="lame"
|
|
check_package_ARCH $MP3LAME_DEV
|
|
if [ $? -eq 0 ]; then
|
|
install_packages_ARCH $MP3LAME_DEV
|
|
MP3LAME_USE=true
|
|
fi
|
|
|
|
INFO ""
|
|
VPX_DEV="libvpx"
|
|
check_package_version_ge_ARCH $VPX_DEV $VPX_VERSION_MIN
|
|
if [ $? -eq 0 ]; then
|
|
install_packages_ARCH $VPX_DEV
|
|
VPX_USE=true
|
|
fi
|
|
fi
|
|
|
|
INFO ""
|
|
if $PYTHON_SKIP; then
|
|
INFO "WARNING! Skipping Python installation, as requested..."
|
|
else
|
|
check_package_version_ge_ARCH python $PYTHON_VERSION_MIN
|
|
if [ $? -eq 0 ]; then
|
|
install_packages_ARCH python
|
|
INFO ""
|
|
if $WITH_NUMPY; then
|
|
if $NUMPY_SKIP; then
|
|
INFO "WARNING! Skipping NumPy installation, as requested..."
|
|
else
|
|
check_package_version_ge_ARCH python-numpy $NUMPY_VERSION_MIN
|
|
if [ $? -eq 0 ]; then
|
|
install_packages_ARCH python-numpy
|
|
else
|
|
INFO "WARNING! Sorry, using python package but no numpy package available!"
|
|
fi
|
|
fi
|
|
fi
|
|
else
|
|
compile_Python
|
|
INFO ""
|
|
if $WITH_NUMPY; then
|
|
if $NUMPY_SKIP; then
|
|
INFO "WARNING! Skipping NumPy installation, as requested..."
|
|
else
|
|
compile_Numpy
|
|
fi
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
INFO ""
|
|
if $BOOST_SKIP; then
|
|
INFO "WARNING! Skipping Boost installation, as requested..."
|
|
else
|
|
check_package_version_ge_ARCH boost $BOOST_VERSION_MIN
|
|
if [ $? -eq 0 ]; then
|
|
install_packages_ARCH boost
|
|
else
|
|
compile_Boost
|
|
fi
|
|
fi
|
|
|
|
INFO ""
|
|
if $OCIO_SKIP; then
|
|
INFO "WARNING! Skipping OpenColorIO installation, as requested..."
|
|
else
|
|
check_package_version_ge_ARCH opencolorio $OCIO_VERSION_MIN
|
|
if [ $? -eq 0 ]; then
|
|
install_packages_ARCH opencolorio yaml-cpp tinyxml
|
|
else
|
|
install_packages_ARCH yaml-cpp tinyxml
|
|
compile_OCIO
|
|
fi
|
|
fi
|
|
|
|
INFO ""
|
|
if $OIIO_SKIP; then
|
|
INFO "WARNING! Skipping OpenImageIO installation, as requested..."
|
|
else
|
|
check_package_version_ge_ARCH openimageio $OIIO_VERSION_MIN
|
|
if [ $? -eq 0 ]; then
|
|
install_packages_ARCH openimageio
|
|
else
|
|
compile_OIIO
|
|
fi
|
|
fi
|
|
|
|
if $WITH_OSL; then
|
|
have_llvm=false
|
|
|
|
INFO ""
|
|
if $LLVM_SKIP; then
|
|
INFO "WARNING! Skipping LLVM installation, as requested (this also implies skipping OSL!)..."
|
|
else
|
|
check_package_version_ge_ARCH llvm $LLVM_VERSION_MIN
|
|
if [ $? -eq 0 ]; then
|
|
install_packages_ARCH llvm clang
|
|
have_llvm=true
|
|
LLVM_VERSION=`check_package_version_ge_ARCH llvm`
|
|
LLVM_VERSION_FOUND=$LLVM_VERSION
|
|
else
|
|
install_packages_ARCH libffi
|
|
# LLVM can't find the arch ffi header dir...
|
|
_FFI_INCLUDE_DIR=`pacman -Ql libffi | grep -e ".*/ffi.h" | awk '{print $2}' | sed -r 's/(.*)\/ffi.h/\1/'`
|
|
# LLVM 3.1 needs python2 to build and arch defaults to python3
|
|
_PYTHON2_BIN="/usr/bin/python2"
|
|
INFO ""
|
|
compile_LLVM
|
|
have_llvm=true
|
|
LLVM_VERSION_FOUND=$LLVM_VERSION
|
|
fi
|
|
fi
|
|
|
|
if $OSL_SKIP; then
|
|
INFO ""
|
|
INFO "WARNING! Skipping OpenShadingLanguage installation, as requested..."
|
|
else
|
|
if $have_llvm; then
|
|
check_package_version_ge_ARCH openshadinglanguage $OSL_VERSION_MIN
|
|
if [ $? -eq 0 ]; then
|
|
install_packages_ARCH openshadinglanguage
|
|
else
|
|
#XXX Note: will fail to build with LLVM 3.2!
|
|
INFO ""
|
|
install_packages_ARCH git intel-tbb
|
|
INFO ""
|
|
compile_OSL
|
|
fi
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
INFO ""
|
|
if $WITH_OPENCOLLADA; then
|
|
if $OPENCOLLADA_SKIP; then
|
|
INFO "WARNING! Skipping OpenCOLLADA installation, as requested..."
|
|
else
|
|
INFO ""
|
|
check_package_ARCH opencollada
|
|
if [ $? -eq 0 ]; then
|
|
install_packages_ARCH opencollada
|
|
else
|
|
install_packages_ARCH pcre git
|
|
INFO ""
|
|
compile_OpenCOLLADA
|
|
fi
|
|
# Find path to libxml shared lib...
|
|
_XML2_LIB=`pacman -Ql libxml2 | grep -e ".*/libxml2.so$" | gawk '{print $2}'`
|
|
fi
|
|
fi
|
|
|
|
INFO ""
|
|
if $FFMPEG_SKIP; then
|
|
INFO "WARNING! Skipping FFMpeg installation, as requested..."
|
|
else
|
|
check_package_version_ge_ARCH ffmpeg $FFMPEG_VERSION_MIN
|
|
if [ $? -eq 0 ]; then
|
|
install_packages_ARCH ffmpeg
|
|
else
|
|
compile_FFmpeg
|
|
fi
|
|
fi
|
|
}
|
|
|
|
|
|
print_info_ffmpeglink_DEB() {
|
|
if $ALL_STATIC; then
|
|
dpkg -L $_packages | grep -e ".*\/lib[^\/]\+\.a" | gawk '{ printf(nlines ? "'"$_ffmpeg_list_sep"'%s" : "%s", $0); nlines++ }'
|
|
else
|
|
dpkg -L $_packages | grep -e ".*\/lib[^\/]\+\.so" | gawk '{ printf(nlines ? "'"$_ffmpeg_list_sep"'%s" : "%s", gensub(/.*lib([^\/]+)\.so/, "\\1", "g", $0)); nlines++ }'
|
|
fi
|
|
}
|
|
|
|
print_info_ffmpeglink_RPM() {
|
|
# # XXX No static libs...
|
|
# if $ALL_STATIC; then
|
|
# rpm -ql $_packages | grep -e ".*\/lib[^\/]\+\.a" | gawk '{ printf(nlines ? "'"$_ffmpeg_list_sep"'%s" : "%s", $0); nlines++ }'
|
|
# else
|
|
rpm -ql $_packages | grep -e ".*\/lib[^\/]\+\.so" | gawk '{ printf(nlines ? "'"$_ffmpeg_list_sep"'%s" : "%s", gensub(/.*lib([^\/]+)\.so/, "\\1", "g", $0)); nlines++ }'
|
|
# fi
|
|
}
|
|
|
|
print_info_ffmpeglink_ARCH() {
|
|
# No static libs...
|
|
pacman -Ql $_packages | grep -e ".*\/lib[^\/]\+\.so$" | gawk '{ printf(nlines ? "'"$_ffmpeg_list_sep"'%s" : "%s", gensub(/.*lib([^\/]+)\.so/, "\\1", $0)); nlines++ }'
|
|
}
|
|
|
|
print_info_ffmpeglink() {
|
|
# This func must only print a ';'-separated list of libs...
|
|
if [ -z "$DISTRO" ]; then
|
|
ERROR "Failed to detect distribution type"
|
|
exit 1
|
|
fi
|
|
|
|
# Create list of packages from which to get libs names...
|
|
_packages=""
|
|
|
|
if $THEORA_USE; then
|
|
_packages="$_packages $THEORA_DEV"
|
|
fi
|
|
|
|
if $VORBIS_USE; then
|
|
_packages="$_packages $VORBIS_DEV"
|
|
fi
|
|
|
|
if $XVID_USE; then
|
|
_packages="$_packages $XVID_DEV"
|
|
fi
|
|
|
|
if $VPX_USE; then
|
|
_packages="$_packages $VPX_DEV"
|
|
fi
|
|
|
|
if $MP3LAME_USE; then
|
|
_packages="$_packages $MP3LAME_DEV"
|
|
fi
|
|
|
|
if $X264_USE; then
|
|
_packages="$_packages $X264_DEV"
|
|
fi
|
|
|
|
if $OPENJPEG_USE; then
|
|
_packages="$_packages $OPENJPEG_DEV"
|
|
fi
|
|
|
|
if [ "$DISTRO" = "DEB" ]; then
|
|
print_info_ffmpeglink_DEB
|
|
elif [ "$DISTRO" = "RPM" ]; then
|
|
print_info_ffmpeglink_RPM
|
|
elif [ "$DISTRO" = "ARCH" ]; then
|
|
print_info_ffmpeglink_ARCH
|
|
# XXX TODO!
|
|
else INFO "<Could not determine additional link libraries needed for ffmpeg, replace this by valid list of libs...>"
|
|
fi
|
|
}
|
|
|
|
print_info() {
|
|
INFO ""
|
|
INFO "If you're using CMake add this to your configuration flags:"
|
|
|
|
_buildargs=""
|
|
|
|
if $ALL_STATIC; then
|
|
_1="-D WITH_STATIC_LIBS=ON"
|
|
# XXX Force linking with shared SDL lib!
|
|
_2="-D SDL_LIBRARY='libSDL.so;-lpthread'"
|
|
INFO " $_1"
|
|
INFO " $_2"
|
|
_buildargs="$_buildargs $_1 $_2"
|
|
# XXX Arch linux needs to link freetype dynamically...
|
|
if [ "$DISTRO" = "ARCH" ]; then
|
|
_1="-D FREETYPE_LIBRARY=/usr/lib/libfreetype.so"
|
|
INFO " $_1"
|
|
_buildargs="$_buildargs $_1"
|
|
fi
|
|
fi
|
|
|
|
if [ -d $INST/boost ]; then
|
|
_1="-D BOOST_ROOT=$INST/boost"
|
|
_2="-D Boost_NO_SYSTEM_PATHS=ON"
|
|
INFO " $_1"
|
|
INFO " $_2"
|
|
_buildargs="$_buildargs $_1 $_2"
|
|
elif $ALL_STATIC; then
|
|
_1="-D WITH_BOOST_ICU=ON"
|
|
INFO " $_1"
|
|
_buildargs="$_buildargs $_1"
|
|
# XXX Arch linux fails static linking without these...
|
|
if [ "$DISTRO" = "ARCH" ]; then
|
|
_1="-D ICU_LIBRARY_DATA=/usr/lib/libicudata.so"
|
|
_2="-D ICU_LIBRARY_I18N=/usr/lib/libicui18n.so"
|
|
_3="-D ICU_LIBRARY_IO=/usr/lib/libicuio.so"
|
|
_4="-D ICU_LIBRARY_LE=/usr/lib/libicule.so"
|
|
_5="-D ICU_LIBRARY_LX=/usr/lib/libiculx.so"
|
|
_6="-D ICU_LIBRARY_TU=/usr/lib/libicutu.so"
|
|
_7="-D ICU_LIBRARY_UC=/usr/lib/libicuuc.so"
|
|
INFO " $_1"
|
|
INFO " $_2"
|
|
INFO " $_3"
|
|
INFO " $_4"
|
|
INFO " $_5"
|
|
INFO " $_6"
|
|
INFO " $_7"
|
|
_buildargs="$_buildargs $_1 $_2 $_3 $_4 $_5 $_6 $_7"
|
|
fi
|
|
fi
|
|
|
|
if $WITH_OSL; then
|
|
_1="-D WITH_CYCLES_OSL=ON"
|
|
_2="-D WITH_LLVM=ON"
|
|
_3="-D LLVM_VERSION=$LLVM_VERSION_FOUND"
|
|
INFO " $_1"
|
|
INFO " $_2"
|
|
INFO " $_3"
|
|
_buildargs="$_buildargs $_1 $_2 $_3"
|
|
if [ -d $INST/osl ]; then
|
|
_1="-D CYCLES_OSL=$INST/osl"
|
|
INFO " $_1"
|
|
_buildargs="$_buildargs $_1"
|
|
fi
|
|
if [ -d $INST/llvm ]; then
|
|
_1="-D LLVM_DIRECTORY=$INST/llvm"
|
|
_2="-D LLVM_STATIC=ON"
|
|
INFO " $_1"
|
|
INFO " $_2"
|
|
_buildargs="$_buildargs $_1 $_2"
|
|
fi
|
|
fi
|
|
|
|
if $WITH_OPENCOLLADA; then
|
|
_1="-D WITH_OPENCOLLADA=ON"
|
|
INFO " $_1"
|
|
_buildargs="$_buildargs $_1"
|
|
if $ALL_STATIC; then
|
|
_1="-D XML2_LIBRARY=$_XML2_LIB"
|
|
INFO " $_1"
|
|
_buildargs="$_buildargs $_1"
|
|
fi
|
|
fi
|
|
|
|
_1="-D WITH_CODEC_FFMPEG=ON"
|
|
_2="-D FFMPEG_LIBRARIES='avformat;avcodec;avutil;avdevice;swscale;rt;`print_info_ffmpeglink`'"
|
|
INFO " $_1"
|
|
INFO " $_2"
|
|
_buildargs="$_buildargs $_1 $_2"
|
|
if [ -d $INST/ffmpeg ]; then
|
|
_1="-D FFMPEG=$INST/ffmpeg"
|
|
INFO " $_1"
|
|
_buildargs="$_buildargs $_1"
|
|
fi
|
|
|
|
INFO ""
|
|
INFO "Or even simpler, just run (in your blender-source dir):"
|
|
INFO " make -j$THREADS BUILD_CMAKE_ARGS=\"$_buildargs\""
|
|
|
|
INFO ""
|
|
INFO "If you're using SCons add this to your user-config:"
|
|
|
|
if [ -d $INST/python-$PYTHON_VERSION_MIN ]; then
|
|
INFO "BF_PYTHON = '$INST/python-$PYTHON_VERSION_MIN'"
|
|
INFO "BF_PYTHON_ABI_FLAGS = 'm'"
|
|
fi
|
|
|
|
INFO "WITH_BF_OCIO = True"
|
|
if [ -d $INST/ocio ]; then
|
|
INFO "BF_OCIO = '$INST/ocio'"
|
|
fi
|
|
|
|
INFO "WITH_BF_OIIO = True"
|
|
if [ -d $INST/oiio ]; then
|
|
INFO "BF_OIIO = '$INST/oiio'"
|
|
fi
|
|
INFO "WITH_BF_CYCLES = True"
|
|
|
|
if [ -d $INST/osl ]; then
|
|
INFO "BF_OSL = '$INST/osl'"
|
|
fi
|
|
|
|
INFO "WITH_BF_BOOST = True"
|
|
if [ -d $INST/boost ]; then
|
|
INFO "BF_BOOST = '$INST/boost'"
|
|
fi
|
|
|
|
_ffmpeg_list_sep=" "
|
|
INFO "BF_FFMPEG_LIB = 'avformat avcodec swscale avutil avdevice `print_info_ffmpeglink`'"
|
|
if [ -d $INST/ffmpeg ]; then
|
|
INFO "BF_FFMPEG = '$INST/ffmpeg'"
|
|
fi
|
|
|
|
if ! $WITH_ALL; then
|
|
INFO "WITH_BF_3DMOUSE = False"
|
|
# No libspacenav in official arch repos...
|
|
elif [ "$DISTRO" = "ARCH" ]; then
|
|
INFO "WITH_BF_3DMOUSE = False"
|
|
fi
|
|
|
|
INFO ""
|
|
INFO ""
|
|
INFO "WARNING: If this script had to build boost into $INST, and you are dynamically linking "
|
|
INFO " blender against it, you will have to run those commands as root user:"
|
|
INFO ""
|
|
INFO " echo \"$INST/boost/lib\" > /etc/ld.so.conf.d/boost.conf"
|
|
INFO " ldconfig"
|
|
INFO ""
|
|
}
|
|
|
|
# Detect distributive type used on this machine
|
|
detect_distro
|
|
|
|
if [ -z "$DISTRO" ]; then
|
|
ERROR "Failed to detect distribution type"
|
|
exit 1
|
|
elif [ "$DISTRO" = "DEB" ]; then
|
|
install_DEB
|
|
elif [ "$DISTRO" = "RPM" ]; then
|
|
install_RPM
|
|
elif [ "$DISTRO" = "ARCH" ]; then
|
|
install_ARCH
|
|
fi
|
|
|
|
print_info | tee BUILD_NOTES.txt
|
|
INFO ""
|
|
INFO "This information has been written to BUILD_NOTES.txt"
|
|
INFO ""
|
|
|
|
# Switch back to user language.
|
|
LANG=LANG_BACK
|
|
export LANG
|