1a2e6e8b4Sopenharmony_ciuse std::env;
2a2e6e8b4Sopenharmony_ciuse std::fs;
3a2e6e8b4Sopenharmony_ciuse std::path::PathBuf;
4a2e6e8b4Sopenharmony_ci
5a2e6e8b4Sopenharmony_cifn main() {
6a2e6e8b4Sopenharmony_ci    println!("cargo:rerun-if-changed=build.rs");
7a2e6e8b4Sopenharmony_ci
8a2e6e8b4Sopenharmony_ci    let libstdcxx = cfg!(feature = "libstdc++");
9a2e6e8b4Sopenharmony_ci    let libcxx = cfg!(feature = "libc++");
10a2e6e8b4Sopenharmony_ci    let nothing = cfg!(feature = "nothing");
11a2e6e8b4Sopenharmony_ci
12a2e6e8b4Sopenharmony_ci    if nothing {
13a2e6e8b4Sopenharmony_ci        return;
14a2e6e8b4Sopenharmony_ci    }
15a2e6e8b4Sopenharmony_ci
16a2e6e8b4Sopenharmony_ci    if libstdcxx && libcxx {
17a2e6e8b4Sopenharmony_ci        println!(
18a2e6e8b4Sopenharmony_ci            "cargo:warning=-lstdc++ and -lc++ are both requested, \
19a2e6e8b4Sopenharmony_ci             using the platform's default"
20a2e6e8b4Sopenharmony_ci        );
21a2e6e8b4Sopenharmony_ci    }
22a2e6e8b4Sopenharmony_ci
23a2e6e8b4Sopenharmony_ci    match (libstdcxx, libcxx) {
24a2e6e8b4Sopenharmony_ci        (true, false) => println!("cargo:rustc-link-lib=stdc++"),
25a2e6e8b4Sopenharmony_ci        (false, true) => println!("cargo:rustc-link-lib=c++"),
26a2e6e8b4Sopenharmony_ci        (false, false) | (true, true) => {
27a2e6e8b4Sopenharmony_ci            // The platform's default.
28a2e6e8b4Sopenharmony_ci            let out_dir = env::var_os("OUT_DIR").expect("missing OUT_DIR");
29a2e6e8b4Sopenharmony_ci            let path = PathBuf::from(out_dir).join("dummy.cc");
30a2e6e8b4Sopenharmony_ci            fs::write(&path, "int rust_link_cplusplus;\n").unwrap();
31a2e6e8b4Sopenharmony_ci            cc::Build::new().cpp(true).file(&path).compile("link-cplusplus");
32a2e6e8b4Sopenharmony_ci        }
33a2e6e8b4Sopenharmony_ci    }
34a2e6e8b4Sopenharmony_ci}
35