Vagrant.configure(2) do |config|
  config.vm.box = "ubuntu/wily64"

  config.vm.provider "virtualbox" do |vb|
    vb.memory = "4096"
    vb.cpus = 8
  end

  config.vm.provision "shell", inline: <<-SHELL
    sudo apt-get update
    sudo apt-get install -y git clang cmake libssl-dev

    cd /opt

    # Build rust

    git clone https://github.com/rust-lang/rust.git
    cd rust
    ./configure --enable-clang --disable-libcpp --enable-optimize --disable-docs
    make -j 8
    cd ..
    export PATH=$PATH:/opt/rust/x86_64-unknown-linux-gnu/stage2/bin
    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/rust/x86_64-unknown-linux-gnu/stage2/lib/
    echo 'export PATH=$PATH:/opt/rust/x86_64-unknown-linux-gnu/stage2/bin' >> /home/vagrant/.bashrc
    echo 'export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/rust/x86_64-unknown-linux-gnu/stage2/lib/' >> /home/vagrant/.bashrc

    # Build cargo

    git clone https://github.com/rust-lang/cargo
    cd cargo
    ./configure --local-rust-root=../rust/x86_64-unknown-linux-gnu/stage2/ --enable-optimize
    make
    export PATH=$PATH:/opt/cargo/target/x86_64-unknown-linux-gnu/release
    echo 'export PATH=$PATH:/opt/cargo/target/x86_64-unknown-linux-gnu/release' >> /home/vagrant/.bashrc
    cd ..

    # Build afl

    VERSION=1.96b
    wget http://lcamtuf.coredump.cx/afl/releases/afl-$VERSION.tgz
    tar xf afl-$VERSION.tgz
    cd afl-$VERSION
    make
    make install

    # To avoid having crashes misinterpreted as hangs (recommended by afl-fuzz when first run)
    echo core > /proc/sys/kernel/core_pattern

    # export CXX="$(which clang++) -Wno-c++11-extensions"
    # export LLVM_CONFIG=$(which llvm-config-3.4)
    # build repo with rust plugin
  SHELL
end
