Skip to content

Commit 08d7be1

Browse files
committed
cxx-qt-build: return an Interface rather than taking as input
1 parent 94dba0e commit 08d7be1

File tree

7 files changed

+47
-46
lines changed

7 files changed

+47
-46
lines changed

crates/cxx-qt-build/src/interface.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,9 @@ impl Interface {
104104
self
105105
}
106106

107-
pub(crate) fn export(mut self) {
107+
/// Export the manifest for this crate so that is can be used by downstream
108+
/// crates or CMake
109+
pub fn export(mut self) {
108110
self.write_exported_include_directories();
109111

110112
// We automatically reexport all qt_modules and downstream dependencies

crates/cxx-qt-build/src/lib.rs

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -370,7 +370,6 @@ pub struct CxxQtBuilder {
370370
qt_modules: HashSet<String>,
371371
qml_modules: Vec<OwningQmlModule>,
372372
cc_builder: cc::Build,
373-
public_interface: Option<Interface>,
374373
include_prefix: String,
375374
}
376375

@@ -410,7 +409,6 @@ impl CxxQtBuilder {
410409
qt_modules,
411410
qml_modules: vec![],
412411
cc_builder: cc::Build::new(),
413-
public_interface: None,
414412
include_prefix: crate_name(),
415413
}
416414
}
@@ -419,15 +417,12 @@ impl CxxQtBuilder {
419417
/// included by later dependencies.
420418
///
421419
/// The headers generated for this crate will be specified
422-
pub fn library(interface_definition: Interface) -> Self {
423-
let mut this = Self::new();
424-
this.public_interface = Some(interface_definition);
425-
420+
pub fn library() -> Self {
426421
if link_name().is_none() {
427422
panic!("Building a Cxx-Qt based library requires setting a `links` field in the Cargo.toml file.\nConsider adding:\n\tlinks = \"{}\"\nto your Cargo.toml\n", crate_name());
428423
}
429424

430-
this
425+
Self::new()
431426
}
432427

433428
/// Specify rust file paths to parse through the cxx-qt marco
@@ -1049,7 +1044,7 @@ extern "C" bool {init_fun}() {{
10491044

10501045
/// Generate and compile cxx-qt C++ code, as well as compile any additional files from
10511046
/// [CxxQtBuilder::qobject_header] and [CxxQtBuilder::cc_builder].
1052-
pub fn build(mut self) {
1047+
pub fn build(mut self) -> Interface {
10531048
dir::clean(dir::crate_target()).expect("Failed to clean crate export directory!");
10541049

10551050
// We will do these two steps first, as setting up the dependencies can modify flags we
@@ -1125,17 +1120,17 @@ extern "C" bool {init_fun}() {{
11251120
self.cc_builder.compile(&static_lib_name());
11261121
}
11271122

1128-
if let Some(mut interface) = self.public_interface {
1129-
interface.manifest = Manifest {
1123+
Interface {
1124+
manifest: Manifest {
11301125
name: crate_name(),
11311126
link_name: link_name()
11321127
.expect("The links key must be set when creating a library with CXX-Qt-build!"),
11331128
initializers: vec![public_initializer.strip_file()],
11341129
qt_modules: qt_modules.into_iter().collect(),
11351130
exported_include_prefixes: vec![],
1136-
};
1137-
interface.dependencies = dependencies;
1138-
interface.export();
1131+
},
1132+
dependencies,
1133+
..Default::default()
11391134
}
11401135
}
11411136
}

crates/cxx-qt-lib-extras/build.rs

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -42,13 +42,7 @@ fn write_headers() {
4242
fn main() {
4343
write_headers();
4444

45-
let interface = cxx_qt_build::Interface::default()
46-
// Disable exporting the standard include directory, as we are exporting custom headers
47-
.export_include_prefixes([])
48-
.export_include_directory(header_dir(), "cxx-qt-lib-extras")
49-
.reexport_dependency("cxx-qt-lib");
50-
51-
let mut builder = CxxQtBuilder::library(interface)
45+
let mut builder = CxxQtBuilder::library()
5246
.qt_module("Gui")
5347
.qt_module("Widgets");
5448

@@ -80,7 +74,16 @@ fn main() {
8074
});
8175
println!("cargo::rerun-if-changed=src/assertion_utils.h");
8276

83-
// Use a short name due to the Windows file path limit!
84-
// We don't re-export these headers anyway.
85-
builder.include_prefix("private").build();
77+
let interface = builder
78+
// Use a short name due to the Windows file path limit!
79+
// We don't re-export these headers anyway.
80+
.include_prefix("private")
81+
.build();
82+
83+
// Disable exporting the standard include directory, as we are exporting custom header
84+
interface
85+
.export_include_prefixes([])
86+
.export_include_directory(header_dir(), "cxx-qt-lib-extras")
87+
.reexport_dependency("cxx-qt-lib")
88+
.export();
8689
}

crates/cxx-qt-lib/build.rs

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -346,12 +346,7 @@ fn main() {
346346
cpp_files.extend(["core/qdatetime", "core/qtimezone"]);
347347
}
348348

349-
let interface = cxx_qt_build::Interface::default()
350-
.export_include_prefixes([])
351-
.export_include_directory(header_dir(), "cxx-qt-lib")
352-
.reexport_dependency("cxx-qt");
353-
354-
let mut builder = CxxQtBuilder::library(interface)
349+
let mut builder = CxxQtBuilder::library()
355350
// Use a short name due to the Windows file path limit!
356351
// We don't re-export these headers anyway
357352
.include_prefix("private")
@@ -389,5 +384,11 @@ fn main() {
389384
cc.file("src/qt_types.cpp");
390385
println!("cargo::rerun-if-changed=src/qt_types.cpp");
391386
});
392-
builder.build();
387+
388+
let interface = builder.build();
389+
interface
390+
.export_include_prefixes([])
391+
.export_include_directory(header_dir(), "cxx-qt-lib")
392+
.reexport_dependency("cxx-qt")
393+
.export();
393394
}

crates/cxx-qt/build.rs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
use std::path::PathBuf;
77

8-
use cxx_qt_build::{CxxQtBuilder, Interface};
8+
use cxx_qt_build::CxxQtBuilder;
99

1010
fn header_dir() -> PathBuf {
1111
PathBuf::from(std::env::var("OUT_DIR").unwrap())
@@ -34,11 +34,7 @@ fn write_headers() {
3434
fn main() {
3535
write_headers();
3636

37-
let interface = Interface::default()
38-
.export_include_prefixes([])
39-
.export_include_directory(header_dir(), "cxx-qt");
40-
41-
let mut builder = CxxQtBuilder::library(interface);
37+
let mut builder = CxxQtBuilder::library();
4238

4339
let cpp_files = ["src/connection.cpp"];
4440
let rust_bridges = ["src/connection.rs", "src/qobject.rs"];
@@ -58,5 +54,9 @@ fn main() {
5854
..qt_build_utils::Initializer::default_signature("init_cxx_qt_core")
5955
});
6056

61-
builder.build();
57+
let interface = builder.build();
58+
interface
59+
.export_include_prefixes([])
60+
.export_include_directory(header_dir(), "cxx-qt")
61+
.export();
6262
}

examples/qml_multi_crates/rust/sub1/build.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,16 @@
33
//
44
// SPDX-License-Identifier: MIT OR Apache-2.0
55

6-
use cxx_qt_build::{CxxQtBuilder, Interface, QmlModule};
6+
use cxx_qt_build::{CxxQtBuilder, QmlModule};
77

88
fn main() {
9-
let interface = Interface::default();
10-
CxxQtBuilder::library(interface)
9+
CxxQtBuilder::library()
1110
.qt_module("Network")
1211
.qml_module(QmlModule::<_, &str> {
1312
uri: "com.kdab.cxx_qt.demo.sub1",
1413
rust_files: &["src/sub1_object.rs"],
1514
..Default::default()
1615
})
17-
.build();
16+
.build()
17+
.export();
1818
}

examples/qml_multi_crates/rust/sub2/build.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,15 @@
33
//
44
// SPDX-License-Identifier: MIT OR Apache-2.0
55

6-
use cxx_qt_build::{CxxQtBuilder, Interface, QmlModule};
6+
use cxx_qt_build::{CxxQtBuilder, QmlModule};
77

88
fn main() {
9-
let interface = Interface::default();
10-
CxxQtBuilder::library(interface)
9+
CxxQtBuilder::library()
1110
.qml_module(QmlModule::<_, &str> {
1211
uri: "com.kdab.cxx_qt.demo.sub2",
1312
rust_files: &["src/sub2_object.rs"],
1413
..Default::default()
1514
})
16-
.build();
15+
.build()
16+
.export();
1717
}

0 commit comments

Comments
 (0)