1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
extern crate cpp_to_rust_build_tools;
extern crate qt_generator_common;
use cpp_to_rust_build_tools::Config;
use cpp_to_rust_build_tools::common::errors::{fancy_unwrap, Result, ChainErr};
use cpp_to_rust_build_tools::common::target;
use cpp_to_rust_build_tools::common::cpp_build_config::CppBuildConfigData;
use qt_generator_common::{InstallationData, get_installation_data, real_lib_name, framework_name, lib_dependencies};
pub fn run_and_return(sublib_name: &str) -> Result<()> {
let installation_data = get_installation_data(sublib_name)?;
let mut config = Config::new()?;
{
let original_qt_version = config
.original_cpp_lib_version()
.chain_err(|| "cpp_lib_version is expected in Config")?;
if original_qt_version != installation_data.qt_version {
println!("cargo:warning=This crate was generated for Qt {}, but Qt {} is currently in use.",
original_qt_version,
installation_data.qt_version);
}
}
let mut cpp_build_config_data = CppBuildConfigData::new();
{
let mut apply_installation_data = |name : &str, data : &InstallationData| {
config
.cpp_build_paths_mut()
.add_include_path(&data.root_include_path);
config
.cpp_build_paths_mut()
.add_include_path(&data.lib_include_path);
if data.is_framework {
config
.cpp_build_paths_mut()
.add_framework_path(&data.lib_path);
cpp_build_config_data.add_linked_framework(framework_name(name));
} else {
config
.cpp_build_paths_mut()
.add_lib_path(&data.lib_path);
cpp_build_config_data.add_linked_lib(real_lib_name(name));
}
};
apply_installation_data(sublib_name, &installation_data);
for dep in lib_dependencies(sublib_name)? {
let dep_data = get_installation_data(dep)?;
apply_installation_data(dep, &dep_data);
}
}
config
.cpp_build_config_mut()
.add(target::Condition::True, cpp_build_config_data);
config.run_and_return()
}
pub fn run(sublib_name: &str) -> ! {
fancy_unwrap(run_and_return(sublib_name));
std::process::exit(0)
}