• Home
  • Raw
  • Download

Lines Matching +full:libclang +full:- +full:version

1 // SPDX-License-Identifier: Apache-2.0
15 fn parse_elf_header(path: &Path) -> io::Result<u8> { in parse_elf_header()
27 fn parse_pe_header(path: &Path) -> io::Result<u16> { in parse_pe_header()
51 /// Checks that a `libclang` shared library matches the target platform.
52 fn validate_library(path: &Path) -> Result<(), String> { in validate_library()
57 return Err("invalid ELF class (64-bit)".into()); in validate_library()
61 return Err("invalid ELF class (32-bit)".into()); in validate_library()
69 return Err("invalid DLL (64-bit)".into()); in validate_library()
73 return Err("invalid DLL (32-bit)".into()); in validate_library()
86 /// Extracts the version components in a `libclang` shared library filename.
87 fn parse_version(filename: &str) -> Vec<u32> { in parse_version()
88 let version = if let Some(version) = filename.strip_prefix("libclang.so.") { in parse_version() localVariable
89 version in parse_version()
90 } else if filename.starts_with("libclang-") { in parse_version()
91 &filename[9..filename.len() - 3] in parse_version()
96 version.split('.').map(|s| s.parse().unwrap_or(0)).collect() in parse_version()
99 /// Finds `libclang` shared libraries and returns the paths to, filenames of,
101 fn search_libclang_directories(runtime: bool) -> Result<Vec<(PathBuf, String, Vec<u32>)>, String> { in search_libclang_directories()
109 // Some Linux distributions don't create a `libclang.so` symlink, so we in search_libclang_directories()
110 // need to look for versioned files (e.g., `libclang-3.9.so`). in search_libclang_directories()
111 files.push("libclang-*.so".into()); in search_libclang_directories()
113 // Some Linux distributions don't create a `libclang.so` symlink and in search_libclang_directories()
115 // suffix versioned files (e.g., `libclang.so.1`). However, `ld` cannot in search_libclang_directories()
119 files.push("libclang.so.*".into()); in search_libclang_directories()
120 files.push("libclang-*.so.*".into()); in search_libclang_directories()
125 // Some BSD distributions don't create a `libclang.so` symlink either, in search_libclang_directories()
127 // `libclang.so.7.0`). in search_libclang_directories()
128 files.push("libclang.so.*".into()); in search_libclang_directories()
132 // The official LLVM build uses `libclang.dll` on Windows instead of in search_libclang_directories()
134 files.push("libclang.dll".into()); in search_libclang_directories()
137 // Find and validate `libclang` shared libraries and collect the versions. in search_libclang_directories()
144 let version = parse_version(&filename); in search_libclang_directories() localVariable
145 valid.push((directory, filename, version)) in search_libclang_directories()
170 /// Finds the "best" `libclang` shared library and returns the directory and
172 pub fn find(runtime: bool) -> Result<(PathBuf, String), String> { in find()
175 // We want to find the `libclang` shared library with the highest in find()
176 // version number, hence `max_by_key` below. in find()
178 // However, in the case where there are multiple such `libclang` shared in find()
181 // that function returns `libclang` shared libraries in descending order in find()
199 /// Finds and links to a `libclang` shared library.
207 println!("cargo:rustc-link-search={}", directory.display()); in link()
210 // Find the `libclang` stub static library required for the MSVC in link()
218 if lib.join("libclang.lib").exists() { in link()
219 println!("cargo:rustc-link-search={}", lib.display()); in link()
220 } else if lib.join("libclang.dll.a").exists() { in link()
221 // MSYS and MinGW use `libclang.dll.a` instead of `libclang.lib`. in link()
228 lib.join("libclang.dll.a"), in link()
229 Path::new(&out).join("libclang.lib"), in link()
232 println!("cargo:rustc-link-search=native={}", out); in link()
235 "using '{}', so 'libclang.lib' or 'libclang.dll.a' must be \ in link()
242 println!("cargo:rustc-link-lib=dylib=libclang"); in link()
246 // Strip extensions and trailing version numbers (e.g., the `.so.7.0` in in link()
247 // `libclang.so.7.0`). in link()
253 println!("cargo:rustc-link-lib=dylib={}", name); in link()