diff --git a/.cargo_vcs_info.json b/.cargo_vcs_info.json
index 4fa2e6b..4d0697a 100644
--- a/.cargo_vcs_info.json
+++ b/.cargo_vcs_info.json
@@ -1,5 +1,5 @@
 {
   "git": {
-    "sha1": "4d0ce68f60cb9d9ce6c1e0f1794af7b1a5671bee"
+    "sha1": "f40ed4703128a5b77bbbbf7863b577585b7d5896"
   }
 }
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
new file mode 100644
index 0000000..75775cd
--- /dev/null
+++ b/.github/workflows/ci.yml
@@ -0,0 +1,57 @@
+name: CI
+
+on:
+  push:
+    branches:
+      - master
+  pull_request:
+    branches:
+      - master
+
+jobs:
+  ci:
+    name: CI
+    runs-on: ${{ matrix.os }}
+    strategy:
+      matrix:
+        os: [macos-latest, ubuntu-latest, windows-latest]
+        clang: [["10.0", "clang_10_0"]]
+        rust: ["1.36.0"]
+    steps:
+      - name: Checkout Repository
+        uses: actions/checkout@v2
+      # LLVM and Clang
+      - name: Cache LLVM and Clang
+        id: cache-llvm
+        uses: actions/cache@v2
+        with:
+          path: ${{ runner.temp }}/llvm-${{ matrix.clang[0] }}
+          key: ${{ matrix.os }}-llvm-${{ matrix.clang[0] }}
+      - name: Install LLVM and Clang
+        uses: KyleMayes/install-llvm-action@v1
+        with:
+          version: ${{ matrix.clang[0] }}
+          directory: ${{ runner.temp }}/llvm-${{ matrix.clang[0] }}
+          cached: ${{ steps.cache-llvm.outputs.cache-hit }}
+      # Rust
+      - name: Install Rust
+        uses: actions-rs/toolchain@v1
+        with:
+          toolchain: ${{ matrix.rust }}
+      # Test
+      - name: Cargo Test (Dynamic)
+        uses: actions-rs/cargo@v1
+        env:
+          LIBCLANG_PATH: ${{ runner.temp }}/llvm-${{ matrix.clang[0] }}/lib
+          LLVM_CONFIG_PATH: ${{ runner.temp }}/llvm-${{ matrix.clang[0] }}/bin/llvm-config
+        with:
+          command: test
+          args: --verbose --features ${{ matrix.clang[1] }} -- --nocapture
+      - name: Cargo Test (Runtime)
+        uses: actions-rs/cargo@v1
+        env:
+          LIBCLANG_PATH: ${{ runner.temp }}/llvm-${{ matrix.clang[0] }}/lib
+          LLVM_CONFIG_PATH: ${{ runner.temp }}/llvm-${{ matrix.clang[0] }}/bin/llvm-config
+        with:
+          command: test
+          args: --verbose --features "${{ matrix.clang[1] }} runtime" -- --nocapture
diff --git a/.travis.yml b/.travis.yml
deleted file mode 100644
index fef4737..0000000
--- a/.travis.yml
+++ /dev/null
@@ -1,28 +0,0 @@
-language: rust
-
-addons:
-  apt:
-    sources:
-      - ubuntu-toolchain-r-test
-    packages:
-      - gcc-5
-
-os:
-  - linux
-
-rust:
-  - 1.36.0
-  - stable
-
-env:
-  - LLVM_VERSION=3.5 CLANG_VERSION=clang_3_5
-  - LLVM_VERSION=7.0 CLANG_VERSION=clang_7_0
-
-cache:
-  directories:
-    - $HOME/.cargo
-    - $HOME/.llvm
-
-before_install: . ./ci/before_install.sh
-
-script: . ./ci/script.sh
diff --git a/Android.bp b/Android.bp
index 81e49c4..35de6b8 100644
--- a/Android.bp
+++ b/Android.bp
@@ -1,4 +1,4 @@
-// This file is generated by cargo2android.py --run --features=runtime,clang_9_0 --dependencies.
+// This file is generated by cargo2android.py --run --features=runtime,clang_10_0 --dependencies.
 
 rust_library_host {
     name: "libclang_sys",
@@ -7,17 +7,18 @@
     srcs: ["src/lib.rs"],
     edition: "2015",
     features: [
+        "clang_10_0",
+        "clang_3_5",
+        "clang_3_6",
+        "clang_3_7",
+        "clang_3_8",
+        "clang_3_9",
+        "clang_4_0",
+        "clang_5_0",
+        "clang_6_0",
+        "clang_7_0",
+        "clang_8_0",
         "clang_9_0",
-        "gte_clang_3_6",
-        "gte_clang_3_7",
-        "gte_clang_3_8",
-        "gte_clang_3_9",
-        "gte_clang_4_0",
-        "gte_clang_5_0",
-        "gte_clang_6_0",
-        "gte_clang_7_0",
-        "gte_clang_8_0",
-        "gte_clang_9_0",
         "libloading",
         "runtime",
     ],
@@ -29,7 +30,6 @@
 }
 
 // dependent_library ["feature_list"]
-//   cc-1.0.55
 //   glob-0.3.0
 //   libc-0.2.71
-//   libloading-0.5.2
+//   libloading-0.6.2
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 32ee34f..23a11a9 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,16 @@
+## [1.0.0] - 2020-07-14
+
+### Changed
+- Bumped `libloading` version to `0.6.0`
+- Updated build script to not print warnings about failures to execute
+`llvm-config` and `xcode-select` unless an instance of `libclang` is not found
+
+### Added
+- Added support for `clang` 10.0.x
+
+### Removed
+- Removed `gte_clang_*` Cargo features (these were an implementation detail)
+
 ## [0.29.3] - 2020-03-31
 
 ### Added
diff --git a/Cargo.toml b/Cargo.toml
index 904014d..f7e1e23 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -12,7 +12,7 @@
 
 [package]
 name = "clang-sys"
-version = "0.29.3"
+version = "1.0.0"
 authors = ["Kyle Mayes <kyle@mayeses.com>"]
 build = "build.rs"
 links = "clang"
@@ -22,7 +22,7 @@
 license = "Apache-2.0"
 repository = "https://github.com/KyleMayes/clang-sys"
 [package.metadata.docs.rs]
-features = ["clang_9_0", "runtime"]
+features = ["clang_10_0", "runtime"]
 [dependencies.glob]
 version = "0.3"
 
@@ -31,32 +31,23 @@
 default-features = false
 
 [dependencies.libloading]
-version = "0.5"
+version = "0.6"
 optional = true
 [build-dependencies.glob]
 version = "0.3"
 
 [features]
+clang_10_0 = ["clang_9_0"]
 clang_3_5 = []
-clang_3_6 = ["gte_clang_3_6"]
-clang_3_7 = ["gte_clang_3_6", "gte_clang_3_7"]
-clang_3_8 = ["gte_clang_3_6", "gte_clang_3_7", "gte_clang_3_8"]
-clang_3_9 = ["gte_clang_3_6", "gte_clang_3_7", "gte_clang_3_8", "gte_clang_3_9"]
-clang_4_0 = ["gte_clang_3_6", "gte_clang_3_7", "gte_clang_3_8", "gte_clang_3_9", "gte_clang_4_0"]
-clang_5_0 = ["gte_clang_3_6", "gte_clang_3_7", "gte_clang_3_8", "gte_clang_3_9", "gte_clang_4_0", "gte_clang_5_0"]
-clang_6_0 = ["gte_clang_3_6", "gte_clang_3_7", "gte_clang_3_8", "gte_clang_3_9", "gte_clang_4_0", "gte_clang_5_0", "gte_clang_6_0"]
-clang_7_0 = ["gte_clang_3_6", "gte_clang_3_7", "gte_clang_3_8", "gte_clang_3_9", "gte_clang_4_0", "gte_clang_5_0", "gte_clang_6_0", "gte_clang_7_0"]
-clang_8_0 = ["gte_clang_3_6", "gte_clang_3_7", "gte_clang_3_8", "gte_clang_3_9", "gte_clang_4_0", "gte_clang_5_0", "gte_clang_6_0", "gte_clang_7_0", "gte_clang_8_0"]
-clang_9_0 = ["gte_clang_3_6", "gte_clang_3_7", "gte_clang_3_8", "gte_clang_3_9", "gte_clang_4_0", "gte_clang_5_0", "gte_clang_6_0", "gte_clang_7_0", "gte_clang_8_0", "gte_clang_9_0"]
-gte_clang_3_6 = []
-gte_clang_3_7 = []
-gte_clang_3_8 = []
-gte_clang_3_9 = []
-gte_clang_4_0 = []
-gte_clang_5_0 = []
-gte_clang_6_0 = []
-gte_clang_7_0 = []
-gte_clang_8_0 = []
-gte_clang_9_0 = []
+clang_3_6 = ["clang_3_5"]
+clang_3_7 = ["clang_3_6"]
+clang_3_8 = ["clang_3_7"]
+clang_3_9 = ["clang_3_8"]
+clang_4_0 = ["clang_3_9"]
+clang_5_0 = ["clang_4_0"]
+clang_6_0 = ["clang_5_0"]
+clang_7_0 = ["clang_6_0"]
+clang_8_0 = ["clang_7_0"]
+clang_9_0 = ["clang_8_0"]
 runtime = ["libloading"]
 static = []
diff --git a/Cargo.toml.orig b/Cargo.toml.orig
index 5a35957..42a2582 100644
--- a/Cargo.toml.orig
+++ b/Cargo.toml.orig
@@ -3,7 +3,7 @@
 name = "clang-sys"
 authors = ["Kyle Mayes <kyle@mayeses.com>"]
 
-version = "0.29.3"
+version = "1.0.0"
 
 readme = "README.md"
 license = "Apache-2.0"
