Set up CI with Azure Pipelines (#927)

diff --git a/.travis.yml b/.travis.yml
deleted file mode 100644
index 8bbb77e..0000000
--- a/.travis.yml
+++ /dev/null
@@ -1,117 +0,0 @@
----
-language: rust
-dist: trusty
-sudo: required
-services: docker
-cache: cargo
-
-before_cache:
-  # Travis can't cache files that are not readable by "others"
-  - chmod -R a+r $HOME/.cargo
-
-script:
-  - cargo build
-  - cargo build --no-default-features
-  - cargo test
-
-matrix:
-  include:
-
-    # Test compatibility
-    #
-    # 1.18.0 is the oldest supported version of Rust. This value should NOT be
-    # changed without prior discussion.
-    #
-    # This build also deploys docs
-    - os: linux
-      rust: 1.18.0
-      before_script:
-        - pip install 'travis-cargo<0.2' --user && export PATH=$HOME/.local/bin:$PATH
-      script:
-        # Ensure that the build works without default features
-        - cargo build
-        - cargo build --no-default-features
-        - cargo test
-        - cargo test --no-default-features
-        - cargo doc --no-deps
-      after_success:
-        - travis-cargo doc-upload
-
-    # Test on latest stable
-    - os: linux
-      rust: stable
-      script:
-        # Ensure that the build works without default features
-        - cargo build
-        - cargo build --no-default-features
-        - cargo test
-        - cargo test --no-default-features
-
-    # OS X
-    - os: osx
-      rust: stable
-      script:
-        # Ensure that the build works without default features
-        - cargo build --no-default-features
-        - cargo test
-        - cargo test --no-default-features
-
-    # iOS
-    - os: osx
-      osx_image: xcode8.2
-      env: TARGET=x86_64-apple-ios DISABLE_TESTS=1
-      rust: stable
-      script:
-        - cargo build --target "$TARGET"
-        - cargo build --target "$TARGET" --no-default-features
-      install:
-        - rustup target add $TARGET
-
-    # Android arm-linux-androideabi
-    - os: linux
-      env: TARGET=arm-linux-androideabi
-      rust: stable
-      script:
-        - cargo build
-        - cargo build --no-default-features
-        - sh ci/run-docker.sh $TARGET;
-      install:
-        - rustup target add $TARGET
-
-    # Android aarch64-linux-android
-    - os: linux
-      env: TARGET=aarch64-linux-android
-      rust: stable
-      script:
-        - cargo build
-        - cargo build --no-default-features
-        - sh ci/run-docker.sh $TARGET;
-      install:
-        - rustup target add $TARGET
-
-    # NetBSD
-    - os: linux
-      env: TARGET=x86_64-unknown-netbsd DISABLE_TESTS=1
-      install:
-        - sh ci/trust/install.sh
-        - source ~/.cargo/env || true
-      script:
-        - bash ci/trust/script.sh
-
-    # Solaris
-    - os: linux
-      env: TARGET=x86_64-sun-solaris DISABLE_TESTS=1
-      install:
-        - sh ci/trust/install.sh
-        - source ~/.cargo/env || true
-      script:
-        - bash ci/trust/script.sh
-
-env:
-  global:
-    - CRATE_NAME=mio
-    - secure: "B/5BSBwUX1r+99YJba421+x7eGgm8J+Cuy7nOAenkRsCP+h5JiOFP4IWyoRgmGQoF1dgGwlHuOLBYvcBj1r8p2i3b8akLk/L83iOBbYNkhub6TpDjltTOZ30brrM++LayazAKHg8mixsTiu72cSJr1BiELQae/ABq9QHTj4v3m4="
-
-notifications:
-  email:
-    on_success: never
diff --git a/README.md b/README.md
index 4503381..2a472bb 100644
--- a/README.md
+++ b/README.md
@@ -3,16 +3,24 @@
 Mio is a lightweight I/O library for Rust with a focus on adding as little
 overhead as possible over the OS abstractions.
 
-[![crates.io](http://meritbadge.herokuapp.com/mio)](https://crates.io/crates/mio)
-[![Build Status](https://travis-ci.org/carllerche/mio.svg?branch=master)](https://travis-ci.org/carllerche/mio)
-[![Build status](https://ci.appveyor.com/api/projects/status/ok90r1tcgkyndnvw/branch/master?svg=true)](https://ci.appveyor.com/project/carllerche/mio/branch/master)
-[![Build Status](https://api.cirrus-ci.com/github/carllerche/mio.svg)](https://cirrus-ci.com/github/carllerche/mio)
+[![Crates.io][crates-badge]][crates-url]
+[![MIT licensed][mit-badge]][mit-url]
+[![Build Status][azure-badge]][azure-url]
+[![Build Status][cirrus-badge]][cirrus-url]
+
+[crates-badge]: https://img.shields.io/crates/v/mio.svg
+[crates-url]: https://crates.io/crates/mio
+[mit-badge]: https://img.shields.io/badge/license-MIT-blue.svg
+[mit-url]: LICENSE
+[azure-badge]: https://dev.azure.com/tokio-rs/Tokio/_apis/build/status/tokio-rs.mio?branchName=master
+[azure-url]: https://dev.azure.com/tokio-rs/Tokio/_build/latest?definitionId=2&branchName=master
+[cirrus-badge]: https://api.cirrus-ci.com/github/carllerche/mio.svg
+[cirrus-url]: https://cirrus-ci.com/github/carllerche/mio
 
 **API documentation**
 
-* [master](https://carllerche.github.io/mio)
+* [master](https://tokio-rs.github.io/mio/doc/mio/)
 * [v0.6](https://docs.rs/mio/^0.6)
-* [v0.5](https://docs.rs/mio/^0.5)
 
 This is a low level library, if you are looking for something easier to get
 started with, see [Tokio](https://tokio.rs).
@@ -60,19 +68,10 @@
 * Solaris
 * Android
 * iOS
-* Fuchsia (experimental).
 
 There are potentially others. If you find that Mio works on another
 platform, submit a PR to update the list!
 
-### Libraries
-
-* [tokio-core](https://github.com/tokio-rs/tokio-core) – Underlying event loop
-  for the [Tokio project](https://github.com/tokio-rs/tokio).
-* [mioco](https://github.com/dpc/mioco) – Mio COroutines
-* [coio-rs](https://github.com/zonyitoo/coio-rs) – Coroutine I/O with work-stealing scheduler
-* [ws-rs](https://github.com/housleyjk/ws-rs) – WebSockets based on Mio
-
 ## Community
 
 A group of Mio users hang out in the #mio channel on the Mozilla IRC
diff --git a/appveyor.yml b/appveyor.yml
deleted file mode 100644
index be5c87e..0000000
--- a/appveyor.yml
+++ /dev/null
@@ -1,21 +0,0 @@
-environment:
-  matrix:
-  - TARGET: x86_64-pc-windows-msvc
-  - TARGET: i686-pc-windows-msvc
-  - TARGET: i686-pc-windows-gnu
-
-install:
-  - ps: Start-FileDownload "https://static.rust-lang.org/dist/rust-nightly-${env:TARGET}.exe"
-  - rust-nightly-%TARGET%.exe /VERYSILENT /NORESTART /DIR="C:\Program Files (x86)\Rust"
-  - SET PATH=%PATH%;C:\Program Files (x86)\Rust\bin
-  - SET PATH=%PATH%;C:\MinGW\bin
-  - rustc -V
-  - cargo -V
-
-build: false
-
-test_script:
-  # Ensure that the build works without default features
-  - cargo build --no-default-features
-  - cargo test
-  - cargo test --no-default-features
diff --git a/azure-pipelines.yml b/azure-pipelines.yml
new file mode 100644
index 0000000..603dfad
--- /dev/null
+++ b/azure-pipelines.yml
@@ -0,0 +1,50 @@
+trigger: ["master"]
+pr: ["master"]
+
+jobs:
+# Check formatting
+# - template: ci/azure-rustfmt.yml
+#   parameters:
+#     name: rustfmt
+
+# Stable
+- template: ci/azure-test-stable.yml
+  parameters:
+    name: stable
+    displayName: Test
+    cross: true
+
+# Nightly
+- template: ci/azure-test-stable.yml
+  parameters:
+    name: nightly
+    displayName: Nightly
+    # Pin nightly to avoid being impacted by breakage
+    rust_version: nightly-2019-04-22
+    benches: true
+
+# This represents the minimum Rust version supported by
+# Mio. Updating this should be done in a dedicated PR.
+#
+# Tests are not run as tests may require newer versions of
+# rust.
+- template: ci/azure-test-stable.yml
+  parameters:
+    name: minrust
+    displayName: Min Rust
+    rust_version: 1.18.0
+    cmd: check
+    cross: true
+
+- template: ci/azure-cross-compile.yml
+  parameters:
+    name: cross
+
+- template: ci/azure-deploy-docs.yml
+  parameters:
+    dependsOn:
+      # - rustfmt
+      - stable
+      - nightly
+      - minrust
+      - cross
diff --git a/ci/azure-cross-compile.yml b/ci/azure-cross-compile.yml
new file mode 100644
index 0000000..c7db94f
--- /dev/null
+++ b/ci/azure-cross-compile.yml
@@ -0,0 +1,56 @@
+parameters:
+  vmImage: ubuntu-16.04
+
+jobs:
+- job: ${{ parameters.name }}
+  displayName: Cross
+  strategy:
+    matrix:
+      iOS:
+        vmImage: macOS-10.13
+        target: x86_64-apple-ios
+
+      Android:
+        vmImage: ubuntu-16.04
+        target: arm-linux-androideabi
+
+      Android_64:
+        vmImage: ubuntu-16.04
+        target: aarch64-linux-android
+
+      NetBSD:
+        vmImage: ubuntu-16.04
+        target: x86_64-unknown-netbsd
+
+      Solaris:
+        vmImage: ubuntu-16.04
+        target: x86_64-sun-solaris
+
+  pool:
+    vmImage: $(vmImage)
+
+  steps:
+    - template: azure-install-rust.yml
+      parameters:
+        rust_version: stable
+
+    - script: rustup target add $(target)
+      displayName: "Add target"
+
+    - script: cargo check --target $(target)
+      displayName: Check source
+
+    - script: cargo check --tests --target $(target)
+      displayName: Check tests
+
+    - script: cargo check --examples --target $(target)
+      displayName: Check examples
+
+    - script: cargo check --target $(target) --no-default-features
+      displayName: Check source (no default features)
+
+    - script: cargo check --tests --target $(target) --no-default-features
+      displayName: Check tests (no default features)
+
+    - script: cargo check --examples --target $(target) --no-default-features
+      displayName: Check examples (no default features)
diff --git a/ci/azure-deploy-docs.yml b/ci/azure-deploy-docs.yml
new file mode 100644
index 0000000..2ff0f2a
--- /dev/null
+++ b/ci/azure-deploy-docs.yml
@@ -0,0 +1,39 @@
+parameters:
+  dependsOn: []
+
+jobs:
+- job: documentation
+  displayName: 'Deploy API Documentation'
+  condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/master'))
+  pool:
+    vmImage: 'Ubuntu 16.04'
+  dependsOn:
+    - ${{ parameters.dependsOn }}
+  steps:
+  - template: azure-install-rust.yml
+    parameters:
+      rust_version: stable
+  - script: |
+      cargo doc --no-deps
+      cp -R target/doc '$(Build.BinariesDirectory)'
+    displayName: 'Generate Documentation'
+  - script: |
+      set -e
+
+      git --version
+      ls -la
+      git init
+      git config user.name 'Deployment Bot (from Azure Pipelines)'
+      git config user.email 'deploy@tokio-rs.com'
+      git config --global credential.helper 'store --file ~/.my-credentials'
+      printf "protocol=https\nhost=github.com\nusername=carllerche\npassword=%s\n\n" "$GITHUB_TOKEN" | git credential-store --file ~/.my-credentials store
+      git remote add origin https://github.com/tokio-rs/mio
+      git checkout -b gh-pages
+      git add .
+      git commit -m 'Deploy Mio API documentation'
+      git push -f origin gh-pages
+    env:
+      GITHUB_TOKEN: $(githubPersonalToken)
+    workingDirectory: '$(Build.BinariesDirectory)'
+    displayName: 'Deploy Documentation'
+
diff --git a/ci/azure-install-rust.yml b/ci/azure-install-rust.yml
new file mode 100644
index 0000000..654db47
--- /dev/null
+++ b/ci/azure-install-rust.yml
@@ -0,0 +1,27 @@
+steps:
+  # Linux and macOS.
+  - script: |
+      set -e
+      curl https://sh.rustup.rs -sSf | sh -s -- -y --default-toolchain $RUSTUP_TOOLCHAIN
+      echo "##vso[task.setvariable variable=PATH;]$PATH:$HOME/.cargo/bin"
+    env:
+      RUSTUP_TOOLCHAIN: ${{parameters.rust_version}}
+    displayName: "Install rust (*nix)"
+    condition: not(eq(variables['Agent.OS'], 'Windows_NT'))
+
+  # Windows.
+  - script: |
+      curl -sSf -o rustup-init.exe https://win.rustup.rs
+      rustup-init.exe -y --default-toolchain %RUSTUP_TOOLCHAIN%
+      set PATH=%PATH%;%USERPROFILE%\.cargo\bin
+      echo "##vso[task.setvariable variable=PATH;]%PATH%;%USERPROFILE%\.cargo\bin"
+    env:
+      RUSTUP_TOOLCHAIN: ${{parameters.rust_version}}
+    displayName: "Install rust (windows)"
+    condition: eq(variables['Agent.OS'], 'Windows_NT')
+
+  # All platforms.
+  - script: |
+        rustc -Vv
+        cargo -V
+    displayName: Query rust and cargo versions
diff --git a/ci/azure-test-stable.yml b/ci/azure-test-stable.yml
new file mode 100644
index 0000000..0ec36bb
--- /dev/null
+++ b/ci/azure-test-stable.yml
@@ -0,0 +1,42 @@
+parameters:
+  cmd: test
+  rust_version: stable
+
+jobs:
+- job: ${{ parameters.name }}
+  displayName: ${{ parameters.displayName }}
+  strategy:
+    matrix:
+      Linux:
+        vmImage: ubuntu-16.04
+
+      ${{ if parameters.cross }}:
+        MacOS:
+          vmImage: macOS-10.13
+        Windows:
+          vmImage: vs2017-win2016
+  pool:
+    vmImage: $(vmImage)
+
+  steps:
+  - template: azure-install-rust.yml
+    parameters:
+      rust_version: ${{ parameters.rust_version }}
+
+  - script: cargo ${{ parameters.cmd }}
+    displayName: cargo ${{ parameters.cmd }}
+    env:
+      CI: 'True'
+
+  - script: cargo ${{ parameters.cmd }} --no-default-features
+    displayName: cargo ${{ parameters.cmd }} --no-default-features
+    env:
+      CI: 'True'
+
+  - ${{ if eq(parameters.cmd, 'test') }}:
+    - script: cargo doc --no-deps
+      displayName: cargo doc --no-deps
+
+  - ${{ if parameters.benches }}:
+    - script: cargo check --benches
+      displayName: Check benchmarks
diff --git a/ci/docker/aarch64-linux-android/Dockerfile b/ci/docker/aarch64-linux-android/Dockerfile
deleted file mode 100644
index cc9128a..0000000
--- a/ci/docker/aarch64-linux-android/Dockerfile
+++ /dev/null
@@ -1,49 +0,0 @@
-FROM ubuntu:16.04
-
-
-
-
-
-RUN dpkg --add-architecture i386 && \
-    dpkg --add-architecture amd64 && \
-    apt-get update && \
-    apt-get install -y --no-install-recommends \
-  file \
-  curl \
-  ca-certificates \
-  python \
-  unzip \
-  expect \
-  openjdk-9-jre \
-  libstdc++6:i386 \
-  libc++1 \
-  gcc \
-  libc6-dev \
-  qt5-default zlib1g:i386 libx11-6:i386 \
-  libpulse0:amd64 libpulse0:i386
-
-
-
-
-
-
-COPY cargo_config /etc/cargo_config
-
-WORKDIR /android/
-
-COPY install-ndk.sh /android/
-RUN sh /android/install-ndk.sh
-
-ENV PATH=$PATH:/android/ndk-arm64/bin:/android/sdk/tools:/android/sdk/tools/bin:/android/sdk/platform-tools:/android/sdk/emulator/qemu/linux-x86_64
-
-COPY install-sdk.sh /android/
-RUN sh /android/install-sdk.sh
-
-ENV PATH=$PATH:/rust/bin \
-    CARGO_TARGET_ARM_LINUX_ANDROIDEABI_LINKER=aarch64-linux-android-gcc \
-    ANDROID_EMULATOR_FORCE_32BIT=0 \
-    HOME=/tmp
-RUN chmod 755 /android/sdk/tools/* /android/sdk/emulator/qemu/linux-x86_64/*
-
-RUN cp -r /root/.android /tmp
-RUN chmod 777 -R /tmp/.android
diff --git a/ci/docker/aarch64-linux-android/accept-licenses.sh b/ci/docker/aarch64-linux-android/accept-licenses.sh
deleted file mode 100755
index 1013920..0000000
--- a/ci/docker/aarch64-linux-android/accept-licenses.sh
+++ /dev/null
@@ -1,15 +0,0 @@
-#!/usr/bin/expect -f
-# ignore-license
-
-set timeout 1800
-set cmd [lindex $argv 0]
-set licenses [lindex $argv 1]
-
-spawn {*}$cmd
-expect {
-  "Accept? (y/N):*" {
-        exp_send "y\r"
-        exp_continue
-  }
-  eof
-}
\ No newline at end of file
diff --git a/ci/docker/aarch64-linux-android/cargo_config b/ci/docker/aarch64-linux-android/cargo_config
deleted file mode 100644
index eca1815..0000000
--- a/ci/docker/aarch64-linux-android/cargo_config
+++ /dev/null
@@ -1,16 +0,0 @@
-
-[target.aarch64-linux-android]
-ar = "/android/ndk-arm64/bin/aarch64-linux-android-ar"
-linker = "/android/ndk-arm64/bin/aarch64-linux-android-gcc"
-
-[target.arm-linux-androideabi]
-ar = "/android/ndk-arm64/bin/arm-linux-androideabi-ar"
-linker = "/android/ndk-arm64/bin/arm-linux-androideabi-gcc"
-
-[target.armv7-linux-androideabi]
-ar = "/android/ndk-arm64/bin/arm-linux-androideabi-ar"
-linker = "/android/ndk-arm64/bin/arm-linux-androideabi-gcc"
-
-[target.i686-linux-android]
-ar = "/android/ndk-arm64/bin/i686-linux-android-ar"
-linker = "/android/ndk-arm64/bin/i686-linux-android-gcc"
diff --git a/ci/docker/aarch64-linux-android/install-ndk.sh b/ci/docker/aarch64-linux-android/install-ndk.sh
deleted file mode 100644
index 6b12d90..0000000
--- a/ci/docker/aarch64-linux-android/install-ndk.sh
+++ /dev/null
@@ -1,21 +0,0 @@
-#!/bin/sh
-# Copyright 2016 The Rust Project Developers. See the COPYRIGHT
-# file at the top-level directory of this distribution and at
-# http://rust-lang.org/COPYRIGHT.
-#
-# Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
-# http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
-# <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
-# option. This file may not be copied, modified, or distributed
-# except according to those terms.
-
-set -ex
-
-curl -O https://dl.google.com/android/repository/android-ndk-r14b-linux-x86_64.zip
-unzip -q android-ndk-r14b-linux-x86_64.zip
-android-ndk-r14b/build/tools/make_standalone_toolchain.py \
-        --install-dir /android/ndk-arm64 \
-        --arch arm64 \
-        --api 24
-
-rm -rf ./android-ndk-r14b-linux-x86_64.zip ./android-ndk-r14b
diff --git a/ci/docker/aarch64-linux-android/install-sdk.sh b/ci/docker/aarch64-linux-android/install-sdk.sh
deleted file mode 100644
index df2e239..0000000
--- a/ci/docker/aarch64-linux-android/install-sdk.sh
+++ /dev/null
@@ -1,37 +0,0 @@
-#!/bin/sh
-# Copyright 2016 The Rust Project Developers. See the COPYRIGHT
-# file at the top-level directory of this distribution and at
-# http://rust-lang.org/COPYRIGHT.
-#
-# Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
-# http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
-# <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
-# option. This file may not be copied, modified, or distributed
-# except according to those terms.
-
-set -ex
-
-# Prep the SDK and emulator
-#
-# Note that the update process requires that we accept a bunch of licenses, and
-# we can't just pipe `yes` into it for some reason, so we take the same strategy
-# located in https://github.com/appunite/docker by just wrapping it in a script
-# which apparently magically accepts the licenses.
-
-mkdir sdk
-
-curl -o sdk-tools-linux-3859397.zip https://dl.google.com/android/repository/sdk-tools-linux-3859397.zip && \
-    unzip sdk-tools-linux-3859397.zip && \
-    mv tools sdk/
-
-
-
-yes | sdkmanager --licenses --no_https
-sdkmanager tools platform-tools "build-tools;25.0.2" "platforms;android-24" "system-images;android-24;default;arm64-v8a" --no_https
-
-echo "no" | avdmanager create avd \
-                --force \
-                --name arm64-24 \
-                --package "system-images;android-24;default;arm64-v8a" \
-                --abi arm64-v8a \
-                --sdcard 256M
diff --git a/ci/docker/arm-linux-androideabi/Dockerfile b/ci/docker/arm-linux-androideabi/Dockerfile
deleted file mode 100644
index 38c6c7e..0000000
--- a/ci/docker/arm-linux-androideabi/Dockerfile
+++ /dev/null
@@ -1,37 +0,0 @@
-FROM ubuntu:16.04
-
-RUN dpkg --add-architecture i386 && \
-    apt-get update && \
-    apt-get install -y --no-install-recommends \
-  file \
-  curl \
-  ca-certificates \
-  python \
-  unzip \
-  expect \
-  openjdk-9-jre \
-  libstdc++6:i386 \
-  gcc \
-  libc6-dev
-
-
-COPY cargo_config /etc/cargo_config
-
-WORKDIR /android/
-
-COPY install-ndk.sh /android/
-RUN sh /android/install-ndk.sh
-
-ENV PATH=$PATH:/android/ndk-arm/bin:/android/sdk/tools:/android/sdk/platform-tools
-
-COPY install-sdk.sh accept-licenses.sh /android/
-RUN sh /android/install-sdk.sh
-
-ENV PATH=$PATH:/rust/bin \
-    CARGO_TARGET_ARM_LINUX_ANDROIDEABI_LINKER=arm-linux-androideabi-gcc \
-    ANDROID_EMULATOR_FORCE_32BIT=1 \
-    HOME=/tmp
-RUN chmod 755 /android/sdk/tools/* /android/sdk/tools/qemu/linux-x86_64/* /android/sdk/tools/qemu/linux-x86/*
-
-RUN cp -r /root/.android /tmp
-RUN chmod 777 -R /tmp/.android
diff --git a/ci/docker/arm-linux-androideabi/accept-licenses.sh b/ci/docker/arm-linux-androideabi/accept-licenses.sh
deleted file mode 100755
index 8d8f60a..0000000
--- a/ci/docker/arm-linux-androideabi/accept-licenses.sh
+++ /dev/null
@@ -1,15 +0,0 @@
-#!/usr/bin/expect -f
-# ignore-license
-
-set timeout 1800
-set cmd [lindex $argv 0]
-set licenses [lindex $argv 1]
-
-spawn {*}$cmd
-expect {
-  "Do you accept the license '*'*" {
-        exp_send "y\r"
-        exp_continue
-  }
-  eof
-}
diff --git a/ci/docker/arm-linux-androideabi/cargo_config b/ci/docker/arm-linux-androideabi/cargo_config
deleted file mode 100644
index 64900ab..0000000
--- a/ci/docker/arm-linux-androideabi/cargo_config
+++ /dev/null
@@ -1,16 +0,0 @@
-
-[target.aarch64-linux-android]
-ar = "/android/ndk-arm/bin/aarch64-linux-android-ar"
-linker = "/android/ndk-arm/bin/aarch64-linux-android-gcc"
-
-[target.arm-linux-androideabi]
-ar = "/android/ndk-arm/bin/arm-linux-androideabi-ar"
-linker = "/android/ndk-arm/bin/arm-linux-androideabi-gcc"
-
-[target.armv7-linux-androideabi]
-ar = "/android/ndk-arm/bin/arm-linux-androideabi-ar"
-linker = "/android/ndk-arm/bin/arm-linux-androideabi-gcc"
-
-[target.i686-linux-android]
-ar = "/android/ndk-arm/bin/i686-linux-android-ar"
-linker = "/android/ndk-arm/bin/i686-linux-android-gcc"
diff --git a/ci/docker/arm-linux-androideabi/install-ndk.sh b/ci/docker/arm-linux-androideabi/install-ndk.sh
deleted file mode 100644
index 566a319..0000000
--- a/ci/docker/arm-linux-androideabi/install-ndk.sh
+++ /dev/null
@@ -1,21 +0,0 @@
-#!/bin/sh
-# Copyright 2016 The Rust Project Developers. See the COPYRIGHT
-# file at the top-level directory of this distribution and at
-# http://rust-lang.org/COPYRIGHT.
-#
-# Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
-# http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
-# <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
-# option. This file may not be copied, modified, or distributed
-# except according to those terms.
-
-set -ex
-
-curl -O https://dl.google.com/android/repository/android-ndk-r13b-linux-x86_64.zip
-unzip -q android-ndk-r13b-linux-x86_64.zip
-android-ndk-r13b/build/tools/make_standalone_toolchain.py \
-        --install-dir /android/ndk-arm \
-        --arch arm \
-        --api 24
-
-rm -rf ./android-ndk-r13b-linux-x86_64.zip ./android-ndk-r13b
diff --git a/ci/docker/arm-linux-androideabi/install-sdk.sh b/ci/docker/arm-linux-androideabi/install-sdk.sh
deleted file mode 100644
index 58f3484..0000000
--- a/ci/docker/arm-linux-androideabi/install-sdk.sh
+++ /dev/null
@@ -1,33 +0,0 @@
-#!/bin/sh
-# Copyright 2016 The Rust Project Developers. See the COPYRIGHT
-# file at the top-level directory of this distribution and at
-# http://rust-lang.org/COPYRIGHT.
-#
-# Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
-# http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
-# <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
-# option. This file may not be copied, modified, or distributed
-# except according to those terms.
-
-set -ex
-
-# Prep the SDK and emulator
-#
-# Note that the update process requires that we accept a bunch of licenses, and
-# we can't just pipe `yes` into it for some reason, so we take the same strategy
-# located in https://github.com/appunite/docker by just wrapping it in a script
-# which apparently magically accepts the licenses.
-
-mkdir sdk
-curl https://dl.google.com/android/android-sdk_r24.4.1-linux.tgz | \
-    tar xzf - -C sdk --strip-components=1
-
-filter="platform-tools,android-21"
-filter="$filter,sys-img-armeabi-v7a-android-21"
-
-./accept-licenses.sh "android - update sdk -a --no-ui --filter $filter --no-https"
-
-echo "no" | android create avd \
-                --name arm-21 \
-                --target android-21 \
-                --abi armeabi-v7a
diff --git a/ci/run-docker.sh b/ci/run-docker.sh
deleted file mode 100644
index a7702ae..0000000
--- a/ci/run-docker.sh
+++ /dev/null
@@ -1,33 +0,0 @@
-# Small script to run tests for a target (or all targets) inside all the
-# respective docker images.
-
-set -ex
-
-run() {
-    echo $1
-    docker build -t libc ci/docker/$1
-    mkdir -p target
-    docker run \
-      --user `id -u`:`id -g` \
-      --rm \
-      --volume $HOME/.cargo:/cargo \
-      --env CARGO_HOME=/cargo \
-      --volume `rustc --print sysroot`:/rust:ro \
-      --volume `pwd`:/checkout:ro \
-      --volume `pwd`/target:/checkout/target \
-      --env CARGO_TARGET_DIR=/checkout/target \
-      --workdir /checkout \
-      --privileged \
-      --interactive \
-      --tty \
-      libc \
-      ci/run.sh $1
-}
-
-if [ -z "$1" ]; then
-  for d in `ls ci/docker/`; do
-    run $d
-  done
-else
-  run $1
-fi
diff --git a/ci/run.sh b/ci/run.sh
deleted file mode 100755
index 2cbad35..0000000
--- a/ci/run.sh
+++ /dev/null
@@ -1,42 +0,0 @@
-#!/bin/sh
-
-# Builds and runs tests for a particular target passed as an argument to this
-# script.
-
-set -ex
-
-TARGET=$1
-
-if [ -f /etc/cargo_config ] && [ -d /cargo ]; then cp -f /etc/cargo_config /cargo/config; fi
-cargo build --target=$TARGET --test test --verbose
-
-# Find the file to run
-TEST_FILE=$(find target/$TARGET/debug -maxdepth 1 -type f -perm -111 -name "test-*" | head -1)
-
-case "$TARGET" in
-  arm-linux-androideabi)
-    # Use the 64bit emulator
-    emulator64-arm @arm-21 -no-window &
-    adb wait-for-device
-    adb push $TEST_FILE /data/mio-test
-    adb shell /data/mio-test 2>&1 | tee /tmp/out
-    grep "^test result.* 0 failed" /tmp/out
-    ;;
-
-  aarch64-linux-android)
-    # Use the 64bit emulator
-    export LD_LIBRARY_PATH="/android/sdk/emulator/lib64/qt/lib:/android/sdk/emulator/lib64:/usr/lib/x86_64-linux-gnu"
-    qemu-system-aarch64 @arm64-24 -memory 768 -accel off -gpu off -no-skin -no-window -no-audio -no-snapshot-load -no-snapshot-save &
-    adb wait-for-device
-    adb root
-    adb push $TEST_FILE /data/mio-test
-    #adb unroot
-    adb shell chmod 755 /data/mio-test
-    adb shell /data/mio-test 2>&1 | tee /tmp/out
-    grep "^test result.* 0 failed" /tmp/out
-    ;;
-
-  *)
-    exit 1;
-    ;;
-esac
diff --git a/ci/trust/install.sh b/ci/trust/install.sh
deleted file mode 100644
index 76bb734..0000000
--- a/ci/trust/install.sh
+++ /dev/null
@@ -1,31 +0,0 @@
-set -ex
-
-main() {
-    curl https://sh.rustup.rs -sSf | \
-        sh -s -- -y --default-toolchain $TRAVIS_RUST_VERSION
-
-    local target=
-    if [ $TRAVIS_OS_NAME = linux ]; then
-        target=x86_64-unknown-linux-gnu
-        sort=sort
-    else
-        target=x86_64-apple-darwin
-        sort=gsort  # for `sort --sort-version`, from brew's coreutils.
-    fi
-
-    # This fetches latest stable release
-    local tag=$(git ls-remote --tags --refs --exit-code https://github.com/japaric/cross \
-                       | cut -d/ -f3 \
-                       | grep -E '^v[0-9.]+$' \
-                       | $sort --version-sort \
-                       | tail -n1)
-    echo cross version: $tag
-    curl -LSfs https://japaric.github.io/trust/install.sh | \
-        sh -s -- \
-           --force \
-           --git japaric/cross \
-           --tag $tag \
-           --target $target
-}
-
-main
diff --git a/ci/trust/script.sh b/ci/trust/script.sh
deleted file mode 100644
index 473bacb..0000000
--- a/ci/trust/script.sh
+++ /dev/null
@@ -1,19 +0,0 @@
-# This script takes care of testing your crate
-
-set -ex
-
-# TODO This is the "test phase", tweak it as you see fit
-main() {
-    cross build --target $TARGET
-
-    if [ ! -z $DISABLE_TESTS ]; then
-        return
-    fi
-
-    cross test --target $TARGET
-}
-
-# we don't run the "test phase" when doing deploys
-if [ -z $TRAVIS_TAG ]; then
-    main
-fi
diff --git a/src/lib.rs b/src/lib.rs
index 599308f..7599e07 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -1,4 +1,7 @@
 #![doc(html_root_url = "https://docs.rs/mio/0.6.16")]
+// Mio targets old versions of the Rust compiler. In order to do this, uses
+// deprecated APIs.
+#![allow(deprecated)]
 #![deny(missing_docs, missing_debug_implementations)]
 #![cfg_attr(test, deny(warnings))]