Snap for 6877830 from 0bd5ab11c971779c76251670f37482fd41a93b54 to sdk-release

Change-Id: I4c8da8c59b794a2d7d8225c50d48d58b90ecd734
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..3824501 100644
--- a/Android.bp
+++ b/Android.bp
@@ -1,23 +1,23 @@
-// 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",
-    // has rustc warnings
     crate_name: "clang_sys",
     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 +29,7 @@
 }
 
 // dependent_library ["feature_list"]
-//   cc-1.0.55
+//   cfg-if-0.1.10
 //   glob-0.3.0
-//   libc-0.2.71
-//   libloading-0.5.2
+//   libc-0.2.77
+//   libloading-0.6.3
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..b656016 100644
--- a/METADATA
+++ b/METADATA
@@ -6,14 +6,14 @@
     value: "https://crates.io/crates/clang-sys"
   }
   url {
-    type: GIT
-    value: "https://github.com/KyleMayes/clang-sys"
+    type: ARCHIVE
+    value: "https://static.crates.io/crates/clang-sys/clang-sys-1.0.0.crate"
   }
-  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/post_update.sh b/post_update.sh
new file mode 100755
index 0000000..bfcef00
--- /dev/null
+++ b/post_update.sh
@@ -0,0 +1,21 @@
+#!/bin/bash
+
+# $1 Path to the new version.
+# $2 Path to the old version.
+
+set -x
+set -e
+
+# Change src/link.rs to include files from ../out/
+SRCFILE=src/link.rs
+OLDSTR='include!(concat!(env!("OUT_DIR"), "/common.rs"));'
+NEWSTR='include!("../out/common.rs");'
+sed -i -e "s:$OLDSTR:$NEWSTR:" $SRCFILE
+# Make sure that sed replaced $OLDSTR with $NEWSTR
+grep "$NEWSTR" $SRCFILE > /dev/null
+
+OLDSTR='include!(concat!(env!("OUT_DIR"), "/dynamic.rs"));'
+NEWSTR='include!("../out/dynamic.rs");'
+sed -i -e "s:$OLDSTR:$NEWSTR:" $SRCFILE
+# Make sure that sed replaced $OLDSTR with $NEWSTR
+grep "$NEWSTR" $SRCFILE > /dev/null
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);