Upgrade rust/crates/clang-sys to 1.2.0

Test: make
Change-Id: I490b30d1f1bdd43a81e55e6ffb69521526de92d5
diff --git a/.cargo_vcs_info.json b/.cargo_vcs_info.json
index b4474d7..630eef7 100644
--- a/.cargo_vcs_info.json
+++ b/.cargo_vcs_info.json
@@ -1,5 +1,5 @@
 {
   "git": {
-    "sha1": "fae8e5e15f060bc1fb11c26eac168eaf8a50632b"
+    "sha1": "c9ae24a7a218e73e1eccd320174349eef5a3bd1a"
   }
 }
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 993f360..103c19e 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -21,18 +21,11 @@
       - 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
@@ -41,17 +34,14 @@
       # 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:
+          # Needed to not find MinGW when loading at runtime
           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/Android.bp b/Android.bp
index 52b841f..75f78f9 100644
--- a/Android.bp
+++ b/Android.bp
@@ -62,5 +62,5 @@
 // dependent_library ["feature_list"]
 //   cfg-if-1.0.0
 //   glob-0.3.0
-//   libc-0.2.86
+//   libc-0.2.94
 //   libloading-0.7.0
diff --git a/CHANGELOG.md b/CHANGELOG.md
index a4940fa..50af79f 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,17 @@
+## [1.2.0] - 2021-04-08
+
+### Changed
+- Changed `Clang::find` to prefer target-prefixed binaries when a `-target`
+argument is provided (e.g., if the arguments `-target` and
+`x86_64-unknown-linux-gnu` are provided, a target-prefixed Clang executable
+such as `x86_64-unknown-linux-gnu-clang` will be preferred over a non-target
+prefixed Clang executable)
+
+### Fixed
+- Fixed build script to split paths in environment variables (e.g.,
+`LD_LIBRARY_PATH`) using the appropriate separator for the platform (previously
+`:` was used as the separator but some platforms such as Windows use `;`)
+
 ## [1.1.1] - 2021-02-19
 
 ### Changed
diff --git a/Cargo.toml b/Cargo.toml
index ece1c66..512c53b 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -12,7 +12,7 @@
 
 [package]
 name = "clang-sys"
-version = "1.1.1"
+version = "1.2.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_10_0", "runtime"]
+features = ["clang_11_0", "runtime"]
 [dependencies.glob]
 version = "0.3"
 
diff --git a/Cargo.toml.orig b/Cargo.toml.orig
index f7abf3c..e34929a 100644
--- a/Cargo.toml.orig
+++ b/Cargo.toml.orig
@@ -3,7 +3,7 @@
 name = "clang-sys"
 authors = ["Kyle Mayes <kyle@mayeses.com>"]
 
-version = "1.1.1"
+version = "1.2.0"
 
 readme = "README.md"
 license = "Apache-2.0"
@@ -47,4 +47,4 @@
 
 [package.metadata.docs.rs]
 
-features = ["clang_10_0", "runtime"]
+features = ["clang_11_0", "runtime"]
diff --git a/METADATA b/METADATA
index 1262839..700cc55 100644
--- a/METADATA
+++ b/METADATA
@@ -7,13 +7,13 @@
   }
   url {
     type: ARCHIVE
-    value: "https://static.crates.io/crates/clang-sys/clang-sys-1.1.1.crate"
+    value: "https://static.crates.io/crates/clang-sys/clang-sys-1.2.0.crate"
   }
-  version: "1.1.1"
+  version: "1.2.0"
   license_type: NOTICE
   last_upgrade_date {
     year: 2021
-    month: 2
-    day: 22
+    month: 5
+    day: 19
   }
 }
diff --git a/README.md b/README.md
index dbee0ea..9d24ed6 100644
--- a/README.md
+++ b/README.md
@@ -14,20 +14,14 @@
 
 Released under the Apache License 2.0.
 
-## Documentation
+## [Documentation](https://docs.rs/clang-sys)
 
