diff --git a/contrib/bootstrap b/contrib/bootstrap
new file mode 100755
index 0000000000000000000000000000000000000000..ea80a7ca1d4aa5aa4e7c979306a59c55a80011c8
--- /dev/null
+++ b/contrib/bootstrap
@@ -0,0 +1,266 @@
+#! /bin/sh
+# Copyright (C) 2003-2011 the VideoLAN team
+#
+# 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.
+
+#
+# Command line handling
+#
+usage()
+{
+	echo "Usage: $0 [--build=BUILD] [--host=HOST] [--prefix=PREFIX]"
+	echo "  --build=BUILD    configure for building on BUILD"
+	echo "  --host=HOST      cross-compile to build to run on HOST"
+	echo "  --prefix=PREFIX  install files in PREFIX"
+	echo "  --disable-FOO    configure to not build package FOO"
+	echo "  --enable-FOO     configure to build package FOO"
+}
+
+BUILD=
+HOST=
+PREFIX=
+PKGS_ENABLE=
+PKGS_DISABLE=
+
+if test ! -f "../../contrib/src/main.mak"
+then
+	echo "$0 must be run from a subdirectory"
+	exit 1
+fi
+
+while test -n "$1"
+do
+	case "$1" in
+		--build=*)
+			BUILD="${1#--build=}"
+			;;
+		--help|-h)
+			usage
+			exit 0
+			;;
+		--host=*)
+			HOST="${1#--host=}"
+			;;
+		--prefix=*)
+			PREFIX="${1#--prefix=}"
+			;;
+		--disable-*)
+			PKGS_DISABLE="${PKGS_DISABLE} ${1#--disable-}"
+			;;
+		--enable-*)
+			PKGS_ENABLE="${PKGS_ENABLE} ${1#--enable-}"
+			;;
+		*)
+			echo "Unrecognized options $1"
+			usage
+			exit 1
+			;;
+	esac
+	shift
+done
+
+if test -z "$BUILD"
+then
+	echo -n "Guessing build system... "
+	BUILD="`${CC:-cc} -dumpmachine`"
+	if test -z "$BUILD"; then
+		echo "FAIL!"
+		exit 1
+	fi
+	echo "$BUILD"
+fi
+
+if test -z "$HOST"
+then
+	echo -n "Guessing host system...  "
+	HOST="$BUILD"
+	echo "$HOST"
+fi
+
+if test "$PREFIX"
+then
+	# strip trailing slash
+	PREFIX="${PREFIX%/}"
+fi
+
+#
+# Prepare files
+#
+echo "Creating configuration file... config.mak"
+exec 3>config.mak || exit $?
+cat >&3 << EOF
+# This file was automatically generated.
+# Any change will be overwritten if ../bootstrap is run again.
+BUILD := $BUILD
+HOST := $HOST
+PKGS_DISABLE := $PKGS_DISABLE
+PKGS_ENABLE := $PKGS_ENABLE
+EOF
+
+add_make()
+{
+	while test -n "$1"
+	do
+		echo "$1" >&3
+		shift
+	done
+}
+
+add_make_enabled()
+{
+	while test -n "$1"
+	do
+		add_make "$1 := 1"
+		shift
+	done
+}
+
+check_ios_sdk()
+{
+   if test -z "$SDKROOT"
+   then
+      SDKROOT=`xcode-select -print-path`/Platforms/iPhone${PLATFORM}.platform/Developer/SDKs/iPhone${PLATFORM}${SDK_VERSION}.sdk
+      echo "SDKROOT not specified, assuming $SDKROOT"
+   else
+      SDKROOT="$SDKROOT"
+      fi
+
+   if [ ! -d "${SDKROOT}" ]
+   then
+      echo "*** ${SDKROOT} does not exist, please install required SDK, or set SDKROOT manually. ***"
+      exit 1
+   fi
+   add_make "IOS_SDK=${SDKROOT}"
+}
+
+check_macosx_sdk()
+{
+   if [ -z "${OSX_VERSION}" ]
+   then
+      OSX_VERSION=`xcrun --show-sdk-version`
+      echo "OSX_VERSION not specified, assuming $OSX_VERSION"
+   fi
+   if test -z "$SDKROOT"
+   then
+      SDKROOT=`xcode-select -print-path`/Platforms/MacOSX.platform/Developer/SDKs/MacOSX$OSX_VERSION.sdk
+      echo "SDKROOT not specified, assuming $SDKROOT"
+   fi
+
+   if [ ! -d "${SDKROOT}" ]
+   then
+      SDKROOT_NOT_FOUND=`xcode-select -print-path`/Platforms/MacOSX.platform/Developer/SDKs/MacOSX$OSX_VERSION.sdk
+      SDKROOT=`xcode-select -print-path`/SDKs/MacOSX$OSX_VERSION.sdk
+      echo "SDKROOT not found at $SDKROOT_NOT_FOUND, trying $SDKROOT"
+   fi
+   if [ ! -d "${SDKROOT}" ]
+   then
+      SDKROOT_NOT_FOUND="$SDKROOT"
+      SDKROOT=`xcrun --show-sdk-path`
+      echo "SDKROOT not found at $SDKROOT_NOT_FOUND, trying $SDKROOT"
+   fi
+
+   if [ ! -d "${SDKROOT}" ]
+   then
+      echo "*** ${SDKROOT} does not exist, please install required SDK, or set SDKROOT manually. ***"
+      exit 1
+   fi
+
+   add_make "MACOSX_SDK=${SDKROOT}"
+   add_make "OSX_VERSION ?= ${OSX_VERSION}"
+}
+
+check_android_sdk()
+{
+	[ -z "${ANDROID_NDK}" ] && echo "You must set ANDROID_NDK environment variable" && exit 1
+	add_make "ANDROID_NDK := ${ANDROID_NDK}"
+	[ -z "${ANDROID_ABI}" ] && echo "You must set ANDROID_ABI environment variable" && exit 1
+	add_make "ANDROID_ABI := ${ANDROID_ABI}"
+	[ ${ANDROID_ABI} = "armeabi-v7a" ] && add_make_enabled "HAVE_NEON"
+	[ ${ANDROID_ABI} = "armeabi-v7a" ] && add_make_enabled "HAVE_ARMV7A"
+	[ ${ANDROID_ABI} = "armeabi" -a -z "${NO_ARMV6}" ] && add_make_enabled "HAVE_ARMV6"
+}
+
+test -z "$PREFIX" || add_make "PREFIX := $PREFIX"
+
+#
+# Checks
+#
+OS="${HOST#*-}" # strip architecture
+case "${OS}" in
+	apple-darwin*)
+		if test -z "$BUILDFORIOS"
+		then
+			check_macosx_sdk
+			add_make_enabled "HAVE_MACOSX" "HAVE_DARWIN_OS" "HAVE_BSD"
+		else
+			check_ios_sdk
+			add_make_enabled "HAVE_IOS" "HAVE_DARWIN_OS" "HAVE_BSD" "HAVE_NEON" "HAVE_ARMV7A"
+		fi
+		;;
+	*bsd*)
+		add_make_enabled "HAVE_BSD"
+		;;
+	*android*)
+		check_android_sdk
+		add_make_enabled "HAVE_LINUX" "HAVE_ANDROID"
+		case "${HOST}" in
+			*arm*)
+			add_make "PLATFORM_SHORT_ARCH := arm"
+			;;
+			*i686*)
+			add_make "PLATFORM_SHORT_ARCH := x86"
+			;;
+			*mipsel*)
+			add_make "PLATFORM_SHORT_ARCH := mips"
+			;;
+		esac
+		;;
+	*linux*)
+		add_make_enabled "HAVE_LINUX"
+		;;
+	*wince*)
+		add_make_enabled "HAVE_WINCE"
+		;;
+	*mingw*)
+		add_make_enabled "HAVE_WIN32"
+		;;
+	*solaris*)
+		add_make_enabled "HAVE_SOLARIS"
+		;;
+esac
+
+#
+# Results output
+#
+test -e Makefile && unlink Makefile
+ln -sf ../../contrib/src/main.mak Makefile || exit $?
+cat << EOF
+Bootstrap completed.
+
+Run "make" to start compilation.
+
+Other targets:
+ * make install      same as "make"
+ * make prebuilt     fetch and install prebuilt binaries
+ * make list         list packages
+ * make fetch        fetch required source tarballs
+ * make fetch-all    fetch all source tarballs
+ * make distclean    clean everything and undo bootstrap
+ * make mostlyclean  clean everything except source tarballs
+ * make clean        clean everything
+ * make package      prepare prebuilt packages
+EOF
+
+mkdir -p ../../contrib/tarballs || exit $?
diff --git a/contrib/src/README b/contrib/src/README
new file mode 100644
index 0000000000000000000000000000000000000000..581a3921954324841a710cb5a10a56ad0e4a4b43
--- /dev/null
+++ b/contrib/src/README
@@ -0,0 +1,125 @@
+Writing rules
+==============
+
+At the bare minimum, a package in contrib must provide two Makefile
+targets in src/foo/rules.mak:
+ - .foo to build and install the package, and
+ - .sum-foo to fetch or create a source tarball and verify it,
+where foo the package name.
+
+
+Tarball
+--------
+
+.sum-foo typically depends on a separate target that fetches the source
+code. In that case, .sum-foo needs only verify that the tarball
+is correct, e.g.:
+
+
+	$(TARBALLS)/libfoo-$(FOO_VERSION).tar.bz2:
+		$(call download,$(FOO_URL))
+
+	# This will use the default rule: check SHA-512
+	.sum-foo: libfoo-$(FOO_VERSION).tar.bz2
+
+NOTE: contrary to the previous VLC contribs, this system always uses
+a source tarball, even if the source code is downloaded from a VCS.
+This serves two purposes:
+ - offline builds (or behind a firewall),
+ - source code requirements compliance.
+
+
+Compilation
+------------
+
+Similarly, .foo typically depends on the source code directory. In this
+case, care must be taken that the directory name only exists if the
+source code is fully ready. Otherwise Makefile dependencies will break
+(this is not an issue for files, only directories).
+
+	libfoo: libfoo-$(FOO_VERSION).tar.bz2 .sum-foo
+		$(UNPACK) # to libfoo-$(FOO_VERSION)
+		### apply patches here ###
+		# last command: make the target directory
+		$(MOVE)
+
+	.foo: libfoo
+		cd $< && $(HOSTVARS) ./configure $(HOSTCONF)
+		cd $< && $(MAKE) install
+		touch $@
+
+Conditional builds
+-------------------
+
+As far as possible, build rules should determine automatically whether
+a package is useful (for VLC media player) or not. Useful packages
+should be listed in the PKGS special variable. See some examples:
+
+	# FFmpeg is always useful
+	PKGS += ffmpeg
+
+	# DirectX headers are useful only on Windows
+	ifdef HAVE_WIN32
+	PKGS += directx
+	endif
+
+	# x264 is only useful when stream output is enabled
+	ifdef BUILD_ENCODERS
+	PKGS += x264
+	endif
+
+If a package is a dependency of another package, but it is not a
+direct dependency of VLC, then it should NOT be added to PKGS. The
+build system will automatically build it via dependencies (see below).
+
+Some packages may be provided by the target system. This is especially
+common when building natively on Linux or BSD. When this situation is
+detected, the package name should be added to the PKGS_FOUND special
+variable. The build system will then skip building this package:
+
+	# Asks pkg-config if foo version 1.2.3 or later is present:
+	ifeq ($(call need_pkg,'foo >= 1.2.3'),)
+	PKGS_FOUND += foo
+	endif
+
+Note: The need_pkg function always return 1 during cross-compilation.
+This is a known bug.
+
+
+Dependencies
+-------------
+
+If package bar depends on package foo, the special DEPS_bar variable
+should be defined as follow:
+
+	DEPS_bar = foo $(DEPS_foo)
+
+Note that dependency resolution is unfortunately _not_ recursive.
+Therefore $(DEPS_foo) really should be specified explicitly as shown
+above. (In practice, this will not make any difference insofar as there
+are no pure second-level nested dependencies. For instance, libass
+depends on FontConfig, which depends on FreeType, but libass depends
+directly on FreeType anyway.)
+
+Also note that DEPS_bar is set "recursively" with =, rather than
+"immediately" with :=. This is so that $(DEPS_foo) is expanded
+correctly, even if DEPS_foo it is defined after DEPS_bar.
+
+Implementation note:
+
+	If you must know, the main.mak build hackery will automatically
+	emit a dependency from .bar onto .dep-foo:
+
+		.bar: .dep-foo
+
+	...whereby .dep-foo will depend on .foo:
+
+		.dep-foo: .foo
+			touch $@
+
+	...unless foo was detected in the target distribution:
+
+		.dep-foo:
+			touch $@
+
+	So you really only need to set DEPS_bar.
diff --git a/contrib/src/change_prefix.sh b/contrib/src/change_prefix.sh
new file mode 100755
index 0000000000000000000000000000000000000000..43636204dfb7846e930a5e1fe19fbdd0fe79684d
--- /dev/null
+++ b/contrib/src/change_prefix.sh
@@ -0,0 +1,62 @@
+#!/bin/sh
+# ***************************************************************************
+# change_prefix.sh : allow to transfer a contrib dir
+# ***************************************************************************
+# Copyright © 2012 VideoLAN and its authors
+#
+# Authors: Rafaël Carré
+#
+# 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.
+# ***************************************************************************
+
+set -e
+
+LANG=C
+export LANG
+
+if test "$1" = "-h" -o "$1" = "--help" -o $# -gt 2; then
+  echo "Usage: $0 [old prefix] [new prefix]
+
+Without arguments, this script assumes old prefix = @@CONTRIB_PREFIX@@,
+and new prefix = current directory.
+"
+fi
+
+if [ $# != 2 ]
+then
+    old_prefix=@@CONTRIB_PREFIX@@
+    new_prefix=`pwd`
+else
+    old_prefix=$1
+    new_prefix=$2
+fi
+
+# process [dir] [filemask] [text only]
+process() {
+    for file in `find $1 -maxdepth 1 -type f -name "$2"`
+    do
+        if [ -n "$3" ]
+        then
+            file $file | sed "s/^.*: //" | grep -q 'text\|shell' || continue
+        fi
+        echo "Fixing up $file"
+        sed -i.orig -e "s,$old_prefix,$new_prefix,g" $file
+        rm -f $file.orig
+    done
+}
+
+process bin/ "*" check
+process lib/ "*.la"
+process lib/pkgconfig/ "*.pc"
diff --git a/contrib/src/get-arch.sh b/contrib/src/get-arch.sh
new file mode 100755
index 0000000000000000000000000000000000000000..2df77de83c942337c4d9dcba6eb00585499c112c
--- /dev/null
+++ b/contrib/src/get-arch.sh
@@ -0,0 +1,29 @@
+#! /bin/sh
+
+HOST="$1"
+if test -z "$HOST"; then
+	echo "Usage: $0 <target machine>" >&2
+	exit 1
+fi
+
+case "$HOST" in
+	amd64-*)
+		ARCH="x86_64"
+		;;
+	i[3456]86-*)
+		ARCH="i386"
+		;;
+	powerpc-*|ppc-*)
+		ARCH="ppc"
+		;;
+	powerpc64-*|ppc64-*)
+		ARCH="ppc64"
+		;;
+	*-*)
+		ARCH="${HOST%%-*}"
+		;;
+	*)
+		echo "$HOST: invalid machine specification" >&2
+		exit 1
+esac
+echo $ARCH
diff --git a/contrib/src/main.mak b/contrib/src/main.mak
new file mode 100644
index 0000000000000000000000000000000000000000..5937f08ac2016207c8f60e57ab9502455a129254
--- /dev/null
+++ b/contrib/src/main.mak
@@ -0,0 +1,461 @@
+# Main makefile for VLC 3rd party libraries ("contrib")
+# Copyright (C) 2003-2011 the VideoLAN team
+#
+# This file is under the same license as the vlc package.
+
+all: install
+
+# bootstrap configuration
+include config.mak
+
+TOPSRC ?= ../../contrib
+TOPDST ?= ..
+SRC := $(TOPSRC)/src
+TARBALLS := $(TOPSRC)/tarballs
+
+PATH :=$(abspath ../../extras/tools/build/bin):$(PATH)
+export PATH
+
+PKGS_ALL := $(patsubst $(SRC)/%/rules.mak,%,$(wildcard $(SRC)/*/rules.mak))
+DATE := $(shell date +%Y%m%d)
+VPATH := $(TARBALLS)
+
+# Common download locations
+GNU := http://ftp.gnu.org/gnu
+SF := http://heanet.dl.sourceforge.net/sourceforge
+CONTRIB_VIDEOLAN := http://downloads.videolan.org/pub/contrib
+GNUTELEPHONY := http://dev.gnutelephony.org/dist/tarballs
+
+#
+# Machine-dependent variables
+#
+
+PREFIX ?= $(TOPDST)/$(HOST)
+PREFIX := $(abspath $(PREFIX))
+ifneq ($(HOST),$(BUILD))
+HAVE_CROSS_COMPILE = 1
+endif
+ARCH := $(shell $(SRC)/get-arch.sh $(HOST))
+
+ifeq ($(ARCH)-$(HAVE_WIN32),x86_64-1)
+HAVE_WIN64 := 1
+endif
+
+ifdef HAVE_CROSS_COMPILE
+need_pkg = 1
+else
+need_pkg = $(shell $(PKG_CONFIG) $(1) || echo 1)
+endif
+
+#
+# Default values for tools
+#
+ifndef HAVE_CROSS_COMPILE
+ifneq ($(findstring $(origin CC),undefined default),)
+CC := gcc
+endif
+ifneq ($(findstring $(origin CXX),undefined default),)
+CXX := g++
+endif
+ifneq ($(findstring $(origin LD),undefined default),)
+LD := ld
+endif
+ifneq ($(findstring $(origin AR),undefined default),)
+AR := ar
+endif
+ifneq ($(findstring $(origin RANLIB),undefined default),)
+RANLIB := ranlib
+endif
+ifneq ($(findstring $(origin STRIP),undefined default),)
+STRIP := strip
+endif
+else
+ifneq ($(findstring $(origin CC),undefined default),)
+CC := $(HOST)-gcc
+endif
+ifneq ($(findstring $(origin CXX),undefined default),)
+CXX := $(HOST)-g++
+endif
+ifneq ($(findstring $(origin LD),undefined default),)
+LD := $(HOST)-ld
+endif
+ifneq ($(findstring $(origin AR),undefined default),)
+AR := $(HOST)-ar
+endif
+ifneq ($(findstring $(origin RANLIB),undefined default),)
+RANLIB := $(HOST)-ranlib
+endif
+ifneq ($(findstring $(origin STRIP),undefined default),)
+STRIP := $(HOST)-strip
+endif
+endif
+
+ifdef HAVE_ANDROID
+CC :=  $(HOST)-gcc --sysroot=$(ANDROID_NDK)/platforms/android-9/arch-$(PLATFORM_SHORT_ARCH)
+CXX := $(HOST)-g++ --sysroot=$(ANDROID_NDK)/platforms/android-9/arch-$(PLATFORM_SHORT_ARCH)
+endif
+
+ifdef HAVE_MACOSX
+MIN_OSX_VERSION=10.6
+CC=xcrun cc
+CXX=xcrun c++
+AR=xcrun ar
+LD=xcrun ld
+STRIP=xcrun strip
+RANLIB=xcrun ranlib
+EXTRA_CFLAGS += -isysroot $(MACOSX_SDK) -mmacosx-version-min=$(MIN_OSX_VERSION) -DMACOSX_DEPLOYMENT_TARGET=$(MIN_OSX_VERSION)
+EXTRA_LDFLAGS += -Wl,-syslibroot,$(MACOSX_SDK) -mmacosx-version-min=$(MIN_OSX_VERSION) -isysroot $(MACOSX_SDK) -DMACOSX_DEPLOYMENT_TARGET=$(MIN_OSX_VERSION)
+ifeq ($(ARCH),x86_64)
+EXTRA_CFLAGS += -m64
+EXTRA_LDFLAGS += -m64
+else
+EXTRA_CFLAGS += -m32
+EXTRA_LDFLAGS += -m32
+endif
+
+XCODE_FLAGS = -sdk macosx$(OSX_VERSION)
+ifeq ($(shell xcodebuild -version 2>/dev/null | tee /dev/null|head -1|cut -d\  -f2|cut -d. -f1),3)
+XCODE_FLAGS += ARCHS=$(ARCH)
+# XCode 3 doesn't support -arch
+else
+XCODE_FLAGS += -arch $(ARCH)
+endif
+
+endif
+
+CCAS=$(CC) -c
+
+ifdef HAVE_IOS
+CC=xcrun clang
+CXX=xcrun clang++
+ifdef HAVE_NEON
+AS=perl $(abspath ../../extras/tools/build/bin/gas-preprocessor.pl) $(CC)
+CCAS=gas-preprocessor.pl $(CC) -c
+else
+CCAS=$(CC) -c
+endif
+AR=xcrun ar
+LD=xcrun ld
+STRIP=xcrun strip
+RANLIB=xcrun ranlib
+EXTRA_CFLAGS += $(CFLAGS)
+EXTRA_LDFLAGS += $(LDFLAGS)
+endif
+
+ifdef HAVE_WIN32
+ifneq ($(shell $(CC) $(CFLAGS) -E -dM -include _mingw.h - < /dev/null | grep -E __MINGW64_VERSION_MAJOR),)
+HAVE_MINGW_W64 := 1
+endif
+endif
+
+ifdef HAVE_SOLARIS
+ifeq ($(ARCH),x86_64)
+EXTRA_CFLAGS += -m64
+EXTRA_LDFLAGS += -m64
+else
+EXTRA_CFLAGS += -m32
+EXTRA_LDFLAGS += -m32
+endif
+endif
+
+cppcheck = $(shell $(CC) $(CFLAGS) -E -dM - < /dev/null | grep -E $(1))
+
+EXTRA_CFLAGS += -I$(PREFIX)/include
+CPPFLAGS := $(CPPFLAGS) $(EXTRA_CFLAGS)
+CFLAGS := $(CFLAGS) $(EXTRA_CFLAGS) -g
+CXXFLAGS := $(CXXFLAGS) $(EXTRA_CFLAGS) -g
+EXTRA_LDFLAGS += -L$(PREFIX)/lib
+LDFLAGS := $(LDFLAGS) $(EXTRA_LDFLAGS)
+# Do not export those! Use HOSTVARS.
+
+# Do the FPU detection, after we have figured out our compilers and flags.
+ifneq ($(findstring $(ARCH),aarch64 i386 ppc ppc64 sparc sparc64 x86_64),)
+# This should be consistent with include/vlc_cpu.h
+HAVE_FPU = 1
+else ifneq ($(findstring $(ARCH),arm),)
+ifneq ($(call cppcheck, __VFP_FP__)),)
+ifeq ($(call cppcheck, __SOFTFP__),)
+HAVE_FPU = 1
+endif
+endif
+else ifneq ($(call cppcheck, __mips_hard_float),)
+HAVE_FPU = 1
+endif
+
+ACLOCAL_AMFLAGS += -I$(PREFIX)/share/aclocal
+export ACLOCAL_AMFLAGS
+
+PKG_CONFIG ?= pkg-config
+ifdef HAVE_CROSS_COMPILE
+# This inhibits .pc file from within the cross-compilation toolchain sysroot.
+# Hopefully, nobody ever needs that.
+PKG_CONFIG_PATH := /usr/share/pkgconfig
+PKG_CONFIG_LIBDIR := /usr/$(HOST)/lib/pkgconfig
+export PKG_CONFIG_LIBDIR
+endif
+PKG_CONFIG_PATH := $(PKG_CONFIG_PATH):$(PREFIX)/lib/pkgconfig
+export PKG_CONFIG_PATH
+
+ifndef GIT
+ifeq ($(shell git --version >/dev/null 2>&1 || echo FAIL),)
+GIT = git
+endif
+endif
+GIT ?= $(error git not found!)
+
+ifndef SVN
+ifeq ($(shell svn --version >/dev/null 2>&1 || echo FAIL),)
+SVN = svn
+endif
+endif
+SVN ?= $(error subversion client (svn) not found!)
+
+ifeq ($(shell curl --version >/dev/null 2>&1 || echo FAIL),)
+download = curl -f -L -- "$(1)" > "$@"
+else ifeq ($(shell wget --version >/dev/null 2>&1 || echo FAIL),)
+download = rm -f $@.tmp && \
+	wget --passive -c -p -O $@.tmp "$(1)" && \
+	touch $@.tmp && \
+	mv $@.tmp $@
+else ifeq ($(which fetch >/dev/null 2>&1 || echo FAIL),)
+download = rm -f $@.tmp && \
+	fetch -p -o $@.tmp "$(1)" && \
+	touch $@.tmp && \
+	mv $@.tmp $@
+else
+download = $(error Neither curl nor wget found!)
+endif
+
+ifeq ($(shell which bzcat >/dev/null 2>&1 || echo FAIL),)
+BZCAT = bzcat
+else
+BZCAT ?= $(error Bunzip2 client (bzcat) not found!)
+endif
+
+ifeq ($(shell gzcat --version >/dev/null 2>&1 || echo FAIL),)
+ZCAT = gzcat
+else ifeq ($(shell zcat --version >/dev/null 2>&1 || echo FAIL),)
+ZCAT = zcat
+else
+ZCAT ?= $(error Gunzip client (zcat) not found!)
+endif
+
+ifeq ($(shell sha512sum --version >/dev/null 2>&1 || echo FAIL),)
+SHA512SUM = sha512sum --check
+else ifeq ($(shell shasum --version >/dev/null 2>&1 || echo FAIL),)
+SHA512SUM = shasum -a 512 --check
+else ifeq ($(shell openssl version >/dev/null 2>&1 || echo FAIL),)
+SHA512SUM = openssl dgst -sha512
+else
+SHA512SUM = $(error SHA-512 checksumming not found!)
+endif
+
+#
+# Common helpers
+#
+HOSTCONF := --prefix="$(PREFIX)"
+HOSTCONF += --datarootdir="$(PREFIX)/share"
+HOSTCONF += --includedir="$(PREFIX)/include"
+HOSTCONF += --libdir="$(PREFIX)/lib"
+HOSTCONF += --build="$(BUILD)" --host="$(HOST)" --target="$(HOST)"
+HOSTCONF += --program-prefix=""
+# libtool stuff:
+HOSTCONF += --enable-static --disable-shared --disable-dependency-tracking
+ifdef HAVE_WIN32
+HOSTCONF += --without-pic
+PIC :=
+else
+HOSTCONF += --with-pic
+PIC := -fPIC
+endif
+
+HOSTTOOLS := \
+	CC="$(CC)" CXX="$(CXX)" LD="$(LD)" \
+	AR="$(AR)" CCAS="$(CCAS)" RANLIB="$(RANLIB)" STRIP="$(STRIP)" \
+	PATH="$(PREFIX)/bin:$(PATH)"
+# this part is different from VideoLan main.mak
+HOSTVARS_NOPIC := $(HOSTTOOLS) \
+	CPPFLAGS="$(CPPFLAGS)" \
+	CFLAGS="$(CFLAGS)" \
+	CXXFLAGS="$(CXXFLAGS)" \
+	LDFLAGS="$(LDFLAGS)"
+HOSTVARS := $(HOSTTOOLS) \
+	CPPFLAGS="$(CPPFLAGS) $(PIC)" \
+	CFLAGS="$(CFLAGS) $(PIC)" \
+	CXXFLAGS="$(CXXFLAGS) $(PIC)" \
+	LDFLAGS="$(LDFLAGS)"
+
+download_git = \
+	rm -Rf $(@:.tar.xz=) && \
+	$(GIT) clone $(2:%=--branch %) $(1) $(@:.tar.xz=) && \
+	(cd $(@:.tar.xz=) && $(GIT) checkout $(3:%= %)) && \
+	rm -Rf $(@:%.tar.xz=%)/.git && \
+	(cd $(dir $@) && \
+	tar cvJ $(notdir $(@:.tar.xz=))) > $@ && \
+	rm -Rf $(@:.tar.xz=)
+checksum = \
+	$(foreach f,$(filter $(TARBALLS)/%,$^), \
+		grep -- " $(f:$(TARBALLS)/%=%)$$" \
+			"$(SRC)/$(patsubst .sum-%,%,$@)/$(2)SUMS" &&) \
+	(cd $(TARBALLS) && $(1) /dev/stdin) < \
+		"$(SRC)/$(patsubst .sum-%,%,$@)/$(2)SUMS"
+CHECK_SHA512 = $(call checksum,$(SHA512SUM),SHA512)
+UNPACK = $(RM) -R $@ \
+	$(foreach f,$(filter %.tar.gz %.tgz,$^), && tar xvzf $(f)) \
+	$(foreach f,$(filter %.tar.bz2,$^), && tar xvjf $(f)) \
+	$(foreach f,$(filter %.tar.xz,$^), && tar xvJf $(f)) \
+	$(foreach f,$(filter %.zip,$^), && unzip $(f))
+UNPACK_DIR = $(basename $(basename $(notdir $<)))
+APPLY = (cd $(UNPACK_DIR) && patch -fp1) <
+pkg_static = (cd $(UNPACK_DIR) && ../../../contrib/src/pkg-static.sh $(1))
+MOVE = mv $(UNPACK_DIR) $@ && touch $@
+
+AUTOMAKE_DATA_DIRS=$(foreach n,$(foreach n,$(subst :, ,$(shell echo $$PATH)),$(abspath $(n)/../share)),$(wildcard $(n)/automake*))
+UPDATE_AUTOCONFIG = for dir in $(AUTOMAKE_DATA_DIRS); do \
+		if test -f "$${dir}/config.sub" -a -f "$${dir}/config.guess"; then \
+			cp "$${dir}/config.sub" "$${dir}/config.guess" $(UNPACK_DIR); \
+			break; \
+		fi; \
+	done
+
+RECONF = mkdir -p -- $(PREFIX)/share/aclocal && \
+	cd $< && autoreconf -fiv $(ACLOCAL_AMFLAGS)
+CMAKE = cmake . -DCMAKE_TOOLCHAIN_FILE=$(abspath toolchain.cmake) \
+		-DCMAKE_INSTALL_PREFIX=$(PREFIX)
+
+#
+# Per-package build rules
+#
+include $(SRC)/*/rules.mak
+
+ifeq ($(PKGS_DISABLE), all)
+PKGS :=
+endif
+#
+# Targets
+#
+ifneq ($(filter $(PKGS_DISABLE),$(PKGS_ENABLE)),)
+$(error Same package(s) disabled and enabled at the same time)
+endif
+# Apply automatic selection (= remove distro packages):
+PKGS_AUTOMATIC := $(filter-out $(PKGS_FOUND),$(PKGS))
+# Apply manual selection (from bootstrap):
+PKGS_MANUAL := $(sort $(PKGS_ENABLE) $(filter-out $(PKGS_DISABLE),$(PKGS_AUTOMATIC)))
+# Resolve dependencies:
+PKGS_DEPS := $(filter-out $(PKGS_FOUND) $(PKGS_MANUAL),$(sort $(foreach p,$(PKGS_MANUAL),$(DEPS_$(p)))))
+PKGS := $(sort $(PKGS_MANUAL) $(PKGS_DEPS))
+
+fetch: $(PKGS:%=.sum-%)
+fetch-all: $(PKGS_ALL:%=.sum-%)
+install: $(PKGS:%=.%)
+
+mostlyclean:
+	-$(RM) $(foreach p,$(PKGS_ALL),.$(p) .sum-$(p) .dep-$(p))
+	-$(RM) toolchain.cmake
+	-$(RM) -R "$(PREFIX)"
+	-$(RM) -R */
+
+clean: mostlyclean
+	-$(RM) $(TARBALLS)/*.*
+
+distclean: clean
+	$(RM) config.mak
+	unlink Makefile
+
+# TODO: set up the correct url
+#PREBUILT_URL=$(URL)/contrib/$(HOST)/sflphone-contrib-$(HOST)-latest.tar.bz2
+
+sflphone-contrib-$(HOST)-latest.tar.bz2:
+	$(call download,$(PREBUILT_URL))
+
+prebuilt: sflphone-contrib-$(HOST)-latest.tar.bz2
+	-$(UNPACK)
+	mv $(HOST) $(TOPDST)
+	cd $(TOPDST)/$(HOST) && $(SRC)/change_prefix.sh
+
+package: install
+	rm -Rf tmp/
+	mkdir -p tmp/
+	cp -r $(PREFIX) tmp/
+	# remove useless files
+	cd tmp/$(notdir $(PREFIX)); \
+		cd share; rm -Rf man doc gtk-doc info lua projectM gettext; cd ..; \
+		rm -Rf man sbin etc lib/lua lib/sidplay
+	cd tmp/$(notdir $(PREFIX)) && $(abspath $(SRC))/change_prefix.sh $(PREFIX) @@CONTRIB_PREFIX@@
+	(cd tmp && tar c $(notdir $(PREFIX))/) | bzip2 -c > ../sflphone-contrib-$(HOST)-$(DATE).tar.bz2
+
+list:
+	@echo All packages:
+	@echo '  $(PKGS_ALL)' | fmt
+	@echo Distribution-provided packages:
+	@echo '  $(PKGS_FOUND)' | fmt
+	@echo Automatically selected packages:
+	@echo '  $(PKGS_AUTOMATIC)' | fmt
+	@echo Manually deselected packages:
+	@echo '  $(PKGS_DISABLE)' | fmt
+	@echo Manually selected packages:
+	@echo '  $(PKGS_ENABLE)' | fmt
+	@echo Depended-on packages:
+	@echo '  $(PKGS_DEPS)' | fmt
+	@echo To-be-built packages:
+	@echo '  $(PKGS)' | fmt
+
+.PHONY: all fetch fetch-all install mostlyclean clean distclean package list prebuilt
+
+# CMake toolchain
+toolchain.cmake:
+	$(RM) $@
+ifdef HAVE_WIN32
+	echo "set(CMAKE_SYSTEM_NAME Windows)" >> $@
+	echo "set(CMAKE_RC_COMPILER $(HOST)-windres)" >> $@
+endif
+ifdef HAVE_DARWIN_OS
+	echo "set(CMAKE_SYSTEM_NAME Darwin)" >> $@
+	echo "set(CMAKE_C_FLAGS $(CFLAGS))" >> $@
+	echo "set(CMAKE_CXX_FLAGS $(CFLAGS))" >> $@
+	echo "set(CMAKE_LD_FLAGS $(LDFLAGS))" >> $@
+	echo "set(CMAKE_AR ar CACHE FILEPATH "Archiver")" >> $@
+ifdef HAVE_IOS
+	echo "set(CMAKE_OSX_SYSROOT $(IOS_SDK))" >> $@
+else
+	echo "set(CMAKE_OSX_SYSROOT $(MACOSX_SDK))" >> $@
+endif
+endif
+ifdef HAVE_CROSS_COMPILE
+	echo "set(_CMAKE_TOOLCHAIN_PREFIX $(HOST)-)" >> $@
+ifdef HAVE_ANDROID
+# cmake will overwrite our --sysroot with a native (host) one on Darwin
+# Set it to "" right away to short-circuit this behaviour
+	echo "set(CMAKE_CXX_SYSROOT_FLAG \"\")" >> $@
+	echo "set(CMAKE_C_SYSROOT_FLAG \"\")" >> $@
+endif
+endif
+	echo "set(CMAKE_C_COMPILER $(CC))" >> $@
+	echo "set(CMAKE_CXX_COMPILER $(CXX))" >> $@
+	echo "set(CMAKE_FIND_ROOT_PATH $(PREFIX))" >> $@
+	echo "set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)" >> $@
+	echo "set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)" >> $@
+	echo "set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)" >> $@
+
+# Default pattern rules
+.sum-%: $(SRC)/%/SHA512SUMS
+	$(CHECK_SHA512)
+	touch $@
+
+.sum-%:
+	$(error Download and check target not defined for $*)
+
+# Dummy dependency on found packages
+$(patsubst %,.dep-%,$(PKGS_FOUND)): .dep-%:
+	touch $@
+
+# Real dependency on missing packages
+$(patsubst %,.dep-%,$(filter-out $(PKGS_FOUND),$(PKGS_ALL))): .dep-%: .%
+	touch -r $< $@
+
+.SECONDEXPANSION:
+
+# Dependency propagation (convert 'DEPS_foo = bar' to '.foo: .bar')
+$(foreach p,$(PKGS_ALL),.$(p)): .%: $$(foreach d,$$(DEPS_$$*),.dep-$$(d))
+
+.DELETE_ON_ERROR:
diff --git a/contrib/src/pkg-static.sh b/contrib/src/pkg-static.sh
new file mode 100755
index 0000000000000000000000000000000000000000..25c2af754a6f648493d52fb40cf62eda5131bdb1
--- /dev/null
+++ b/contrib/src/pkg-static.sh
@@ -0,0 +1,29 @@
+#! /bin/sh
+# Copyright (C) 2012 Rémi Denis-Courmont
+# This file is distributed under the same license as the vlc package.
+
+if test -z "$1" || test -n "$2"; then
+	echo "Usage: $0 <file.pc>" >&2
+	echo "Merges the pkg-config Libs.private stanza into Libs stanza." >&2
+	exit 1
+fi
+
+exec <"$1" >"$1.tmp" || exit $?
+
+PUBLIC=""
+PRIVATE=""
+
+while read LINE; do
+	pub="${LINE#Libs:}"
+	priv="${LINE#Libs.private:}"
+	if test "$pub" != "$LINE"; then
+		PUBLIC="$pub"
+	elif test "$priv" != "$LINE"; then
+		PRIVATE="$priv"
+	else
+		echo "$LINE"
+	fi
+done
+echo "Libs: $PUBLIC $PRIVATE"
+
+mv -f -- "$1.tmp" "$1"
diff --git a/contrib/tarballs/.gitignore b/contrib/tarballs/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..7e4045957f870c852233ec8bd36be58657c3fe32
--- /dev/null
+++ b/contrib/tarballs/.gitignore
@@ -0,0 +1,5 @@
+*.tar.*
+*.zip
+*.h
+*.tgz
+*-git/