From caf8bea570aead5e5adb55e2efadffda7db07ed0 Mon Sep 17 00:00:00 2001 From: Dirkjan Ochtman Date: Tue, 3 Sep 2024 10:42:20 +0200 Subject: [PATCH] Generate bindings for required symbols only --- Cargo.toml | 4 ++++ tests/win_bindings.rs | 38 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+) create mode 100644 tests/win_bindings.rs diff --git a/Cargo.toml b/Cargo.toml index 41bac4e..ad73e26 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -27,6 +27,10 @@ windows = { version = "0.58", default-features = false, features = [ "Win32_NetworkManagement_Ndis", "Win32_Networking_WinSock", ] } +windows-targets = "0.52" + +[target."cfg(windows)".dev-dependencies] +windows-bindgen = { version = "0.58" } # MSRV is 1.70 [lints.clippy] cargo = { level = "warn", priority = -1 } diff --git a/tests/win_bindings.rs b/tests/win_bindings.rs new file mode 100644 index 0000000..34a228f --- /dev/null +++ b/tests/win_bindings.rs @@ -0,0 +1,38 @@ +#![cfg(windows)] + +use std::fs; +use windows_bindgen::bindgen; + +#[test] +fn gen_bindings() { + let existing = fs::read_to_string(TARGET).unwrap(); + let new = windows_bindgen::bindgen([ + "--out", + TARGET, + "--config", + "flatten", + "--filter", + "Windows.Win32.Foundation.NO_ERROR", + "Windows.Win32.NetworkManagement.IpHelper.FreeMibTable", + "Windows.Win32.NetworkManagement.IpHelper.GetIpInterfaceTable", + "Windows.Win32.NetworkManagement.IpHelper.GetUnicastIpAddressTable", + "Windows.Win32.NetworkManagement.IpHelper.MIB_IPINTERFACE_ROW", + "Windows.Win32.NetworkManagement.IpHelper.MIB_IPINTERFACE_TABLE", + "Windows.Win32.NetworkManagement.IpHelper.MIB_UNICASTIPADDRESS_ROW", + "Windows.Win32.NetworkManagement.IpHelper.MIB_UNICASTIPADDRESS_TABLE", + "Windows.Win32.Networking.WinSock.AF_INET", + "Windows.Win32.Networking.WinSock.AF_INET6", + "Windows.Win32.Networking.WinSock.AF_UNSPEC", + ]) + .unwrap(); + + // Check the output is the same as before. + // Depending on the git configuration the file may have been checked out with `\r\n` newlines or + // with `\n`. Compare line-by-line to ignore this difference. + let new = fs::read_to_string(TARGET).unwrap(); + if !new.lines().eq(existing.lines()) { + panic!("generated file `{TARGET}` is changed"); + } +} + +const TARGET: &str = "src/win_bindings.rs";