@@ -19,27 +19,17 @@
 [features]
 
 clang_3_5 = []
-clang_3_6 = ["gte_clang_3_6"]
-clang_3_7 = ["gte_clang_3_6", "gte_clang_3_7"]
-clang_3_8 = ["gte_clang_3_6", "gte_clang_3_7", "gte_clang_3_8"]
-clang_3_9 = ["gte_clang_3_6", "gte_clang_3_7", "gte_clang_3_8", "gte_clang_3_9"]
-clang_4_0 = ["gte_clang_3_6", "gte_clang_3_7", "gte_clang_3_8", "gte_clang_3_9", "gte_clang_4_0"]
-clang_5_0 = ["gte_clang_3_6", "gte_clang_3_7", "gte_clang_3_8", "gte_clang_3_9", "gte_clang_4_0", "gte_clang_5_0"]
-clang_6_0 = ["gte_clang_3_6", "gte_clang_3_7", "gte_clang_3_8", "gte_clang_3_9", "gte_clang_4_0", "gte_clang_5_0", "gte_clang_6_0"]
-clang_7_0 = ["gte_clang_3_6", "gte_clang_3_7", "gte_clang_3_8", "gte_clang_3_9", "gte_clang_4_0", "gte_clang_5_0", "gte_clang_6_0", "gte_clang_7_0"]
-clang_8_0 = ["gte_clang_3_6", "gte_clang_3_7", "gte_clang_3_8", "gte_clang_3_9", "gte_clang_4_0", "gte_clang_5_0", "gte_clang_6_0", "gte_clang_7_0", "gte_clang_8_0"]
-clang_9_0 = ["gte_clang_3_6", "gte_clang_3_7", "gte_clang_3_8", "gte_clang_3_9", "gte_clang_4_0", "gte_clang_5_0", "gte_clang_6_0", "gte_clang_7_0", "gte_clang_8_0", "gte_clang_9_0"]
-
-gte_clang_3_6 = []
-gte_clang_3_7 = []
-gte_clang_3_8 = []
-gte_clang_3_9 = []
-gte_clang_4_0 = []
-gte_clang_5_0 = []
-gte_clang_6_0 = []
-gte_clang_7_0 = []
-gte_clang_8_0 = []
-gte_clang_9_0 = []
+clang_3_6 = ["clang_3_5"]
+clang_3_7 = ["clang_3_6"]
+clang_3_8 = ["clang_3_7"]
+clang_3_9 = ["clang_3_8"]
+clang_4_0 = ["clang_3_9"]
+clang_5_0 = ["clang_4_0"]
+clang_6_0 = ["clang_5_0"]
+clang_7_0 = ["clang_6_0"]
+clang_8_0 = ["clang_7_0"]
+clang_9_0 = ["clang_8_0"]
+clang_10_0 = ["clang_9_0"]
 
 runtime = ["libloading"]
 static = []
@@ -48,7 +38,7 @@
 
 glob = "0.3"
 libc = { version = "0.2.39", default-features = false }
-libloading = { version = "0.5", optional = true }
+libloading = { version = "0.6", optional = true }
 
 [build-dependencies]
 
@@ -56,4 +46,4 @@
 
 [package.metadata.docs.rs]
 
-features = ["clang_9_0", "runtime"]
+features = ["clang_10_0", "runtime"]
diff --git a/METADATA b/METADATA
index 77bae4d..ce5f991 100644
--- a/METADATA
+++ b/METADATA
@@ -9,11 +9,11 @@
     type: GIT
     value: "https://github.com/KyleMayes/clang-sys"
   }
-  version: "0.29.3"
+  version: "1.0.0"
   license_type: NOTICE
   last_upgrade_date {
     year: 2020
-    month: 3
-    day: 31
+    month: 7
+    day: 13
   }
 }
diff --git a/README.md b/README.md
index 2c9ba06..d7351f5 100644
--- a/README.md
+++ b/README.md
@@ -1,8 +1,8 @@
 # clang-sys
 