-There are two versions of the documentation, one for the API exposed when
-linking dynamically or statically and one for the API exposed when linking at
-runtime (see the
-[Dependencies](https://github.com/KyleMayes/clang-sys#dependencies) section
-of the README for more information on the linking options).
+Note that the documentation on https://docs.rs for this crate assumes usage of the `runtime` Cargo feature as well as the Cargo feature for the latest supported version of `libclang` (e.g., `clang_11_0`), neither of which are enabled by default.
 
-The only difference between the APIs exposed is that when linking at runtime a
-few additional types and functions are exposed to manage the loaded `libclang`
-shared library.
+Due to the usage of the `runtime` Cargo feature, this documentation will contain some additional types and functions to manage a dynamically loaded
+`libclang` instance at runtime.
 
-* Runtime - [Documentation](https://kylemayes.github.io/clang-sys/runtime/clang_sys)
-* Dynamic / Static - [Documentation](https://kylemayes.github.io/clang-sys/default/clang_sys)
+Due to the usage of the Cargo feature for the latest supported version of `libclang`, this documentation will contain constants and functions that are not available in the oldest supported version of `libclang` (3.5). All of these types and functions have a documentation comment which specifies the minimum `libclang` version required to use the item.
 
 ## Supported Versions
 
diff --git a/TEST_MAPPING b/TEST_MAPPING
index 7de080a..a731acb 100644
--- a/TEST_MAPPING
+++ b/TEST_MAPPING
@@ -2,10 +2,13 @@
 {
   "presubmit": [
     {
+      "name": "keystore2_test"
+    },
+    {
       "name": "libsqlite3-sys_device_test_src_lib"
     },
     {
-      "name": "keystore2_test"
+      "name": "vpnprofilestore_test"
     }
   ]
 }
diff --git a/build/common.rs b/build/common.rs
index 265a0cf..f06aff5 100644
--- a/build/common.rs
+++ b/build/common.rs
@@ -61,15 +61,17 @@
 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,
-                )));
+            COMMAND_ERRORS.with(|e| {
+                e.borrow_mut()
+                    .entry(name.into())
+                    .or_insert_with(Vec::new)
+                    .push(format!(
+                        "couldn't execute `{} {}` ({})",
+                        command,
+                        arguments.join(" "),
+                        $error,
+                    ))
+            });
         }};
     }
 
@@ -100,7 +102,7 @@
 /// commands on drop if not discarded.
 #[derive(Default)]
 pub struct CommandErrorPrinter {
-    discard: bool
+    discard: bool,
 }
 
 impl CommandErrorPrinter {
@@ -123,7 +125,11 @@
                 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  "),
+                errors
+                    .iter()
+                    .map(|e| format!("\"{}\"", e))
+                    .collect::<Vec<_>>()
+                    .join("\n  "),
             )
         }
 
@@ -133,7 +139,11 @@
                 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  "),
+                errors
+                    .iter()
+                    .map(|e| format!("\"{}\"", e))
+                    .collect::<Vec<_>>()
+                    .join("\n  "),
             )
         }
     }
@@ -235,7 +245,7 @@
     // Search the directories provided by the `LD_LIBRARY_PATH` environment
     // variable.
     if let Ok(path) = env::var("LD_LIBRARY_PATH") {
-        for directory in path.split(':').map(Path::new) {
+        for directory in env::split_paths(&path) {
             found.extend(search_directories(&directory, files));
         }
     }
diff --git a/out/common.rs b/out/common.rs
index 265a0cf..f06aff5 100644
--- a/out/common.rs
+++ b/out/common.rs
@@ -61,15 +61,17 @@
 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,
-                )));
+            COMMAND_ERRORS.with(|e| {
+                e.borrow_mut()
+                    .entry(name.into())
+                    .or_insert_with(Vec::new)
+                    .push(format!(
+                        "couldn't execute `{} {}` ({})",
+                        command,
+                        arguments.join(" "),
+                        $error,
+                    ))
+            });
         }};
     }
 
@@ -100,7 +102,7 @@
 /// commands on drop if not discarded.
 #[derive(Default)]
 pub struct CommandErrorPrinter {
-    discard: bool
+    discard: bool,
 }
 
 impl CommandErrorPrinter {
@@ -123,7 +125,11 @@
                 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  "),
+                errors
+                    .iter()
+                    .map(|e| format!("\"{}\"", e))
+                    .collect::<Vec<_>>()
+                    .join("\n  "),
             )
         }
 
@@ -133,7 +139,11 @@
                 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  "),
+                errors
+                    .iter()
+                    .map(|e| format!("\"{}\"", e))
+                    .collect::<Vec<_>>()
+                    .join("\n  "),
             )
         }
     }
