Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'build_files/build_environment/prepare_release_env.sh')
-rwxr-xr-xbuild_files/build_environment/prepare_release_env.sh1555
1 files changed, 1555 insertions, 0 deletions
diff --git a/build_files/build_environment/prepare_release_env.sh b/build_files/build_environment/prepare_release_env.sh
new file mode 100755
index 00000000000..9889feadcd2
--- /dev/null
+++ b/build_files/build_environment/prepare_release_env.sh
@@ -0,0 +1,1555 @@
+#!/bin/sh
+
+#
+# This script will prepare build environment with the same settings as release environment
+#
+# It will install two chroot environments:
+# - /home/buildbot_squeeze_i686
+# - /home/buildbot_squeeze_x86_64
+# which are used for 32bit and 64bit
+#
+# This sctipt will also create folder /home/sources where all dependent libraries sources are
+# downloading and compiling.
+#
+# Release builder scripts are stored in /home/sources/release-builder
+# See build_all.sh script for usage details
+#
+# This script was tested on debian squeeze and wheezy, should work on ubuntu as well
+# It wouldn't work on other distros
+#
+# TODO:
+# - It's still required manual copying of build configuration files to /home/sources/release-builder/config
+# - OSL is not set up yet
+#
+
+set -e
+
+NO_COLOR='\033[0m'
+EWHITE='\033[1;37m'
+ERED='\033[1;31m'
+
+CONFIRM="--i-really-do-know-what-im-doing"
+
+ERROR() {
+ echo ${ERED}${@}${NO_COLOR}
+}
+
+INFO() {
+ echo ${EWHITE}${@}${NO_COLOR}
+}
+
+if [ $# != 1 ]; then
+ ERROR "Usage: $0 $CONFIRM"
+ exit 1
+fi
+
+if [ "$1" != "$CONFIRM" ]; then
+ ERROR "Usage: $0 $CONFIRM"
+ exit 1
+fi
+
+DEBIAN_BRANCH="squeeze"
+DEBIAN_MIRROR="http://ftp.de.debian.org/debian"
+USER_ID=1000
+
+# For now it's always /home, so we can setup schroot to map /sources to the same
+# path at both host and chroot systems (which is currently needed for release building script)
+ENV_PATH="/home"
+
+AMD64_PATH="$ENV_PATH/buildbot_${DEBIAN_BRANCH}_x86_64"
+I686_PATH="$ENV_PATH/buildbot_${DEBIAN_BRANCH}_i686"
+SOURCES_PATH="$ENV_PATH/sources"
+
+THREADS=`cat /proc/cpuinfo | grep cores | uniq | sed -e "s/.*: *\(.*\)/\\1/"`
+
+# Force vpx be installed from the backports
+VPX_V="1.0.0-2~bpo60+1"
+
+BINUTILS_V="2.22"
+BINUTILS_FV="2.22-7.1"
+
+GCC_V="4.7_4.7.1"
+GCC_FV="4.7_4.7.1-7"
+
+OPENAL_V="1.14"
+
+DPKG_V="1.16.8"
+
+DEBHELPER_V="9"
+DEBHELPER_FV="9.20120909"
+
+JEMALLOC_V="3.1.0"
+SPNAV_V="0.2.2"
+FFMPEG_V="1.0"
+BOOST_V="1_51_0"
+PYTHON_V="3.3.0"
+PYTHIN_V_SHORT="3.3"
+OIIO_V="1.0.9"
+OCIO_V="1.0.7"
+MESA_V="8.0.5"
+
+OPENSSL_V="0.9.8o"
+OPENSSL_FV="0.9.8o-4squeeze13"
+
+CUDA_V="4.2.9"
+CUDA_DISTR="ubuntu10.04"
+CUDA_32="cudatoolkit_${CUDA_V}_linux_32_${CUDA_DISTR}.run"
+CUDA_64="cudatoolkit_${CUDA_V}_linux_64_${CUDA_DISTR}.run"
+
+INSTALL_RELEASE_BUILDER() {
+ SOURCES_PATH=$1
+
+ RB=$SOURCES_PATH/release-builder
+ if [ ! -d $RB ]; then
+ INFO "Installing release building scripts"
+
+ mkdir -p $RB
+
+ cat << EOF > $RB/Readme.txt
+This directory contains scrips needed for automated release archive preparation
+
+config/: storage of scons configs for different platforms
+
+build_all.sh: script asks version to add to archive name and revision to compile,
+ when script finished, there'll be 32 and 64 bit archives in current directory
+ better to run this script from this directory
+
+do_build_all.sh: uses environment variables set by build_all.sh script (or other scripts)
+ and launches compilation inside chroot environments
+
+chroot_compile.py: runs compilation process with giver parameters in chroots
+compile.py: script runs inside chroot environment and prepares archive
+
+blender-buildenv.tar.bz2: archive, received from Ken Hughes when i've been preparing
+ new environment to make it as close to old one as it's possible
+
+Hope all this would help you.
+
+-Sergey-
+EOF
+
+ cat << EOF > $RB/build_all.sh
+#!/bin/sh
+
+echo -n "version: "
+read version
+echo -n "svn revision (blank to latest, 0 to keep unchanged): "
+read revision
+
+export version
+export revision
+
+d=\`dirname \${0}\`
+\${d}/do_build_all.sh
+EOF
+ chmod +x $RB/build_all.sh
+
+ cat << EOF > $RB/build_all-test.sh
+#!/bin/sh
+
+d=\`dirname \${0}\`
+\${d}/do_build_all.sh
+EOF
+ chmod +x $RB/build_all-test.sh
+
+ cat << EOF > $RB/chroot-compile.py
+#!/usr/bin/env python
+
+import sys
+import os
+import platform
+
+from optparse import OptionParser
+
+# This could be passed through options, but does we actually need this?
+bl_source = '/home/sources/blender'
+build_dir = '/home/sources/blender-build/'
+install_dir = '/home/sources/blender-install/'
+with_player = True
+
+# Default config
+curr_arch = platform.architecture()[0]
+def_arch = 'x86_64' if curr_arch == '64bit' else 'i686'
+builder_dir = os.path.dirname(os.path.realpath(__file__))
+
+# XXX: bad thing!
+# builder_dir = builder_dir.replace("sources-new", "sources")
+
+def_cores = 1
+if hasattr(os, 'sysconf'):
+ if 'SC_NPROCESSORS_ONLN' in os.sysconf_names:
+ def_cores = os.sysconf('SC_NPROCESSORS_ONLN')
+
+# Per-architecture chroot name
+chroots = { 'i686': 'buildbot_squeeze_i686',
+ 'x86_64': 'buildbot_squeeze_x86_64'}
+
+# Parse command line
+op = OptionParser()
+op.add_option('--tag', default = None)
+op.add_option('--branch', default = None)
+op.add_option('--arch', default = def_arch)
+op.add_option('--cores', default = def_cores)
+op.add_option('--bl-version', default = 'UNDEFINED')
+op.add_option('--no-clean', default = False)
+(opts, args) = op.parse_args()
+
+if opts.arch not in chroots:
+ print('Error: No configured machine gound to build ' +
+ '{0} version' . format(opts.arch))
+ sys.exit(1)
+
+chroot = chroots[opts.arch]
+
+if opts.tag:
+ bl_source = '/home/sources/blender-tags/' + opts.tag
+elif opts.branch:
+ bl_source = '/home/sources/blender-branches/' + opts.branch
+
+if not os.path.isdir(bl_source):
+ print('Uname to find directory with sources: ' + bl_source)
+ sys.exit(1)
+
+print('Building {0} version, machine is {1}' . format(opts.bl_version, opts.arch))
+
+# Assume builder directory is binded to the same location in
+# chroot environments
+compiler = os.path.join(builder_dir, 'compile.py')
+
+cmd = 'schroot -c %s -d /home/sources/release-builder --' % (chroot)
+cmd += ' python %s' % (compiler)
+cmd += ' --bl-version=%s' % (opts.bl_version)
+cmd += ' --bl-source=%s' % (bl_source)
+cmd += ' --arch=%s' % (opts.arch)
+cmd += ' --build-dir=%s' % (build_dir)
+cmd += ' --install-dir=%s' % (install_dir)
+
+if opts.no_clean:
+ cmd += ' --no-clean=1'
+
+if with_player:
+ cmd += ' --with-player=1'
+
+#if opts.branch:
+# cmd += ' --use-new-ffmpeg=1'
+
+result = os.system(cmd)
+if result != 0:
+ print('compiler script exited with errcode: %s' % (result))
+ sys.exit(1)
+EOF
+ chmod +x $RB/chroot-compile.py
+
+ cat << EOF > $RB/compile.py
+#!/usr/bin/env python
+
+import platform
+import sys
+import os
+import shutil
+
+from optparse import OptionParser
+
+# Default config
+curr_arch = platform.architecture()[0]
+def_arch = 'x86_64' if curr_arch == '64bit' else 'i686'
+builder_dir = os.path.dirname(os.path.realpath(__file__))
+
+def_cores = 1
+if hasattr(os, 'sysconf'):
+ if 'SC_NPROCESSORS_ONLN' in os.sysconf_names:
+ def_cores = os.sysconf('SC_NPROCESSORS_ONLN')
+
+# Parse command line
+op = OptionParser()
+op.add_option('--arch', default = def_arch)
+op.add_option('--cores', default = def_cores)
+op.add_option('--no-clean', default = False)
+op.add_option('--bl-version', default = 'UNKNOWN')
+op.add_option('--bl-source', default = '')
+op.add_option('--config-dir', default = '')
+op.add_option('--build-dir', default = '')
+op.add_option('--install-dir', default = '')
+op.add_option('--with-player', default = False)
+#op.add_option('--use-new-ffmpeg', default = False)
+(opts, args) = op.parse_args()
+
+if opts.config_dir == '':
+ opts.config_dir = os.path.join(builder_dir, 'config')
+
+# Initial directory checking (could be problems with permissions)
+if not os.path.isdir(opts.bl_source):
+ print('Blender\'s source tree not found: %s' % (opts.bl_source))
+ sys.exit(1)
+
+if not os.path.isdir(opts.config_dir):
+ print('Directory with configuration files not found: %s' % (opts.config_dir))
+ sys.exit(1)
+
+if not os.path.isdir(os.path.dirname(opts.build_dir)):
+ print('Build directory can\'t be reached: %s' % (opts.build_dir))
+ sys.exit(1)
+
+if not os.path.isdir(os.path.dirname(opts.install_dir)):
+ print('Install directory can\'t be reached: %s' % (opts.install_dir))
+ sys.exit(1)
+
+# Detect glibc version
+libc = [name for name in os.listdir('/lib') if 'libc.so.' in name]
+if len(libc) == 0:
+ print('Could not find "/lib/libc.so.*": cannot determine glibc version')
+ sys.exit(-1)
+
+if len(libc) > 1:
+ print('warning: found more than one "/lib/libc.so.*": '+
+ 'using %s' % (libc[0]))
+
+glibc = 'glibc' + os.readlink('/lib/' + libc[0])[5:][:-3].replace('.', '')
+glibc = glibc[:8]
+
+# Full name for archive
+full_name = 'blender-%s-linux-%s-%s' % (opts.bl_version, glibc, opts.arch)
+build_dir = os.path.join(opts.build_dir, full_name)
+install_dir = os.path.join(opts.install_dir, full_name)
+scons = os.path.join(opts.bl_source, 'scons', 'scons.py')
+scons_cmd = 'python %s -C %s' % (scons, opts.bl_source)
+config = os.path.join(opts.config_dir, 'user-config-' + glibc + '-' + opts.arch + '.py')
+
+if not os.path.isfile(config):
+ print('Configuration file not found: %s' % (config))
+ sys.exit(1)
+
+# Clean build directory
+if not opts.no_clean:
+ print('Cleaning up build directory...')
+ os.system('%s BF_BUILDDIR=%s clean ' % (scons_cmd, build_dir))
+
+# Clean install directory
+if os.path.isdir(install_dir):
+ shutil.rmtree(install_dir)
+
+flags = ""
+
+# Switch to newer libraries if needed
+#if opts.use_new_ffmpeg:
+# print("Using new ffmpeg-0.8.1")
+# flags += " BF_FFMPEG='/home/sources/staticlibs/ffmpeg-0.8'"
+
+# Build blenderplayer first
+# (to be sure all stuff needed for blender would copied automatically)
+if opts.with_player:
+ player_config = os.path.join(opts.config_dir,
+ 'user-config-player-' + glibc + '-' + opts.arch + '.py')
+
+ if not os.path.isfile(player_config):
+ print('Player configuration file not found: %s' % (player_config))
+ sys.exit(1)
+
+ cmd = '%s -j %d blenderplayer ' % (scons_cmd, opts.cores + 1)
+ cmd += ' BF_BUILDDIR=%s' % (build_dir + '-player')
+ cmd += ' BF_INSTALLDIR=%s' % (install_dir)
+ cmd += ' BF_CONFIG=%s' % (player_config)
+ cmd += flags
+
+ result = os.system(cmd)
+ if result != 0:
+ print('Compilation failed, exit code is %d' % (result))
+ sys.exit(-1)
+
+# Build blender itself
+cmd = '%s -j %d blender ' % (scons_cmd, opts.cores + 1)
+cmd += ' BF_BUILDDIR=%s' % (build_dir)
+cmd += ' BF_INSTALLDIR=%s' % (install_dir)
+cmd += ' BF_CONFIG=%s' % (config)
+cmd += flags
+
+result = os.system(cmd)
+if result != 0:
+ print('Compilation failed, exit code is %d' % (result))
+ sys.exit(-1)
+
+blender = os.path.join(install_dir, 'blender')
+blenderplayer = blender + 'player'
+
+if not os.path.exists(blender):
+ print('scons completed successfully but blender executable missing')
+ sys.exit(1)
+
+if opts.with_player and not os.path.exists(blenderplayer):
+ print('scons completed successfully but blenderplayer executable missing')
+ sys.exit(1)
+
+# compile python modules
+#result = os.system('%s --background --python %s/source/tools/compile_scripts.py' % (blender, opts.bl_source))
+#if result != 0:
+# print('Python modules compilation failed, exit code is %d' % (result))
+# sys.exit(-1)
+
+print('build successful')
+
+os.system('strip -s %s %s' % (blender, blenderplayer))
+
+# Copy all texts needed for release
+release_texts = os.path.join(opts.bl_source, 'release', 'text', '*')
+release_txt = os.path.join(install_dir, 'release_%s.txt' % (opts.bl_version))
+
+os.system('cp -r %s %s' % (release_texts, install_dir))
+
+if os.path.exists(release_txt):
+ print 'RELEASE TEXT FOUND'
+else:
+ print 'WARNING! RELEASE TEXT NOT FOUND!'
+
+# TODO: copy plugins data when ready
+
+# Add software gl libraries and scripts
+mesa_arch = None
+
+if opts.arch == 'x86_64':
+ mesa_arch = 'mesalibs64.tar.bz2'
+elif opts.arch == 'i686':
+ mesa_arch = 'mesalibs32.tar.bz2'
+
+if mesa_arch is not None:
+ mesalibs = os.path.join(builder_dir, 'extra', mesa_arch)
+ software_gl = os.path.join(builder_dir, 'extra', 'blender-softwaregl')
+
+ os.system('tar -xpf %s -C %s' % (mesalibs, install_dir))
+ os.system('cp %s %s' % (software_gl, install_dir))
+ os.system('chmod 755 %s' % (os.path.join(install_dir, 'blender-softwaregl')))
+
+# Pack release archive
+print("Building Dynamic Tarball")
+os.system('tar -C %s -cjf %s.tar.bz2 %s ' % (opts.install_dir,
+ full_name, full_name))
+
+print('Done.')
+EOF
+ chmod +x $RB/compile.py
+
+ cat << EOF > $RB/do_build_al.sh
+#!/bin/sh
+
+SOURCES="/home/sources"
+
+#opts="--cores=1 "
+opts=""
+
+if [ "x\${tag}" != "x" ]; then
+ echo "Getting tagged source tree..."
+ d="\${SOURCES}/blender-tags/\${tag}"
+ opts="\${opts} --tag=\${tag}"
+ if [ ! -d \${d} ]; then
+ svn co https://svn.blender.org/svnroot/bf-blender/tags/\${tag}/blender/@\${revision} \${d}
+ else
+ svn up -r \${revision} \${d}
+ fi
+elif [ "x\${branch}" != "x" ]; then
+ echo "Getting branched source tree..."
+ d="\${SOURCES}/blender-branches/\${branch}"
+ opts="\${opts} --branch=\${branch}"
+ if [ ! -d \${d} ]; then
+ if [ "x\${revision}" != "x" ]; then
+ svn co https://svn.blender.org/svnroot/bf-blender/branches/\${branch}/@\${revision} \${d}
+ else
+ svn co https://svn.blender.org/svnroot/bf-blender/branches/\${branch}/ \${d}
+ fi
+ else
+ if [ "x\${revision}" != "x" ]; then
+ svn up -r \${revision} \${d}
+ else
+ svn up \${d}
+ fi
+ fi
+else
+ if [ "x\${revision}" != "x" ]; then
+ if [ "x\${revision}" != "x0" ]; then
+ svn up -r \${revision} \${SOURCES}/blender
+ else
+ svn up \${SOURCES}/blender
+ fi
+ fi
+fi
+
+if [ "x\${tag}" != "x" ]; then
+ b="\${SOURCES}/blender-tags/\${tag}"
+elif [ "x\${branch}" != "x" ]; then
+ b="\${SOURCES}/blender-branches/\${branch}"
+else
+ b="\${SOURCES}/blender"
+fi
+
+if [ "x\${addons_revision}" != "x" ]; then
+ d="\${b}/release/scripts/addons"
+
+ if [ "x\${addons_revision}" != "x0" ]; then
+ svn up -r \${addons_revision} \${d}
+ else
+ svn up \${d}
+ fi
+fi
+
+if [ "x\${locale_revision}" != "x" ]; then
+ d="\${b}/release/datafiles/locale"
+
+ if [ "x\${locale_revision}" != "x0" ]; then
+ svn up -r \${locale_revision} \${d}
+ else
+ svn up \${d}
+ fi
+fi
+
+if [ -z "\$version" ]; then
+ version=r\`/usr/bin/svnversion \$SOURCES/blender\`
+fi
+
+cd extra
+./update-libs.sh
+cd ..
+
+python chroot-compile.py \${opts} --arch=x86_64 --bl-version \${version} # --no-clean=1
+python chroot-compile.py \${opts} --arch=i686 --bl-version \${version} # --no-clean=1
+EOF
+ chmod +x $RB/do_build_al.sh
+
+ mkdir -p $RB/extra
+
+ cat << EOF > $RB/extra/blender-softwaregl
+#!/bin/sh
+
+BF_DIST_BIN=\`dirname "\$0"\`
+BF_PROGRAM="blender" # BF_PROGRAM=\`basename "\$0"\`-bin
+exitcode=0
+
+LD_LIBRARY_PATH=\${BF_DIST_BIN}/lib:\${LD_LIBRARY_PATH}
+
+if [ -n "\$LD_LIBRARYN32_PATH" ]; then
+ LD_LIBRARYN32_PATH=\${BF_DIST_BIN}/lib:\${LD_LIBRARYN32_PATH}
+fi
+if [ -n "\$LD_LIBRARYN64_PATH" ]; then
+ LD_LIBRARYN64_PATH=\${BF_DIST_BIN}/lib:\${LD_LIBRARYN64_PATH}
+fi
+if [ -n "\$LD_LIBRARY_PATH_64" ]; then
+ LD_LIBRARY_PATH_64=\${BF_DIST_BIN}/lib:\${LD_LIBRARY_PATH_64}
+fi
+
+# Workaround for half-transparent windows when compiz is enabled
+XLIB_SKIP_ARGB_VISUALS=1
+
+export LD_LIBRARY_PATH LD_LIBRARYN32_PATH LD_LIBRARYN64_PATH LD_LIBRARY_PATH_64 LD_PRELOAD XLIB_SKIP_ARGB_VISUALS
+
+"\$BF_DIST_BIN/\$BF_PROGRAM" \${1+"\$@"}
+exitcode=\$?
+exit \$exitcode
+EOF
+ chmod +x $RB/extra/blender-softwaregl
+
+ cat << EOF > $RB/extra/do_update-libs.sh
+#!/bin/sh
+
+BITS=\$1
+V="\`readlink /opt/lib/mesa | sed -r 's/mesa-//'\`"
+TMP=\`mktemp -d\`
+N="mesalibs\$1-\$V"
+
+if [ ! -f \$N.tar.bz2 ]; then
+ mkdir -p \$TMP/lib
+ cp -P /opt/lib/mesa/lib/libGL* \$TMP/lib
+ strip -s \$TMP/lib/*
+ tar -C \$TMP -cf \$N.tar lib
+ bzip2 \$N.tar
+
+ rm -f mesalibs\$BITS.tar,bz2
+ ln -s \$N.tar.bz2 mesalibs\$BITS.tar.bz2
+fi
+
+rm -rf \$TMP
+EOF
+ chmod +x $RB/extra/do_update-libs.sh
+
+ cat << EOF > $RB/extra/update-libs.sh
+#!/bin/sh
+
+P="/home/sources/release-builder/extra"
+CHROOT_PREFIX="buildbot_squeeze_"
+CHROOT32="\${CHROOT_PREFIX}i686"
+CHROOT64="\${CHROOT_PREFIX}x86_64"
+RUN32="schroot -c \$CHROOT32 -d \$P"
+RUN64="schroot -c \$CHROOT64 -d \$P"
+
+\$RUN64 ./do_update-libs.sh 64
+\$RUN32 ./do_update-libs.sh 32
+EOF
+ chmod +x $RB/extra/update-libs.sh
+
+ mkdir -p $RB/config
+ cp $SOURCES_PATH/blender/build_files/buildbot/config/* $RB/config
+
+ fi
+}
+
+INSTALL_SOURCES() {
+ SOURCES_PATH=$1
+
+ if [ ! -d "$SOURCES_PATH" ]; then
+ INFO "Creating sources directory"
+ mkdir -p "$SOURCES_PATH"
+ fi
+
+ if [ ! -d "$SOURCES_PATH/backport/binutils" ]; then
+ INFO "Downloading binutils"
+ mkdir -p "$SOURCES_PATH/backport/binutils"
+ wget -c $DEBIAN_MIRROR/pool/main/b/binutils/binutils_$BINUTILS_FV.diff.gz \
+ $DEBIAN_MIRROR/pool/main/b/binutils/binutils_$BINUTILS_FV.dsc \
+ $DEBIAN_MIRROR/pool/main/b/binutils/binutils_$BINUTILS_V.orig.tar.gz \
+ -P "$SOURCES_PATH/backport/binutils"
+ fi
+
+ if [ ! -d "$SOURCES_PATH/backport/gcc-4.7" ]; then
+ INFO "Downloading gcc-4.7"
+ mkdir -p "$SOURCES_PATH/backport/gcc-4.7"
+ wget -c $DEBIAN_MIRROR/pool/main/g/gcc-4.7/gcc-$GCC_FV.diff.gz \
+ $DEBIAN_MIRROR/pool/main/g/gcc-4.7/gcc-$GCC_FV.dsc \
+ $DEBIAN_MIRROR/pool/main/g/gcc-4.7/gcc-$GCC_V.orig.tar.gz \
+ -P "$SOURCES_PATH/backport/gcc-4.7"
+ fi
+
+ if [ ! -d "$SOURCES_PATH/backport/openssl" ]; then
+ INFO "Downloading openssl"
+ mkdir -p "$SOURCES_PATH/backport/openssl"
+ wget -c $DEBIAN_MIRROR/pool/main/o/openssl/openssl_$OPENSSL_FV.debian.tar.gz \
+ $DEBIAN_MIRROR/pool/main/o/openssl/openssl_$OPENSSL_FV.dsc \
+ $DEBIAN_MIRROR/pool/main/o/openssl/openssl_$OPENSSL_V.orig.tar.gz \
+ -P "$SOURCES_PATH/backport/openssl"
+ fi
+
+ # JeMalloc
+ J="$SOURCES_PATH/packages/jemalloc-$JEMALLOC_V"
+ if [ ! -d "$J" ]; then
+ INFO "Downloading jemalloc-$JEMALLOC_V"
+ wget -c http://www.canonware.com/download/jemalloc/jemalloc-$JEMALLOC_V.tar.bz2 -P "$SOURCES_PATH/packages"
+ tar -C "$SOURCES_PATH/packages" -xf "$J.tar.bz2"
+ cat << EOF > "$J/0config.sh"
+#!/bin/sh
+
+./configure CC="gcc-4.7 -Wl,--as-needed" CXX="g++-4.7 -Wl,--as-needed" LDFLAGS="-pthread -static-libgcc" --prefix=/opt/lib/jemalloc-$JEMALLOC_V
+EOF
+ chmod +x "$J/0config.sh"
+ fi
+
+ # Spnav
+ S="$SOURCES_PATH/packages/libspnav-$SPNAV_V"
+ if [ ! -d "$S" ]; then
+ wget -c http://downloads.sourceforge.net/project/spacenav/spacenav%20library%20%28SDK%29/libspnav%200.2.2/libspnav-$SPNAV_V.tar.gz \
+ -P "$SOURCES_PATH/packages"
+ tar -C "$SOURCES_PATH/packages" -xf "$S.tar.gz"
+ cat << EOF > "$S/0config.sh"
+#!/bin/sh
+
+./configure --prefix=/opt/lib/libspnav-$SPNAV_V
+EOF
+ chmod +x "$S/0config.sh"
+ fi
+
+ # FFmpeg
+ F="$SOURCES_PATH/packages/ffmpeg-$FFMPEG_V"
+ if [ ! -d "$F" ]; then
+ INFO "Downloading FFmpeg-$FFMPEG_V"
+ wget -c http://ffmpeg.org/releases/ffmpeg-$FFMPEG_V.tar.bz2 -P "$SOURCES_PATH/packages"
+ tar -C "$SOURCES_PATH/packages" -xf "$F.tar.bz2"
+ cat << EOF > "$F/0config.sh"
+#!/bin/sh
+
+./configure \\
+ --cc="/usr/bin/gcc-4.7 -Wl,--as-needed" \\
+ --extra-ldflags="-pthread -static-libgcc" \\
+ --prefix=/opt/lib/ffmpeg-$FFMPEG_V \\
+ --enable-static \\
+ --enable-avfilter \\
+ --disable-vdpau \\
+ --disable-bzlib \\
+ --disable-libgsm \\
+ --enable-libschroedinger \\
+ --disable-libspeex \\
+ --enable-libtheora \\
+ --enable-libvorbis \\
+ --enable-pthreads \\
+ --enable-zlib \\
+ --enable-libvpx \\
+ --enable-stripping \\
+ --enable-runtime-cpudetect \\
+ --disable-vaapi \\
+ --enable-libopenjpeg \\
+ --disable-libfaac \\
+ --disable-nonfree \\
+ --enable-gpl \\
+ --disable-postproc \\
+ --disable-x11grab \\
+ --enable-libmp3lame \\
+ --disable-librtmp \\
+ --enable-libx264 \\
+ --enable-libxvid \\
+ --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
+
+# --enable-debug
+# --disable-optimizations
+# --disable-ffplay
+EOF
+ chmod +x "$F/0config.sh"
+ fi
+
+ # Boost
+ B="$SOURCES_PATH/packages/boost_$BOOST_V"
+ if [ ! -d "$B" ]; then
+ INFO "Downloading Boost-$BOOST_V"
+ b_d=`echo "$BOOST_V" | sed -r 's/_/./g'`
+ wget -c http://sourceforge.net/projects/boost/files/boost/$b_d/boost_$BOOST_V.tar.bz2/download -O "$B.tar.bz2"
+ tar -C "$SOURCES_PATH/packages" -xf "$B.tar.bz2"
+ fi
+
+ # Python
+ P="$SOURCES_PATH/packages/Python-$PYTHON_V"
+ if [ ! -d "$P" ]; then
+ INFO "Downloading Python-$PYTHON_V"
+ wget -c http://python.org/ftp/python/$PYTHON_V/Python-$PYTHON_V.tar.bz2 -P "$SOURCES_PATH/packages"
+ tar -C "$SOURCES_PATH/packages" -xf "$P.tar.bz2"
+ cat << EOF > "$P/0config.sh"
+#!/bin/sh
+
+# NOTE: this sounds strange, but make sure /dev/shm/ is writable by your user,
+# otherwise syncronization primitives wouldn't be included into python
+if [[ "\`stat -c '%a' /dev/shm/\`" != "777" ]]; then
+ echo "Error checking syncronization primitives"
+ exit 1
+fi
+
+./configure --prefix=/opt/lib/python-$PYTHON_V \\
+ --enable-ipv6 \\
+ --enable-loadable-sqlite-extensions \\
+ --with-dbmliborder=bdb \\
+ --with-wide-unicode \\
+ --with-computed-gotos \\
+ --with-pymalloc
+EOF
+ chmod +x "$P/0config.sh"
+ fi
+
+ # OpenImageIO
+ O="$SOURCES_PATH/packages/OpenImageIO-$OIIO_V"
+ if [ ! -d "$O" ]; then
+ INFO "Downloading OpenImageIO-$OIIO_V"
+ wget -c https://github.com/OpenImageIO/oiio/tarball/Release-$OIIO_V -O "$O.tar.gz"
+ tar -C "$SOURCES_PATH/packages" -xf "$O.tar.gz"
+ mv $SOURCES_PATH/packages/OpenImageIO-oiio* $O
+ mkdir $O/build
+ cat << EOF > "$O/build/prepare.sh"
+#!/bin/sh
+
+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=/opt/lib/oiio-$OIIO_V \\
+ -D CMAKE_INSTALL_PREFIX=/opt/lib/oiio-$OIIO_V \\
+ -D BUILDSTATIC=ON \\
+ -D USE_JASPER=OFF \\
+ -D CMAKE_CXX_FLAGS:STRING="\${cflags}" \\
+ -D CMAKE_C_FLAGS:STRING="\${cflags}" \\
+ -D CMAKE_EXE_LINKER_FLAGS='-lgcc_s -lgcc' \\
+ -D BOOST_ROOT=/opt/lib/boost \\
+ ../src
+EOF
+ chmod +x "$O/build/prepare.sh"
+ fi
+
+ # OpenColorIO
+ O="$SOURCES_PATH/packages/OpenColorIO-$OCIO_V"
+ if [ ! -d "$O" ]; then
+ INFO "Downloading OpenColorIO-$OCIO_V"
+ wget -c http://github.com/imageworks/OpenColorIO/tarball/v$OCIO_V -O "$O.tar.gz"
+ tar -C "$SOURCES_PATH/packages" -xf "$O.tar.gz"
+ mv $SOURCES_PATH/packages/imageworks-OpenColorIO* $O
+ mkdir $O/build
+ cat << EOF > "$O/build/prepare.sh"
+#!/bin/sh
+
+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=/opt/lib/ocio-1.0.7 \\
+ -D CMAKE_INSTALL_PREFIX=/opt/lib/ocio-1.0.7 \\
+ -D BUILDSTATIC=ON \\
+ -D CMAKE_CXX_FLAGS:STRING="\${cflags}" \\
+ -D CMAKE_C_FLAGS:STRING="\${cflags}" \\
+ -D CMAKE_EXE_LINKER_FLAGS='-lgcc_s -lgcc' \\
+ ..
+EOF
+
+ chmod +x "$O/build/prepare.sh"
+ fi
+
+ # Mesa
+ M="$SOURCES_PATH/packages/Mesa-$MESA_V"
+ if [ ! -d "$M" ]; then
+ INFO "Downloading Mesa-$MESA_V"
+ wget -c ftp://ftp.freedesktop.org/pub/mesa/$MESA_V/MesaLib-$MESA_V.tar.bz2 -P "$SOURCES_PATH/packages"
+ tar -C "$SOURCES_PATH/packages" -xf "$SOURCES_PATH/packages/MesaLib-$MESA_V.tar.bz2"
+ cat << EOF > "$M/0config.sh"
+#!/bin/sh
+
+OPTS="--with-driver=xlib \\
+ --disable-driglx-direct \\
+ --disable-egl \\
+ --enable-gallium-gbm=no \\
+ --enable-gallium-egl=no \\
+ --enable-gallium-llvm=no \\
+ --with-gallium-drivers=swrast \\
+ --with-dri-drivers=swrast \\
+ --prefix=/opt/lib/mesa-$MESA_V"
+
+if file /bin/cp | grep -q '32-bit'; then
+ ./configure CC="gcc-4.7 -Wl,--as-needed" CXX="g++-4.7 -Wl,--as-needed" LDFLAGS="-pthread -static-libgcc" \${OPTS} --enable-32-bit #--build=i486-linux-gnu
+else
+ ./configure CC="gcc-4.7 -Wl,--as-needed" CXX="g++-4.7 -Wl,--as-needed" LDFLAGS="-pthread -static-libgcc" \${OPTS}
+fi
+
+EOF
+ chmod +x "$M/0config.sh"
+ fi
+
+ # OpenAL
+ O="$SOURCES_PATH/packages/openal-soft-$OPENAL_V"
+ if [ ! -d "$O" ]; then
+ INFO "Downloading OpenAL-$OPENAL_V"
+ wget -c http://kcat.strangesoft.net/openal-releases/openal-soft-$OPENAL_V.tar.bz2 -P "$SOURCES_PATH/packages"
+ tar -C "$SOURCES_PATH/packages" -xf "$SOURCES_PATH/packages/openal-soft-$OPENAL_V.tar.bz2"
+ cat << EOF > "$O/build-openal.sh"
+#!/bin/sh
+
+DEB_CMAKE_OPTIONS="-DCMAKE_VERBOSE_MAKEFILE=ON \\
+ -DCMAKE_INSTALL_PREFIX=/opt/lib/openal-$OPENAL_V \\
+ -DCMAKE_BUILD_TYPE:String=Release \\
+ -DALSOFT_CONFIG=ON \\
+ -DLIBTYPE=STATIC .. "
+
+BUILD_TREE=./build-tree
+
+rm -rf "\${BUILD_TREE}"
+mkdir -p "\${BUILD_TREE}"
+cd "\${BUILD_TREE}"
+
+sh -c "cmake \`echo \$DEB_CMAKE_OPTIONS\`"
+make -j$THREADS
+make install
+EOF
+ chmod +x "$O/build-openal.sh"
+ fi
+
+ # OpenCollada
+ O="$SOURCES_PATH/packages/opencollada"
+ if [ ! -d "$O" ]; then
+ INFO "Checking out OpenCollada sources"
+ svn co http://opencollada.googlecode.com/svn/trunk $O
+
+ cat << EOF > "$O/build_all.sh"
+#!/bin/sh
+
+scons RELEASE=0 NOVALIDATION=1 XMLPARSER=libxmlnative PCRENATIVE=1 SHAREDLIB=0 -j ${THREADS} --clean
+scons RELEASE=1 NOVALIDATION=1 XMLPARSER=libxmlnative PCRENATIVE=1 SHAREDLIB=0 -j ${THREADS} --clean
+
+scons RELEASE=0 NOVALIDATION=1 XMLPARSER=libxmlnative PCRENATIVE=1 SHAREDLIB=0 -j ${THREADS}
+scons RELEASE=1 NOVALIDATION=1 XMLPARSER=libxmlnative PCRENATIVE=1 SHAREDLIB=0 -j ${THREADS}
+EOF
+
+ cat << EOF > "$O/prepare_lib-libxml.sh"
+#!/bin/bash
+
+src="./COLLADAStreamWriter/include
+./COLLADABaseUtils/include
+./COLLADABaseUtils/include/Math
+./COLLADAFramework/include
+./GeneratedSaxParser/include
+./COLLADASaxFrameworkLoader/include
+./COLLADASaxFrameworkLoader/include/generated14
+./COLLADASaxFrameworkLoader/include/generated15"
+
+if [ -z \$1 ]; then
+ arch="x86_64"
+else
+ arch=\$1
+fi
+
+libs="./GeneratedSaxParser/lib/posix/\${arch}/releaselibxml/libGeneratedSaxParser.a
+./Externals/MathMLSolver/lib/posix/\${arch}/release/libMathMLSolver.a
+./COLLADABaseUtils/lib/posix/\${arch}/release/libOpenCOLLADABaseUtils.a
+./COLLADAFramework/lib/posix/\${arch}/release/libOpenCOLLADAFramework.a
+./COLLADASaxFrameworkLoader/lib/posix/\${arch}/releaselibxmlNovalidation/libOpenCOLLADASaxFrameworkLoader.a
+./COLLADAStreamWriter/lib/posix/\${arch}/release/libOpenCOLLADAStreamWriter.a
+./Externals/UTF/lib/posix/\${arch}/release/libUTF.a
+./common/libBuffer/lib/posix/\${arch}/release/libbuffer.a
+./common/libftoa/lib/posix/\${arch}/release/libftoa.a"
+
+#./Externals/pcre/lib/posix/\${arch}/release/libpcre.a
+#./Externals/LibXML/lib/posix/\${arch}/release/libxml.a
+
+debug_libs="./GeneratedSaxParser/lib/posix/\${arch}/debuglibxml/libGeneratedSaxParser.a
+./Externals/MathMLSolver/lib/posix/\${arch}/debug/libMathMLSolver.a
+./COLLADABaseUtils/lib/posix/\${arch}/debug/libOpenCOLLADABaseUtils.a
+./COLLADAFramework/lib/posix/\${arch}/debug/libOpenCOLLADAFramework.a
+./COLLADASaxFrameworkLoader/lib/posix/\${arch}/debuglibxmlNovalidation/libOpenCOLLADASaxFrameworkLoader.a
+./COLLADAStreamWriter/lib/posix/\${arch}/debug/libOpenCOLLADAStreamWriter.a
+./Externals/UTF/lib/posix/\${arch}/debug/libUTF.a
+./common/libBuffer/lib/posix/\${arch}/debug/libbuffer.a
+./common/libftoa/lib/posix/\${arch}/debug/libftoa.a"
+
+#./Externals/pcre/lib/posix/\${arch}/debug/libpcre.a
+#./Externals/LibXML/lib/posix/\${arch}/debug/libxml.a
+
+d="opencollada-libxml"
+rm -rf \${d}
+mkdir -p \${d}/include
+
+for i in \${src}; do
+ mkdir -p \${d}/include/\${i}
+ cp \${i}/*.h \${d}/include/\${i}
+done
+
+mkdir \${d}/lib
+for i in \${libs}; do
+ echo "" > /dev/null
+ cp \${i} \${d}/lib
+done
+
+for i in \${debug_libs}; do
+ f=\`basename \${i}\`
+ o=\${f/\\.a/_d.a}
+ cp \${i} \${d}/lib/\${o}
+done
+
+rm -rf /opt/lib/opencollada
+mv \${d} /opt/lib/opencollada
+chown -R root:staff /opt/lib/opencollada
+EOF
+
+ chmod +x "$O/build_all.sh"
+ chmod +x "$O/prepare_lib-libxml.sh"
+ fi
+
+ # Blender
+ B="$SOURCES_PATH/blender"
+ if [ ! -d "$B" ]; then
+ INFO "Checking out Blender sources"
+ svn co https://svn.blender.org/svnroot/bf-blender/trunk/blender $B
+ fi
+
+ # CUDA Toolkit
+ C=$SOURCES_PATH/cudatoolkit
+ if [ ! -f "$C/$CUDA_32" ]; then
+ INFO "Downloading CUDA 32bit toolkit"
+ mkdir -p $C
+ wget -c http://developer.download.nvidia.com/compute/cuda/4_2/rel/toolkit/$CUDA_32 -P $C
+ fi
+
+ if [ ! -f "$C/$CUDA_64" ]; then
+ INFO "Downloading CUDA 64bit toolkit"
+ mkdir -p $C
+ wget -c http://developer.download.nvidia.com/compute/cuda/4_2/rel/toolkit/$CUDA_64 -P $C
+ fi
+
+ if [ ! -f $SOURCES_PATH/Readme.txt ]; then
+
+ cat << EOF > $SOURCES_PATH/Readme.txt
+This directory contains different things needed for Blender builds
+
+blender/: directory with blender's svnsnapshot
+
+blender-build/, blender-install/: build and install directories for
+ automated release creation
+
+buildbot-i686-slave/,
+buildbot-x86_64-slave/: buildbot slave environments for automated builds
+ (maybe it'll be better to move them to /home?)
+
+staticlibs/: set of static libs. Mostly needed to make static linking prioretized
+ under dynamic linking
+
+release-builder/: all stuff needed for release archives preparation
+
+Hope all this would help you.
+
+-Sergey-
+EOF
+ fi
+
+ INSTALL_RELEASE_BUILDER $SOURCES_PATH
+}
+
+DO_BACKPORT() {
+ CHROOT_ARCH=$1
+ CHROOT_PATH=$2
+
+ RUN="chroot $CHROOT_PATH"
+ P="/home/sources/backport"
+
+ # Backport fresh binutils
+ if [ `$RUN dpkg-query -W -f='${Version}\n' binutils | grep -c $BINUTILS_V` -eq "0" ]; then
+ INFO "Backporting binutils"
+ B="$P/binutils/binutils-$BINUTILS_V"
+ pkg="$P/binutils/binutils_${BINUTILS_FV}_amd64.deb"
+
+ if [ ! -d "$CHROOT_PATH/$B" ]; then
+ INFO "Unpacking binutils"
+ $RUN dpkg-source -x "$P/binutils/binutils_$BINUTILS_FV.dsc" "$B"
+ fi
+
+ if [ "$CHROOT_ARCH" = "i386" ]; then
+ pkg=`echo "$pkg" | sed -r 's/amd64/i386/g'`
+ fi
+
+ if [ ! -f "$CHROOT_PATH/$pkg" ]; then
+ INFO "Compiling binutils"
+ sed -ie 's/with_check := yes/with_check := no/' "$CHROOT_PATH/$B/debian/rules"
+ $RUN sh -c "cd '$B' && dpkg-buildpackage -rfakeroot -j$THREADS"
+ fi
+
+ INFO "Installing binutils"
+ $RUN dpkg -i "$pkg"
+
+ INFO "Cleaning binutils"
+ $RUN sh -c "cd '$B' && fakeroot debian/rules clean"
+ fi
+
+ # Install fresh gcc
+ if [ `$RUN dpkg-query -W -f='${Status}\n' gcc-4.7 2> /dev/null | grep -c installed` -eq "0" ]; then
+ INFO "Backporting gcc-4.7"
+ G="$P/gcc-4.7/gcc-$GCC_V"
+
+ pkg="cpp-4.7_4.7.1-7_amd64.deb gcc-4.7-base_4.7.1-7_amd64.deb \
+ libstdc++6-4.7-dev_4.7.1-7_amd64.deb libstdc++6_4.7.1-7_amd64.deb libgcc1_4.7.1-7_amd64.deb \
+ libgomp1_4.7.1-7_amd64.deb libitm1_4.7.1-7_amd64.deb libquadmath0_4.7.1-7_amd64.deb \
+ gcc-4.7_4.7.1-7_amd64.deb g++-4.7_4.7.1-7_amd64.deb"
+
+ if [ ! -d "$CHROOT_PATH/$G" ]; then
+ INFO "Unpacking gcc-4.7"
+ $RUN dpkg-source -x "$P/gcc-4.7/gcc-$GCC_FV.dsc" "$G"
+ fi
+
+ if [ "$CHROOT_ARCH" = "i386" ]; then
+ pkg=`echo "$pkg" | sed -r 's/amd64/i386/g'`
+ fi
+
+ ok=true
+ for x in `echo "$pkg"`; do
+ if [ ! -f "$CHROOT_PATH/$P/gcc-4.7/$x" ]; then
+ ok=false
+ break;
+ fi
+ done
+
+ if ! $ok; then
+ INFO "Compiling gcc-4.7"
+ sed -ie 's/#with_check := disabled by hand/with_check := disabled by hand/' "$CHROOT_PATH/$G/debian/rules.defs"
+ sed -ie 's/dpkg-dev (>= 1.16.0~ubuntu4)/dpkg-dev (>= 1.15.8)/' "$CHROOT_PATH/$G/debian/control"
+ sed -ie 's/doxygen (>= 1.7.2)/doxygen (>= 1.7.1)/' "$CHROOT_PATH/$G/debian/control"
+ sed -ie 's/libmpfr-dev (>= 3.0.0-9~)/libmpfr-dev (>= 3.0.0)/' "$CHROOT_PATH/$G/debian/control"
+ sed -ie 's/libc6-dev (>= 2.13-5)/libc6-dev (>= 2.11.3)/' "$CHROOT_PATH/$G/debian/control"
+ sed -ie 's/libgmp-dev (>= 2:5.0.1~)/libgmp3-dev (>= 2:4.3.2)/' "$CHROOT_PATH/$G/debian/control"
+ $RUN sh -c "cd '$G' && dpkg-buildpackage -rfakeroot"
+ fi
+
+ inst=""
+ for x in `echo "$pkg"`; do
+ inst="$inst $P/gcc-4.7/$x"
+ done
+
+ INFO "Installing gcc-4.7"
+ $RUN dpkg -i $inst
+
+ INFO "Cleaning gcc-4.7"
+ $RUN sh -c "cd '$G' && fakeroot debian/rules clean"
+ fi
+
+ # Backport OpenSSL
+ if [ ! -f $CHROOT_PATH/usr/lib/libssl_pic.a ]; then
+ INFO "Backporting OpenSSL"
+ O="$P/openssl/openssl-$OPENSSL_V"
+
+ pkg="libssl-dev_0.9.8o-4squeeze13_amd64.deb libssl0.9.8_0.9.8o-4squeeze13_amd64.deb openssl_0.9.8o-4squeeze13_amd64.deb"
+
+ if [ ! -d "$CHROOT_PATH/$O" ]; then
+ INFO "Unpacking OpenSSL"
+ $RUN dpkg-source -x "$P/openssl/openssl_$OPENSSL_FV.dsc" "$O"
+ fi
+
+ if [ "$CHROOT_ARCH" = "i386" ]; then
+ pkg=`echo "$pkg" | sed -r 's/amd64/i386/g'`
+ fi
+
+ ok=true
+ for x in `echo "$pkg"`; do
+ if [ ! -f "$CHROOT_PATH/$P/openssl/$x" ]; then
+ ok=false
+ break;
+ fi
+ done
+
+ if ! $ok; then
+ INFO "Compiling OpenSSL"
+ sed -ie 's/#\s*mv debian\/tmp\/usr\/lib\/libcrypto.a debian\/tmp\/usr\/lib\/libcrypto_pic.a/ mv debian\/tmp\/usr\/lib\/libcrypto.a debian\/tmp\/usr\/lib\/libcrypto_pic.a/' "$CHROOT_PATH/$O/debian/rules"
+ sed -ie 's/#\s*mv debian\/tmp\/usr\/lib\/libssl.a debian\/tmp\/usr\/lib\/libssl_pic.a/ mv debian\/tmp\/usr\/lib\/libssl.a debian\/tmp\/usr\/lib\/libssl_pic.a/' "$CHROOT_PATH/$O/debian/rules"
+ cat << EOF > $CHROOT_PATH/$O/debian/libssl-dev.files
+usr/lib/libssl.so
+usr/lib/libcrypto.so
+usr/lib/libssl.a
+usr/lib/libcrypto.a
+usr/lib/libssl_pic.a
+usr/lib/libcrypto_pic.a
+usr/lib/pkgconfig
+usr/include
+usr/share/man/man3
+EOF
+ $RUN sh -c "cd '$O' && dpkg-buildpackage -rfakeroot -j$THREADS"
+ fi
+
+ inst=""
+ for x in `echo "$pkg"`; do
+ inst="$inst $P/openssl/$x"
+ done
+
+ INFO "Installing OpenSSL"
+ $RUN dpkg -i $inst
+
+ echo "openssl hold" | $RUN dpkg --set-selections
+ echo "libssl-dev hold" | $RUN dpkg --set-selections
+ echo "libssl0.9.8 hold" | $RUN dpkg --set-selections
+
+ INFO "Cleaning OpenSSL"
+ $RUN sh -c "cd '$O' && fakeroot debian/rules clean"
+ fi
+}
+
+DO_COMPILE() {
+ CHROOT_ARCH=$1
+ CHROOT_PATH=$2
+
+ RUN="chroot $CHROOT_PATH"
+ P="/home/sources/packages"
+ L="$CHROOT_PATH/opt/lib"
+
+ # JeMalloc
+ if [ ! -d "$L/jemalloc-$JEMALLOC_V" ]; then
+ INFO "Copmiling jemalloc-$JEMALLOC_V"
+ $RUN sh -c "cd '$P/jemalloc-$JEMALLOC_V' && ./0config.sh && make clean && make -j$THREADS && make install && make clean"
+
+ rm -f "$L/jemalloc"
+ ln -s "jemalloc-$JEMALLOC_V" "$L/jemalloc"
+ fi
+
+ # libspnav
+ if [ ! -d "$L/libspnav-$SPNAV_V" ]; then
+ INFO "Copmiling libspnav-$SPNAV_V"
+ mkdir -p "$L/libspnav-$SPNAV_V/lib"
+ mkdir -p "$L/libspnav-$SPNAV_V/include"
+ $RUN sh -c "cd '$P/libspnav-$SPNAV_V' && ./0config.sh && make clean && make -j$THREADS && make install && make clean"
+
+ rm -f "$L/libspnav"
+ ln -s "libspnav-$SPNAV_V" "$L/libspnav"
+ fi
+
+ # FFmpeg
+ if [ ! -d "$L/ffmpeg-$FFMPEG_V" ]; then
+ INFO "Copmiling ffmpeg-$FFMPEG_V"
+ $RUN sh -c "cd '$P/ffmpeg-$FFMPEG_V' && ./0config.sh && make clean && make -j$THREADS && make install && make clean"
+
+ rm -f "$L/ffmpeg"
+ ln -s "ffmpeg-$FFMPEG_V" "$L/ffmpeg"
+ fi
+
+ # Boost
+ V=`echo $BOOST_V | sed -r 's/_/./g'`
+ if [ ! -d "$L/boost-$V" ]; then
+ INFO "Copmiling boost-$V"
+ $RUN sh -c "cd '$P/boost_$BOOST_V' && ./bootstrap.sh && ./b2 --clean && ./b2 install --prefix='/opt/lib/boost-$V' && ./b2 --clean"
+
+ rm -f "$L/boost"
+ ln -s "boost-$V" "$L/boost"
+ fi
+
+ # OCIO
+ if [ ! -d "$L/ocio-$OCIO_V" ]; then
+ INFO "Copmiling ocio-$OCIO_V"
+ $RUN sh -c "cd '$P/OpenColorIO-$OCIO_V/build' && ./prepare.sh && make clean && make -j$THREADS && make install && make clean"
+
+ # Force linking against sttaic libs
+ rm -f $L/ocio-$OCIO_V/lib/*.so*
+
+ # Additional depencencies
+ cp $CHROOT_PATH/$P/OpenColorIO-$OCIO_V/build/ext/dist/lib/libtinyxml.a $L/ocio-$OCIO_V/lib
+ cp $CHROOT_PATH/$P/OpenColorIO-$OCIO_V/build/ext/dist/lib/libyaml-cpp.a $L/ocio-$OCIO_V/lib
+
+ rm -f "$L/ocio"
+ ln -s "ocio-$OCIO_V" "$L/ocio"
+ fi
+
+ # OIIO
+ if [ ! -d "$L/oiio-$OIIO_V" ]; then
+ INFO "Copmiling oiio-$OIIO_V"
+ $RUN sh -c "cd '$P/OpenImageIO-$OIIO_V/build' && ./prepare.sh && make clean && make -j$THREADS && make install && make clean"
+
+ rm -f "$L/oiio"
+ ln -s "oiio-$OIIO_V" "$L/oiio"
+ fi
+
+ # Python
+ if [ ! -d "$L/python-$PYTHON_V" ]; then
+ INFO "Copmiling Python-$PYTHON_V"
+
+ cat << EOF > $CHROOT_PATH/$P/Python-$PYTHON_V/Modules/Setup.local
+_md5 md5module.c
+
+_sha1 sha1module.c
+_sha256 sha256module.c
+_sha512 sha512module.c
+EOF
+
+ sed -ie "s/libraries = \['ssl', 'crypto'\]/libraries = ['ssl_pic', 'crypto_pic', 'z']/" "$P/Python-$PYTHON_V/setup.py"
+
+ $RUN sh -c "cd '$P/Python-$PYTHON_V' && ./0config.sh && make clean && make -j$THREADS && make install && make clean"
+
+ rm -f "$L/python-$PYTHIN_V_SHORT"
+ ln -s "python-$PYTHON_V" "$L/python-$PYTHIN_V_SHORT"
+ fi
+
+ # Mesa
+ if [ ! -d "$L/mesa-$MESA_V" ]; then
+ INFO "Copmiling Mesa-$MESA_V"
+
+ $RUN sh -c "cd '$P/Mesa-$MESA_V' && ./0config.sh && make clean && make -j$THREADS && make install && make clean"
+
+ rm -f "$L/mesa"
+ ln -s "mesa-$MESA_V" "$L/mesa"
+ fi
+
+ # OpenAL
+ if [ ! -d "$L/openal-$OPENAL_V" ]; then
+ INFO "Copmiling openal-$OPENAL_V"
+
+ $RUN sh -c "cd '$P/openal-soft-$OPENAL_V' && ./build-openal.sh"
+
+ rm -f "$L/openal"
+ ln -s "openal-$OPENAL_V" "$L/openal"
+ fi
+
+ # OpenCollada
+ if [ ! -d "$L/opencollada" ]; then
+ INFO "Copmiling opencollada"
+
+ cat << EOF > "$CHROOT_PATH/$P/opencollada/collada.patch"
+Index: common/libBuffer/include/CommonBuffer.h
+===================================================================
+--- common/libBuffer/include/CommonBuffer.h (revision 876)
++++ common/libBuffer/include/CommonBuffer.h (working copy)
+@@ -12,6 +12,7 @@
+ #define __COMMON_BUFFER_H__
+
+ #include "CommonIBufferFlusher.h"
++#include "COLLADABUPlatform.h"
+
+ namespace Common
+ {
+Index: common/libBuffer/src/CommonLogFileBufferFlusher.cpp
+===================================================================
+--- common/libBuffer/src/CommonLogFileBufferFlusher.cpp (revision 876)
++++ common/libBuffer/src/CommonLogFileBufferFlusher.cpp (working copy)
+@@ -10,6 +10,34 @@
+
+ #include "CommonLogFileBufferFlusher.h"
+
++#include <stdio.h>
++#include <errno.h>
++
++#ifndef _WIN32
++FILE *_wfopen(const wchar_t *path, const char *mode)
++{
++ const wchar_t *src = path;
++ char *path_mbs;
++ int n;
++ FILE *file;
++
++ n = (int)wcsrtombs(NULL, &src, 0, NULL);
++
++ if (n < 0)
++ return NULL;
++
++ path_mbs = (char *)malloc(n + 1);
++ wcsrtombs(path_mbs, &path, n, NULL);
++ path_mbs[n] = 0;
++
++ file = fopen(path_mbs, mode);
++
++ free(path_mbs);
++
++ return file;
++}
++#endif
++
+ namespace Common
+ {
+ //--------------------------------------------------------------------
+@@ -35,7 +63,7 @@
+ #ifdef _WIN32
+ mError = (int)_wfopen_s( &stream, fileName, L"wb" );
+ #else
+- stream = _wfopen( fileName, L"wb" );
++ stream = _wfopen( fileName, "wb" );
+ mError = stream ? 0 : errno;
+ #endif
+ if ( !mError )
+@@ -65,7 +93,7 @@
+ #else
+ if ( mUseWideFileName )
+ {
+- stream = _wfopen( mWideFileName.c_str(), L"a" );
++ stream = _wfopen( mWideFileName.c_str(), "a" );
+ }
+ else
+ {
+Index: common/libBuffer/SConscript
+===================================================================
+--- common/libBuffer/SConscript (revision 876)
++++ common/libBuffer/SConscript (working copy)
+@@ -11,7 +11,7 @@
+ targetPath = outputDir + libName
+
+
+-incDirs = ['include/', '../libftoa/include']
++incDirs = ['include/', '../libftoa/include', '../../COLLADABaseUtils/include/', '../../Externals/UTF/include']
+
+
+ src = []
+EOF
+
+ # We're building in a chroot, architecture of host system would be used by scons
+ collada_arch="x86_64"
+
+ $RUN sh -c "cd '$P/opencollada' && svn revert . -R && cat collada.patch | patch -p0 && ./build_all.sh && ./prepare_lib-libxml.sh $collada_arch"
+ fi
+}
+
+ADD_REPO() {
+ CHROOT_PATH=$1
+ DESC=$2
+ REPO=$3
+ C="$CHROOT_PATH/etc/apt/sources.list"
+ RUN="chroot $CHROOT_PATH"
+
+ if [ `cat "$C" | grep -c "$REPO"` -eq "0" ]; then
+ INFO "Adding repo $DESC"
+ echo "" >> $C
+ echo "deb $REPO" >> $C
+ echo "deb-src $REPO" >> $C
+
+ INFO "Updating packages list"
+ $RUN apt-get update
+ fi
+}
+
+INSTALL_CHROOT() {
+ CHROOT_ARCH=$1
+ CHROOT_PATH=$2
+
+ RUN="chroot $CHROOT_PATH"
+
+ # Install fresh debian to a chroot
+ if [ ! -d "$CHROOT_PATH" ]; then
+
+ INFO "Installing Debian ${DEBIAN_BRANCH} to ${CHROOT_PATH}"
+ debootstrap --arch "${CHROOT_ARCH}" "${DEBIAN_BRANCH}" "${CHROOT_PATH}" "${DEBIAN_MIRROR}"
+ fi
+
+ # Configure users and groups
+
+ if [ `cat ${CHROOT_PATH}/etc/group | grep -c developers` -eq "0" ]; then
+ INFO "Creating gorup 'developers'"
+ $RUN groupadd -g 7001 developers
+ fi
+
+ if [ `mount | grep -c "$CHROOT_PATH/dev"` -eq "0" ]; then
+ INFO "Mounting devices from host system to chroot"
+
+ mount -t proc none $CHROOT_PATH/proc
+ mount -t auto -o bind /dev $CHROOT_PATH/dev
+ mount -t devpts -o mode=0620 none $CHROOT_PATH/dev/pts
+ fi
+
+ # Configure apt and install packages
+
+ if [ ! -f ${CHROOT_PATH}/etc/apt/apt.conf ]; then
+ INFO "Setting up apt to not use recommended packages (saves disk space)"
+
+ cat << EOF > "${CHROOT_PATH}/etc/apt/apt.conf"
+APT {
+ Default-Release "${DEBIAN_BRANCH}";
+ Install-Recommends "0";
+};
+EOF
+ fi
+
+ ADD_REPO $CHROOT_PATH "mirror.yandex.ru" "http://mirror.yandex.ru/debian-multimedia/ squeeze main non-free"
+ ADD_REPO $CHROOT_PATH "backports.debian.org" "http://backports.debian.org/debian-backports squeeze-backports main non-free"
+
+ $RUN apt-get upgrade
+
+ $RUN apt-get install -y --force-yes deb-multimedia-keyring libx264-dev libxvidcore4-dev libmp3lame-dev
+
+ if [ `$RUN dpkg-query -W -f='${Status}\n' locales | grep -c not-installed` -eq "1" ]; then
+ INFO "Configuring locales"
+ $RUN apt-get install -y locales
+ $RUN localedef -i en_US -f UTF-8 en_US.UTF-8
+ fi
+
+ INFO "Installing packages from repository"
+
+ $RUN apt-get install -y mc gcc g++ cmake python dpkg-dev build-essential autoconf bison \
+ flex gettext texinfo dejagnu quilt file lsb-release zlib1g-dev fakeroot debhelper \
+ g++-multilib libtool autoconf2.64 automake gawk lzma patchutils gperf sharutils \
+ libcloog-ppl-dev libmpc-dev libmpfr-dev libgmp3-dev autogen realpath chrpath doxygen \
+ graphviz gsfonts-x11 texlive-latex-base libelfg0-dev libx11-dev yasm libopenjpeg-dev \
+ libschroedinger-dev libtheora-dev libvorbis-dev libvpx-dev=$VPX_V \
+ libopenexr-dev libpng-dev libjpeg-dev libtiff-dev python-dev libbz2-dev libreadline-dev \
+ libsqlite3-dev liblzma-dev libncurses5-dev xutils-dev libxext-dev python-libxml2 \
+ libglu1-mesa-dev libfftw3-dev libfreetype6-dev libsdl1.2-dev libopenal-dev libjack-dev \
+ libxi-dev portaudio19-dev po4a subversion scons libpcre3-dev libexpat1-dev sudo \
+ expect bc
+
+ if [ $CHROOT_ARCH = "amd64" ]; then
+ $RUN apt-get install -y libc6-dev-i386 lib32gcc1
+ fi
+
+ # Configure sources directory
+ if [ ! -d "$CHROOT_PATH/home/sources" ]; then
+ INFO "Creating sources directory"
+ $RUN mkdir "/home/sources"
+ $RUN chmod 775 /home/sources
+ $RUN chown root:developers /home/sources
+ fi
+
+ # Bind directory from host system
+ if [ ! -d "$CHROOT_PATH/home/sources/backport" ]; then
+ INFO "Binding sources directory from host system to chroot"
+ mount -o bind "$SOURCES_PATH" "$CHROOT_PATH/home/sources"
+ fi
+
+ if [ "`$RUN getent passwd $USER_ID`" = "" ]; then
+ INFO "Adding default user to chroot"
+ login=`getent passwd $USER_ID | cut -d : -f 1`
+ $RUN useradd -d "/home/$login" -G developers,sudo -m -u $USER_ID "$login"
+ fi
+
+ # Backport packages
+ DO_BACKPORT "$CHROOT_ARCH" "$CHROOT_PATH"
+
+ # Set default compiler to gcc-4.7
+ if [ `readlink "$CHROOT_PATH/usr/bin/gcc"` != "gcc-4.7" ]; then
+ INFO "Setting gcc-4.7 as default compiler"
+ rm -f $CHROOT_PATH/usr/bin/gcc
+ rm -f $CHROOT_PATH/usr/bin/g++
+ ln -s gcc-4.7 $CHROOT_PATH/usr/bin/gcc
+ ln -s g++-4.7 $CHROOT_PATH/usr/bin/g++
+ fi
+
+ # Compile packages
+ DO_COMPILE "$CHROOT_ARCH" "$CHROOT_PATH"
+
+ # Install CUDA toolkit
+ if [ ! -d "$CHROOT_PATH/usr/local/cuda-$CUDA_V" ]; then
+ INFO "Installing CUDA toolkit"
+
+ if [ "$CHROOT_ARCH" = "amd64" ]; then
+ C="cudatoolkit_${CUDA_V}_linux_64_${CUDA_DISTR}.run"
+ else
+ C="cudatoolkit_${CUDA_V}_linux_32_${CUDA_DISTR}.run"
+ fi
+
+ rm -f $CHROOT_PATH/usr/local/cuda
+
+ chmod +x $CHROOT_PATH//home/sources/cudatoolkit/$C
+
+ $RUN /usr/bin/expect <<EOF
+ spawn /home/sources/cudatoolkit/$C
+ expect "Enter install path"
+ send "\n"
+ expect "Installation Complete"
+EOF
+
+ mv $CHROOT_PATH/usr/local/cuda $CHROOT_PATH/usr/local/cuda-$CUDA_V
+ ln -s cuda-$CUDA_V $CHROOT_PATH/usr/local/cuda
+ sudo ln -s /usr/bin/gcc-4.4 $CHROOT_PATH/usr/local/cuda/bin/gcc
+ fi
+
+ # Change permissions
+ INFO "Changing permissions on sources"
+ login=`$RUN getent passwd $USER_ID | cut -d : -f 1`
+ for x in /home/sources /opt/lib; do
+ $RUN chmod g+w -R $x
+ $RUN chown "$login:developers" -R $x
+ done
+}
+
+if ! which debootstrap > /dev/null 2>&1; then
+ ERROR "debootstrap command not found, can not create chroot environment"
+ ERROR "Use apt-get install debootstrap to install debootstrap"
+ exit 1
+fi
+
+if [ -z "$ENV_PATH" ]; then
+ ERROR "Incorrect environment directory is set"
+ exit 1
+fi
+
+INSTALL_SOURCES "$SOURCES_PATH"
+INSTALL_CHROOT amd64 "$AMD64_PATH"
+INSTALL_CHROOT i386 "$I686_PATH"
+
+INFO "Configurtion of build environment is completed!"
+echo "Add this lines to your /etc/fstab:"
+echo
+
+for x in $I686_PATH $AMD64_PATH; do
+ echo "none $x/proc proc auto 0 0"
+ echo "/dev $x/dev auto bind,auto 0 0"
+ echo "none $x/dev/pts devpts mode=0620,auto 0 0"
+ echo "/home/sources $x/home/sources auto bind,auto 0 0"
+ echo
+done
+
+echo "Add this lines to your /etc/schroot/schroot.conf:"
+echo
+login=`getent passwd $USER_ID | cut -d : -f 1`
+
+for x in $I686_PATH $AMD64_PATH; do
+ echo [`basename $x`]
+ echo "description=Linux buildbot environment"
+ echo "directory=$x"
+ echo "users=$login"
+ echo "root-groups=root"
+ echo
+done