diff --git a/.gitignore b/.gitignore
index d9d98e5bf39f1d58d7eacdc7c5383a23893133e1..aa9a5114f92daf98bc278eca7002a0ca199e3ffa 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,22 +1,5 @@
 *~
 *.swp
-*.pyc
-*.so
-*.dylib
-CMakeLists.txt
-bin
-eggs
-parts
-.installed.cfg
-.mr.developer.cfg
-*.egg-info
-develop-eggs
-sphinx
-dist
-.nfs*
-.gdb_history
-build
-*.egg
-opsnr.stt
-.coverage
-.DS_Store
+_ci/
+src/
+dist/
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 6dd6990dbc1ddaf9460d2e563d65740a79ddc0c5..d68f21f77ab6726f6fc4c52745aefc9764d48078 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1,97 +1,28 @@
-# This build file heavily uses template features from YAML so it is generic
-# enough for any Bob project. Don't modify it unless you know what you're
-# doing.
-
-
-# Definition of our build pipeline
 stages:
-  - build_bob
-  - test_bob
-  - wheels_bob
-
-
-# ---------
-# Templates
-# ---------
+  - build
 
-# Template for the build stage
-# Needs to run on all supported architectures, platforms and python versions
-.build_bob_template: &build_bob_job
-  stage: build_bob
+core_linux_27:
+  stage: build
   before_script:
     - git clean -ffdx
-    #- mkdir _ci
-    #- curl --silent "https://gitlab.idiap.ch/bob/bob.admin/raw/master/gitlab/install.sh" > _ci/install.sh
-    #- chmod 755 _ci/install.sh
-    #- ./_ci/install.sh _ci #updates
-    - ./_ci/before_build.sh buildout-bob.cfg
-  script:
-    - ./_ci/build.sh buildout-bob.cfg requirements-bob.txt
-  after_script:
-    - ./_ci/after_build.sh
-  artifacts:
-    expire_in: 1 week
-    paths:
-      - _ci/
-      - dist/
-
-
-# Template for the test stage - re-installs from uploaded wheels
-# Needs to run on all supported architectures, platforms and python versions
-.test_bob_template: &test_bob_job
-  stage: test_bob
-  before_script:
-    #- ./_ci/install.sh _ci #updates
-    - ./_ci/before_test.sh buildout-bob.cfg
-  script:
-    - ./_ci/test.sh buildout-bob.cfg
-  after_script:
-    - ./_ci/after_test.sh
-
-
-# Template for the wheel uploading stage
-# Needs to run against all combinations of python and operating systems
-.wheels_bob_template: &wheels_bob_job
-  stage: wheels_bob
-  environment: intranet
-  only:
-    - new_ci
-    - /^v\d+\.\d+\.\d+([abc]\d*)?$/  # PEP-440 compliant version (tags)
-  before_script:
-    #- ./_ci/install.sh _ci #updates
-    - ./_ci/before_wheels.sh
   script:
+    - ./build.sh core.txt 2.7
     - ./_ci/wheels.sh
   after_script:
-    - ./_ci/after_wheels.sh
-
-
-
-# -------------
-# Build Targets
-# -------------
-
-# Linux + Python 2.7: Builds, tests, uploads wheel and deploys (if needed)
-build_bob_linux_27:
-  <<: *build_bob_job
-  variables: &linux_27_build_variables
-    PYTHON_VERSION: "2.7"
-  tags:
-    - conda-linux
-
-test_bob_linux_27:
-  <<: *test_bob_job
-  variables: *linux_27_build_variables
-  dependencies:
-    - build_bob_linux_27
+    - git clean -ffdx src
   tags:
     - conda-linux
 
-wheels_bob_linux_27:
-  <<: *wheels_bob_job
-  variables: *linux_27_build_variables
+extras_linux_27:
+  stage: build
   dependencies:
-    - build_bob_linux_27
+    - core_linux_27
+  before_script:
+    - git clean -ffdx
+  script:
+    - ./build.sh extras.txt 2.7
+    - ./_ci/wheels.sh
+  after_script:
+    - git clean -ffdx
   tags:
     - conda-linux
-
diff --git a/LICENSE b/LICENSE
deleted file mode 100644
index 7ac8998a23ffd779d3e33b4fa0bc6c1301353c81..0000000000000000000000000000000000000000
--- a/LICENSE
+++ /dev/null
@@ -1,24 +0,0 @@
-Copyright (c) 2013, Andre Anjos - Idiap Research Institute
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-Redistributions of source code must retain the above copyright notice, this
-list of conditions and the following disclaimer.  Redistributions in binary
-form must reproduce the above copyright notice, this list of conditions and the
-following disclaimer in the documentation and/or other materials provided with
-the distribution.  Neither the name of the Idiap Research Institute nor the
-names of its contributors may be used to endorse or promote products derived
-from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
-ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/README.rst b/README.rst
index de46d4b9f25c621a18d564c776d40325487ba95f..1f3790c4deeea0a2601d37b562bf9861f383f96a 100644
--- a/README.rst
+++ b/README.rst
@@ -1,125 +1,72 @@
 .. vim: set fileencoding=utf-8 :
 .. Andre Anjos <andre.anjos@idiap.ch>
-.. Mon 03 Nov 2014 10:37:52 CET
+.. Thu 22 Dec 2016 08:47:14 CET
 
-.. |badge| image:: https://gitlab.idiap.ch/ci/projects/6/status.png?ref=master
-   :target: https://gitlab.idiap.ch/ci/projects/6?ref=master
+.. image:: https://gitlab.idiap.ch/bob/bob.io.audio/badges/master/build.svg
+   :target: https://gitlab.idiap.ch/bob/bob.io.audio/commits/master
 
-======================================
- Bob Nightlies (concentrator) |badge|
-======================================
+===============
+ Bob Nightlies
+===============
 
-Bob is a free signal-processing and machine learning toolbox originally
-developed by the Biometrics group at `Idiap`_ Research Institute, Switzerland. 
+This package is part of the signal-processing and machine learning toolbox
+Bob_. This package implements the so-called "nightlies" aggregator. Its build
+is triggered every night so all packages are properly recompiled against the
+latest environment and tested together under that light.
 
-The toolbox is written in a mix of `Python`_ and `C++`_ and is designed to be
-both efficient and reduce development time. It is composed of a reasonably
-large number of `packages`_ that implement tools for image, audio & video
-processing, machine learning and pattern recognition.
-
-**This package is not Bob. It is just a container that includes Bob
-packages so we can continously integrate them.**
-
-If just want to use Bob's functionalities on your experiments, you are **not**
-supposed to install this package on your machine, but rather `create your own
-personalised work environment
-<https://github.com/idiap/bob/wiki/Installation>`_ depending on your needs, by
-collecting individual sub-packages based on your requirements.
-
-If you are developing Bob packages which are supposed to built along side our
-`nightly build system <https://www.idiap.ch/software/bob/buildbot/waterfall>`_,
-please read on. 
 
 Installation
 ------------
 
-As per-usual, make sure all external `dependencies`_ are installed on your host
-before trying to compile the whole of Bob. Once all dependencies_ are
-satisfied, you should be able to::
-
-  $ python bootstrap.py
-  $ ./bin/buildout
-
-You may tweak the options in ``buildout.cfg`` to disable/enable verbosity and
-debug builds, **before you run** ``./bin/buildout``.
-
-
-Documentation
--------------
-
-You can generate the documentation for all packages in this container, after
-installation, using Sphinx::
-
-  $ ./bin/sphinx-build . sphinx
-
-This shall place in the directory ``sphinx``, the current version for the
-documentation of the package.
-
-Testing
--------
+This package can be built starting from a base development environment, as
+provided by our `from-scratch.sh`_ script. First run it to create a conda-based
+environment for development. Once the environment is ready, follow the
+instructions on the ``.gitlab-ci.yml`` file to complete the development cycle.
 
-You can run a set of tests using the nose test runner::
+The script ``build.sh`` will try to execute the steps from the CI in the right
+order and can be used to locally test your modifications **before** pushing a
+branch into the nightlies, which will trigger a complete set of builds in
+multiple platforms.
 
-  $ ./bin/nosetests -sv
+The script ``build.sh`` takes several parameters::
 
-You can run our documentation tests using sphinx itself::
+  $ ./build.sh
 
-  $ ./bin/sphinx-build -b doctest . sphinx
 
 Updating a Package
 ------------------
 
 .. warning::
 
-   Before adding a package to this prototype, please ensure that the package:
+   Before adding a package to this prototype, please ensure that the package
+   contains all standard components of a Bob_ package (README, unit tests, CI
+   integration and documentation among others).
 
