Skip to content

Commit 442fd8b

Browse files
authored
Provide option to use default metadata for code generation (#2253)
1 parent 0ee7be0 commit 442fd8b

9 files changed

Lines changed: 20 additions & 8 deletions

File tree

crates/libs/metadata/Cargo.toml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ edition = "2018"
66
license = "MIT OR Apache-2.0"
77
description = "Code gen support for the windows crate"
88
repository = "https://github.com/microsoft/windows-rs"
9-
exclude = ["/default"]
109

1110
[package.metadata.docs.rs]
1211
default-target = "x86_64-pc-windows-msvc"

crates/libs/metadata/src/reader/file.rs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,19 @@ fn error_invalid_winmd() -> Error {
5252
}
5353

5454
impl File {
55+
pub fn with_default(paths: &[&str]) -> Result<Vec<Self>> {
56+
let mut files = Vec::new();
57+
files.push(Self::from_buffer(std::include_bytes!("../../default/Windows.winmd").to_vec(), "Windows.winmd".to_string())?);
58+
files.push(Self::from_buffer(std::include_bytes!("../../default/Windows.Win32.winmd").to_vec(), "Windows.Win32.winmd".to_string())?);
59+
files.push(Self::from_buffer(std::include_bytes!("../../default/Windows.Win32.Interop.winmd").to_vec(), "Windows.Win32.Interop.winmd".to_string())?);
60+
61+
for path in paths {
62+
files.push(Self::new(path)?);
63+
}
64+
65+
Ok(files)
66+
}
67+
5568
pub fn new(path: &str) -> Result<Self> {
5669
let path = std::path::Path::new(path);
5770

crates/tests/component/build.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ fn main() -> std::io::Result<()> {
88

99
Command::new("midlrt.exe").arg("/winrt").arg("/nomidl").arg("/h").arg("nul").arg("/metadata_dir").arg(&metadata_dir).arg("/reference").arg(format!("{metadata_dir}\\Windows.Foundation.winmd")).arg("/winmd").arg(".windows/winmd/component.winmd").arg("src/component.idl").status()?;
1010

11-
let files = vec![metadata::reader::File::new("../../libs/metadata/default/Windows.winmd").unwrap(), metadata::reader::File::new(".windows/winmd/component.winmd").unwrap()];
11+
let files = metadata::reader::File::with_default(&[".windows/winmd/component.winmd"])?;
1212
write("src/bindings.rs", bindgen::component("test_component", &files))?;
1313
Command::new("rustfmt").arg("src/bindings.rs").status()?;
1414

crates/tests/component_client/build.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ fn main() -> std::io::Result<()> {
55
create_dir_all(".windows/winmd")?;
66
copy("../component/.windows/winmd/component.winmd", ".windows/winmd/component.winmd")?;
77

8-
let files = vec![metadata::reader::File::new("../../libs/metadata/default/Windows.winmd").unwrap(), metadata::reader::File::new(".windows/winmd/component.winmd").unwrap()];
8+
let files = metadata::reader::File::with_default(&[".windows/winmd/component.winmd"])?;
99
write("src/bindings.rs", bindgen::component("test_component", &files))?;
1010
Command::new("rustfmt").arg("src/bindings.rs").status()?;
1111
Ok(())

crates/tests/metadata/tests/fn_call_size.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ fn size() {
33
// Note: you can double check these export names from a Visual Studio x86 command prompt as follows:
44
// dumpbin /exports kernel32.lib | findstr /i RtmConvertIpv6AddressAndLengthToNetAddress
55

6-
let files = vec![metadata::reader::File::new("../../libs/metadata/default/Windows.Win32.winmd").unwrap()];
6+
let files = metadata::reader::File::with_default(&[]).unwrap();
77
let reader = &metadata::reader::Reader::new(&files);
88

99
assert_eq!(struct_size(reader, "Windows.Win32.System.Com", "VARIANT"), 16);

crates/tests/metadata/tests/writer.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ fn writer() {
3737
{
3838
use metadata::reader::*;
3939

40-
let files = vec![File::new(temp_file.to_str().unwrap()).unwrap()];
40+
let files = metadata::reader::File::with_default(&[temp_file.to_str().unwrap()]).unwrap();
4141
let reader = &Reader::new(&files);
4242
let def = reader.get(TypeName::new("TestWindows.Foundation", "IStringable")).next().unwrap();
4343
assert_eq!(reader.type_def_kind(def), TypeKind::Interface);

crates/tools/lib/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ pub fn rustfmt(name: &str, tokens: &mut String) {
2828

2929
/// Returns the libraries and their function and stack sizes used by the gnu and msvc tools to build the umbrella libs.
3030
pub fn libraries() -> BTreeMap<String, BTreeMap<String, CallingConvention>> {
31-
let files = vec![metadata::reader::File::new("crates/libs/metadata/default/Windows.winmd").unwrap(), metadata::reader::File::new("crates/libs/metadata/default/Windows.Win32.winmd").unwrap(), metadata::reader::File::new("crates/libs/metadata/default/Windows.Win32.Interop.winmd").unwrap()];
31+
let files = metadata::reader::File::with_default(&[]).unwrap();
3232
let reader = &metadata::reader::Reader::new(&files);
3333
let mut libraries = BTreeMap::<String, BTreeMap<String, CallingConvention>>::new();
3434
let root = reader.tree("Windows.Win32", &[]).expect("`Windows` namespace not found");

crates/tools/sys/src/main.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ fn main() {
5454
let _ = std::fs::remove_dir_all(&output);
5555
}
5656
output.pop();
57-
let files = vec![metadata::reader::File::new("crates/libs/metadata/default/Windows.winmd").unwrap(), metadata::reader::File::new("crates/libs/metadata/default/Windows.Win32.winmd").unwrap(), metadata::reader::File::new("crates/libs/metadata/default/Windows.Win32.Interop.winmd").unwrap()];
57+
let files = metadata::reader::File::with_default(&[]).unwrap();
5858
let reader = &metadata::reader::Reader::new(&files);
5959
if !namespace.is_empty() {
6060
let tree = reader.tree(&namespace, &[]).expect("Namespace not found");

crates/tools/windows/src/main.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ fn main() {
2424
let _ = std::fs::remove_dir_all(&output);
2525
}
2626
output.pop();
27-
let files = vec![metadata::reader::File::new("crates/libs/metadata/default/Windows.winmd").unwrap(), metadata::reader::File::new("crates/libs/metadata/default/Windows.Win32.winmd").unwrap(), metadata::reader::File::new("crates/libs/metadata/default/Windows.Win32.Interop.winmd").unwrap()];
27+
let files = metadata::reader::File::with_default(&[]).unwrap();
2828
let reader = &metadata::reader::Reader::new(&files);
2929
if !namespace.is_empty() {
3030
let tree = reader.tree(&namespace, &[]).expect("Namespace not found");

0 commit comments

Comments
 (0)