@@ -235,7 +245,7 @@
     // Search the directories provided by the `LD_LIBRARY_PATH` environment
     // variable.
     if let Ok(path) = env::var("LD_LIBRARY_PATH") {
-        for directory in path.split(':').map(Path::new) {
+        for directory in env::split_paths(&path) {
             found.extend(search_directories(&directory, files));
         }
     }
diff --git a/src/lib.rs b/src/lib.rs
index 6497715..90f3706 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -14,20 +14,22 @@
 
 //! Rust bindings for `libclang`.
 //!
-//! ## Documentation
+//! ## [Documentation](https://docs.rs/clang-sys)
 //!
-//! There are two versions of the documentation, one for the API exposed when
-//! linking dynamically or statically and one for the API exposed when linking
-//! at runtime (see the
-//! [Dependencies](https://github.com/KyleMayes/clang-sys#dependencies) section
-//! of the README for more information on the linking options).
+//! Note that the documentation on https://docs.rs for this crate assumes usage
+//! of the `runtime` Cargo feature as well as the Cargo feature for the latest
+//! supported version of `libclang` (e.g., `clang_11_0`), neither of which are
+//! enabled by default.
 //!
-//! The only difference between the APIs exposed is that when linking at runtime
-//! a few additional types and functions are exposed to manage the loaded
-//! `libclang` shared library.
+//! Due to the usage of the `runtime` Cargo feature, this documentation will
+//! contain some additional types and functions to manage a dynamically loaded
+//! `libclang` instance at runtime.
 //!
-//! * Runtime - [Documentation](https://kylemayes.github.io/clang-sys/runtime/clang_sys)
-//! * Dynamic / Static - [Documentation](https://kylemayes.github.io/clang-sys/default/clang_sys)
+//! Due to the usage of the Cargo feature for the latest supported version of
+//! `libclang`, this documentation will contain constants and functions that are
+//! not available in the oldest supported version of `libclang` (3.5). All of
+//! these types and functions have a documentation comment which specifies the
+//! minimum `libclang` version required to use the item.
 
 #![allow(non_camel_case_types, non_snake_case, non_upper_case_globals)]
 #![cfg_attr(feature = "cargo-clippy", allow(clippy::unreadable_literal))]
diff --git a/src/support.rs b/src/support.rs
index 8422f59..4e698ff 100644
--- a/src/support.rs
+++ b/src/support.rs
@@ -74,20 +74,41 @@
     /// directory returned by `llvm-config --bindir` is searched. On macOS
     /// systems, `xcodebuild -find clang` will next be queried. Last, the
     /// directories in the system's `PATH` are searched.
+    ///
+    /// ## Cross-compilation
+    ///
+    /// If target arguments are provided (e.g., `-target` followed by a target
+    /// like `x86_64-unknown-linux-gnu`) then this method will prefer a
+    /// target-prefixed instance of `clang` (e.g.,
+    /// `x86_64-unknown-linux-gnu-clang` for the above example).
     pub fn find(path: Option<&Path>, args: &[String]) -> Option<Clang> {
         if let Ok(path) = env::var("CLANG_PATH") {
             return Some(Clang::new(path, args));
         }
 
+        // Determine the cross-compilation target, if any.
+
+        let mut target = None;
+        for i in 0..args.len() {
+            if args[i] == "-target" && i + 1 < args.len() {
+                target = Some(&args[i + 1]);
+            }
+        }
+
+        // Collect the paths to search for a `clang` executable in.
+
         let mut paths = vec![];
+
         if let Some(path) = path {
             paths.push(path.into());
         }
+
         if let Ok(path) = run_llvm_config(&["--bindir"]) {
             if let Some(line) = path.lines().next() {
                 paths.push(line.into());
             }
         }
+
         if cfg!(target_os = "macos") {
             if let Ok((path, _)) = run("xcodebuild", &["-find", "clang"]) {
                 if let Some(line) = path.lines().next() {
@@ -95,8 +116,24 @@
                 }
             }
         }
+
         paths.extend(env::split_paths(&env::var("PATH").unwrap()));
 
+        // First, look for a target-prefixed `clang` executable.
+
+        if let Some(target) = target {
+            let default = format!("{}-clang{}", target, env::consts::EXE_SUFFIX);
+            let versioned = format!("{}-clang-[0-9]*{}", target, env::consts::EXE_SUFFIX);
+            let patterns = &[&default[..], &versioned[..]];
+            for path in &paths {
+                if let Some(path) = find(&path, patterns) {
+                    return Some(Clang::new(path, args));
+                }
+            }
+        }
+
+        // Otherwise, look for any other `clang` executable.
+
         let default = format!("clang{}", env::consts::EXE_SUFFIX);
         let versioned = format!("clang-[0-9]*{}", env::consts::EXE_SUFFIX);
         let patterns = &[&default[..], &versioned[..]];
diff --git a/tests/lib.rs b/tests/lib.rs
index 100a6c6..b50055a 100644
--- a/tests/lib.rs
+++ b/tests/lib.rs
@@ -46,3 +46,10 @@
     let clang = support::Clang::find(None, &[]).unwrap();
     println!("{:?}", clang);
 }
+
+#[test]
+fn test_support_target() {
+    let args = &["-target".into(), "x86_64-unknown-linux-gnu".into()];
+    let clang = support::Clang::find(None, args).unwrap();
+    println!("{:?}", clang);
+}