-   * contains a README clearly indicating how to install the package (including
-     external dependencies required). Also, please add package badges for the
-     build status and coverage as shown in other packages (even if your package
-     is not yet integrated to Travis or Coveralls).
+   If you don't know how to do this, ask for information on our `mailing
+   list`_.
 
-   * Has unit tests.
+The new package sits in one of two categories:
 
-   * Is integrated with gitlab-ci and correctly tested on that platform (i.e.
-     it builds, it tests fine and a documentation can be constructed and tested
-     w/o errors)
+1. If the package belongs to the core of Bob, add the package to the file
+   ``core.txt``, following other packages already inserted. Be attentive to
+   the order in which packages should be compiled.
+2. If the package is not part of the core of Bob, add the package to the file
+   ``extras.txt``, following other packages already inserted. Be attentive
+   to the order in which packages should be compiled.
 
-   If you don't know how to do this, ask for information on the bob-devel
-   mailing list.
+Once the file is modified, commit the changes to a **new branch**, with a
+suggestive name. Push the branch and, once it is green, you may merge it to the
+master (or ask it to be merged).
 
-Then, add/update/remove the following files:
 
-1. Add your package to the build::
-
-   $ vim layer2.cfg
-
-2. Add your package to the overall documentation::
-
-   $ vim index.rst
-
-3. Add your package to be "deploy-tested"::
-
-   $ vim requirements2.txt
-
-4. Add a row for your package in our Packages_ list
-
-5. Update the dependency graph::
-
-   $ tools/update_dependency_graphs.sh all
-
-   The current dependency graph looks like that:
-
-   .. image:: https://raw.githubusercontent.com/idiap/bob/master/dependencies.png
-      :target: https://raw.githubusercontent.com/idiap/bob/master/dependencies.png
-      :width: 50%
+Contact
+-------
 
+For questions or reporting issues to this software package, contact our
+development `mailing list`_.
 
-.. External References
 
-.. _c++: http://www2.research.att.com/~bs/C++.html
-.. _python: http://www.python.org
-.. _idiap: http://www.idiap.ch
-.. _packages: https://gitlab.idiap.ch/bob/bob/wikis/Packages
-.. _wiki: https://github.com/idiap/bob/wiki
-.. _bug tracker: https://github.com/idiap/bob/issues
-.. _dependencies: https://github.com/idiap/bob/wiki/Dependencies
+.. Place your references here:
+.. _bob: https://www.idiap.ch/software/bob
+.. _mailing list: https://groups.google.com/forum/?fromgroups#!forum/bob-devel
+.. _from-scratch.sh: https://gitlab.idiap.ch/bob/bob.admin/blob/master/install/from-scratch.sh
diff --git a/_ci/README.md b/_ci/README.md
deleted file mode 100644
index 59ea50aaabf1f09bcc282716b5fa65ae332af00e..0000000000000000000000000000000000000000
--- a/_ci/README.md
+++ /dev/null
@@ -1,23 +0,0 @@
-# Scripts for Continous Integration with Gitlab
-
-This directory contains scripts that are used by our continuous integration
-(CI) builds. There are various sets of scripts named as follows:
-
-* `before_<stage>.sh`
-* `<stage>.sh`
-* `after_<stage>.sh`
-
-Each of these sets correpond to one of the build stages inside the CI builds.
-
-The script `install.sh` contains a basic set of routines to install and update
-the scripts on the target host. If you add more scripts, it is sensible to
-add those in there.
-
-The script `functions.sh` contains a set of functions that are shared between
-all scripts. All scripts *source* `functions.sh` before anything is done.
-`functions.sh` also set important local and global (export) variables that are
-required by the build system.
-
-Before changing any script, try to understand the role of each of the stages by
-looking at our template CI yaml files (in the directory `../templates`) and
-then how to use the functions declared in `functions.sh`.
diff --git a/_ci/after_build.sh b/_ci/after_build.sh
deleted file mode 100755
index c9f0e880517fe5fd62f816e2b6569bf5e277984a..0000000000000000000000000000000000000000
--- a/_ci/after_build.sh
+++ /dev/null
@@ -1,6 +0,0 @@
-#!/usr/bin/env bash
-# Sat 24 Sep 08:12:24 2016 CEST
-
-source $(dirname ${0})/functions.sh
-
-log_info "*** Not yet implemented ***"
diff --git a/_ci/after_deploy.sh b/_ci/after_deploy.sh
deleted file mode 100755
index dc97ec3a5e72f02e23d5efe1fc691bdec613ca2a..0000000000000000000000000000000000000000
--- a/_ci/after_deploy.sh
+++ /dev/null
@@ -1,6 +0,0 @@
-#!/usr/bin/env bash
-# Thu 22 Sep 2016 15:11:53 CEST
-
-source $(dirname ${0})/functions.sh
-
-log_info "*** Not yet implemented ***"
diff --git a/_ci/after_docs.sh b/_ci/after_docs.sh
deleted file mode 100755
index cd563fb91dbdc844066e4a4a8d506f28d420cade..0000000000000000000000000000000000000000
--- a/_ci/after_docs.sh
+++ /dev/null
@@ -1,6 +0,0 @@
-#!/usr/bin/env bash
-# Thu 22 Sep 2016 18:23:57 CEST
-
-source $(dirname ${0})/functions.sh
-
-log_info "*** Not yet implemented ***"
diff --git a/_ci/after_test.sh b/_ci/after_test.sh
deleted file mode 100755
index 67a04cb79ada656a7be2d1cf2296f653acf399bb..0000000000000000000000000000000000000000
--- a/_ci/after_test.sh
+++ /dev/null
@@ -1,6 +0,0 @@
-#!/usr/bin/env bash
-# Thu 22 Sep 2016 13:59:03 CEST
-
-source $(dirname ${0})/functions.sh
-
-log_info "*** Not yet implemented ***"
diff --git a/_ci/after_wheels.sh b/_ci/after_wheels.sh
deleted file mode 100755
index cd563fb91dbdc844066e4a4a8d506f28d420cade..0000000000000000000000000000000000000000
--- a/_ci/after_wheels.sh
+++ /dev/null
@@ -1,6 +0,0 @@
-#!/usr/bin/env bash
-# Thu 22 Sep 2016 18:23:57 CEST
-
-source $(dirname ${0})/functions.sh
-
-log_info "*** Not yet implemented ***"
diff --git a/_ci/before_build.sh b/_ci/before_build.sh
deleted file mode 100755
index 8cca5970c6fa1da6c70292c90970e97433ed1b6e..0000000000000000000000000000000000000000
--- a/_ci/before_build.sh
+++ /dev/null
@@ -1,73 +0,0 @@
-#!/usr/bin/env bash
-# Mon  8 Aug 17:40:24 2016 CEST
-
-source $(dirname ${0})/functions.sh
-
-WHEELS_REPOSITORY="${DOCSERVER}/software/bob/wheels/gitlab/"
-WHEELS_SERVER=`echo ${DOCSERVER} | sed 's;https\?://;;'`
-check_env WHEELS_REPOSITORY
-check_env WHEELS_SERVER
-
-NIGHTLIES=$1
-
-# Readies the virtualenv to use for installation
-if [ ! -d ${PREFIX} ]; then
-  log_info "Creating virtualenv installation at ${PREFIX}..."
-  run_cmd ${BOB_PREFIX_PATH}/bin/virtualenv --system-site-packages ${PREFIX}
-else
-  log_warn "Prefix directory ${PREFIX} exists, not re-installing..."
-fi
-
-# Source the newly created virtualenv
-log_info "$ source ${PREFIX}/bin/activate"
-source ${PREFIX}/bin/activate
-
-# Verify where pip is installed
-use_pip=`which pip`
-if [ -z "${use_pip}" ]; then
-  log_error "Cannot find pip, aborting..."
-  exit 1
-else
-  log_info "Using pip: ${use_pip}"
-fi
-
-# Upgrade wheel generation library to avoid bugs
-run_cmd ${use_pip} install --upgrade setuptools pip wheel
-
-use_python=`which python`
-if [ -z "${use_python}" ]; then
-  log_error "Cannot find python, aborting..."
-  exit 1
-else
-  log_info "Using python: ${use_python}"
-fi
-
-# Install this package's build dependencies
-PIPOPTS="--find-links ${WHEELS_REPOSITORY} --trusted-host ${WHEELS_SERVER}"
-PIPOPTS="${PIPOPTS} --pre --use-wheel --no-index"
-if [ -e requirements.txt ]; then
-  run_cmd ${use_pip} install ${PIPOPTS} --requirement requirements.txt
-else
-  log_info "No requirements.txt file found, skipping 'pip install <build-deps>'..."
-fi
-
-# Install this package's test dependencies
-if [ -e test-requirements.txt ]; then
-  run_cmd ${use_pip} install ${PIPOPTS} --requirement test-requirements.txt
-else
-  log_info "No test-requirements.txt file found, skipping 'pip install <test-deps>'..."
-fi
-
-# Finally, bootstrap the installation from the new environment
-if [ -e bootstrap-buildout.py ]; then
-
-   if [ "$NIGHTLIES" -eq '' ]; then
-     run_cmd ${use_python} bootstrap-buildout.py
-   else
-     run_cmd ${use_python} bootstrap-buildout.py -c ${NIGHTLIES}
-   fi
-
-else
-  log_error "No bootstrap-buildout.py file found, stopping..."
-  exit 1
-fi
diff --git a/_ci/before_deploy.sh b/_ci/before_deploy.sh
deleted file mode 100755
index cac81087be5533b36b8ab026d458748b8f607f25..0000000000000000000000000000000000000000
--- a/_ci/before_deploy.sh
+++ /dev/null
@@ -1,15 +0,0 @@
-#!/usr/bin/env bash
-# Wed 21 Sep 2016 13:08:05 CEST
-
-source $(dirname ${0})/functions.sh
-
-run_cmd $(dirname ${0})/before_test.sh
-
-# setup database locally and run `bob_dbmanage.py all download`
-# if this is a database package - need auxiliary file for package
-if [[ ${CI_PROJECT_NAME} == bob.db.* ]]; then
-  run_cmd ./bin/buildout
-  if [ -x ./bin/bob_dbmanage.py ]; then
-    run_cmd ./bin/bob_dbmanage.py all download --force;
-  fi
-fi
diff --git a/_ci/before_docs.sh b/_ci/before_docs.sh
deleted file mode 100755
index cd563fb91dbdc844066e4a4a8d506f28d420cade..0000000000000000000000000000000000000000
--- a/_ci/before_docs.sh
+++ /dev/null
@@ -1,6 +0,0 @@
-#!/usr/bin/env bash
-# Thu 22 Sep 2016 18:23:57 CEST
-
-source $(dirname ${0})/functions.sh
-
-log_info "*** Not yet implemented ***"
diff --git a/_ci/before_test.sh b/_ci/before_test.sh
deleted file mode 100755
index f1cc929bd0ecbcab255ad92c9c0fef1b45277975..0000000000000000000000000000000000000000
--- a/_ci/before_test.sh
+++ /dev/null
@@ -1,32 +0,0 @@
-#!/usr/bin/env bash
-# Wed 21 Sep 2016 13:08:05 CEST
-
-source $(dirname ${0})/functions.sh
-
-NIGHTLIES=$1
-
-if [ "$NIGHTLIES" -eq '' ]; then
-  run_cmd $(dirname ${0})/before_build.sh
-else
-  run_cmd $(dirname ${0})/before_build.sh ${NIGHTLIES}
-fi
-
-# Source the newly created virtualenv
-log_info "$ source ${PREFIX}/bin/activate"
-source ${PREFIX}/bin/activate
-
-# Verify where pip is installed
-use_pip=`which pip`
-if [ -z "${use_pip}" ]; then
-  log_error "Cannot find pip, aborting..."
-  exit 1
-else
-  log_info "Using pip: ${use_pip}"
-fi
-
-# zc.recipe.egg needs some special installation instructions
-if [ "${CI_PROJECT_NAME}" == "bob.buildout" ]; then
-  run_cmd ${use_pip} install --upgrade --no-binary ":all:" zc.recipe.egg
-fi
-
-run_cmd ${use_pip} install --upgrade --use-wheel --no-index --pre dist/*.whl
diff --git a/_ci/before_wheels.sh b/_ci/before_wheels.sh
deleted file mode 100755
index cd563fb91dbdc844066e4a4a8d506f28d420cade..0000000000000000000000000000000000000000
--- a/_ci/before_wheels.sh
+++ /dev/null
@@ -1,6 +0,0 @@
-#!/usr/bin/env bash
-# Thu 22 Sep 2016 18:23:57 CEST
-
-source $(dirname ${0})/functions.sh
-
-log_info "*** Not yet implemented ***"
diff --git a/_ci/build.sh b/_ci/build.sh
deleted file mode 100755
index 4f68ce5038b85f9325cf33afc4e99fa39803a641..0000000000000000000000000000000000000000
--- a/_ci/build.sh
+++ /dev/null
@@ -1,62 +0,0 @@
-#!/usr/bin/env bash
-# Wed 21 Sep 2016 13:08:05 CEST
-
-source $(dirname ${0})/functions.sh
-
-NIGHTLIES=$1
-REQUIREMENTS=$2
-
-
-if [ "$NIGHTLIES" -eq '' ]; then
-  run_cmd ./bin/buildout
-else
-  run_cmd ./bin/buildout -c ${NIGHTLIES}
-fi
-
-
-
-if [ -x ./bin/bob_dbmanage.py ]; then
-  run_cmd ./bin/bob_dbmanage.py all download --force;  
-fi
-
-if [ -d ./doc ]; then
-  run_cmd ./bin/sphinx-build -W doc sphinx
-fi
-
-if [ "$NIGHTLIES" -eq '' ]; then
-
-  if [ -z "${WHEEL_TAG}" ]; then
-    # C/C++ extensions
-    run_cmd ./bin/python setup.py bdist_wheel
-  else
-    # Python-only packages
-    run_cmd ./bin/python setup.py bdist_wheel --python-tag ${WHEEL_TAG}
-  fi
-    
-else
-
-  # Generating the whell of the nightlies
-  if [ -z "${WHEEL_TAG}" ]; then
-    run_cmd ./bin/python setup.py bdist_wheel --dist-dir ./dist
-  else
-    run_cmd ./bin/python setup.py bdist_wheel --dist-dir ./dist  --python-tag ${WHEEL_TAG}
-  fi
-
-  #WHEELS FROM THE DEPENDENCIES
-  for f in ${REQUIREMENTS}
-  do
-    while read -r line
-    do
-        dir="src/"$line
-        run_cmd cd $dir
-        if [ -z "${WHEEL_TAG}" ]; then
-          run_cmd ../../bin/python setup.py bdist_wheel --dist-dir ../../dist
-        else
-          run_cmd ../../bin/python setup.py bdist_wheel --dist-dir ../../dist --python-tag ${WHEEL_TAG}
-        fi
-
-        run_cmd cd ../../
-    done < "$f"
-  done
-
-fi
diff --git a/_ci/deploy.sh b/_ci/deploy.sh
deleted file mode 100755
index 34b1ca2372e35333c200e5188de5c57fd133f73c..0000000000000000000000000000000000000000
--- a/_ci/deploy.sh
+++ /dev/null
@@ -1,59 +0,0 @@
-#!/usr/bin/env bash
-# Thu 22 Sep 2016 13:59:03 CEST
-
-source $(dirname ${0})/functions.sh
-
-lock_pypirc
-
-setup_deploy register --repository staging
-setup_deploy check sdist --formats zip upload --repository staging
-
-# if that worked, uploads source package to the production index
-log_info "Uploading package to ${PYPISERVER} on behalf of ${PYPIUSER}..."
-setup_deploy register --repository production
-setup_deploy check sdist --formats zip upload --repository production
-
-# if that worked, uploads documentation to pythonhosted if any exists
-if [ -d sphinx ]; then
-  log_info "Uploading documentation to ${PYPISERVER} on behalf of ${PYPIUSER}..."
-  setup_deploy upload_docs --upload-dir sphinx --repository production
-fi
-
-unlock_pypirc
-
-condaforge_packages=("bob" \
-"bob.extension" \
-"bob.blitz" \
-"bob.core" \
-"bob.ip.draw" \
-"bob.io.base" \
-"bob.sp" \
-"bob.math" \
-"bob.ap" \
-"bob.measure" \
-"bob.db.base" \
-"bob.io.image" \
-"bob.io.video" \
-"bob.io.matlab" \
-"bob.ip.base" \
-"bob.ip.color" \
-"bob.ip.gabor" \
-"bob.learn.activation" \
-"bob.learn.libsvm" \
-"bob.learn.boosting" \
-"bob.io.audio" \
-"bob.learn.linear" \
-"bob.learn.mlp" \
-"bob.db.wine" \
-"bob.db.mnist" \
-"bob.db.atnt" \
-"bob.ip.flandmark" \
-"bob.ip.facedetect" \
-"bob.ip.optflow.hornschunck" \
-"bob.ip.optflow.liu" \
-"bob.learn.em" \
-"bob.db.iris")
-
-if contains_element ${CI_PROJECT_NAME}  "${condaforge_packages[@]}"; then
-  run_cmd ${CONDA_FOLDER}/bin/python _ci/update_feedstock.py ${CI_PROJECT_NAME}
-fi
diff --git a/_ci/docs.sh b/_ci/docs.sh
deleted file mode 100755
index d2a62c3f7cd34ba6ca10eddded1daf66e21acf3f..0000000000000000000000000000000000000000
--- a/_ci/docs.sh
+++ /dev/null
@@ -1,18 +0,0 @@
-#!/usr/bin/env bash
-# Wed 21 Sep 2016 13:08:05 CEST
-
-source $(dirname ${0})/functions.sh
-
-info=sphinx/.gitlab-ci.info
-
-echo "repo=${CI_PROJECT_PATH}" > ${info}
-echo "branch=${CI_BUILD_REF_NAME}" >> ${info}
-echo "tag=${CI_BUILD_TAG}" >> ${info}
-echo "build=${CI_BUILD_ID}" >> ${info}
-echo "commit=${CI_BUILD_REF}" >> ${info}
-echo "runner=${CI_RUNNER_DESCRIPTION}" >> ${info}
-
-file=${CI_PROJECT_NAME}-${CI_BUILD_REF}.tar.bz2
-run_cmd tar cfj ${file} sphinx
-
-doc_upload ${file} software/bob/docs-upload/
diff --git a/_ci/functions.sh b/_ci/functions.sh
deleted file mode 100644
index e82893c3b1e9213ea7a833b1d4e9be1cf14325d4..0000000000000000000000000000000000000000
--- a/_ci/functions.sh
+++ /dev/null
@@ -1,255 +0,0 @@
-#!/usr/bin/env bash
-# Thu 22 Sep 2016 13:05:54 CEST
-
-# Build utilities
-
-# Determines the architecture we're using
-arch() {
-  [[ "$(uname -s)" == "Darwin" ]] && echo "macosx" || echo "linux"
-}
-
-
-# Functions for coloring echo commands
-log_info() {
-  echo -e "(`date +%T`) \033[1;34m${@}\033[0m"
-}
-
-
-log_warn() {
-  echo -e "(`date +%T`) \033[1;35mWarning: ${@}\033[0m" >&2
-}
-
-
-log_error() {
-  echo -e "(`date +%T`) \033[1;31mError: ${@}\033[0m" >&2
-}
-
-
-# Checks a given environment variable is set (non-zero size)
-check_env() {
-  if [ -z "${!1}" ]; then
-    log_error "Variable ${1} is undefined - aborting...";
-    exit 1
-  else
-    log_info "${1}=${!1}";
-  fi
-}
-
-
-# Exports a given environment variable, verbosely
-export_env() {
-  if [ -z "${!1}" ]; then
-    log_error "Variable ${1} is undefined - aborting...";
-    exit 1
-  else
-    export ${1}
-    log_info "export ${1}=${!1}";
-  fi
-}
-
-
-# Checks a given environment variable is set (non-zero size)
-check_pass() {
-  if [ -z "${!1}" ]; then
-    log_error "Variable ${1} is undefined - aborting...";
-    exit 1
-  else
-    log_info "${1}=********";
-  fi
-}
-
-
-# Function for running command and echoing results
-run_cmd() {
-  log_info "$ ${@}"
-  ${@}
-  local status=$?
-  if [ ${status} != 0 ]; then
-    log_error "Command Failed \"${@}\""
-    exit ${status}
-  fi
-}
-
-
-# Prepares ~/.pypirc
-lock_pypirc() {
-  local lockfile=/var/tmp/pypirc_lock
-  local rc=${HOME}/.pypirc
-  local maxtries=10
-  local try=0
-  local sleeptime=30 #seconds
-
-  while true; do
-    if [[ ${try} -lt ${maxtries} ]]; then
-      ((try++))
-      if ( set -o noclobber; echo "$$" > "${lockfile}") 2> /dev/null; then
-        log_info "Successfully acquired ${lockfile}"
-        echo $$ > ${lockfile}
-        log_info "trapping on ${lockfile}..."
-        trap 'rm -f "${lockfile}"; exit $?' INT TERM EXIT
-
-        # start: protected code
-        log_info "Creating ${rc}..."
-        if [ -e ${rc} ]; then
-          run_cmd rm -f ${rc}
-        fi
-        cat <<EOT >> ${rc}
-[distutils]
-index-servers =
-    production
-    staging
-
-[production]
-repository: ${PYPISERVER}
-username: ${PYPIUSER}
-password: ${PYPIPASS}
-
-[staging]
-repository: ${TESTSERVER}
-username: ${PYPIUSER}
-password: ${PYPIPASS}
-EOT
-        run_cmd chmod 600 ${rc}
-        # end: protected code
-        break
-      else
-        log_warn "${lockfile} exists, owned by process $(cat $lockfile)"
-        log_info "Will retry after a ${sleeptime} seconds sleep (${try}/${maxtries})"
-        run_cmd sleep ${sleeptime}
-      fi
-    else
-      log_error "I already retried deploying ${try} times. Aborting..."
-      log_error "You can retry this step when less packages are building."
-      exit 1
-    fi
-  done
-}
-
-
-# Cleans ~/.pypirc, if the lock file belongs to us
-unlock_pypirc() {
-  local lockfile=/var/tmp/pypirc_lock
-  local rc=${HOME}/.pypirc
-
-  # untrap if lock belongs to the running process
-  if [[ $(cat ${lockfile}) == $$ ]]; then
-    run_cmd rm -r ${lockfile}
-    run_cmd rm -rf ${rc}
-    log_info "$ trap - INT TERM EXIT"
-    trap - INT TERM EXIT
-  fi
-}
-
-
-# Runs setup.py in a deployment context. If fails, tries to unlock
-# the ${HOME}/.pypirc file lock
-setup_deploy() {
-  log_info "$ ${@}"
-  ${PREFIX}/bin/python setup.py ${@}
-  local status=$?
-  if [ ${status} != 0 ]; then
-    log_error "Command Failed \"${@}\""
-    unlock_pypirc #just tries
-    exit ${status}
-  fi
-}
-
-
-# Uploads a file to our intranet location via curl
-doc_upload() {
-  log_info "curl: ${1} -> ${DOCSERVER}/${2}..."
-  curl --location --silent --show-error --user "${DOCUSER}:${DOCPASS}" --upload-file ${1} ${DOCSERVER}/${2}
-  local status=$?
-  if [ ${status} != 0 ]; then
-    log_error "Curl command finished with an error condition (status=${status})"
-    exit ${status}
-  fi
-  log_info "Successfully uploaded ${1} with curl"
-}
-
-check_env PYTHON_VERSION
-check_env CI_PROJECT_DIR
-check_env CI_PROJECT_PATH
-check_env CI_PROJECT_NAME
-check_env CI_BUILD_REF
-check_env CI_BUILD_REF_NAME
-check_pass PYPIUSER
-check_pass PYPIPASS
-check_pass DOCUSER
-check_pass DOCPASS
-
-# Sets up variables
-ARCH=`arch`
-
-if [ -z "${CONDA_FOLDER}" ]; then
-  if [ "${ARCH}" == "linux" ]; then
-    CONDA_FOLDER=/local/conda
-  else
-    CONDA_FOLDER=/opt/conda
-  fi
-fi
-
-if [ -z "${CONDA_PREFIX}" ]; then
-  CONDA_PREFIX=env
-fi
-
-if [ -z "${DOCSERVER}" ]; then
-  DOCSERVER=https://www.idiap.ch
-fi
-
-PREFIX=${CI_PROJECT_DIR}/${CONDA_PREFIX}
-
-# Add "-coverage" support
-if [ "${ARCH}" == "linux" ]; then
-  # Temporary hack to get building done right with gcc-5 compilers
-  if [ -z "${CFLAGS}" ]; then
-    CFLAGS="-D_GLIBCXX_USE_CXX11_ABI=0 -coverage"
-  else
-    CFLAGS="${CFLAGS} -D_GLIBCXX_USE_CXX11_ABI=0 -coverage"
-  fi
-  CXXFLAGS=${CFLAGS}
-else
-  if [ -z "${CFLAGS}" ]; then
-    CFLAGS="-coverage"
-  else
-    CFLAGS="${CFLAGS} -coverage"
-  fi
-  CXXFLAGS=${CFLAGS}
-fi
-
-PYVER=py$(echo ${PYTHON_VERSION} | tr -d '.')
-BOB_PREFIX_PATH=${CONDA_FOLDER}/envs/bob-devel-${PYVER}
-LD_LIBRARY_PATH=${BOB_PREFIX_PATH}/lib
-
-if [ -z "${PYPISERVER}" ]; then
-  PYPISERVER="https://pypi.python.org/pypi"
-fi
-
-TESTSERVER=https://testpypi.python.org/pypi
-
-check_env ARCH
-check_env PYVER
-check_env PREFIX
-export_env CFLAGS
-export_env CXXFLAGS
-check_env DOCSERVER
-check_env PYPISERVER
-check_env TESTSERVER
-check_env CONDA_FOLDER
-check_env CONDA_PREFIX
-export_env LD_LIBRARY_PATH
-export_env BOB_PREFIX_PATH
-
-if [ -z "${CI_BUILD_TAG}" ]; then
-  BOB_DOCUMENTATION_SERVER="${DOCSERVER}/software/bob/docs/latest/bob/%s/master/"
-  export_env BOB_DOCUMENTATION_SERVER
-else
-  log_info "Building tag, not setting BOB_DOCUMENTATION_SERVER"
-fi
-
-# taken from here: https://stackoverflow.com/questions/3685970/check-if-an-array-contains-a-value
-contains_element () {
-  local e
-  for e in "${@:2}"; do [[ "$e" == "$1" ]] && return 0; done
-  return 1
-}
diff --git a/_ci/install.sh b/_ci/install.sh
deleted file mode 100755
index 8adb34b7f3cebf8ad4ab118feaefe90726231282..0000000000000000000000000000000000000000
--- a/_ci/install.sh
+++ /dev/null
@@ -1,60 +0,0 @@
-#!/usr/bin/env bash
-# Thu 22 Sep 2016 13:05:54 CEST
-
-# Installation script for our build tools
-
-if [ "${#}" -ne 1 ]; then
-  echo "usage: ${0} <ci-support-directory>"
-  echo "example: ${0} _ci"
-  exit 1
-fi
-
-
-# Functions for coloring echo commands
-log_info() {
-  echo -e "(`date +%T`) \033[1;34m${@}\033[0m"
-}
-
-
-log_error() {
-  echo -e "(`date +%T`) \033[1;31mError: ${@}\033[0m"
-}
-
-
-# Function for running command and echoing results
-run_cmd() {
-  log_info "$ ${@}"
-  ${@}
-  local status=$?
-  if [ ${status} != 0 ]; then
-    log_error "Command Failed \"${@}\""
-    exit ${status}
-  fi
-}
-
-
-get_script() {
-  local url="https://gitlab.idiap.ch/bob/bob.admin/raw/master/gitlab/${2}"
-  local curlopt="--location --silent --show-error --output ${1}/${2}"
-  if [ -e ${1}/${2} ]; then
-    rm -f ${1}/${2}
-  fi
-  run_cmd curl ${curlopt} ${url}
-}
-
-
-get_exec() {
-  get_script ${1} ${2}
-  run_cmd chmod 755 ${1}/${2}
-}
-
-
-run_cmd mkdir -pv ${1}
-get_script ${1} functions.sh
-get_exec ${1} install.sh
-for stage in "build" "test" "docs" "wheels" "deploy"; do
-  get_exec ${1} before_${stage}.sh
-  get_exec ${1} ${stage}.sh
-  get_exec ${1} after_${stage}.sh
-done
-get_exec ${1} update_feedstock.py
diff --git a/_ci/test.sh b/_ci/test.sh
deleted file mode 100755
index e544b7ef5e81d6aa26e1b2ac5890e80e33f7af90..0000000000000000000000000000000000000000
--- a/_ci/test.sh
+++ /dev/null
@@ -1,20 +0,0 @@
-#!/usr/bin/env bash
-# Wed 21 Sep 2016 13:08:05 CEST
-
-source $(dirname ${0})/functions.sh
-
-run_cmd cd ${PREFIX}
-
-NIGHTLIES=$1
-
-# The tests:
-if [ "$NIGHTLIES" -eq '' ]; then
-  run_cmd ${PREFIX}/bin/python ${BOB_PREFIX_PATH}/bin/coverage run --source=${CI_PROJECT_NAME} ${BOB_PREFIX_PATH}/bin/nosetests -sv ${CI_PROJECT_NAME}
-  run_cmd ${PREFIX}/bin/python ${BOB_PREFIX_PATH}/bin/coverage report
-  run_cmd ${PREFIX}/bin/python ${BOB_PREFIX_PATH}/bin/sphinx-build -b doctest ${CI_PROJECT_DIR}/doc ${CI_PROJECT_NAME}/sphinx
-else
-  run_cmd ${PREFIX}/bin/python ${BOB_PREFIX_PATH}/bin/coverage run --source=bob ${BOB_PREFIX_PATH}/bin/nosetests -sv bob
-  run_cmd ${PREFIX}/bin/python ${BOB_PREFIX_PATH}/bin/coverage report  
-fi 
-
-run_cmd cd ${CI_PROJECT_DIR}
diff --git a/_ci/update_feedstock.py b/_ci/update_feedstock.py
deleted file mode 100755
index cbdfdac1cbedc386539ebe6be899f4b09290f208..0000000000000000000000000000000000000000
--- a/_ci/update_feedstock.py
+++ /dev/null
@@ -1,171 +0,0 @@
-#!/usr/bin/env python
-
-import hashlib
-try:
-  from urllib2 import urlopen
-except ImportError:
-  from urllib.request import urlopen
-import requests
-import json
-try:
-    from packaging.version import parse
-except ImportError:
-    from pip._vendor.packaging.version import parse
-import re
-import tempfile
-import shutil
-import os
-import subprocess
-
-URL_PATTERN = 'https://pypi.python.org/pypi/{package}/json'
-
-
-def run_commands(*calls):
-  """runs the given commands."""
-  # get all calls
-  for call in calls:
-    print(' - ' + ' '.join(call))
-    # execute call
-    if subprocess.call(call):
-      # call failed (has non-zero exit status)
-      raise ValueError("Command '%s' failed; stopping" % ' '.join(call))
-
-
-def get_version(package, url_pattern=URL_PATTERN):
-  """Return version of package on pypi.python.org using json."""
-  req = requests.get(url_pattern.format(package=package))
-  version = parse('0')
-  if req.status_code == requests.codes.ok:
-    j = json.loads(req.text)
-    if 'releases' in j:
-      releases = j['releases']
-      for release in releases:
-        ver = parse(release)
-        if not ver.is_prerelease:
-          version = max(version, ver)
-  return str(version)
-
-
-def get_remote_md5_sum(url, max_file_size=100 * 1024 * 1024):
-  remote = urlopen(url)
-  hash = hashlib.md5()
-
-  total_read = 0
-  while True:
-    data = remote.read(4096)
-    total_read += 4096
-
-    if not data or total_read > max_file_size:
-      break
-    hash.update(data)
-
-  return hash.hexdigest()
-
-
-def main(package, direct_push=False):
-  stable_version = get_version(package)
-  print('latest stable version for {} is {}'.format(package, stable_version))
-  url = 'https://pypi.io/packages/source/{0}/{1}/{1}-{2}.zip'.format(
-    package[0], package, stable_version)
-  try:
-    md5 = get_remote_md5_sum(url)
-  except Exception:
-      raise
-  temp_dir = tempfile.mkdtemp()
-  try:
-    print("\nClonning the feedstock")
-    feedstock = os.path.join(temp_dir, '{}-feedstock'.format(package))
-    try:
-      run_commands(
-        ['git', 'clone',
-         'git@github.com:conda-forge/{}-feedstock.git'.format(package),
-         feedstock])
-    except ValueError:
-      print("\nThe feedstock does not exist on conda-forge. Exiting ...")
-      raise
-    os.chdir(feedstock)
-    if not direct_push:
-      run_commands(
-        ['git', 'remote', 'add', 'bioidiap',
-         'git@github.com:bioidiap/{}-feedstock.git'.format(package)],
-        ['git', 'checkout', '-b', stable_version])
-    # update meta.yaml
-    with open('recipe/meta.yaml') as f:
-      doc = f.read()
-    if package == 'bob.math':
-      build_number = '200'
-    else:
-      build_number = '0'
-    doc = re.sub(r'\{\s?%\s?set\s?version\s?=\s?".*"\s?%\s?\}',
-                 '{% set version = "' + str(stable_version) + '" %}',
-                 doc, count=1)
-    doc = re.sub(r'\s+number\:\s?[0-9]+', '\n  number: ' + build_number, doc,
-                 count=1)
-    doc = re.sub(r'\{\s?%\s?set\s?build_number\s?=\s?"[0-9]+"\s?%\s?\}',
-                 '{% set build_number = "' + build_number + '" %}',
-                 doc, count=1)
-    doc = re.sub(r'\s+md5\:.*', '\n  md5: {}'.format(md5), doc, count=1)
-    doc = re.sub(r'\s+url\:.*',
-                 '\n  url: {}'.format(
-                  url.replace(stable_version, '{{ version }}')),
-                 doc, count=1)
-    doc = re.sub(r'\s+home\:.*',
-                 '\n  home: https://www.idiap.ch/software/bob/',
-                 doc, count=1)
-
-    if package == 'bob':
-      requrl = 'https://gitlab.idiap.ch/bob/bob/raw/master/requirements.txt'
-      remote = requests.get(requrl)
-      req = remote.content.decode()
-      req = '\n    - '.join(req.replace('== ', '==').strip().split('\n'))
-      be_id = doc.find('bob.extension')
-      te_id = doc.find('test:\n', be_id)
-      template = '''{req}
-
-  run:
-    - python
-    - {req}
-
-'''.format(req=req)
-      doc = doc[:be_id] + template + doc[te_id:]
-
-    with open('recipe/meta.yaml', 'w') as f:
-      f.write(doc)
-
-    conda_smithy_path = ''
-    if os.path.isdir('/local/conda/bin/'):
-        conda_smithy_path = '/local/conda/bin/'
-    run_commands([conda_smithy_path+'conda-smithy', 'rerender'],
-                 ['git', '--no-pager', 'diff'],
-                 ['git', 'add', '-A'])
-    try:
-      run_commands(['git', 'commit', '-am',
-                    'Update to version {}'.format(stable_version)])
-    except ValueError:
-      print('Feedstock is already uptodate, skipping.')
-      return
-    if direct_push:
-      print(feedstock)
-      try:
-        answer = raw_input('Would you like to push directly to master?').lower()
-      except Exception:
-        answer = input('Would you like to push directly to master?').lower()
-      if answer.startswith('y') or answer == '':
-        run_commands(['git', 'push'])
-        print('See the changes at:\n'
-              'https://github.com/conda-forge/'
-              '{}-feedstock/commits/master\n\n'.format(package))
-    else:
-      run_commands(['git', 'push', '--force', '--set-upstream',
-                    'bioidiap', stable_version],
-                   ['hub', 'pull-request', '-b', 'conda-forge:master',
-                    '-h', 'bioidiap:{}'.format(stable_version),
-                    '-m', 'Update to version {}'.format(stable_version)])
-  finally:
-    shutil.rmtree(temp_dir)
-
-
-if __name__ == '__main__':
-  import sys
-  pkg = sys.argv[1]
-  main(pkg)
diff --git a/_ci/wheels.sh b/_ci/wheels.sh
deleted file mode 100755
index 34fb958f109f24c281b06cc3dcc437f6ed6dfe4c..0000000000000000000000000000000000000000
--- a/_ci/wheels.sh
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/usr/bin/env bash
-# Thu 22 Sep 2016 13:58:56 CEST
-
-source $(dirname ${0})/functions.sh
-
-for file in dist/*.whl; do
-  doc_upload ${file} software/bob/wheels-upload/gitlab/
-done
diff --git a/bootstrap-buildout.py b/bootstrap-buildout.py
deleted file mode 100644
index a629566735c1c84fbec7173f0f30015b2b432512..0000000000000000000000000000000000000000
--- a/bootstrap-buildout.py
+++ /dev/null
@@ -1,189 +0,0 @@
-##############################################################################
-#
-# Copyright (c) 2006 Zope Foundation and Contributors.
-# All Rights Reserved.
-#
-# This software is subject to the provisions of the Zope Public License,
-# Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
-# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
-# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
-# FOR A PARTICULAR PURPOSE.
-#
-##############################################################################
-"""Bootstrap a buildout-based project
-
-Simply run this script in a directory containing a buildout.cfg.
-The script accepts buildout command-line options, so you can
-use the -c option to specify an alternate configuration file.
-"""
-
-import os
-import shutil
-import sys
-import tempfile
-
-from optparse import OptionParser
-
-tmpeggs = tempfile.mkdtemp()
-
-usage = '''\
-[DESIRED PYTHON FOR BUILDOUT] bootstrap.py [options]
-
-Bootstraps a buildout-based project.
-
-Simply run this script in a directory containing a buildout.cfg, using the
-Python that you want bin/buildout to use.
-
-Note that by using --find-links to point to local resources, you can keep
-this script from going over the network.
-'''
-
-parser = OptionParser(usage=usage)
-parser.add_option("-v", "--version", help="use a specific zc.buildout version")
-
-parser.add_option("-t", "--accept-buildout-test-releases",
-                  dest='accept_buildout_test_releases',
-                  action="store_true", default=False,
-                  help=("Normally, if you do not specify a --version, the "
-                        "bootstrap script and buildout gets the newest "
-                        "*final* versions of zc.buildout and its recipes and "
-                        "extensions for you.  If you use this flag, "
-                        "bootstrap and buildout will get the newest releases "
-                        "even if they are alphas or betas."))
-parser.add_option("-c", "--config-file",
-                  help=("Specify the path to the buildout configuration "
-                        "file to be used."))
-parser.add_option("-f", "--find-links",
-                  help=("Specify a URL to search for buildout releases"))
-parser.add_option("--allow-site-packages",
-                  action="store_true", default=False,
-                  help=("Let bootstrap.py use existing site packages"))
-parser.add_option("--setuptools-version",
-                  help="use a specific setuptools version")
-
-
-options, args = parser.parse_args()
-
-######################################################################
-# load/install setuptools
-
-try:
-    if options.allow_site_packages:
-        import setuptools
-        import pkg_resources
-    from urllib.request import urlopen
-except ImportError:
-    from urllib2 import urlopen
-
-ez = {}
-exec(urlopen('https://bootstrap.pypa.io/ez_setup.py').read(), ez)
-
-if not options.allow_site_packages:
-    # ez_setup imports site, which adds site packages
-    # this will remove them from the path to ensure that incompatible versions
-    # of setuptools are not in the path
-    import site
-    # inside a virtualenv, there is no 'getsitepackages'.
-    # We can't remove these reliably
-    if hasattr(site, 'getsitepackages'):
-        for sitepackage_path in site.getsitepackages():
-            sys.path[:] = [x for x in sys.path if sitepackage_path not in x]
-
-setup_args = dict(to_dir=tmpeggs, download_delay=0)
-
-if options.setuptools_version is not None:
-    setup_args['version'] = options.setuptools_version
-
-ez['use_setuptools'](**setup_args)
-import setuptools
-import pkg_resources
-
-# This does not (always?) update the default working set.  We will
-# do it.
-for path in sys.path:
-    if path not in pkg_resources.working_set.entries:
-        pkg_resources.working_set.add_entry(path)
-
-######################################################################
-# Install buildout
-
-ws = pkg_resources.working_set
-
-cmd = [sys.executable, '-c',
-       'from setuptools.command.easy_install import main; main()',
-       '-mZqNxd', tmpeggs]
-
-find_links = os.environ.get(
-    'bootstrap-testing-find-links',
-    options.find_links or
-    ('http://downloads.buildout.org/'
-     if options.accept_buildout_test_releases else None)
-    )
-if find_links:
-    cmd.extend(['-f', find_links])
-
-setuptools_path = ws.find(
-    pkg_resources.Requirement.parse('setuptools')).location
-
-requirement = 'zc.buildout'
-version = options.version
-if version is None and not options.accept_buildout_test_releases:
-    # Figure out the most recent final version of zc.buildout.
-    import setuptools.package_index
-    _final_parts = '*final-', '*final'
-
-    def _final_version(parsed_version):
-        try:
-            return not parsed_version.is_prerelease
-        except AttributeError:
-            # Older setuptools
-            for part in parsed_version:
-                if (part[:1] == '*') and (part not in _final_parts):
-                    return False
-            return True
-
-    index = setuptools.package_index.PackageIndex(
-        search_path=[setuptools_path])
-    if find_links:
-        index.add_find_links((find_links,))
-    req = pkg_resources.Requirement.parse(requirement)
-    if index.obtain(req) is not None:
-        best = []
-        bestv = None
-        for dist in index[req.project_name]:
-            distv = dist.parsed_version
-            if _final_version(distv):
-                if bestv is None or distv > bestv:
-                    best = [dist]
-                    bestv = distv
-                elif distv == bestv:
-                    best.append(dist)
-        if best:
-            best.sort()
-            version = best[-1].version
-if version:
-    requirement = '=='.join((requirement, version))
-cmd.append(requirement)
-
-import subprocess
-if subprocess.call(cmd, env=dict(os.environ, PYTHONPATH=setuptools_path)) != 0:
-    raise Exception(
-        "Failed to execute command:\n%s" % repr(cmd)[1:-1])
-
-######################################################################
-# Import and run buildout
-
-ws.add_entry(tmpeggs)
-ws.require(requirement)
-import zc.buildout.buildout
-
-if not [a for a in args if '=' not in a]:
-    args.append('bootstrap')
-
-# if -c was provided, we push it back into args for buildout' main function
-if options.config_file is not None:
-    args[0:0] = ['-c', options.config_file]
-
-zc.buildout.buildout.main(args)
-shutil.rmtree(tmpeggs)
diff --git a/build.sh b/build.sh
new file mode 100755
index 0000000000000000000000000000000000000000..0145713837b6fd0cc544ed3cc63caf65aacfbebc
--- /dev/null
+++ b/build.sh
@@ -0,0 +1,132 @@
+#!/bin/bash
+# Andre Anjos <andre.anjos@idiap.ch>
+# Thu 22 Dec 2016 09:31:34 CET
+
+if [ $# != 4 ]; then
+  echo "Runs the nightly builds by setting environment variables and"
+  echo "proceeding in the order establish in the provided text file"
+  echo "usage: $0 <order.txt> <python-version> [<conda-root> [<env-name>]]"
+  echo "example: $0 core.txt 2.7 #ci paths and structure"
+  echo "example: $0 core.txt 2.7 /opt/conda #changes conda root"
+  echo "example: $0 core.txt 2.7 /opt/conda bob-devel-py27 #be specific"
+  exit 1
+fi
+
+# Some required variables
+PYTHON_VERSION=$2
+basedir=`realpath .`
+
+# Download stock build scripts
+if [ ! -d _ci ]; then
+  mkdir _ci
+fi
+curl --silent "https://gitlab.idiap.ch/bob/bob.admin/raw/master/gitlab/install.sh" > ${basedir}/_ci/install.sh
+chmod 755 ${basedir}/_ci/install.sh
+${basedir}/_ci/install.sh _ci
+
+# Defines some required defaults, if they are not set by the CI
+CI_PROJECT_DIR="${CI_PROJECT_DIR:-${basedir}}"
+CI_PROJECT_NAME="${CI_PROJECT_NAME:-$(basename ${basedir})}"
+CI_PROJECT_NAMESPACE="${CI_PROJECT_NAMESPACE:-bob}"
+CI_PROJECT_PATH="${CI_PROJECT_PATH:-${CI_PROJECT_NAMESPACE}/${CI_PROJECT_NAME}}"
+CI_BUILD_REF="${CI_BUILD_REF:-12345678}"
+CI_BUILD_REF_NAME="${CI_BUILD_REF_NAME:-@local}"
+CI_PROJECT_URL="${CI_PROJECT_URL:-https://gitlab.idiap.ch/${CI_PROJECT_PATH}}"
+PYPIUSER="${PYPIUSER:-unknown}"
+PYPIPASS="${PYPIUSER:-unknown}"
+DOCUSER="${PYPIUSER:-unknown}"
+DOCPASS="${PYPIUSER:-unknown}"
+
+# Source useful functions
+source ${basedir}/_ci/functions.sh
+
+# Checks some extra settings
+check_env CI_PROJECT_URL
+
+# Overrides some stuff
+if [ "${CI_BUILD_REF_NAME}" == "@local" ]; then
+  log_info "Overwriting CONDA_FOLDER since in @local build..."
+  if [ -n "$3" ]; then CONDA_FOLDER=$3; fi
+  if [ -n "$4" ]; then BOB_PREFIX_PATH=${CONDA_FOLDER}/envs/$4; fi
+  LD_LIBRARY_PATH=${BOB_PREFIX_PATH}/lib
+  export_env CONDA_FOLDER
+  export_env LD_LIBRARY_PATH
+  export_env BOB_PREFIX_PATH
+fi
+
+log_info "Exporting variables for subsequent builds..."
+export_env CI_PROJECT_DIR
+export_env CI_PROJECT_NAME
+export_env CI_PROJECT_NAMESPACE
+export_env CI_PROJECT_PATH
+export_env CI_BUILD_REF
+export_env CI_BUILD_REF_NAME
+export_env CI_PROJECT_URL
+export_env PYPIUSER
+export_env PYPIPASS
+export_env DOCUSER
+export_env DOCPASS
+export_env PYTHON_VERSION
+
+# Prepares wheel container
+WHEELS_DIR=${basedir}/dist
+if [ ! -d ${WHEELS_DIR} ]; then
+  run_cmd mkdir -pv ${WHEELS_DIR}
+  run_cmd rm -fv ${WHEELS_DIR}/*
+fi
+
+log_info "Running builds for all packages in \`$1'..."
+
+for f in `cat $1`; do
+
+  run_cmd cd ${basedir}
+
+  log_info "Building $f...";
+
+  # Setup project variables
+  CI_PROJECT_DIR=${basedir}/src
+  CI_PROJECT_PATH=${CI_PROJECT_NAMESPACE}/${f}
+  CI_PROJECT_NAME=${f}
+  WHEELS_REPOSITORY=${WHEELS_DIR}
+  export_env CI_PROJECT_DIR
+  export_env CI_PROJECT_PATH
+  export_env CI_PROJECT_NAME
+  export_env WHEELS_REPOSITORY
+
+  rm -rf ${CI_PROJECT_DIR}
+  run_cmd git clone --depth 1 $(dirname ${CI_PROJECT_URL})/${f} ${CI_PROJECT_DIR}
+  run_cmd cd ${CI_PROJECT_DIR}
+  run_cmd ln -s ${basedir}/_ci .
+
+  # Define WHEEL_TAG if defined on the package's CI yaml file
+  if [ $(grep -c WHEEL_TAG ${CI_PROJECT_DIR}/.gitlab-ci.yml) -gt 0 ]; then
+    # Python-only package, need to define the WHEEL_TAG
+    case ${PYTHON_VERSION} in
+      2.7)
+        WHEEL_TAG=py27
+        ;;
+      3.*)
+        WHEEL_TAG=py3
+        ;;
+      *)
+        log_error "Python version ${PYTHON_VERSION} is unsupported";
+        exit 1
+        ;;
+    esac
+    export_env WHEEL_TAG
+  else
+    unset WHEEL_TAG
+  fi
+
+  # Runs the whole shebang
+  run_cmd ./_ci/before_build.sh
+  run_cmd ./_ci/build.sh
+  #run_cmd ./_ci/before_test.sh
+  #run_cmd ./_ci/test.sh
+
+  # Copies the generated wheel to our provisional wheels repository
+  run_cmd cp -fv dist/*.whl ${WHEELS_DIR}/
+
+  run_cmd cd ${basedir}
+
+done
diff --git a/buildout-bob.cfg b/buildout-bob.cfg
deleted file mode 100644
index bf49a6a2185cfee722fd610276b7b869caac0ef0..0000000000000000000000000000000000000000
--- a/buildout-bob.cfg
+++ /dev/null
@@ -1,40 +0,0 @@
-; vim: set fileencoding=utf-8 :
-; Andre Anjos <andre.bioidiap@idiap.ch>
-; Mon 16 Apr 08:29:18 2012 CEST
-
-[buildout]
-parts = scripts
-
-extensions = bob.buildout
-             mr.developer
-
-auto-checkout = *
-
-; options for bob.buildout extension
-newest = false
-debug = false
-verbose = true
-
-
-develop = src/bob.buildout
-          src/bob.extension
-          src/bob.blitz
-          src/bob.core
-          src/bob.io.base
-
-eggs = bob.extension
-       bob.blitz
-       bob.core
-       bob.io.base
-
-[sources]
-bob.buildout = git https://gitlab.idiap.ch/bob/bob.buildout
-bob.extension = git https://gitlab.idiap.ch/bob/bob.extension
-bob.blitz = git https://gitlab.idiap.ch/bob/bob.blitz
-bob.core = git https://gitlab.idiap.ch/bob/bob.core
-bob.io.base = git https://gitlab.idiap.ch/bob/bob.io.base
-
-
-[scripts]
-recipe = bob.buildout:scripts
-
diff --git a/buildout-satellites.cfg b/buildout-satellites.cfg
deleted file mode 100644
index ad56313d4190e42e77398f5e2b15854259aa1272..0000000000000000000000000000000000000000
--- a/buildout-satellites.cfg
+++ /dev/null
@@ -1,125 +0,0 @@
-; vim: set fileencoding=utf-8 :
-; Andre Anjos <andre.bioidiap@idiap.ch>
-; Mon 16 Apr 08:29:18 2012 CEST
-
-[buildout]
-
-parts = scripts
-
-extensions = bob.buildout
-             mr.developer
-auto-checkout = *
-
-; options for bob.buildout extension
-newest = false
-debug = false
-verbose = true
-
-
-develop =  src/bob.db.bio_filelist
-           src/bob.db.banca
-           src/bob.db.biosecure
-           src/bob.db.caspeal
-           src/bob.db.frgc
-           src/bob.db.gbu
-           src/bob.db.lfw
-           src/bob.db.mobio
-           src/bob.db.multipie
-           src/bob.db.scface
-           src/bob.db.xm2vts
-           src/bob.db.youtube
-           src/bob.db.voxforge
-           src/bob.db.utfvp
-           src/bob.db.livdet2013
-           src/bob.db.atvskeystroke
-           src/bob.db.biosecurid.face
-           src/bob.db.casme2
-           src/bob.db.replay
-           src/bob.db.biowave_test
-           src/bob.db.verafinger
-           src/bob.bio.base
-           src/bob.bio.gmm
-           src/bob.bio.spear
-           src/bob.bio.face
-           src/bob.bio.video
-           src/bob.db.msu_mfsd_mod
-           src/bob.db.avspoof
-           src/bob.db.asvspoof
-           src/bob.db.kboc16
-           src/bob.db.putvein
-           src/bob.db.cuhk_cufs
-           src/gridtk
-
-eggs = bob.db.bio_filelist
-       bob.db.banca
-       bob.db.biosecure
-       bob.db.caspeal
-       bob.db.frgc
-       bob.db.gbu
-       bob.db.lfw
-       bob.db.mobio
-       bob.db.multipie
-       bob.db.scface
-       bob.db.xm2vts
-       bob.db.youtube
-       bob.db.voxforge
-       bob.db.utfvp
-       bob.db.livdet2013
-       bob.db.atvskeystroke
-       bob.db.biosecurid.face
-       bob.db.casme2
-       bob.db.replay
-       bob.db.biowave_test
-       bob.db.verafinger
-       bob.bio.base
-       bob.bio.gmm
-       bob.bio.spear
-       bob.bio.face
-       bob.bio.video
-       bob.db.msu_mfsd_mod
-       bob.db.avspoof
-       bob.db.asvspoof
-       bob.db.kboc16
-       bob.db.putvein
-       bob.db.cuhk_cufs
-       gridtk
-
-
-[sources]
-bob.db.bio_filelist = git https://gitlab.idiap.ch/bob/bob.db.bio_filelist
-bob.db.banca = git https://gitlab.idiap.ch/bob/bob.db.banca
-bob.db.biosecure = git https://gitlab.idiap.ch/bob/bob.db.biosecure
-bob.db.caspeal = git https://gitlab.idiap.ch/bob/bob.db.caspeal
-bob.db.frgc = git https://gitlab.idiap.ch/bob/bob.db.frgc
-bob.db.gbu = git https://gitlab.idiap.ch/bob/bob.db.gbu
-bob.db.lfw = git https://gitlab.idiap.ch/bob/bob.db.lfw
-bob.db.mobio = git https://gitlab.idiap.ch/bob/bob.db.mobio
-bob.db.multipie = git https://gitlab.idiap.ch/bob/bob.db.multipie
-bob.db.scface = git https://gitlab.idiap.ch/bob/bob.db.scface
-bob.db.xm2vts = git https://gitlab.idiap.ch/bob/bob.db.xm2vts
-bob.db.youtube = git https://gitlab.idiap.ch/bob/bob.db.youtube
-bob.db.voxforge = git https://gitlab.idiap.ch/bob/bob.db.voxforge
-bob.db.utfvp = git https://gitlab.idiap.ch/bob/bob.db.utfvp
-bob.db.livdet2013 = git https://gitlab.idiap.ch/bob/bob.db.livdet2013
-bob.db.atvskeystroke = git https://gitlab.idiap.ch/bob/bob.db.atvskeystroke
-bob.db.biosecurid.face = git https://gitlab.idiap.ch/bob/bob.db.biosecurid.face
-bob.db.casme2 = git https://gitlab.idiap.ch/bob/bob.db.casme2
-bob.db.replay = git https://gitlab.idiap.ch/bob/bob.db.replay
-bob.db.biowave_test = git https://gitlab.idiap.ch/bob/bob.db.biowave_test
-bob.db.verafinger = git git@gitlab.idiap.ch:bob/bob.db.verafinger
-bob.bio.base = git https://gitlab.idiap.ch/bob/bob.bio.base
-bob.bio.gmm = git https://gitlab.idiap.ch/bob/bob.bio.gmm
-bob.bio.spear = git https://gitlab.idiap.ch/bob/bob.bio.spear
-bob.bio.face = git https://gitlab.idiap.ch/bob/bob.bio.face
-bob.bio.video = git https://gitlab.idiap.ch/bob/bob.bio.video
-bob.db.msu_mfsd_mod = git https://gitlab.idiap.ch/bob/bob.db.msu_mfsd_mod
-bob.db.avspoof = git https://gitlab.idiap.ch/bob/bob.db.avspoof
-bob.db.asvspoof = git https://gitlab.idiap.ch/bob/bob.db.asvspoof
-bob.db.kboc16 = git https://gitlab.idiap.ch/bob/bob.db.kboc16
-bob.db.putvein = git https://gitlab.idiap.ch/bob/bob.db.putvein
-bob.db.cuhk_cufs = git https://gitlab.idiap.ch/bob/bob.db.cuhk_cufs
-gridtk = git https://gitlab.idiap.ch/bob/gridtk
-
-[scripts]
-recipe = bob.buildout:scripts
-
diff --git a/buildout.cfg b/buildout.cfg
deleted file mode 100644
index d8e5ba3fb963cc0a55574d6e0340fbe8f1a66791..0000000000000000000000000000000000000000
--- a/buildout.cfg
+++ /dev/null
@@ -1,20 +0,0 @@
-; vim: set fileencoding=utf-8 :
-; Andre Anjos <andre.bioidiap@idiap.ch>
-; Mon 16 Apr 08:29:18 2012 CEST
-
-[buildout]
-parts = scripts
-extends = buildout-satellites.cfg
-
-extensions = bob.buildout
-             mr.developer
-auto-checkout = *
-
-
-; options for bob.buildout extension
-newest = false
-debug = false
-verbose = true
-
-[scripts]
-recipe = bob.buildout:scripts
diff --git a/conf.py b/conf.py
deleted file mode 100644
index 4bef390661368979ab17caa1867ce45a44ac2176..0000000000000000000000000000000000000000
--- a/conf.py
+++ /dev/null
@@ -1,260 +0,0 @@
-
-
-#!/usr/bin/env python
-# vim: set fileencoding=utf-8 :
-# Andre Anjos <andre.anjos@idiap.ch>
-# Tue 15 Oct 16:37:18 2013 CEST
-#
-# Copyright (C) 2011-2014 Idiap Research Institute, Martigny, Switzerland
-
-import os
-import sys
-import glob
-import pkg_resources
-
-# If extensions (or modules to document with autodoc) are in another directory,
-# add these directories to sys.path here. If the directory is relative to the
-# documentation root, use os.path.abspath to make it absolute, like shown here.
-#sys.path.insert(0, os.path.abspath('.'))
-
-# -- General configuration -----------------------------------------------------
-
-# If your documentation needs a minimal Sphinx version, state it here.
-#needs_sphinx = '1.0'
-
-# Add any Sphinx extension module names here, as strings. They can be extensions
-# coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
-extensions = [
-  'sphinx.ext.todo',
-  'sphinx.ext.coverage',
-  'sphinx.ext.pngmath',
-  'sphinx.ext.ifconfig',
-  'sphinx.ext.autodoc',
-  'sphinx.ext.autosummary',
-  'sphinx.ext.doctest',
-  'sphinx.ext.intersphinx',
-  'matplotlib.sphinxext.plot_directive',
-  ]
-
-# The viewcode extension appeared only on Sphinx >= 1.0.0
-import sphinx
-if sphinx.__version__ >= "1.0":
-  extensions.append('sphinx.ext.viewcode')
-
-# Always includes todos
-todo_include_todos = True
-
-# If we are on OSX, the 'dvipng' path maybe different
-dvipng_osx = '/opt/local/libexec/texlive/binaries/dvipng'
-if os.path.exists(dvipng_osx): pngmath_dvipng = dvipng_osx
-
-# Add any paths that contain templates here, relative to this directory.
-templates_path = ['_templates']
-
-# The suffix of source filenames.
-source_suffix = '.rst'
-
-# The encoding of source files.
-#source_encoding = 'utf-8-sig'
-
-# The master toctree document.
-master_doc = 'index'
-
-# General information about the project.
-project = u'Bob'
-import time
-copyright = u'%s, Idiap Research Institute' % time.strftime('%Y')
-
-# The version info for the project you're documenting, acts as replacement for
-# |version| and |release|, also used in various other places throughout the
-# built documents.
-#
-# The short X.Y version.
-version = '0.0.1'
-# The full version, including alpha/beta/rc tags.
-release = version
-
-# The language for content autogenerated by Sphinx. Refer to documentation
-# for a list of supported languages.
-#language = None
-
-# There are two options for replacing |today|: either, you set today to some
-# non-false value, then it is used:
-#today = ''
-# Else, today_fmt is used as the format for a strftime call.
-#today_fmt = '%B %d, %Y'
-
-# List of patterns, relative to source directory, that match files and
-# directories to ignore when looking for source files.
-exclude_patterns = ['**/links.rst', '**/README.rst', 'README.rst', 'TODO.rst', '**/examples/**/index.rst']
-
-# The reST default role (used for this markup: `text`) to use for all documents.
-#default_role = None
-
-# If true, '()' will be appended to :func: etc. cross-reference text.
-#add_function_parentheses = True
-
-# If true, the current module name will be prepended to all description
-# unit titles (such as .. function::).
-#add_module_names = True
-
-# If true, sectionauthor and moduleauthor directives will be shown in the
-# output. They are ignored by default.
-#show_authors = False
-
-# The name of the Pygments (syntax highlighting) style to use.
-pygments_style = 'sphinx'
-
-# A list of ignored prefixes for module index sorting.
-#modindex_common_prefix = []
-
-
-# -- Options for HTML output ---------------------------------------------------
-
-# The theme to use for HTML and HTML Help pages.  See the documentation for
-# a list of builtin themes.
-if sphinx.__version__ >= "1.0":
-  html_theme = 'nature'
-
-# Theme options are theme-specific and customize the look and feel of a theme
-# further.  For a list of options available for each theme, see the
-# documentation.
-#html_theme_options = {}
-
-# Add any paths that contain custom themes here, relative to this directory.
-#html_theme_path = []
-
-# The name for this set of Sphinx documents.  If None, it defaults to
-# "<project> v<release> documentation".
-#html_title = None
-
-# A shorter title for the navigation bar.  Default is the same as html_title.
-#html_short_title = 'bob'
-
-# The name of an image file (relative to this directory) to place at the top
-# of the sidebar.
-html_logo = 'img/logo.png'
-
-# The name of an image file (within the static path) to use as favicon of the
-# docs.  This file should be a Windows icon file (.ico) being 16x16 or 32x32
-# pixels large.
-html_favicon = 'img/favicon.ico'
-
-# Add any paths that contain custom static files (such as style sheets) here,
-# relative to this directory. They are copied after the builtin static files,
-# so a file named "default.css" will overwrite the builtin "default.css".
-#html_static_path = ['_static']
-
-# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
-# using the given strftime format.
-#html_last_updated_fmt = '%b %d, %Y'
-
-# If true, SmartyPants will be used to convert quotes and dashes to
-# typographically correct entities.
-#html_use_smartypants = True
-
-# Custom sidebar templates, maps document names to template names.
-#html_sidebars = {}
-
-# Additional templates that should be rendered to pages, maps page names to
-# template names.
-#html_additional_pages = {}
-
-# If false, no module index is generated.
-#html_domain_indices = True
-
-# If false, no index is generated.
-#html_use_index = True
-
-# If true, the index is split into individual pages for each letter.
-#html_split_index = False
-
-# If true, links to the reST sources are added to the pages.
-#html_show_sourcelink = True
-
-# If true, "Created using Sphinx" is shown in the HTML footer. Default is True.
-#html_show_sphinx = True
-
-# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True.
-#html_show_copyright = True
-
-# If true, an OpenSearch description file will be output, and all pages will
-# contain a <link> tag referring to it.  The value of this option must be the
-# base URL from which the finished HTML is served.
-#html_use_opensearch = ''
-
-# This is the file name suffix for HTML files (e.g. ".xhtml").
-#html_file_suffix = None
-
-# Output file base name for HTML help builder.
-htmlhelp_basename = 'bob_doc'
-
-
-# -- Options for LaTeX output --------------------------------------------------
-
-# The paper size ('letter' or 'a4').
-latex_paper_size = 'a4'
-
-# The font size ('10pt', '11pt' or '12pt').
-latex_font_size = '10pt'
-
-# Grouping the document tree into LaTeX files. List of tuples
-# (source start file, target name, title, author, documentclass [howto/manual]).
-latex_documents = [
-  ('index', 'bob.tex', u'Bob/Python Documentation',
-   u'Biometrics Group, Idiap Research Institute', 'manual'),
-]
-
-# The name of an image file (relative to this directory) to place at the top of
-# the title page.
-latex_logo = ''
-
-# For "manual" documents, if this is true, then toplevel headings are parts,
-# not chapters.
-#latex_use_parts = False
-
-# If true, show page references after internal links.
-#latex_show_pagerefs = False
-
-# If true, show URL addresses after external links.
-#latex_show_urls = False
-
-# Additional stuff for the LaTeX preamble.
-#latex_preamble = ''
-
-# Documents to append as an appendix to all manuals.
-#latex_appendices = []
-
-# If false, no module index is generated.
-#latex_domain_indices = True
-
-# Included after all input documents
-rst_epilog = """
-.. |project| replace:: Bob
-.. |url| replace:: https://www.idiap.ch/software/bob/
-.. |version| replace:: %s
-.. |current-year| date:: %%Y
-""" % (version,)
-
-# -- Options for manual page output --------------------------------------------
-
-# One entry per manual page. List of tuples
-# (source start file, name, description, authors, manual section).
-man_pages = [
-    ('index', 'bob', u'Bob/Python Documentation', [u'Idiap Research Institute'], 1)
-]
-
-# Default processing flags for sphinx
-autoclass_content = 'both'
-autodoc_member_order = 'bysource'
-autodoc_default_flags = ['members', 'undoc-members', 'inherited-members', 'show-inheritance']
-
-# For inter-documentation mapping:
-from bob.extension.utils import link_documentation
-intersphinx_mapping = link_documentation(additional_packages = ['python', 'numpy', 'scipy', 'gridtk'], requirements_file = None)
-
-
-def setup(app):
-  pass
-
-
diff --git a/core.txt b/core.txt
new file mode 100644
index 0000000000000000000000000000000000000000..9010f29db772f4295e6f75b761e5ec1f9cd30e45
--- /dev/null
+++ b/core.txt
@@ -0,0 +1,31 @@
+bob.extension
+bob.blitz
+bob.core
+bob.io.base
+bob.sp
+bob.ap
+bob.math
+bob.measure
+bob.db.base
+bob.io.audio
+bob.io.image
+bob.io.video
+bob.io.matlab
+bob.ip.base
+bob.ip.color
+bob.ip.draw
+bob.ip.gabor
+bob.learn.activation
+bob.learn.libsvm
+bob.learn.linear
+bob.learn.mlp
+bob.learn.em
+bob.learn.boosting
+bob.db.iris
+bob.db.wine
+bob.db.mnist
+bob.db.atnt
+bob.ip.facedetect
+bob.ip.optflow.hornschunk
+bob.ip.optflow.liu
+bob.ip.flandmark
diff --git a/dependencies.png b/dependencies.png
deleted file mode 100644
index 653890d2fdc61c07329aee3e0f642c33dc5aea3f..0000000000000000000000000000000000000000
Binary files a/dependencies.png and /dev/null differ
diff --git a/requirements-satellites.txt b/extras.txt
similarity index 100%
rename from requirements-satellites.txt
rename to extras.txt
diff --git a/img/favicon.ico b/img/favicon.ico
deleted file mode 100644
index 4cc3264302627d40868261add69eb755856611b6..0000000000000000000000000000000000000000
Binary files a/img/favicon.ico and /dev/null differ
diff --git a/img/logo.png b/img/logo.png
deleted file mode 100644
index b9dd573a01019afd1af58a881996930e5212699d..0000000000000000000000000000000000000000
Binary files a/img/logo.png and /dev/null differ
diff --git a/index.rst b/index.rst
deleted file mode 100644
index 00f53eea1b538e28e2b59e67279bb34201ba2d66..0000000000000000000000000000000000000000
--- a/index.rst
+++ /dev/null
@@ -1,179 +0,0 @@
-.. vim: set fileencoding=utf-8 :
-.. Andre Anjos <andre.anjos@idiap.ch>
-.. Mon 17 Feb 2014 17:40:07 CET
-..
-.. Copyright (C) 2011-2014 Idiap Research Institute, Martigny, Switzerland
-
-=======================
- Bob (Python Bindings)
-=======================
-
-.. todolist::
-
-Basic Functionality
-...................
-
-.. toctree::
-   :maxdepth: 2
-
-   layers/0/bob.core/doc/index
-   layers/0/bob.math/doc/index
-   layers/0/bob.measure/doc/index
-
-Data Input and Output
-.....................
-
-.. toctree::
-   :maxdepth: 2
-
-   layers/0/bob.io.base/doc/index
-   layers/1/bob.io.image/doc/index
-   layers/1/bob.io.matlab/doc/index
-   layers/1/bob.io.video/doc/index
-   layers/1/bob.io.audio/doc/index
-
-Signal, Audio, Image and Video Processing
-.........................................
-
-.. toctree::
-   :maxdepth: 2
-
-   layers/0/bob.ap/doc/index
-   layers/0/bob.sp/doc/index
-   layers/1/bob.ip.base/doc/index
-   layers/1/bob.ip.color/doc/index
-   layers/1/bob.ip.draw/doc/index
-   layers/1/bob.ip.gabor/doc/index
-   layers/2/bob.ip.facedetect/doc/index
-   layers/2/bob.ip.flandmark/doc/index
-   layers/2/bob.ip.optflow.hornschunck/doc/index
-   layers/2/bob.ip.optflow.liu/doc/index
-   layers/2/bob.ip.skincolorfilter/doc/index
-
-Machine Learning
-................
-
-.. toctree::
-   :maxdepth: 2
-
-   layers/1/bob.learn.activation/doc/index
-   layers/1/bob.learn.boosting/doc/index
-   layers/1/bob.learn.em/doc/index
-   layers/1/bob.learn.libsvm/doc/index
-   layers/1/bob.learn.linear/doc/index
-   layers/1/bob.learn.mlp/doc/index
-
-Database Modules
-................
-
-General databases
-.................
-
-.. toctree::
-   :maxdepth: 2
-
-   layers/0/bob.db.base/doc/index
-   layers/0/bob.db.bio_filelist/doc/index
-   layers/0/bob.db.casme2/doc/index
-   layers/2/bob.db.mnist/doc/index
-   layers/2/bob.db.wine/doc/index
-
-Face verification databases
-...........................
-
-.. toctree::
-   :maxdepth: 2
-
-   layers/2/bob.db.arface/doc/index
-   layers/2/bob.db.atnt/doc/index
-   layers/2/bob.db.banca/doc/index
-   layers/2/bob.db.biosecure/doc/index
-   layers/2/bob.db.biosecurid.face/doc/index
-   layers/2/bob.db.caspeal/doc/index
-   layers/2/bob.db.frgc/doc/index
-   layers/2/bob.db.gbu/doc/index
-   layers/2/bob.db.lfw/doc/index
-   layers/2/bob.db.mobio/doc/index
-   layers/2/bob.db.multipie/doc/index
-   layers/2/bob.db.scface/doc/index
-   layers/2/bob.db.xm2vts/doc/index
-   layers/2/bob.db.youtube/doc/index
-   layers/2/bob.db.ijba/doc/index
-   layers/2/bob.db.cuhk_cufs/doc/index
-   layers/2/bob.db.cbsr_nir_vis_2/doc/index
-
-
-
-Speaker verification databases
-..............................
-
-.. toctree::
-   :maxdepth: 2
-
-   layers/2/bob.db.mobio/doc/index
-   layers/2/bob.db.nist_sre12/doc/index
-   layers/2/bob.db.voxforge/doc/index
-
-
-Other biometric databases
-.........................
-
-
-   layers/2/bob.db.atvskeystroke/doc/index
-   layers/2/bob.db.kboc16/doc/index
-   layers/2/bob.db.utfvp/doc/index
-   layers/2/bob.db.putvein/doc/index
-
-
-Antispoofing packages
-.....................
-
-.. toctree::
-   :maxdepth: 2
-
-   layers/2/bob.db.avspoof/doc/index
-   layers/2/bob.db.casia_fasd/doc/index
-   layers/2/bob.db.msu_mfsd_mod/doc/index
-   layers/2/bob.db.replay/doc/index
-
-
-Example packages
-................
-
-.. toctree::
-   :maxdepth: 2
-
-   layers/2/bob.db.iris/doc/index
-
-
-Biometric Recognition Packages
-..............................
-
-.. toctree::
-   :maxdepth: 2
-
-   layers/2/bob.bio.db/doc/index
-   layers/2/bob.bio.base/doc/index
-   layers/2/bob.bio.face/doc/index
-   layers/2/bob.bio.gmm/doc/index
-   layers/2/bob.bio.spear/doc/index
-   layers/2/bob.bio.video/doc/index
-
-
-Modules for Developers
-......................
-
-.. toctree::
-   :maxdepth: 2
-
-   layers/0/bob.buildout/doc/index
-   layers/0/bob.extension/doc/index
-   layers/0/bob.blitz/doc/index
-
-
-Indices and tables
-..................
-
-* :ref:`genindex`
-* :ref:`modindex`
-* :ref:`search`
diff --git a/plot/detect_single_face.py b/plot/detect_single_face.py
deleted file mode 120000
index 8d4df33b53ec062aa723ae24294eb7e403c544ad..0000000000000000000000000000000000000000
--- a/plot/detect_single_face.py
+++ /dev/null
@@ -1 +0,0 @@
-../src/bob.ip.facedetect/doc/plot/detect_single_face.py
\ No newline at end of file
diff --git a/plot/detect_skin_pixels.py b/plot/detect_skin_pixels.py
deleted file mode 120000
index 3ed5e86d98fc9d95b05ede16d9557bb687869d6a..0000000000000000000000000000000000000000
--- a/plot/detect_skin_pixels.py
+++ /dev/null
@@ -1 +0,0 @@
-../src/bob.ip.skincolorfilter/doc/plot/detect_skin_pixels.py
\ No newline at end of file
diff --git a/plot/disparity.py b/plot/disparity.py
deleted file mode 120000
index 3a71fb55484341beb0e8200fd0e3a7d97050a09f..0000000000000000000000000000000000000000
--- a/plot/disparity.py
+++ /dev/null
@@ -1 +0,0 @@
-../src/bob.ip.gabor/doc/plot/disparity.py
\ No newline at end of file
diff --git a/plot/face_eyes_norm.py b/plot/face_eyes_norm.py
deleted file mode 120000
index 6efe7d804f680cbb61599aef6a4df3c3fe15655a..0000000000000000000000000000000000000000
--- a/plot/face_eyes_norm.py
+++ /dev/null
@@ -1 +0,0 @@
-../src/bob.ip.base/doc/plot/face_eyes_norm.py
\ No newline at end of file
diff --git a/plot/gaussian.py b/plot/gaussian.py
deleted file mode 120000
index 231e79b6f76e3ab10406ffe18abff2d9a053daec..0000000000000000000000000000000000000000
--- a/plot/gaussian.py
+++ /dev/null
@@ -1 +0,0 @@
-../src/bob.ip.base/doc/plot/gaussian.py
\ No newline at end of file
diff --git a/plot/iris_lda.py b/plot/iris_lda.py
deleted file mode 120000
index 0d9e10b091e5413ab849743f887cc2a6008bc817..0000000000000000000000000000000000000000
--- a/plot/iris_lda.py
+++ /dev/null
@@ -1 +0,0 @@
-../src/bob.db.iris/doc/plot/iris_lda.py
\ No newline at end of file
diff --git a/plot/iris_lda_roc.py b/plot/iris_lda_roc.py
deleted file mode 120000
index 3dac37a9b6f4230eac9e370e9fe51d86a34fc0db..0000000000000000000000000000000000000000
--- a/plot/iris_lda_roc.py
+++ /dev/null
@@ -1 +0,0 @@
-../src/bob.db.iris/doc/plot/iris_lda_roc.py
\ No newline at end of file
diff --git a/plot/show_lena.py b/plot/show_lena.py
deleted file mode 120000
index 765a745943e7150ba10038c7c967aa702909ba30..0000000000000000000000000000000000000000
--- a/plot/show_lena.py
+++ /dev/null
@@ -1 +0,0 @@
-../src/bob.ip.flandmark/doc/plot/show_lena.py
\ No newline at end of file
diff --git a/plot/similarity.py b/plot/similarity.py
deleted file mode 120000
index 22ffb05428dddfe4b04796bb12def41c5c724fad..0000000000000000000000000000000000000000
--- a/plot/similarity.py
+++ /dev/null
@@ -1 +0,0 @@
-../src/bob.ip.gabor/doc/plot/similarity.py
\ No newline at end of file
diff --git a/plot/sobel.py b/plot/sobel.py
deleted file mode 120000
index e02e0ef41b85bd34f7fb95e39f52c2252a83e599..0000000000000000000000000000000000000000
--- a/plot/sobel.py
+++ /dev/null
@@ -1 +0,0 @@
-../src/bob.ip.base/doc/plot/sobel.py
\ No newline at end of file
diff --git a/plot/transform.py b/plot/transform.py
deleted file mode 120000
index 3e25b52d4c20dee2eb4481f4ed40036b822ce0b8..0000000000000000000000000000000000000000
--- a/plot/transform.py
+++ /dev/null
@@ -1 +0,0 @@
-../src/bob.ip.gabor/doc/plot/transform.py
\ No newline at end of file
diff --git a/plot/wavelet.py b/plot/wavelet.py
deleted file mode 120000
index 57fb967cf446d050c228ac1a5cabc7bb4a53f3c0..0000000000000000000000000000000000000000
--- a/plot/wavelet.py
+++ /dev/null
@@ -1 +0,0 @@
-../src/bob.ip.gabor/doc/plot/wavelet.py
\ No newline at end of file
diff --git a/requirements-bob.txt b/requirements-bob.txt
deleted file mode 100644
index 4d67b381758d0a079afe620e9d45901c484c4d63..0000000000000000000000000000000000000000
--- a/requirements-bob.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-bob.extension
-bob.blitz
-bob.core
-bob.io.base
diff --git a/setup.py b/setup.py
deleted file mode 100644
index be8b192bb4b38dfc0a1478b354c5fc62a7adad66..0000000000000000000000000000000000000000
--- a/setup.py
+++ /dev/null
@@ -1,65 +0,0 @@
-#!/usr/bin/env python
-# vim: set fileencoding=utf-8 :
-# Tiago de Freitas Pereira <tiago.pereira@idiap.ch>
-# Tue Apr 24 18:55:40 CEST 2012
-
-# This file contains the python (distutils/setuptools) instructions so your
-# package can be installed on **any** host system. It defines some basic
-# information like the package name for instance, or its homepage.
-#
-# It also defines which other packages this python package depends on and that
-# are required for this package's operation. The python subsystem will make
-# sure all dependent packages are installed or will install them for you upon
-# the installation of this package.
-#
-# The 'buildout' system we use here will go further and wrap this package in
-# such a way to create an isolated python working environment. Buildout will
-# make sure that dependencies which are not yet installed do get installed, but
-# **without** requiring administrative privileges on the host system. This
-# allows you to test your package with new python dependencies w/o requiring
-# administrative interventions.
-
-from setuptools import setup, find_packages
-
-requeriments = [l.rstrip("\n") for l in open("requirements-bob.txt", 'r').readlines()]
-#requeriments = requeriments + [l.rstrip("\n") for l in open("requirements-satellites.txt", 'r').readlines()]
-
-# The only thing we do in this file is to call the setup() function with all
-# parameters that define our package.
-setup(
-
-    # This is the basic information about your project. Modify all this
-    # information before releasing code publicly.
-    name='bob.nightlies',
-    version='0.0.1',
-    description='Bob is a free signal-processing and machine learning toolbox originally developed by the Biometrics group at Idiap Research Institute, in Switzerland.',
-    url='http://idiap.github.io/bob/',
-    license='BSD',
-    author='IDIAP Biometrics Group',
-    author_email='biometric@idiap.ch',
-
-    long_description=open('README.rst').read(),
-
-    # This line is required for any distutils based packaging.
-    packages=find_packages(),
-    include_package_data=True,
-    zip_safe=False,
-
-    # This line defines which packages should be installed when you "install"
-    # this package. All packages that are mentioned here, but are not installed
-    # on the current system will be installed locally and only visible to the
-    # scripts of this package. Don't worry - You won't need administrative
-    # privileges when using buildout.
-    install_requires=["setuptools"] + requeriments,
-        
-    classifiers = [
-      'Development Status :: 5 - Production/Stable',
-      'License :: OSI Approved :: BSD License',
-      'Intended Audience :: Education',
-      'Intended Audience :: Science/Research',
-      'Natural Language :: English',
-      'Programming Language :: Python',
-      'Programming Language :: Python :: 3',
-    ],
-
-)
diff --git a/tools/SuppressBuildbotWarnings.txt b/tools/SuppressBuildbotWarnings.txt
deleted file mode 100644
index 9a60a0022809596154496209be7921e3c58492da..0000000000000000000000000000000000000000
--- a/tools/SuppressBuildbotWarnings.txt
+++ /dev/null
@@ -1,11 +0,0 @@
-# Warnings that should be suppressed at Buildbot - no solution for those...
-.* : .*arg is not a Python function.*
-.* : ^\s*1.*This is a warning message.*
-.* : .*LaTeX Warning:\s+.*
-.* : .*Package\s+\S+\s+Warning:.*
-.* : .*unusable reference target found: \.\./\.\./doxygen/html/index.html.*
-.* : .*no files found matching '\*\.sql3' under directory 'bob'.*
-.* : .*dereferencing type-punned pointer will break strict-aliasing rules.*
-.*: .*: .*standard file.*-c.*not found.*
-.*: .*no previously-included files matching .* found anywhere in distribution.*
-.*: WARNING: duplicate citation .*, other instance in.*
diff --git a/tools/build_bob_stable.sh b/tools/build_bob_stable.sh
deleted file mode 100755
index c8af9ba34a0f5e467000d1a1a54b686ef49287ce..0000000000000000000000000000000000000000
--- a/tools/build_bob_stable.sh
+++ /dev/null
@@ -1,140 +0,0 @@
-#!/bin/bash
-# Manuel Gunther <siebenkopf@googlemail.com>
-# Thu Dec  3 10:41:06 MST 2015
-
-
-# parameters:
-# - BUILD_DEPENDENCIES (0: off, 1: basics, 2: +py3, 3: +utils)
-BUILD_DEPENDENCIES=0
-
-# - VERSIONS the pythobn versions that you want; the py27-debug requires the externals directory in /idiap/group/torch5spro/externals
-VERSIONS="py27 py27-debug py34"
-
-# - LAYERS the layers of bob.nigtlies to install
-LAYERS="0 1 2"
-
-# - PARALLEL the number of parallel threads to use (only for bob packages)
-PARALLEL=4
-
-# - SERVER where bob.nightlies files can be found
-SERVER=https://gitlab.idiap.ch/biometric/bob.nightlies/raw/master/
-
-
-# FIRST, make sure that all the dependencies are installed
-# this needs sudo permissions, but can be left out, when these dependencies are already installed
-if [ $BUILD_DEPENDENCIES -gt 0 ]; then
-  sudo add-apt-repository ppa:biometrics/bob
-  sudo apt-get update
-  sudo apt-get install wget git-core pkg-config cmake python-dev python-support python-pip python-virtualenv liblapack-dev libatlas-base-dev libblitz1-dev libavformat-dev libavcodec-dev libswscale-dev libboost-all-dev libmatio-dev libjpeg8-dev libnetpbm10-dev libpng12-dev libtiff4-dev libgif-dev libhdf5-serial-dev libfftw3-dev texlive-latex-recommended texlive-latex-extra texlive-fonts-recommended libsvm-dev libvl-dev dvipng python-numpy python-scipy dvipng libopencv-dev ccache libsox-dev
-fi
-
-# for python3 you'll need extra:
-if [ $BUILD_DEPENDENCIES -gt 1 ]; then
-  sudo apt-get install python3-dev
-fi
-
-# a good idea is:
-if [ $BUILD_DEPENDENCIES -gt 2 ]; then
-  sudo apt-get install hdf5-tools hdfview kdiff3
-fi
-
-
-# SECOND: get information from server, if not there yet
-# - virtual_build.sh
-if [ ! -f virtual-build.sh ]; then
-  wget --no-check-certificate $SERVER/tools/virtual-build.sh
-  chmod u+x virtual-build.sh
-fi
-
-# - the requirements files of the layers
-#for l in ${LAYERS}; do
-#  if [ ! -f requirements${l}.txt ]; then
-#    wget --no-check-certificate $SERVER/requirements${l}.txt
-#  fi
-#done
-if [ ! -f requirements.txt ]; then
-  wget --no-check-certificate $SERVER/requirements.txt
-fi
-
-
-
-
-# THIRD create bob-stable-$DATE directory
-DATE=`date +%Y-%m-%d`
-DIR="bob-stable-${DATE}"
-
-# external requirements, which will be installed using pip before installing Bob packages
-# (not for the py27-debug build, though)
-echo -e "nose" > forced_requirements.txt
-echo -e "numpy\nscipy\nmatplotlib\nsqlalchemy\nsix\ncoveralls\ngridtk\nmr.developer\nipdb\nsphinx" > extra_requirements.txt
-
-
-status=0
-
-# run virtual build for the desired python versions
-for v in ${VERSIONS}; do
-
-  if [ ! -d $DIR/${v} ]; then
-    mkdir -p $DIR/${v}/logs
-  fi
-
-  if [ "$v" == "py27-debug" ]; then
-    # for py27-debug, we use the externals created in /idiap/group/torch5spro/externals/py27-debug/usr, which include a pre-compiled python version in debug mode
-    o=debug
-    export BOB_PREFIX_PATH=/idiap/group/torch5spro/externals/${v}/usr
-    exe="-x $BOB_PREFIX_PATH/bin/virtualenv"
-    python=""
-  else
-    # for release builds, we do not need any externals, but we need to install other python dependencies
-    o=release
-    exe=""
-    python=${v:0:3}.${v:3}
-    python="-P /usr/bin/${python/py/python}"
-
-    # first, build other dependencies like numpy, scipy, coveralls, ...
-    ./virtual-build.sh -r forced_requirements.txt -o ${o} -d $DIR/${v} ${python} -u -F | tee ${DIR}/${v}/logs/BOB_${v}_forced_install.log
-    status=$?
-    if [ ${status} != 0 ]; then
-      echo "Installation of forced requirements failed; aborting"$
-      exit 1
-    fi
-    ./virtual-build.sh -r extra_requirements.txt -o ${o} -d $DIR/${v} ${python} -uW | tee ${DIR}/${v}/logs/BOB_${v}_extra_install.log
-    status=$?
-    if [ ${status} != 0 ]; then
-      echo "Installation of extra requirements failed; aborting"
-      exit 1
-    fi
-  fi
-
-  # For all builds, we run through the requested layers and install all Bob packages
-  # For newer pip versions, caching is used, which we DISABLE here (as all packages need to be compiled freshly when the API of dependent packages has changed)
-  #for l in ${LAYERS}; do
-  #  ./virtual-build.sh -r requirements${l}.txt -o ${o} -d $DIR/${v} -p ${PARALLEL} ${exe} ${python} -iC | tee ${DIR}/${v}/logs/BOB_${v}_layer${l}_install.log
-  #  status=$?
-  #  if [ ${status} != 0 ]; then
-  #    echo "Installation of layer ${l} failed; aborting"
-  #    exit 1
-  #  fi
-  #done
-  
-  ./virtual-build.sh -r requirements.txt -o ${o} -d $DIR/${v} -p ${PARALLEL} ${exe} ${python} -iC | tee ${DIR}/${v}/logs/BOB_${v}_install.log
-  status=$?
-  if [ ${status} != 0 ]; then
-    echo "Installation failed; aborting"
-    exit 1
-  fi
-  
-  
-  
-done
-
-# FINALLY, when everything succeeded:
-# - link the new release
-if [ -h bob-stable ]; then
-  unlink bob-stable
-fi
-ln -s $DIR bob-stable
-
-# - cleanup
-#rm -f virtual-build.sh requirements0.txt requirements1.txt requirements2.txt forced_requirements.txt extra_requirements.txt
-rm -f virtual-build.sh requirements.txt forced_requirements.txt extra_requirements.txt
diff --git a/tools/package.sh b/tools/package.sh
deleted file mode 100755
index 418c9bfe7cbc2c568779e22dbdf5a25cb435119f..0000000000000000000000000000000000000000
--- a/tools/package.sh
+++ /dev/null
@@ -1,22 +0,0 @@
-#!/bin/bash
-# Andre Anjos <andre.anjos@idiap.ch>
-# Tue 28 Aug 2012 11:34:25 CEST
-
-if [ $# = 0 ]; then
-  echo "usage: $0 destination-directory"
-  exit 1
-fi
-
-basedir=`python -c "import os; print os.path.dirname(os.path.dirname(os.path.abspath('$0')))"`
-dest=`python -c "import os; print os.path.abspath('$1')"`
-
-if [ ! -d ${dest} ]; then
-  echo "Creating destination directory ${dest}...";
-  mkdir -v -p ${dest};
-fi
-
-# package all submodules
-echo "Creating packages..."
-git submodule foreach `pwd`/bin/python setup.py sdist --formats=zip
-echo "Copying packages to ${dest}..."
-git submodule foreach "cp -va dist/*.zip ${dest}"
diff --git a/tools/update_dependency_graphs.sh b/tools/update_dependency_graphs.sh
deleted file mode 100755
index f3d0a40a1663bdb10c35848fa04316a97c1ff12d..0000000000000000000000000000000000000000
--- a/tools/update_dependency_graphs.sh
+++ /dev/null
@@ -1,27 +0,0 @@
-#!/bin/bash
-# Manuel Guenther <manuel.guenther@idiap.ch>
-# Wed  7 Jan 19:25:56 CET 2015
-
-if [ $# == 0 ]; then
-  echo "usage: $0 directory [directory] [...]"
-  echo "e.g. $0 layers/0/bob.io.base layers/1/bob.ip.base ..."
-  echo "or: $0 all"
-  exit 1
-fi
-
-if [ "$1" == "all" ]; then
-  # generate overall plot for all packages
-  echo "bin/bob_dependecy_graph.py -P requirements*.txt -W x.dot -v -X"
-  bin/bob_dependecy_graph.py -P requirements*.txt -W x.dot -v -X
-else
-  # generate dependency graph for each of the given directories
-  while [ $# != 0 ]; do
-    directory=$1
-    shift
-    if [ -d $directory ]; then
-      package=`basename "$directory"`
-      echo "bin/bob_dependecy_graph.py -p $package -X -w $directory/dependencies.png -v"
-      bin/bob_dependecy_graph.py -p $package -X -w $directory/dependencies.png -v
-    fi
-  done
-fi
diff --git a/tools/virtual-build.sh b/tools/virtual-build.sh
deleted file mode 100755
index 6d397aa88de042944bc38bc7786360236ed47637..0000000000000000000000000000000000000000
--- a/tools/virtual-build.sh
+++ /dev/null
@@ -1,154 +0,0 @@
-#!/bin/bash
-# Andre Anjos <andre.anjos@idiap.ch>
-# Tue 03 Jun 2014 11:45:19 CEST
-
-# Builds a virtualenv with all packages in layer2, downloaded from
-# some webserver (could be PyPI)
-
-# Requirement: virtualenv *should* be installed with the base framework
-# pre-compiled (e.g. NumPy, SciPy, Matplotlib, etc.), to avoid unnecessary time
-# spent on compiling trivialities.
-
-# Usage info
-show_help() {
-cat << EOF
-Usage: ${0##*/} [-r requirements] [-x externals] [-f find-links]
-                [-d folder] [-o debug/release] [-p threads] [-P python] [-h] [-i] [-u] [-F] [-C] [-W]
-
-Creates a virtual environment, basing itself on the given externals area.
-Pre-populates the virtual environment with the package list provided, if
-one is given.
-
--h       display this help and exit
--r FILE  use the following requirements file to extra packages to install
--x EXE   use the virtualenv executable pointed by this flag instead of the
-         default one
--f URL   find packages for installation on this URL
--d DIR   create the new virtual environment on this directory
--o debug/release  compiles the Source code in debug or release mode
-         (default: release)
--p INT   If specified, Bob will be compiled with the given number of parallel
-         threads
--P EXE   If specified, uses the given python to initialize the virtualenv
--i       ignore installation errors and keep going
--u       upgrade the given requirements
--F       forces the installation of a certain package
--C       does not use cached elements
--W       does not use wheels
-EOF
-}
-
-requirements=""
-virtualenv="virtualenv"
-find_links=""
-directory=""
-optimize="release"
-parallel=""
-python=""
-upgrade=""
-ignore=0
-force=""
-nocache=0
-nowheel=0
-
-while getopts "hr:x:f:d:o:p:P:iuFCW" opt; do
-  case "$opt" in
-    h)
-      show_help
-      exit 0
-      ;;
-    r)  requirements=$OPTARG
-      ;;
-    x)  virtualenv=$OPTARG
-      ;;
-    f)  find_links=$OPTARG
-      ;;
-    d)  directory=$OPTARG
-      ;;
-    o)  optimize=$OPTARG
-      ;;
-    p)  parallel=$OPTARG
-      ;;
-    P)  python="-p $OPTARG"
-      ;;
-    i)  ignore=1
-      ;;
-    u)  upgrade="--upgrade"
-      ;;
-    F)  force="--force-reinstall"
-      ;;
-    C) nocache=1
-      ;;
-    W) nowheel=1
-      ;;
-
-    '?')
-      show_help >&2
-      exit 1
-      ;;
-  esac
-done
-
-# Prepares the new virtual environment
-tmpdir=""
-if [ -z "${directory}" ]; then
-  tmpdir=`mktemp --tmpdir -d ${0##*/}.XXXXXX`
-  directory=${tmpdir}
-  echo "Installing on temporary directory \`${directory}'..."
-fi
-
-if [ ! -d ${directory}/bin ]; then
-  echo "Initializing virtual environment at \`${directory}'..."
-  ${virtualenv} ${python} ${directory}
-  ${directory}/bin/pip install --upgrade setuptools pip
-else
-  echo "Skipped virtual environment initialization at \`${directory}'"
-fi
-
-if [ "${optimize}" == "release" ]; then
-  echo "Setting RELEASE flags"
-  export CFLAGS="-O3 -g0 -mtune=generic"
-  export CXXFLAGS="-O3 -g0 -mtune=generic"
-else
-  echo "Setting DEBUG flags"
-  export CFLAGS='-O0 -g -DBOB_DEBUG -DBZ_DEBUG'
-  export CXXFLAGS='-O0 -g -DBOB_DEBUG -DBZ_DEBUG'
-fi
-
-if [ -n "${parallel}" ]; then
-  echo "Using ${parallel} parallel threads for compilation"
-  export BOB_BUILD_PARALLEL=${parallel}
-fi
-
-# Installs all components listed the requirements file
-if [ -n "${requirements}" ]; then
-  pip_opt="--verbose --pre"
-
-  if [ -n "${find_links}" ]; then
-    pip_opt="--find-links=${find_links} --no-index ${pip_opt}"
-  fi
-
-  if [ ${nocache} == 1 ]; then
-    pip_opt="--no-cache-dir ${pip_opt}"
-  fi
-
-  if [ ${nowheel} == 1 ]; then
-    pip_opt="--no-use-wheel ${pip_opt}"
-  fi
-
-  echo "Installing all requirements in \`${requirements}'..."
-  for req in `cat ${requirements}`; do
-    echo "Installing \`${req}'..."
-    ${directory}/bin/pip install ${upgrade} ${force} ${pip_opt} "${req}"
-    status=$?
-    if [ ${ignore} == 0 -a ${status} != 0 ]; then
-      echo "Installation of package ${req} failed; aborting"
-    exit ${status}; fi
-  done
-fi
-
-# Removes temporary directory if one was created
-if [ -n "${tmpdir}" ]; then
-  echo "Removing temporary directory \`${directory}'..."
-  rm -rf ${tmpdir}
-fi