oo_bindgen/cli/builders/
c.rs1use crate::backend::PlatformLocations;
2
3use std::path::PathBuf;
4use std::process::Command;
5
6use crate::cli::{BindingBuilder, BindingBuilderSettings};
7
8pub(crate) struct CBindingBuilder {
9 settings: BindingBuilderSettings,
10 platforms: PlatformLocations,
11 extra_files: Vec<PathBuf>,
12}
13
14impl CBindingBuilder {
15 pub(crate) fn new(
16 settings: BindingBuilderSettings,
17 platforms: PlatformLocations,
18 extra_files: &[PathBuf],
19 ) -> Self {
20 Self {
21 settings,
22 platforms,
23 extra_files: extra_files.to_vec(),
24 }
25 }
26
27 fn output_dir(&self) -> PathBuf {
28 self.settings.destination_path.join("c/generated")
29 }
30
31 fn build_dir(&self) -> PathBuf {
32 self.settings.destination_path.join("c/build")
33 }
34}
35
36impl BindingBuilder for CBindingBuilder {
37 fn name() -> &'static str {
38 "c"
39 }
40
41 fn generate(&mut self, _is_packaging: bool, generate_doxygen: bool) {
42 let config = crate::backend::c::CBindgenConfig {
43 output_dir: self.output_dir(),
44 ffi_name: self.settings.ffi_name,
45 extra_files: self.extra_files.clone(),
46 platform_locations: self.platforms.clone(),
47 generate_doxygen,
48 };
49
50 crate::backend::c::generate_c_package(&self.settings.library, &config)
51 .expect("failed to package C lib");
52 }
53
54 fn build(&mut self) {
55 let build_dir = self.build_dir();
57 if build_dir.exists() {
58 std::fs::remove_dir_all(&build_dir).unwrap();
59 }
60 std::fs::create_dir_all(&build_dir).unwrap();
61
62 let result = Command::new("cmake")
64 .current_dir(&build_dir)
65 .arg("..")
66 .status()
67 .expect("cmake failed");
68 assert!(result.success());
69
70 let result = Command::new("cmake")
72 .current_dir(&build_dir)
73 .args(["--build", ".", "--config", "Debug"])
74 .status()
75 .expect("cmake failed");
76 assert!(result.success());
77 }
78
79 fn test(&mut self) {
80 let result = Command::new("ctest")
82 .current_dir(self.build_dir())
83 .args([".", "-C", "Debug"])
84 .status()
85 .unwrap();
86 assert!(result.success());
87 }
88
89 fn package(&mut self) {
90 }
92}