-[![crates.io](https://img.shields.io/crates/v/clang-sys.svg)](https://crates.io/crates/clang-sys)
-[![Travis CI](https://travis-ci.org/KyleMayes/clang-sys.svg?branch=master)](https://travis-ci.org/KyleMayes/clang-sys)
-[![AppVeyor](https://ci.appveyor.com/api/projects/status/7tv5mjyg55rof356/branch/master?svg=true)](https://ci.appveyor.com/project/KyleMayes/clang-sys-vtvy5/branch/master)
+![Crate](https://img.shields.io/crates/v/clang-sys.svg)
+![Documentation](https://docs.rs/clang-sys/badge.svg)
+![CI](https://github.com/KyleMayes/clang-sys/workflows/CI/badge.svg?branch=master)
 
 Rust bindings for `libclang`.
 
@@ -44,6 +44,7 @@
 * `clang_7_0` - requires `libclang` 7.0 or later
 * `clang_8_0` - requires `libclang` 8.0 or later
 * `clang_9_0` - requires `libclang` 9.0 or later
+* `clang_10_0` - requires `libclang` 10.0 or later
 
 If you do not enable one of these features, the API provided by `libclang` 3.5 will be available by
 default.
diff --git a/appveyor.yml b/appveyor.yml
deleted file mode 100644
index 060cf73..0000000
--- a/appveyor.yml
+++ /dev/null
@@ -1,12 +0,0 @@
-environment:
-  matrix:
-    - LLVM_VERSION: 7.0.0
-      CLANG_VERSION: clang_7_0
-
-install:
-  - .\ci\install.bat
-
-build: false
-
-test_script:
-  - .\ci\test_script.bat
diff --git a/build/common.rs b/build/common.rs
index 958ef9b..434bd46 100644
--- a/build/common.rs
+++ b/build/common.rs
@@ -14,6 +14,8 @@
 
 extern crate glob;
 
+use std::cell::RefCell;
+use std::collections::HashMap;
 use std::env;
 use std::path::{Path, PathBuf};
 use std::process::Command;
@@ -46,30 +48,38 @@
     "C:\\MSYS*\\MinGW*\\lib",
 ];
 
+thread_local! {
+    /// The errors encountered when attempting to execute console commands.
+    static COMMAND_ERRORS: RefCell<HashMap<String, Vec<String>>> = RefCell::default();
+}
+
 /// Executes the supplied console command, returning the `stdout` output if the
 /// command was successfully executed.
-fn run_command(command: &str, arguments: &[&str]) -> Option<String> {
-    macro_rules! warn {
-        ($error:expr) => {
-            println!(
-                "cargo:warning=couldn't execute `{} {}` ({})",
-                command,
-                arguments.join(" "),
-                $error,
-            );
-        };
+fn run_command(name: &str, command: &str, arguments: &[&str]) -> Option<String> {
+    macro_rules! error {
+        ($error:expr) => {{
+            COMMAND_ERRORS.with(|e| e.borrow_mut()
+                .entry(name.into())
+                .or_insert_with(Vec::new)
+                .push(format!(
+                    "couldn't execute `{} {}` ({})",
+                    command,
+                    arguments.join(" "),
+                    $error,
+                )));
+        }};
     }
 
     let output = match Command::new(command).args(arguments).output() {
         Ok(output) => output,
         Err(error) => {
-            warn!(format!("error: {}", error));
+            error!(format!("error: {}", error));
             return None;
         }
     };
 
     if !output.status.success() {
-        warn!(format!("exit code: {}", output.status));
+        error!(format!("exit code: {}", output.status));
         return None;
     }
 
@@ -80,17 +90,50 @@
 /// successfully executed.
 pub fn run_llvm_config(arguments: &[&str]) -> Option<String> {
     let path = env::var("LLVM_CONFIG_PATH").unwrap_or_else(|_| "llvm-config".into());
+    run_command("llvm-config", &path, arguments)
+}
 
-    let output = run_command(&path, arguments);
-    if output.is_none() {
-        println!(
-            "cargo:warning=set the LLVM_CONFIG_PATH environment variable to \
-            the full path to a valid `llvm-config` executable (including the \
-            executable itself)"
-        );
+/// A struct that prints errors encountered when attempting to execute console
+/// commands on drop if not discarded.
+#[derive(Default)]
+pub struct CommandErrorPrinter {
+    discard: bool
+}
+
+impl CommandErrorPrinter {
+    pub fn discard(mut self) {
+        self.discard = true;
     }
+}
 
-    output
+impl Drop for CommandErrorPrinter {
+    fn drop(&mut self) {
+        if self.discard {
+            return;
+        }
+
+        let errors = COMMAND_ERRORS.with(|e| e.borrow().clone());
+
+        if let Some(errors) = errors.get("llvm-config") {
+            println!(
+                "cargo:warning=could not execute `llvm-config` one or more \
+                times, if the LLVM_CONFIG_PATH environment variable is set to \
+                a full path to valid `llvm-config` executable it will be used \
+                to try to find an instance of `libclang` on your system: {}",
+                errors.iter().map(|e| format!("\"{}\"", e)).collect::<Vec<_>>().join("\n  "),
+            )
+        }
+
+        if let Some(errors) = errors.get("xcode-select") {
+            println!(
+                "cargo:warning=could not execute `xcode-select` one or more \
+                times, if a valid instance of this executable is on your PATH \
+                it will be used to try to find an instance of `libclang` on \
+                your system: {}",
+                errors.iter().map(|e| format!("\"{}\"", e)).collect::<Vec<_>>().join("\n  "),
+            )
+        }
+    }
 }
 
 /// Returns the paths to and the filenames of the files matching the supplied
@@ -179,7 +222,7 @@
     // Search the toolchain directory in the directory provided by
     // `xcode-select --print-path`.
     if cfg!(target_os = "macos") {
-        if let Some(output) = run_command("xcode-select", &["--print-path"]) {
+        if let Some(output) = run_command("xcode-select", "xcode-select", &["--print-path"]) {
             let directory = Path::new(output.lines().next().unwrap()).to_path_buf();
             let directory = directory.join("Toolchains/XcodeDefault.xctoolchain/usr/lib");
             found.extend(search_directories(&directory, files));
diff --git a/build/dynamic.rs b/build/dynamic.rs
index 2054ba0..8a9e5d3 100644
--- a/build/dynamic.rs
+++ b/build/dynamic.rs
@@ -190,6 +190,8 @@
 /// Find and link to `libclang` dynamically.
 #[cfg(not(feature = "runtime"))]
 pub fn link() {
+    let cep = common::CommandErrorPrinter::default();
+
     use std::fs;
 
     let (directory, filename) = find(false).unwrap();
@@ -241,4 +243,6 @@
 
         println!("cargo:rustc-link-lib=dylib={}", name);
     }
+
+    cep.discard();
 }
diff --git a/build/static.rs b/build/static.rs
index bacd4ad..83a8185 100644
--- a/build/static.rs
+++ b/build/static.rs
@@ -90,7 +90,7 @@
     };
 
     let files = common::search_libclang_directories(&[name.into()], "LIBCLANG_STATIC_PATH");
-    if let Some((directory, _)) = files.into_iter().nth(0) {
+    if let Some((directory, _)) = files.into_iter().next() {
         directory
     } else {
         panic!("could not find any static libraries");
@@ -99,6 +99,8 @@
 
 /// Find and link to `libclang` statically.
 pub fn link() {
+    let cep = common::CommandErrorPrinter::default();
+
     let directory = find();
 
     // Specify required Clang static libraries.
@@ -133,4 +135,6 @@
     } else if cfg!(target_os = "macos") {
         println!("cargo:rustc-flags=-l ffi -l ncurses -l c++ -l z");
     }
+
+    cep.discard();
 }
diff --git a/ci/before_install.sh b/ci/before_install.sh
deleted file mode 100644
index a0de565..0000000
--- a/ci/before_install.sh
+++ /dev/null
@@ -1,57 +0,0 @@
-set -e
-pushd ~
-
-# Workaround for Travis CI macOS bug (https://github.com/travis-ci/travis-ci/issues/6307)
-if [ "${TRAVIS_OS_NAME}" == "osx" ]; then
-    rvm get head || true
-fi
-
-function llvm_version_triple() {
-    if [ "$1" == "3.5" ]; then
-        echo "3.5.2"
-    elif [ "$1" == "3.6" ]; then
-        echo "3.6.2"
-    elif [ "$1" == "3.7" ]; then
-        echo "3.7.1"
-    elif [ "$1" == "3.8" ]; then
-        echo "3.8.1"
-    elif [ "$1" == "3.9" ]; then
-        echo "3.9.0"
-    elif [ "$1" == "4.0" ]; then
-        echo "4.0.1"
-    elif [ "$1" == "5.0" ]; then
-        echo "5.0.2"
-    elif [ "$1" == "6.0" ]; then
-        echo "6.0.1"
-    elif [ "$1" == "7.0" ]; then
-        echo "7.0.0"
-    fi
-}
-
-function llvm_download() {
-    export LLVM_VERSION_TRIPLE=`llvm_version_triple ${LLVM_VERSION}`
-    export LLVM=clang+llvm-${LLVM_VERSION_TRIPLE}-$1
-    export LLVM_DIRECTORY="$HOME/.llvm/${LLVM}"
-
-    if [ -d "${LLVM_DIRECTORY}" ]; then
-        echo "Using cached LLVM download for ${LLVM}..."
-    else
-        wget http://releases.llvm.org/${LLVM_VERSION_TRIPLE}/${LLVM}.tar.xz
-        mkdir -p "${LLVM_DIRECTORY}"
-        tar xf ${LLVM}.tar.xz -C "${LLVM_DIRECTORY}" --strip-components=1
-    fi
-
-    export LLVM_CONFIG_PATH="${LLVM_DIRECTORY}/bin/llvm-config"
-}
-
-if [ "${TRAVIS_OS_NAME}" == "linux" ]; then
-    llvm_download x86_64-linux-gnu-ubuntu-14.04
-    export LD_LIBRARY_PATH="${LLVM_DIRECTORY}/lib":$LD_LIBRARY_PATH
-else
-    llvm_download x86_64-apple-darwin
-    cp "${LLVM_DIRECTORY}/lib/libclang.dylib" /usr/local/lib/libclang.dylib
-    export DYLD_LIBRARY_PATH="${LLVM_DIRECTORY}/lib":$DYLD_LIBRARY_PATH
-fi
-
-popd
-set +e
diff --git a/ci/install.bat b/ci/install.bat
deleted file mode 100644
index a3d54df..0000000
--- a/ci/install.bat
+++ /dev/null
@@ -1,8 +0,0 @@
-curl -sSf https://static.rust-lang.org/dist/rust-1.36.0-i686-pc-windows-msvc.exe -o rust.exe
-rust.exe /VERYSILENT /NORESTART /DIR="C:\Rust"
-set PATH=%PATH%;C:\Rust\bin
-
-curl -sSf http://releases.llvm.org/%LLVM_VERSION%/LLVM-%LLVM_VERSION%-win32.exe -o LLVM.exe
-7z x LLVM.exe -oC:\LLVM
-set PATH=%PATH%;C:\LLVM\bin
-set LIBCLANG_PATH=C:\LLVM\bin
diff --git a/ci/script.sh b/ci/script.sh
deleted file mode 100644
index 47ca439..0000000
--- a/ci/script.sh
+++ /dev/null
@@ -1,13 +0,0 @@
-if [ "${TRAVIS_OS_NAME}" == "osx" ]; then
-    rvm get head || true
-fi
-
-set -e
-
-RUST_BACKTRACE=1 cargo test --verbose --features $CLANG_VERSION -- --nocapture
-
-if [ "${CLANG_VERSION}" \< "clang_3_7" ]; then
-    RUST_BACKTRACE=1 cargo test --verbose --features "$CLANG_VERSION static" -- --nocapture
-fi
-
-RUST_BACKTRACE=1 cargo test --verbose --features "$CLANG_VERSION runtime" -- --nocapture
diff --git a/ci/test_script.bat b/ci/test_script.bat
deleted file mode 100644
index 2928409..0000000
--- a/ci/test_script.bat
+++ /dev/null
@@ -1,2 +0,0 @@
-set RUST_BACKTRACE=1
-cargo test --verbose --features %CLANG_VERSION% -- --nocapture
diff --git a/docs.py b/docs.py
index e1d6d9c..554022a 100644
--- a/docs.py
+++ b/docs.py
@@ -5,7 +5,7 @@
 import subprocess
 
 TARGET = ".docs"
-VERSION = "clang_9_0"
+VERSION = "clang_10_0"
 
 if os.path.isdir(TARGET):
     shutil.rmtree(TARGET)
diff --git a/out/common.rs b/out/common.rs
index 958ef9b..434bd46 100644
--- a/out/common.rs
+++ b/out/common.rs
@@ -14,6 +14,8 @@
 
 extern crate glob;
 
+use std::cell::RefCell;
+use std::collections::HashMap;
 use std::env;
 use std::path::{Path, PathBuf};
 use std::process::Command;
@@ -46,30 +48,38 @@
     "C:\\MSYS*\\MinGW*\\lib",
 ];
 
+thread_local! {
+    /// The errors encountered when attempting to execute console commands.
+    static COMMAND_ERRORS: RefCell<HashMap<String, Vec<String>>> = RefCell::default();
+}
+
 /// Executes the supplied console command, returning the `stdout` output if the
 /// command was successfully executed.
-fn run_command(command: &str, arguments: &[&str]) -> Option<String> {
-    macro_rules! warn {
-        ($error:expr) => {
-            println!(
-                "cargo:warning=couldn't execute `{} {}` ({})",
-                command,
-                arguments.join(" "),
-                $error,
-            );
-        };
+fn run_command(name: &str, command: &str, arguments: &[&str]) -> Option<String> {
+    macro_rules! error {
+        ($error:expr) => {{
+            COMMAND_ERRORS.with(|e| e.borrow_mut()
+                .entry(name.into())
+                .or_insert_with(Vec::new)
+                .push(format!(
+                    "couldn't execute `{} {}` ({})",
+                    command,
+                    arguments.join(" "),
+                    $error,
+                )));
+        }};
     }
 
     let output = match Command::new(command).args(arguments).output() {
         Ok(output) => output,
         Err(error) => {
-            warn!(format!("error: {}", error));
+            error!(format!("error: {}", error));
             return None;
         }
     };
 
     if !output.status.success() {
-        warn!(format!("exit code: {}", output.status));
+        error!(format!("exit code: {}", output.status));
         return None;
     }
 
@@ -80,17 +90,50 @@
 /// successfully executed.
 pub fn run_llvm_config(arguments: &[&str]) -> Option<String> {
     let path = env::var("LLVM_CONFIG_PATH").unwrap_or_else(|_| "llvm-config".into());
+    run_command("llvm-config", &path, arguments)
+}
 
-    let output = run_command(&path, arguments);
-    if output.is_none() {
-        println!(
-            "cargo:warning=set the LLVM_CONFIG_PATH environment variable to \
-            the full path to a valid `llvm-config` executable (including the \
-            executable itself)"
-        );
+/// A struct that prints errors encountered when attempting to execute console
+/// commands on drop if not discarded.
+#[derive(Default)]
+pub struct CommandErrorPrinter {
+    discard: bool
+}
+
+impl CommandErrorPrinter {
+    pub fn discard(mut self) {
+        self.discard = true;
     }
+}
 
-    output
+impl Drop for CommandErrorPrinter {
+    fn drop(&mut self) {
+        if self.discard {
+            return;
+        }
+
+        let errors = COMMAND_ERRORS.with(|e| e.borrow().clone());
+
+        if let Some(errors) = errors.get("llvm-config") {
+            println!(
+                "cargo:warning=could not execute `llvm-config` one or more \
+                times, if the LLVM_CONFIG_PATH environment variable is set to \
+                a full path to valid `llvm-config` executable it will be used \
+                to try to find an instance of `libclang` on your system: {}",
+                errors.iter().map(|e| format!("\"{}\"", e)).collect::<Vec<_>>().join("\n  "),
+            )
+        }
+
+        if let Some(errors) = errors.get("xcode-select") {
+            println!(
+                "cargo:warning=could not execute `xcode-select` one or more \
+                times, if a valid instance of this executable is on your PATH \
+                it will be used to try to find an instance of `libclang` on \
+                your system: {}",
+                errors.iter().map(|e| format!("\"{}\"", e)).collect::<Vec<_>>().join("\n  "),
+            )
+        }
+    }
 }
 
 /// Returns the paths to and the filenames of the files matching the supplied
@@ -179,7 +222,7 @@
     // Search the toolchain directory in the directory provided by
     // `xcode-select --print-path`.
     if cfg!(target_os = "macos") {
-        if let Some(output) = run_command("xcode-select", &["--print-path"]) {
+        if let Some(output) = run_command("xcode-select", "xcode-select", &["--print-path"]) {
             let directory = Path::new(output.lines().next().unwrap()).to_path_buf();
             let directory = directory.join("Toolchains/XcodeDefault.xctoolchain/usr/lib");
             found.extend(search_directories(&directory, files));
diff --git a/out/dynamic.rs b/out/dynamic.rs
index 2054ba0..8a9e5d3 100644
--- a/out/dynamic.rs
+++ b/out/dynamic.rs
@@ -190,6 +190,8 @@
 /// Find and link to `libclang` dynamically.
 #[cfg(not(feature = "runtime"))]
 pub fn link() {
+    let cep = common::CommandErrorPrinter::default();
+
     use std::fs;
 
     let (directory, filename) = find(false).unwrap();
@@ -241,4 +243,6 @@
 
         println!("cargo:rustc-link-lib=dylib={}", name);
     }
+
+    cep.discard();
 }
diff --git a/src/lib.rs b/src/lib.rs
index e4367b0..ea2ffc2 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -48,7 +48,7 @@
 
 pub type CXClientData = *mut c_void;
 pub type CXCursorVisitor = extern "C" fn(CXCursor, CXCursor, CXClientData) -> CXChildVisitResult;
-#[cfg(feature = "gte_clang_3_7")]
+#[cfg(feature = "clang_3_7")]
 pub type CXFieldVisitor = extern "C" fn(CXCursor, CXClientData) -> CXVisitorResult;
 pub type CXInclusionVisitor = extern "C" fn(CXFile, *mut CXSourceLocation, c_uint, CXClientData);
 
@@ -438,6 +438,16 @@
         const CXCursor_OMPTargetTeamsDistributeSimdDirective = 279,
         /// Only produced by 'libclang' 9.0 and later.
         const CXCursor_BuiltinBitCastExpr = 280,
+        /// Only produced by `libclang` 10.0 and later.
+        const CXCursor_OMPMasterTaskLoopDirective = 281,
+        /// Only produced by `libclang` 10.0 and later.
+        const CXCursor_OMPParallelMasterTaskLoopDirective = 282,
+        /// Only produced by `libclang` 10.0 and later.
+        const CXCursor_OMPMasterTaskLoopSimdDirective = 283,
+        /// Only produced by `libclang` 10.0 and later.
+        const CXCursor_OMPParallelMasterTaskLoopSimdDirective = 284,
+        /// Only produced by `libclang` 10.0 and later.
+        const CXCursor_OMPParallelMasterDirective = 285,
         const CXCursor_TranslationUnit = 300,
         const CXCursor_UnexposedAttr = 400,
         const CXCursor_IBActionAttr = 401,
@@ -526,7 +536,7 @@
 
 cenum! {
     /// Only available on `libclang` 5.0 and later.
-    #[cfg(feature = "gte_clang_5_0")]
+    #[cfg(feature = "clang_5_0")]
     enum CXCursor_ExceptionSpecificationKind {
         const CXCursor_ExceptionSpecificationKind_None = 0,
         const CXCursor_ExceptionSpecificationKind_DynamicNone = 1,
@@ -538,7 +548,7 @@
         const CXCursor_ExceptionSpecificationKind_Uninstantiated = 7,
         const CXCursor_ExceptionSpecificationKind_Unparsed = 8,
         /// Only available on `libclang` 9.0 and later.
-        #[cfg(feature = "gte_clang_9_0")]
+        #[cfg(feature = "clang_9_0")]
         const CXCursor_ExceptionSpecificationKind_NoThrow = 9,
     }
 }
@@ -681,7 +691,7 @@
 
 cenum! {
     /// Only available on `libclang` 7.0 and later.
-    #[cfg(feature = "gte_clang_7_0")]
+    #[cfg(feature = "clang_7_0")]
     enum CXPrintingPolicyProperty {
         const CXPrintingPolicy_Indentation = 0,
         const CXPrintingPolicy_SuppressSpecifiers = 1,
@@ -739,7 +749,7 @@
 
 cenum! {
     /// Only available on `libclang` 6.0 and later.
-    #[cfg(feature = "gte_clang_6_0")]
+    #[cfg(feature = "clang_6_0")]
     enum CXTLSKind {
         const CXTLS_None = 0,
         const CXTLS_Dynamic = 1,
@@ -768,7 +778,7 @@
 
 cenum! {
     /// Only available on `libclang` 3.6 and later.
-    #[cfg(feature = "gte_clang_3_6")]
+    #[cfg(feature = "clang_3_6")]
     enum CXTemplateArgumentKind {
         const CXTemplateArgumentKind_Null = 0,
         const CXTemplateArgumentKind_Type = 1,
@@ -996,7 +1006,7 @@
 
 cenum! {
     /// Only available on `libclang` 3.8 and later.
-    #[cfg(feature = "gte_clang_3_8")]
+    #[cfg(feature = "clang_3_8")]
     enum CXVisibilityKind {
         const CXVisibility_Invalid = 0,
         const CXVisibility_Hidden = 1,
@@ -1007,7 +1017,7 @@
 
 cenum! {
     /// Only available on `libclang` 8.0 and later.
-    #[cfg(feature = "gte_clang_8_0")]
+    #[cfg(feature = "clang_8_0")]
     enum CXTypeNullabilityKind {
         const CXTypeNullability_NonNull = 0,
         const CXTypeNullability_Nullable = 1,
@@ -1034,7 +1044,7 @@
 
 cenum! {
     /// Only available on `libclang` 3.6 and later.
-    #[cfg(feature = "gte_clang_3_6")]
+    #[cfg(feature = "clang_3_6")]
     enum CX_StorageClass {
         const CX_SC_Invalid = 0,
         const CX_SC_None = 1,
@@ -1164,7 +1174,7 @@
         const CXObjCPropertyAttr_strong = 1024;
         const CXObjCPropertyAttr_unsafe_unretained = 2048;
         /// Only available on `libclang` 3.9 and later.
-        #[cfg(feature = "gte_clang_3_9")]
+        #[cfg(feature = "clang_3_9")]
         const CXObjCPropertyAttr_class = 4096;
     }
 }
@@ -1183,7 +1193,7 @@
 
 cenum! {
     /// Only available on `libclang` 7.0 and later.
-    #[cfg(feature = "gte_clang_7_0")]
+    #[cfg(feature = "clang_7_0")]
     enum CXSymbolRole {
         const CXSymbolRole_None = 0;
         const CXSymbolRole_Declaration = 1;
@@ -1210,26 +1220,29 @@
         const CXTranslationUnit_SkipFunctionBodies = 64;
         const CXTranslationUnit_IncludeBriefCommentsInCodeCompletion = 128;
         /// Only available on `libclang` 3.8 and later.
-        #[cfg(feature = "gte_clang_3_8")]
+        #[cfg(feature = "clang_3_8")]
         const CXTranslationUnit_CreatePreambleOnFirstParse = 256;
         /// Only available on `libclang` 3.9 and later.
-        #[cfg(feature = "gte_clang_3_9")]
+        #[cfg(feature = "clang_3_9")]
         const CXTranslationUnit_KeepGoing = 512;
         /// Only available on `libclang` 5.0 and later.
-        #[cfg(feature = "gte_clang_5_0")]
+        #[cfg(feature = "clang_5_0")]
         const CXTranslationUnit_SingleFileParse = 1024;
         /// Only available on `libclang` 7.0 and later.
-        #[cfg(feature = "gte_clang_7_0")]
+        #[cfg(feature = "clang_7_0")]
         const CXTranslationUnit_LimitSkipFunctionBodiesToPreamble = 2048;
         /// Only available on `libclang` 8.0 and later.
-        #[cfg(feature = "gte_clang_8_0")]
+        #[cfg(feature = "clang_8_0")]
         const CXTranslationUnit_IncludeAttributedTypes = 4096;
         /// Only available on `libclang` 8.0 and later.
-        #[cfg(feature = "gte_clang_8_0")]
+        #[cfg(feature = "clang_8_0")]
         const CXTranslationUnit_VisitImplicitAttributes = 8192;
         /// Only available on `libclang` 9.0 and later.
-        #[cfg(feature = "gte_clang_9_0")]
+        #[cfg(feature = "clang_9_0")]
         const CXTranslationUnit_IgnoreNonErrorsFromIncludedFiles = 16384;
+        /// Only available on `libclang` 10.0 and later.
+        #[cfg(feature = "clang_10_0")]
+        const CXTranslationUnit_RetainExcludedConditionalBlocks = 32768;
     }
 }
 
@@ -1252,7 +1265,7 @@
 opaque!(CXCursorSet);
 opaque!(CXDiagnostic);
 opaque!(CXDiagnosticSet);
-#[cfg(feature = "gte_clang_3_9")]
+#[cfg(feature = "clang_3_9")]
 opaque!(CXEvalResult);
 opaque!(CXFile);
 opaque!(CXIdxClientASTFile);
@@ -1262,10 +1275,10 @@
 opaque!(CXIndex);
 opaque!(CXIndexAction);
 opaque!(CXModule);
-#[cfg(feature = "gte_clang_7_0")]
+#[cfg(feature = "clang_7_0")]
 opaque!(CXPrintingPolicy);
 opaque!(CXRemapping);
-#[cfg(feature = "gte_clang_5_0")]
+#[cfg(feature = "clang_5_0")]
 opaque!(CXTargetInfo);
 opaque!(CXTranslationUnit);
 
@@ -1408,7 +1421,7 @@
     pub parentEntity: *const CXIdxEntityInfo,
     pub container: *const CXIdxContainerInfo,
     /// Only available on `libclang` 7.0 and later.
-    #[cfg(feature = "gte_clang_7_0")]
+    #[cfg(feature = "clang_7_0")]
     pub role: CXSymbolRole,
 }
 
@@ -1568,7 +1581,7 @@
 
 default!(CXString);
 
-#[cfg(feature = "gte_clang_3_8")]
+#[cfg(feature = "clang_3_8")]
 #[derive(Copy, Clone, Debug)]
 #[repr(C)]
 pub struct CXStringSet {
@@ -1576,7 +1589,7 @@
     pub Count: c_uint,
 }
 
-#[cfg(feature = "gte_clang_3_8")]
+#[cfg(feature = "clang_3_8")]
 default!(CXStringSet);
 
 #[derive(Copy, Clone, Debug)]
@@ -1662,32 +1675,32 @@
     pub fn clang_CXIndex_getGlobalOptions(index: CXIndex) -> CXGlobalOptFlags;
     pub fn clang_CXIndex_setGlobalOptions(index: CXIndex, flags: CXGlobalOptFlags);
     /// Only available on `libclang` 6.0 and later.
-    #[cfg(feature = "gte_clang_6_0")]
+    #[cfg(feature = "clang_6_0")]
     pub fn clang_CXIndex_setInvocationEmissionPathOption(index: CXIndex, path: *const c_char);
     /// Only available on `libclang` 3.9 and later.
-    #[cfg(feature = "gte_clang_3_9")]
+    #[cfg(feature = "clang_3_9")]
     pub fn clang_CXXConstructor_isConvertingConstructor(cursor: CXCursor) -> c_uint;
     /// Only available on `libclang` 3.9 and later.
-    #[cfg(feature = "gte_clang_3_9")]
+    #[cfg(feature = "clang_3_9")]
     pub fn clang_CXXConstructor_isCopyConstructor(cursor: CXCursor) -> c_uint;
     /// Only available on `libclang` 3.9 and later.
-    #[cfg(feature = "gte_clang_3_9")]
+    #[cfg(feature = "clang_3_9")]
     pub fn clang_CXXConstructor_isDefaultConstructor(cursor: CXCursor) -> c_uint;
     /// Only available on `libclang` 3.9 and later.
-    #[cfg(feature = "gte_clang_3_9")]
+    #[cfg(feature = "clang_3_9")]
     pub fn clang_CXXConstructor_isMoveConstructor(cursor: CXCursor) -> c_uint;
     /// Only available on `libclang` 3.8 and later.
-    #[cfg(feature = "gte_clang_3_8")]
+    #[cfg(feature = "clang_3_8")]
     pub fn clang_CXXField_isMutable(cursor: CXCursor) -> c_uint;
     pub fn clang_CXXMethod_isConst(cursor: CXCursor) -> c_uint;
     /// Only available on `libclang` 3.9 and later.
-    #[cfg(feature = "gte_clang_3_9")]
+    #[cfg(feature = "clang_3_9")]
     pub fn clang_CXXMethod_isDefaulted(cursor: CXCursor) -> c_uint;
     pub fn clang_CXXMethod_isPureVirtual(cursor: CXCursor) -> c_uint;
     pub fn clang_CXXMethod_isStatic(cursor: CXCursor) -> c_uint;
     pub fn clang_CXXMethod_isVirtual(cursor: CXCursor) -> c_uint;
     /// Only available on `libclang` 6.0 and later.
-    #[cfg(feature = "gte_clang_6_0")]
+    #[cfg(feature = "clang_6_0")]
     pub fn clang_CXXRecord_isAbstract(cursor: CXCursor) -> c_uint;
     pub fn clang_CompilationDatabase_dispose(database: CXCompilationDatabase);
     pub fn clang_CompilationDatabase_fromDirectory(directory: *const c_char, error: *mut CXCompilationDatabase_Error) -> CXCompilationDatabase;
@@ -1696,13 +1709,13 @@
     pub fn clang_CompileCommand_getArg(command: CXCompileCommand, index: c_uint) -> CXString;
     pub fn clang_CompileCommand_getDirectory(command: CXCompileCommand) -> CXString;
     /// Only available on `libclang` 3.8 and later.
-    #[cfg(feature = "gte_clang_3_8")]
+    #[cfg(feature = "clang_3_8")]
     pub fn clang_CompileCommand_getFilename(command: CXCompileCommand) -> CXString;
     /// Only available on `libclang` 3.8 and later.
-    #[cfg(feature = "gte_clang_3_8")]
+    #[cfg(feature = "clang_3_8")]
     pub fn clang_CompileCommand_getMappedSourceContent(command: CXCompileCommand, index: c_uint) -> CXString;
     /// Only available on `libclang` 3.8 and later.
-    #[cfg(feature = "gte_clang_3_8")]
+    #[cfg(feature = "clang_3_8")]
     pub fn clang_CompileCommand_getMappedSourcePath(command: CXCompileCommand, index: c_uint) -> CXString;
     pub fn clang_CompileCommand_getNumArgs(command: CXCompileCommand) -> c_uint;
     pub fn clang_CompileCommand_getNumMappedSources(command: CXCompileCommand) -> c_uint;
@@ -1710,117 +1723,117 @@
     pub fn clang_CompileCommands_getCommand(command: CXCompileCommands, index: c_uint) -> CXCompileCommand;
     pub fn clang_CompileCommands_getSize(command: CXCompileCommands) -> c_uint;
     /// Only available on `libclang` 3.9 and later.
-    #[cfg(feature = "gte_clang_3_9")]
+    #[cfg(feature = "clang_3_9")]
     pub fn clang_Cursor_Evaluate(cursor: CXCursor) -> CXEvalResult;
     pub fn clang_Cursor_getArgument(cursor: CXCursor, index: c_uint) -> CXCursor;
     pub fn clang_Cursor_getBriefCommentText(cursor: CXCursor) -> CXString;
     /// Only available on `libclang` 3.8 and later.
-    #[cfg(feature = "gte_clang_3_8")]
+    #[cfg(feature = "clang_3_8")]
     pub fn clang_Cursor_getCXXManglings(cursor: CXCursor) -> *mut CXStringSet;
     pub fn clang_Cursor_getCommentRange(cursor: CXCursor) -> CXSourceRange;
     /// Only available on `libclang` 3.6 and later.
-    #[cfg(feature = "gte_clang_3_6")]
+    #[cfg(feature = "clang_3_6")]
     pub fn clang_Cursor_getMangling(cursor: CXCursor) -> CXString;
     pub fn clang_Cursor_getModule(cursor: CXCursor) -> CXModule;
     pub fn clang_Cursor_getNumArguments(cursor: CXCursor) -> c_int;
     /// Only available on `libclang` 3.6 and later.
-    #[cfg(feature = "gte_clang_3_6")]
+    #[cfg(feature = "clang_3_6")]
     pub fn clang_Cursor_getNumTemplateArguments(cursor: CXCursor) -> c_int;
     pub fn clang_Cursor_getObjCDeclQualifiers(cursor: CXCursor) -> CXObjCDeclQualifierKind;
     /// Only available on `libclang` 6.0 and later.
-    #[cfg(feature = "gte_clang_6_0")]
+    #[cfg(feature = "clang_6_0")]
     pub fn clang_Cursor_getObjCManglings(cursor: CXCursor) -> *mut CXStringSet;
     pub fn clang_Cursor_getObjCPropertyAttributes(cursor: CXCursor, reserved: c_uint) -> CXObjCPropertyAttrKind;
     /// Only available on `libclang` 8.0 and later.
-    #[cfg(feature = "gte_clang_8_0")]
+    #[cfg(feature = "clang_8_0")]
     pub fn clang_Cursor_getObjCPropertyGetterName(cursor: CXCursor) -> CXString;
     /// Only available on `libclang` 8.0 and later.
-    #[cfg(feature = "gte_clang_8_0")]
+    #[cfg(feature = "clang_8_0")]
     pub fn clang_Cursor_getObjCPropertySetterName(cursor: CXCursor) -> CXString;
     pub fn clang_Cursor_getObjCSelectorIndex(cursor: CXCursor) -> c_int;
     /// Only available on `libclang` 3.7 and later.
-    #[cfg(feature = "gte_clang_3_7")]
+    #[cfg(feature = "clang_3_7")]
     pub fn clang_Cursor_getOffsetOfField(cursor: CXCursor) -> c_longlong;
     /// Only available on `libclang` 9.0 and later.
-    #[cfg(feature = "gte_clang_9_0")]
+    #[cfg(feature = "clang_9_0")]
     pub fn clang_Cursor_isAnonymousRecordDecl(cursor: CXCursor) -> c_uint;
     /// Only available on `libclang` 9.0 and later.
-    #[cfg(feature = "gte_clang_9_0")]
+    #[cfg(feature = "clang_9_0")]
     pub fn clang_Cursor_isInlineNamespace(cursor: CXCursor) -> c_uint;
     pub fn clang_Cursor_getRawCommentText(cursor: CXCursor) -> CXString;
     pub fn clang_Cursor_getReceiverType(cursor: CXCursor) -> CXType;
     pub fn clang_Cursor_getSpellingNameRange(cursor: CXCursor, index: c_uint, reserved: c_uint) -> CXSourceRange;
     /// Only available on `libclang` 3.6 and later.
-    #[cfg(feature = "gte_clang_3_6")]
+    #[cfg(feature = "clang_3_6")]
     pub fn clang_Cursor_getStorageClass(cursor: CXCursor) -> CX_StorageClass;
     /// Only available on `libclang` 3.6 and later.
-    #[cfg(feature = "gte_clang_3_6")]
+    #[cfg(feature = "clang_3_6")]
     pub fn clang_Cursor_getTemplateArgumentKind(cursor: CXCursor, index: c_uint) -> CXTemplateArgumentKind;
     /// Only available on `libclang` 3.6 and later.
-    #[cfg(feature = "gte_clang_3_6")]
+    #[cfg(feature = "clang_3_6")]
     pub fn clang_Cursor_getTemplateArgumentType(cursor: CXCursor, index: c_uint) -> CXType;
     /// Only available on `libclang` 3.6 and later.
-    #[cfg(feature = "gte_clang_3_6")]
+    #[cfg(feature = "clang_3_6")]
     pub fn clang_Cursor_getTemplateArgumentUnsignedValue(cursor: CXCursor, index: c_uint) -> c_ulonglong;
     /// Only available on `libclang` 3.6 and later.
-    #[cfg(feature = "gte_clang_3_6")]
+    #[cfg(feature = "clang_3_6")]
     pub fn clang_Cursor_getTemplateArgumentValue(cursor: CXCursor, index: c_uint) -> c_longlong;
     pub fn clang_Cursor_getTranslationUnit(cursor: CXCursor) -> CXTranslationUnit;
     /// Only available on `libclang` 3.9 and later.
-    #[cfg(feature = "gte_clang_3_9")]
+    #[cfg(feature = "clang_3_9")]
     pub fn clang_Cursor_hasAttrs(cursor: CXCursor) -> c_uint;
     /// Only available on `libclang` 3.7 and later.
-    #[cfg(feature = "gte_clang_3_7")]
+    #[cfg(feature = "clang_3_7")]
     pub fn clang_Cursor_isAnonymous(cursor: CXCursor) -> c_uint;
     pub fn clang_Cursor_isBitField(cursor: CXCursor) -> c_uint;
     pub fn clang_Cursor_isDynamicCall(cursor: CXCursor) -> c_int;
     /// Only available on `libclang` 5.0 and later.
-    #[cfg(feature = "gte_clang_5_0")]
+    #[cfg(feature = "clang_5_0")]
     pub fn clang_Cursor_isExternalSymbol(cursor: CXCursor, language: *mut CXString, from: *mut CXString, generated: *mut c_uint) -> c_uint;
     /// Only available on `libclang` 3.9 and later.
-    #[cfg(feature = "gte_clang_3_9")]
+    #[cfg(feature = "clang_3_9")]
     pub fn clang_Cursor_isFunctionInlined(cursor: CXCursor) -> c_uint;
     /// Only available on `libclang` 3.9 and later.
-    #[cfg(feature = "gte_clang_3_9")]
+    #[cfg(feature = "clang_3_9")]
     pub fn clang_Cursor_isMacroBuiltin(cursor: CXCursor) -> c_uint;
     /// Only available on `libclang` 3.9 and later.
-    #[cfg(feature = "gte_clang_3_9")]
+    #[cfg(feature = "clang_3_9")]
     pub fn clang_Cursor_isMacroFunctionLike(cursor: CXCursor) -> c_uint;
     pub fn clang_Cursor_isNull(cursor: CXCursor) -> c_int;
     pub fn clang_Cursor_isObjCOptional(cursor: CXCursor) -> c_uint;
     pub fn clang_Cursor_isVariadic(cursor: CXCursor) -> c_uint;
     /// Only available on `libclang` 5.0 and later.
-    #[cfg(feature = "gte_clang_5_0")]
+    #[cfg(feature = "clang_5_0")]
     pub fn clang_EnumDecl_isScoped(cursor: CXCursor) -> c_uint;
     /// Only available on `libclang` 3.9 and later.
-    #[cfg(feature = "gte_clang_3_9")]
+    #[cfg(feature = "clang_3_9")]
     pub fn clang_EvalResult_dispose(result: CXEvalResult);
     /// Only available on `libclang` 3.9 and later.
-    #[cfg(feature = "gte_clang_3_9")]
+    #[cfg(feature = "clang_3_9")]
     pub fn clang_EvalResult_getAsDouble(result: CXEvalResult) -> libc::c_double;
     /// Only available on `libclang` 3.9 and later.
-    #[cfg(feature = "gte_clang_3_9")]
+    #[cfg(feature = "clang_3_9")]
     pub fn clang_EvalResult_getAsInt(result: CXEvalResult) -> c_int;
     /// Only available on `libclang` 4.0 and later.
-    #[cfg(feature = "gte_clang_4_0")]
+    #[cfg(feature = "clang_4_0")]
     pub fn clang_EvalResult_getAsLongLong(result: CXEvalResult) -> c_longlong;
     /// Only available on `libclang` 3.9 and later.
-    #[cfg(feature = "gte_clang_3_9")]
+    #[cfg(feature = "clang_3_9")]
     pub fn clang_EvalResult_getAsStr(result: CXEvalResult) -> *const c_char;
     /// Only available on `libclang` 4.0 and later.
-    #[cfg(feature = "gte_clang_4_0")]
+    #[cfg(feature = "clang_4_0")]
     pub fn clang_EvalResult_getAsUnsigned(result: CXEvalResult) -> c_ulonglong;
     /// Only available on `libclang` 3.9 and later.
-    #[cfg(feature = "gte_clang_3_9")]
+    #[cfg(feature = "clang_3_9")]
     pub fn clang_EvalResult_getKind(result: CXEvalResult) -> CXEvalResultKind;
     /// Only available on `libclang` 4.0 and later.
-    #[cfg(feature = "gte_clang_4_0")]
+    #[cfg(feature = "clang_4_0")]
     pub fn clang_EvalResult_isUnsignedInt(result: CXEvalResult) -> c_uint;
     /// Only available on `libclang` 3.6 and later.
-    #[cfg(feature = "gte_clang_3_6")]
+    #[cfg(feature = "clang_3_6")]
     pub fn clang_File_isEqual(left: CXFile, right: CXFile) -> c_int;
     /// Only available on `libclang` 7.0 and later.
-    #[cfg(feature = "gte_clang_7_0")]
+    #[cfg(feature = "clang_7_0")]
     pub fn clang_File_tryGetRealPathName(file: CXFile) -> CXString;
     pub fn clang_IndexAction_create(index: CXIndex) -> CXIndexAction;
     pub fn clang_IndexAction_dispose(index: CXIndexAction);
@@ -1834,63 +1847,63 @@
     pub fn clang_Module_getTopLevelHeader(tu: CXTranslationUnit, module: CXModule, index: c_uint) -> CXFile;
     pub fn clang_Module_isSystem(module: CXModule) -> c_int;
     /// Only available on `libclang` 7.0 and later.
-    #[cfg(feature = "gte_clang_7_0")]
+    #[cfg(feature = "clang_7_0")]
     pub fn clang_PrintingPolicy_dispose(policy: CXPrintingPolicy);
     /// Only available on `libclang` 7.0 and later.
-    #[cfg(feature = "gte_clang_7_0")]
+    #[cfg(feature = "clang_7_0")]
     pub fn clang_PrintingPolicy_getProperty(policy: CXPrintingPolicy, property: CXPrintingPolicyProperty) -> c_uint;
     /// Only available on `libclang` 7.0 and later.
-    #[cfg(feature = "gte_clang_7_0")]
+    #[cfg(feature = "clang_7_0")]
     pub fn clang_PrintingPolicy_setProperty(policy: CXPrintingPolicy, property: CXPrintingPolicyProperty, value: c_uint);
     pub fn clang_Range_isNull(range: CXSourceRange) -> c_int;
     /// Only available on `libclang` 5.0 and later.
-    #[cfg(feature = "gte_clang_5_0")]
+    #[cfg(feature = "clang_5_0")]
     pub fn clang_TargetInfo_dispose(info: CXTargetInfo);
     /// Only available on `libclang` 5.0 and later.
-    #[cfg(feature = "gte_clang_5_0")]
+    #[cfg(feature = "clang_5_0")]
     pub fn clang_TargetInfo_getPointerWidth(info: CXTargetInfo) -> c_int;
     /// Only available on `libclang` 5.0 and later.
-    #[cfg(feature = "gte_clang_5_0")]
+    #[cfg(feature = "clang_5_0")]
     pub fn clang_TargetInfo_getTriple(info: CXTargetInfo) -> CXString;
     pub fn clang_Type_getAlignOf(type_: CXType) -> c_longlong;
     pub fn clang_Type_getCXXRefQualifier(type_: CXType) -> CXRefQualifierKind;
     pub fn clang_Type_getClassType(type_: CXType) -> CXType;
     /// Only available on `libclang` 3.9 and later.
-    #[cfg(feature = "gte_clang_3_9")]
+    #[cfg(feature = "clang_3_9")]
     pub fn clang_Type_getNamedType(type_: CXType) -> CXType;
     pub fn clang_Type_getNumTemplateArguments(type_: CXType) -> c_int;
     /// Only available on `libclang` 8.0 and later.
-    #[cfg(feature = "gte_clang_8_0")]
+    #[cfg(feature = "clang_8_0")]
     pub fn clang_Type_getObjCObjectBaseType(type_: CXType) -> CXType;
     /// Only available on `libclang` 8.0 and later.
-    #[cfg(feature = "gte_clang_8_0")]
+    #[cfg(feature = "clang_8_0")]
     pub fn clang_Type_getNumObjCProtocolRefs(type_: CXType) -> c_uint;
     /// Only available on `libclang` 8.0 and later.
-    #[cfg(feature = "gte_clang_8_0")]
+    #[cfg(feature = "clang_8_0")]
     pub fn clang_Type_getObjCProtocolDecl(type_: CXType, index: c_uint) -> CXCursor;
     /// Only available on `libclang` 8.0 and later.
-    #[cfg(feature = "gte_clang_8_0")]
+    #[cfg(feature = "clang_8_0")]
     pub fn clang_Type_getNumObjCTypeArgs(type_: CXType) -> c_uint;
     /// Only available on `libclang` 8.0 and later.
-    #[cfg(feature = "gte_clang_8_0")]
+    #[cfg(feature = "clang_8_0")]
     pub fn clang_Type_getObjCTypeArg(type_: CXType, index: c_uint) -> CXType;
     /// Only available on `libclang` 3.9 and later.
-    #[cfg(feature = "gte_clang_3_9")]
+    #[cfg(feature = "clang_3_9")]
     pub fn clang_Type_getObjCEncoding(type_: CXType) -> CXString;
     pub fn clang_Type_getOffsetOf(type_: CXType, field: *const c_char) -> c_longlong;
     /// Only available on `libclang` 8.0 and later.
-    #[cfg(feature = "gte_clang_8_0")]
+    #[cfg(feature = "clang_8_0")]
     pub fn clang_Type_getModifiedType(type_: CXType) -> CXType;
     pub fn clang_Type_getSizeOf(type_: CXType) -> c_longlong;
     pub fn clang_Type_getTemplateArgumentAsType(type_: CXType, index: c_uint) -> CXType;
     /// Only available on `libclang` 5.0 and later.
-    #[cfg(feature = "gte_clang_5_0")]
+    #[cfg(feature = "clang_5_0")]
     pub fn clang_Type_isTransparentTagTypedef(type_: CXType) -> c_uint;
     /// Only available on `libclang` 8.0 and later.
-    #[cfg(feature = "gte_clang_8_0")]
+    #[cfg(feature = "clang_8_0")]
     pub fn clang_Type_getNullability(type_: CXType) -> CXTypeNullabilityKind;
     /// Only available on `libclang` 3.7 and later.
-    #[cfg(feature = "gte_clang_3_7")]
+    #[cfg(feature = "clang_3_7")]
     pub fn clang_Type_visitFields(type_: CXType, visitor: CXFieldVisitor, data: CXClientData) -> CXVisitorResult;
     pub fn clang_annotateTokens(tu: CXTranslationUnit, tokens: *mut CXToken, n_tokens: c_uint, cursors: *mut CXCursor);
     pub fn clang_codeCompleteAt(tu: CXTranslationUnit, file: *const c_char, line: c_uint, column: c_uint, unsaved: *mut CXUnsavedFile, n_unsaved: c_uint, flags: CXCodeComplete_Flags) -> *mut CXCodeCompleteResults;
@@ -1927,7 +1940,7 @@
     pub fn clang_disposeSourceRangeList(list: *mut CXSourceRangeList);
     pub fn clang_disposeString(string: CXString);
     /// Only available on `libclang` 3.8 and later.
-    #[cfg(feature = "gte_clang_3_8")]
+    #[cfg(feature = "clang_3_8")]
     pub fn clang_disposeStringSet(set: *mut CXStringSet);
     pub fn clang_disposeTokens(tu: CXTranslationUnit, tokens: *mut CXToken, n_tokens: c_uint);
     pub fn clang_disposeTranslationUnit(tu: CXTranslationUnit);
@@ -1941,13 +1954,13 @@
     pub fn clang_findReferencesInFile(cursor: CXCursor, file: CXFile, visitor: CXCursorAndRangeVisitor) -> CXResult;
     pub fn clang_formatDiagnostic(diagnostic: CXDiagnostic, flags: CXDiagnosticDisplayOptions) -> CXString;
     /// Only available on `libclang` 3.7 and later.
-    #[cfg(feature = "gte_clang_3_7")]
+    #[cfg(feature = "clang_3_7")]
     pub fn clang_free(buffer: *mut c_void);
     /// Only available on `libclang` 5.0 and later.
-    #[cfg(feature = "gte_clang_5_0")]
+    #[cfg(feature = "clang_5_0")]
     pub fn clang_getAddressSpace(type_: CXType) -> c_uint;
     /// Only available on `libclang` 4.0 and later.
-    #[cfg(feature = "gte_clang_4_0")]
+    #[cfg(feature = "clang_4_0")]
     pub fn clang_getAllSkippedRanges(tu: CXTranslationUnit) -> *mut CXSourceRangeList;
     pub fn clang_getArgType(type_: CXType, index: c_uint) -> CXType;
     pub fn clang_getArrayElementType(type_: CXType) -> CXType;
@@ -1966,11 +1979,11 @@
     pub fn clang_getCompletionChunkKind(string: CXCompletionString, index: c_uint) -> CXCompletionChunkKind;
     pub fn clang_getCompletionChunkText(string: CXCompletionString, index: c_uint) -> CXString;
     /// Only available on `libclang` 7.0 and later.
-    #[cfg(feature = "gte_clang_7_0")]
+    #[cfg(feature = "clang_7_0")]
     pub fn clang_getCompletionFixIt(results: *mut CXCodeCompleteResults, completion_index: c_uint, fixit_index: c_uint, range: *mut CXSourceRange) -> CXString;
     pub fn clang_getCompletionNumAnnotations(string: CXCompletionString) -> c_uint;
     /// Only available on `libclang` 7.0 and later.
-    #[cfg(feature = "gte_clang_7_0")]
+    #[cfg(feature = "clang_7_0")]
     pub fn clang_getCompletionNumFixIts(results: *mut CXCodeCompleteResults, completion_index: c_uint) -> c_uint;
     pub fn clang_getCompletionParent(string: CXCompletionString, kind: *mut CXCursorKind) -> CXString;
     pub fn clang_getCompletionPriority(string: CXCompletionString) -> c_uint;
@@ -1980,7 +1993,7 @@
     pub fn clang_getCursorDefinition(cursor: CXCursor) -> CXCursor;
     pub fn clang_getCursorDisplayName(cursor: CXCursor) -> CXString;
     /// Only available on `libclang` 5.0 and later.
-    #[cfg(feature = "gte_clang_5_0")]
+    #[cfg(feature = "clang_5_0")]
     pub fn clang_getCursorExceptionSpecificationType(cursor: CXCursor) -> CXCursor_ExceptionSpecificationKind;
     pub fn clang_getCursorExtent(cursor: CXCursor) -> CXSourceRange;
     pub fn clang_getCursorKind(cursor: CXCursor) -> CXCursorKind;
@@ -1991,10 +2004,10 @@
     pub fn clang_getCursorLocation(cursor: CXCursor) -> CXSourceLocation;
     pub fn clang_getCursorPlatformAvailability(cursor: CXCursor, deprecated: *mut c_int, deprecated_message: *mut CXString, unavailable: *mut c_int, unavailable_message: *mut CXString, availability: *mut CXPlatformAvailability, n_availability: c_int) -> c_int;
     /// Only available on `libclang` 7.0 and later.
-    #[cfg(feature = "gte_clang_7_0")]
+    #[cfg(feature = "clang_7_0")]
     pub fn clang_getCursorPrettyPrinted(cursor: CXCursor, policy: CXPrintingPolicy) -> CXString;
     /// Only available on `libclang` 7.0 and later.
-    #[cfg(feature = "gte_clang_7_0")]
+    #[cfg(feature = "clang_7_0")]
     pub fn clang_getCursorPrintingPolicy(cursor: CXCursor) -> CXPrintingPolicy;
     pub fn clang_getCursorReferenceNameRange(cursor: CXCursor, flags: CXNameRefFlags, index: c_uint) -> CXSourceRange;
     pub fn clang_getCursorReferenced(cursor: CXCursor) -> CXCursor;
@@ -2002,12 +2015,12 @@
     pub fn clang_getCursorSemanticParent(cursor: CXCursor) -> CXCursor;
     pub fn clang_getCursorSpelling(cursor: CXCursor) -> CXString;
     /// Only available on `libclang` 6.0 and later.
-    #[cfg(feature = "gte_clang_6_0")]
+    #[cfg(feature = "clang_6_0")]
     pub fn clang_getCursorTLSKind(cursor: CXCursor) -> CXTLSKind;
     pub fn clang_getCursorType(cursor: CXCursor) -> CXType;
     pub fn clang_getCursorUSR(cursor: CXCursor) -> CXString;
     /// Only available on `libclang` 3.8 and later.
-    #[cfg(feature = "gte_clang_3_8")]
+    #[cfg(feature = "clang_3_8")]
     pub fn clang_getCursorVisibility(cursor: CXCursor) -> CXVisibilityKind;
     pub fn clang_getDeclObjCTypeEncoding(cursor: CXCursor) -> CXString;
     pub fn clang_getDefinitionSpellingAndExtent(cursor: CXCursor, start: *mut *const c_char, end: *mut *const c_char, start_line: *mut c_uint, start_column: *mut c_uint, end_line: *mut c_uint, end_column: *mut c_uint);
@@ -2030,13 +2043,13 @@
     pub fn clang_getEnumConstantDeclValue(cursor: CXCursor) -> c_longlong;
     pub fn clang_getEnumDeclIntegerType(cursor: CXCursor) -> CXType;
     /// Only available on `libclang` 5.0 and later.
-    #[cfg(feature = "gte_clang_5_0")]
+    #[cfg(feature = "clang_5_0")]
     pub fn clang_getExceptionSpecificationType(type_: CXType) -> CXCursor_ExceptionSpecificationKind;
     pub fn clang_getExpansionLocation(location: CXSourceLocation, file: *mut CXFile, line: *mut c_uint, column: *mut c_uint, offset: *mut c_uint);
     pub fn clang_getFieldDeclBitWidth(cursor: CXCursor) -> c_int;
     pub fn clang_getFile(tu: CXTranslationUnit, file: *const c_char) -> CXFile;
     /// Only available on `libclang` 6.0 and later.
-    #[cfg(feature = "gte_clang_6_0")]
+    #[cfg(feature = "clang_6_0")]
     pub fn clang_getFileContents(tu: CXTranslationUnit, file: CXFile, size: *mut size_t) -> *const c_char;
     pub fn clang_getFileLocation(location: CXSourceLocation, file: *mut CXFile, line: *mut c_uint, column: *mut c_uint, offset: *mut c_uint);
     pub fn clang_getFileName(file: CXFile) -> CXString;
@@ -2074,7 +2087,7 @@
     pub fn clang_getSpellingLocation(location: CXSourceLocation, file: *mut CXFile, line: *mut c_uint, column: *mut c_uint, offset: *mut c_uint);
     pub fn clang_getTUResourceUsageName(kind: CXTUResourceUsageKind) -> *const c_char;
     /// Only available on `libclang` 5.0 and later.
-    #[cfg(feature = "gte_clang_5_0")]
+    #[cfg(feature = "clang_5_0")]
     pub fn clang_getTranslationUnitTargetInfo(tu: CXTranslationUnit) -> CXTargetInfo;
     pub fn clang_getTemplateCursorKind(cursor: CXCursor) -> CXCursorKind;
     pub fn clang_getTokenExtent(tu: CXTranslationUnit, token: CXToken) -> CXSourceRange;
@@ -2088,14 +2101,14 @@
     pub fn clang_getTypeSpelling(type_: CXType) -> CXString;
     pub fn clang_getTypedefDeclUnderlyingType(cursor: CXCursor) -> CXType;
     /// Only available on `libclang` 5.0 and later.
-    #[cfg(feature = "gte_clang_5_0")]
+    #[cfg(feature = "clang_5_0")]
     pub fn clang_getTypedefName(type_: CXType) -> CXString;
     pub fn clang_hashCursor(cursor: CXCursor) -> c_uint;
     pub fn clang_indexLoc_getCXSourceLocation(location: CXIdxLoc) -> CXSourceLocation;
     pub fn clang_indexLoc_getFileLocation(location: CXIdxLoc, index_file: *mut CXIdxClientFile, file: *mut CXFile, line: *mut c_uint, column: *mut c_uint, offset: *mut c_uint);
     pub fn clang_indexSourceFile(index: CXIndexAction, data: CXClientData, callbacks: *mut IndexerCallbacks, n_callbacks: c_uint, index_flags: CXIndexOptFlags, file: *const c_char, arguments: *const *const c_char, n_arguments: c_int, unsaved: *mut CXUnsavedFile, n_unsaved: c_uint, tu: *mut CXTranslationUnit, tu_flags: CXTranslationUnit_Flags) -> CXErrorCode;
     /// Only available on `libclang` 3.8 and later.
-    #[cfg(feature = "gte_clang_3_8")]
+    #[cfg(feature = "clang_3_8")]
     pub fn clang_indexSourceFileFullArgv(index: CXIndexAction, data: CXClientData, callbacks: *mut IndexerCallbacks, n_callbacks: c_uint, index_flags: CXIndexOptFlags, file: *const c_char, arguments: *const *const c_char, n_arguments: c_int, unsaved: *mut CXUnsavedFile, n_unsaved: c_uint, tu: *mut CXTranslationUnit, tu_flags: CXTranslationUnit_Flags) -> CXErrorCode;
     pub fn clang_indexTranslationUnit(index: CXIndexAction, data: CXClientData, callbacks: *mut IndexerCallbacks, n_callbacks: c_uint, flags: CXIndexOptFlags, tu: CXTranslationUnit) -> c_int;
     pub fn clang_index_getCXXClassDeclInfo(info: *const CXIdxDeclInfo) -> *const CXIdxCXXClassDeclInfo;
@@ -2119,7 +2132,7 @@
     pub fn clang_isFunctionTypeVariadic(type_: CXType) -> c_uint;
     pub fn clang_isInvalid(kind: CXCursorKind) -> c_uint;
     /// Only available on `libclang` 7.0 and later.
-    #[cfg(feature = "gte_clang_7_0")]
+    #[cfg(feature = "clang_7_0")]
     pub fn clang_isInvalidDeclaration(cursor: CXCursor) -> c_uint;
     pub fn clang_isPODType(type_: CXType) -> c_uint;
     pub fn clang_isPreprocessing(kind: CXCursorKind) -> c_uint;
@@ -2134,7 +2147,7 @@
     pub fn clang_parseTranslationUnit(index: CXIndex, file: *const c_char, arguments: *const *const c_char, n_arguments: c_int, unsaved: *mut CXUnsavedFile, n_unsaved: c_uint, flags: CXTranslationUnit_Flags) -> CXTranslationUnit;
     pub fn clang_parseTranslationUnit2(index: CXIndex, file: *const c_char, arguments: *const *const c_char, n_arguments: c_int, unsaved: *mut CXUnsavedFile, n_unsaved: c_uint, flags: CXTranslationUnit_Flags, tu: *mut CXTranslationUnit) -> CXErrorCode;
     /// Only available on `libclang` 3.8 and later.
-    #[cfg(feature = "gte_clang_3_8")]
+    #[cfg(feature = "clang_3_8")]
     pub fn clang_parseTranslationUnit2FullArgv(index: CXIndex, file: *const c_char, arguments: *const *const c_char, n_arguments: c_int, unsaved: *mut CXUnsavedFile, n_unsaved: c_uint, flags: CXTranslationUnit_Flags, tu: *mut CXTranslationUnit) -> CXErrorCode;
     pub fn clang_remap_dispose(remapping: CXRemapping);
     pub fn clang_remap_getFilenames(remapping: CXRemapping, index: c_uint, original: *mut CXString, transformed: *mut CXString);
@@ -2143,7 +2156,7 @@
     pub fn clang_saveTranslationUnit(tu: CXTranslationUnit, file: *const c_char, options: CXSaveTranslationUnit_Flags) -> CXSaveError;
     pub fn clang_sortCodeCompletionResults(results: *mut CXCompletionResult, n_results: c_uint);
     /// Only available on `libclang` 5.0 and later.
-    #[cfg(feature = "gte_clang_5_0")]
+    #[cfg(feature = "clang_5_0")]
     pub fn clang_suspendTranslationUnit(tu: CXTranslationUnit) -> c_uint;
     pub fn clang_toggleCrashRecovery(recovery: c_uint);
     pub fn clang_tokenize(tu: CXTranslationUnit, range: CXSourceRange, tokens: *mut *mut CXToken, n_tokens: *mut c_uint);
diff --git a/src/link.rs b/src/link.rs
index 11a73ab..082eb81 100644
--- a/src/link.rs
+++ b/src/link.rs
@@ -150,7 +150,8 @@
         }
 
         $(
-            #[cfg_attr(feature="cargo-clippy", allow(too_many_arguments))]
+            #[cfg_attr(feature="cargo-clippy", allow(clippy::missing_safety_doc))]
+            #[cfg_attr(feature="cargo-clippy", allow(clippy::too_many_arguments))]
             $(#[doc=$doc] #[cfg($cfg)])*
             pub unsafe fn $name($($pname: $pty), *) $(-> $ret)* {
                 let f = with_library(|l| {
@@ -189,7 +190,7 @@
                 pub mod dynamic { include!("../out/dynamic.rs"); }
             }
 
-            let (directory, filename) = try!(build::dynamic::find(true));
+            let (directory, filename) = build::dynamic::find(true)?;
             let path = directory.join(filename);
 
             let library = libloading::Library::new(&path).map_err(|e| {
@@ -200,7 +201,7 @@
                 )
             });
 
-            let mut library = SharedLibrary::new(try!(library), path);
+            let mut library = SharedLibrary::new(library?, path);
             $(load::$name(&mut library);)+
             Ok(library)
         }
@@ -218,7 +219,7 @@
         /// * the `libclang` shared library could not be opened
         #[allow(dead_code)]
         pub fn load() -> Result<(), String> {
-            let library = Arc::new(try!(load_manually()));
+            let library = Arc::new(load_manually()?);
             LIBRARY.with(|l| *l.borrow_mut() = Some(library));
             Ok(())
         }
diff --git a/src/support.rs b/src/support.rs
index acf6522..f061275 100644
--- a/src/support.rs
+++ b/src/support.rs
@@ -181,7 +181,7 @@
 fn parse_version(path: &Path) -> Option<CXVersion> {
     let output = run_clang(path, &["--version"]).0;
     let start = try_opt!(output.find("version ")) + 8;
-    let mut numbers = try_opt!(output[start..].split_whitespace().nth(0)).split('.');
+    let mut numbers = try_opt!(output[start..].split_whitespace().next()).split('.');
     let major = try_opt!(numbers.next().and_then(parse_version_number));
     let minor = try_opt!(numbers.next().and_then(parse_version_number));
     let subminor = numbers.next().and_then(parse_version_number).unwrap_or(0);
