Mercurial > crates > nonstick
annotate libpam-sys/libpam-sys-test/build.rs @ 134:6c1e1bdb4164
Use standard #[cfg] directives rather than custom proc macros.
Instead of having to do a bunch of custom parsing and other logic
that tools often choke on, this change introduces an easy way
to depend upon custom #[cfg]s provided by the libpam-sys crate.
| author | Paul Fisher <paul@pfish.zone> |
|---|---|
| date | Thu, 03 Jul 2025 11:03:36 -0400 |
| parents | 0b6a17f8c894 |
| children | efbc235f01d3 |
| rev | line source |
|---|---|
|
110
2346fd501b7a
Add tests for constants and do other macro niceties.
Paul Fisher <paul@pfish.zone>
parents:
diff
changeset
|
1 use bindgen::MacroTypeVariation; |
|
134
6c1e1bdb4164
Use standard #[cfg] directives rather than custom proc macros.
Paul Fisher <paul@pfish.zone>
parents:
132
diff
changeset
|
2 use libpam_sys::pam_impl::PamImpl; |
|
130
80c07e5ab22f
Transfer over (almost) completely to using libpam-sys.
Paul Fisher <paul@pfish.zone>
parents:
127
diff
changeset
|
3 use proc_macro2::{Group, Ident, TokenStream, TokenTree}; |
|
113
178310336596
Fix up more constants, make things i32 rather than u32.
Paul Fisher <paul@pfish.zone>
parents:
111
diff
changeset
|
4 use quote::{format_ident, ToTokens}; |
| 127 | 5 use std::path::Path; |
| 6 use std::process::Command; | |
| 7 use std::str::FromStr; | |
|
110
2346fd501b7a
Add tests for constants and do other macro niceties.
Paul Fisher <paul@pfish.zone>
parents:
diff
changeset
|
8 use std::{env, fs}; |
|
131
a632a8874131
Get all the Linux-PAM functions into libpam-sys, and get tests right.
Paul Fisher <paul@pfish.zone>
parents:
130
diff
changeset
|
9 use syn::{Item, ItemConst}; |
|
110
2346fd501b7a
Add tests for constants and do other macro niceties.
Paul Fisher <paul@pfish.zone>
parents:
diff
changeset
|
10 |
|
131
a632a8874131
Get all the Linux-PAM functions into libpam-sys, and get tests right.
Paul Fisher <paul@pfish.zone>
parents:
130
diff
changeset
|
11 const REDIR_FD: &str = "pam_modutil_redirect_fd"; |
|
a632a8874131
Get all the Linux-PAM functions into libpam-sys, and get tests right.
Paul Fisher <paul@pfish.zone>
parents:
130
diff
changeset
|
12 |
|
110
2346fd501b7a
Add tests for constants and do other macro niceties.
Paul Fisher <paul@pfish.zone>
parents:
diff
changeset
|
13 fn main() { |
|
121
397743cb70e2
Make libpam-sys-tests work on Illumos!
Paul Fisher <paul@pfish.zone>
parents:
118
diff
changeset
|
14 let config = match PamImpl::CURRENT { |
|
397743cb70e2
Make libpam-sys-tests work on Illumos!
Paul Fisher <paul@pfish.zone>
parents:
118
diff
changeset
|
15 PamImpl::LinuxPam => TestConfig { |
|
397743cb70e2
Make libpam-sys-tests work on Illumos!
Paul Fisher <paul@pfish.zone>
parents:
118
diff
changeset
|
16 headers: vec![ |
|
124
f469b8d9ad78
Add tests for the original X/SSO constants list.
Paul Fisher <paul@pfish.zone>
parents:
122
diff
changeset
|
17 "<security/_pam_types.h>", |
|
f469b8d9ad78
Add tests for the original X/SSO constants list.
Paul Fisher <paul@pfish.zone>
parents:
122
diff
changeset
|
18 "<security/pam_appl.h>", |
|
f469b8d9ad78
Add tests for the original X/SSO constants list.
Paul Fisher <paul@pfish.zone>
parents:
122
diff
changeset
|
19 "<security/pam_ext.h>", |
|
f469b8d9ad78
Add tests for the original X/SSO constants list.
Paul Fisher <paul@pfish.zone>
parents:
122
diff
changeset
|
20 "<security/pam_modules.h>", |
|
131
a632a8874131
Get all the Linux-PAM functions into libpam-sys, and get tests right.
Paul Fisher <paul@pfish.zone>
parents:
130
diff
changeset
|
21 "<security/pam_modutil.h>", |
|
121
397743cb70e2
Make libpam-sys-tests work on Illumos!
Paul Fisher <paul@pfish.zone>
parents:
118
diff
changeset
|
22 ], |
|
131
a632a8874131
Get all the Linux-PAM functions into libpam-sys, and get tests right.
Paul Fisher <paul@pfish.zone>
parents:
130
diff
changeset
|
23 allow_types: vec![REDIR_FD], |
|
121
397743cb70e2
Make libpam-sys-tests work on Illumos!
Paul Fisher <paul@pfish.zone>
parents:
118
diff
changeset
|
24 ignore_consts: vec![ |
|
124
f469b8d9ad78
Add tests for the original X/SSO constants list.
Paul Fisher <paul@pfish.zone>
parents:
122
diff
changeset
|
25 "__LINUX_PAM__", |
|
f469b8d9ad78
Add tests for the original X/SSO constants list.
Paul Fisher <paul@pfish.zone>
parents:
122
diff
changeset
|
26 "__LINUX_PAM_MINOR__", |
|
f469b8d9ad78
Add tests for the original X/SSO constants list.
Paul Fisher <paul@pfish.zone>
parents:
122
diff
changeset
|
27 "PAM_AUTHTOK_RECOVER_ERR", |
|
121
397743cb70e2
Make libpam-sys-tests work on Illumos!
Paul Fisher <paul@pfish.zone>
parents:
118
diff
changeset
|
28 ], |
|
397743cb70e2
Make libpam-sys-tests work on Illumos!
Paul Fisher <paul@pfish.zone>
parents:
118
diff
changeset
|
29 ..Default::default() |
|
397743cb70e2
Make libpam-sys-tests work on Illumos!
Paul Fisher <paul@pfish.zone>
parents:
118
diff
changeset
|
30 }, |
|
397743cb70e2
Make libpam-sys-tests work on Illumos!
Paul Fisher <paul@pfish.zone>
parents:
118
diff
changeset
|
31 PamImpl::OpenPam => TestConfig { |
|
397743cb70e2
Make libpam-sys-tests work on Illumos!
Paul Fisher <paul@pfish.zone>
parents:
118
diff
changeset
|
32 headers: vec![ |
|
124
f469b8d9ad78
Add tests for the original X/SSO constants list.
Paul Fisher <paul@pfish.zone>
parents:
122
diff
changeset
|
33 "<security/pam_types.h>", |
|
f469b8d9ad78
Add tests for the original X/SSO constants list.
Paul Fisher <paul@pfish.zone>
parents:
122
diff
changeset
|
34 "<security/openpam.h>", |
|
f469b8d9ad78
Add tests for the original X/SSO constants list.
Paul Fisher <paul@pfish.zone>
parents:
122
diff
changeset
|
35 "<security/pam_appl.h>", |
|
f469b8d9ad78
Add tests for the original X/SSO constants list.
Paul Fisher <paul@pfish.zone>
parents:
122
diff
changeset
|
36 "<security/pam_constants.h>", |
|
121
397743cb70e2
Make libpam-sys-tests work on Illumos!
Paul Fisher <paul@pfish.zone>
parents:
118
diff
changeset
|
37 ], |
|
124
f469b8d9ad78
Add tests for the original X/SSO constants list.
Paul Fisher <paul@pfish.zone>
parents:
122
diff
changeset
|
38 ignore_consts: vec!["OPENPAM_VERSION", "OPENPAM_RELEASE", "PAM_SOEXT"], |
|
121
397743cb70e2
Make libpam-sys-tests work on Illumos!
Paul Fisher <paul@pfish.zone>
parents:
118
diff
changeset
|
39 ..Default::default() |
|
397743cb70e2
Make libpam-sys-tests work on Illumos!
Paul Fisher <paul@pfish.zone>
parents:
118
diff
changeset
|
40 }, |
|
397743cb70e2
Make libpam-sys-tests work on Illumos!
Paul Fisher <paul@pfish.zone>
parents:
118
diff
changeset
|
41 PamImpl::Sun => TestConfig { |
|
124
f469b8d9ad78
Add tests for the original X/SSO constants list.
Paul Fisher <paul@pfish.zone>
parents:
122
diff
changeset
|
42 headers: vec!["<security/pam_appl.h>", "<security/pam_modules.h>"], |
|
121
397743cb70e2
Make libpam-sys-tests work on Illumos!
Paul Fisher <paul@pfish.zone>
parents:
118
diff
changeset
|
43 ..Default::default() |
|
397743cb70e2
Make libpam-sys-tests work on Illumos!
Paul Fisher <paul@pfish.zone>
parents:
118
diff
changeset
|
44 }, |
|
124
f469b8d9ad78
Add tests for the original X/SSO constants list.
Paul Fisher <paul@pfish.zone>
parents:
122
diff
changeset
|
45 PamImpl::XSso => TestConfig { |
|
125
2b255c92417b
Introduce base PAM functions; use the real X/SSO PAM header for tests.
Paul Fisher <paul@pfish.zone>
parents:
124
diff
changeset
|
46 headers: vec!["\"xsso_pam_appl.h\""], |
|
124
f469b8d9ad78
Add tests for the original X/SSO constants list.
Paul Fisher <paul@pfish.zone>
parents:
122
diff
changeset
|
47 ..Default::default() |
|
f469b8d9ad78
Add tests for the original X/SSO constants list.
Paul Fisher <paul@pfish.zone>
parents:
122
diff
changeset
|
48 }, |
|
134
6c1e1bdb4164
Use standard #[cfg] directives rather than custom proc macros.
Paul Fisher <paul@pfish.zone>
parents:
132
diff
changeset
|
49 other => panic!("PAM implementation {other:?} is not yet tested"), |
|
121
397743cb70e2
Make libpam-sys-tests work on Illumos!
Paul Fisher <paul@pfish.zone>
parents:
118
diff
changeset
|
50 }; |
|
397743cb70e2
Make libpam-sys-tests work on Illumos!
Paul Fisher <paul@pfish.zone>
parents:
118
diff
changeset
|
51 generate_const_test(&config); |
| 127 | 52 generate_ctest(&config); |
|
110
2346fd501b7a
Add tests for constants and do other macro niceties.
Paul Fisher <paul@pfish.zone>
parents:
diff
changeset
|
53 } |
|
2346fd501b7a
Add tests for constants and do other macro niceties.
Paul Fisher <paul@pfish.zone>
parents:
diff
changeset
|
54 |
|
121
397743cb70e2
Make libpam-sys-tests work on Illumos!
Paul Fisher <paul@pfish.zone>
parents:
118
diff
changeset
|
55 fn generate_const_test(config: &TestConfig) { |
|
397743cb70e2
Make libpam-sys-tests work on Illumos!
Paul Fisher <paul@pfish.zone>
parents:
118
diff
changeset
|
56 let mut builder = bindgen::Builder::default() |
|
110
2346fd501b7a
Add tests for constants and do other macro niceties.
Paul Fisher <paul@pfish.zone>
parents:
diff
changeset
|
57 .header_contents("_.h", &config.header_contents()) |
|
2346fd501b7a
Add tests for constants and do other macro niceties.
Paul Fisher <paul@pfish.zone>
parents:
diff
changeset
|
58 .merge_extern_blocks(true) |
|
2346fd501b7a
Add tests for constants and do other macro niceties.
Paul Fisher <paul@pfish.zone>
parents:
diff
changeset
|
59 .parse_callbacks(Box::new(bindgen::CargoCallbacks::new())) |
|
131
a632a8874131
Get all the Linux-PAM functions into libpam-sys, and get tests right.
Paul Fisher <paul@pfish.zone>
parents:
130
diff
changeset
|
60 .allowlist_var("(OPEN)?PAM_.*") |
|
114
93d423b65555
Ignore version-specific OpenPAM constants; generate signed ints.
Paul Fisher <paul@pfish.zone>
parents:
113
diff
changeset
|
61 .default_macro_constant_type(MacroTypeVariation::Signed); |
|
131
a632a8874131
Get all the Linux-PAM functions into libpam-sys, and get tests right.
Paul Fisher <paul@pfish.zone>
parents:
130
diff
changeset
|
62 |
|
a632a8874131
Get all the Linux-PAM functions into libpam-sys, and get tests right.
Paul Fisher <paul@pfish.zone>
parents:
130
diff
changeset
|
63 for &typ in config.allow_types.iter() { |
|
a632a8874131
Get all the Linux-PAM functions into libpam-sys, and get tests right.
Paul Fisher <paul@pfish.zone>
parents:
130
diff
changeset
|
64 builder = builder.allowlist_type(typ); |
|
121
397743cb70e2
Make libpam-sys-tests work on Illumos!
Paul Fisher <paul@pfish.zone>
parents:
118
diff
changeset
|
65 } |
|
110
2346fd501b7a
Add tests for constants and do other macro niceties.
Paul Fisher <paul@pfish.zone>
parents:
diff
changeset
|
66 |
|
131
a632a8874131
Get all the Linux-PAM functions into libpam-sys, and get tests right.
Paul Fisher <paul@pfish.zone>
parents:
130
diff
changeset
|
67 let generated = builder.generate().unwrap(); |
|
a632a8874131
Get all the Linux-PAM functions into libpam-sys, and get tests right.
Paul Fisher <paul@pfish.zone>
parents:
130
diff
changeset
|
68 generated.write_to_file(test_file("bindgen.rs")).unwrap(); |
|
a632a8874131
Get all the Linux-PAM functions into libpam-sys, and get tests right.
Paul Fisher <paul@pfish.zone>
parents:
130
diff
changeset
|
69 let file = syn::parse_file(&generated.to_string()).unwrap(); |
| 127 | 70 let mut tests = vec![ |
|
131
a632a8874131
Get all the Linux-PAM functions into libpam-sys, and get tests right.
Paul Fisher <paul@pfish.zone>
parents:
130
diff
changeset
|
71 "\ |
|
a632a8874131
Get all the Linux-PAM functions into libpam-sys, and get tests right.
Paul Fisher <paul@pfish.zone>
parents:
130
diff
changeset
|
72 #[allow(dead_code, non_camel_case_types, non_upper_case_globals)] |
|
a632a8874131
Get all the Linux-PAM functions into libpam-sys, and get tests right.
Paul Fisher <paul@pfish.zone>
parents:
130
diff
changeset
|
73 mod generated { |
|
a632a8874131
Get all the Linux-PAM functions into libpam-sys, and get tests right.
Paul Fisher <paul@pfish.zone>
parents:
130
diff
changeset
|
74 include!(\"bindgen.rs\"); |
|
a632a8874131
Get all the Linux-PAM functions into libpam-sys, and get tests right.
Paul Fisher <paul@pfish.zone>
parents:
130
diff
changeset
|
75 } |
|
a632a8874131
Get all the Linux-PAM functions into libpam-sys, and get tests right.
Paul Fisher <paul@pfish.zone>
parents:
130
diff
changeset
|
76 #[allow(deprecated, overflowing_literals)] |
|
a632a8874131
Get all the Linux-PAM functions into libpam-sys, and get tests right.
Paul Fisher <paul@pfish.zone>
parents:
130
diff
changeset
|
77 fn main() { |
|
a632a8874131
Get all the Linux-PAM functions into libpam-sys, and get tests right.
Paul Fisher <paul@pfish.zone>
parents:
130
diff
changeset
|
78 " |
|
a632a8874131
Get all the Linux-PAM functions into libpam-sys, and get tests right.
Paul Fisher <paul@pfish.zone>
parents:
130
diff
changeset
|
79 .into(), |
| 127 | 80 format!( |
|
131
a632a8874131
Get all the Linux-PAM functions into libpam-sys, and get tests right.
Paul Fisher <paul@pfish.zone>
parents:
130
diff
changeset
|
81 "assert_eq!(libpam_sys::PamImpl::CURRENT, libpam_sys::PamImpl::{:?});", |
| 127 | 82 PamImpl::CURRENT |
| 83 ), | |
| 84 ]; | |
|
110
2346fd501b7a
Add tests for constants and do other macro niceties.
Paul Fisher <paul@pfish.zone>
parents:
diff
changeset
|
85 tests.extend( |
|
2346fd501b7a
Add tests for constants and do other macro niceties.
Paul Fisher <paul@pfish.zone>
parents:
diff
changeset
|
86 file.items |
|
2346fd501b7a
Add tests for constants and do other macro niceties.
Paul Fisher <paul@pfish.zone>
parents:
diff
changeset
|
87 .iter() |
|
2346fd501b7a
Add tests for constants and do other macro niceties.
Paul Fisher <paul@pfish.zone>
parents:
diff
changeset
|
88 .filter_map(|item| { |
|
2346fd501b7a
Add tests for constants and do other macro niceties.
Paul Fisher <paul@pfish.zone>
parents:
diff
changeset
|
89 if let Item::Const(item) = item { |
|
2346fd501b7a
Add tests for constants and do other macro niceties.
Paul Fisher <paul@pfish.zone>
parents:
diff
changeset
|
90 Some(item) |
|
2346fd501b7a
Add tests for constants and do other macro niceties.
Paul Fisher <paul@pfish.zone>
parents:
diff
changeset
|
91 } else { |
|
2346fd501b7a
Add tests for constants and do other macro niceties.
Paul Fisher <paul@pfish.zone>
parents:
diff
changeset
|
92 None |
|
2346fd501b7a
Add tests for constants and do other macro niceties.
Paul Fisher <paul@pfish.zone>
parents:
diff
changeset
|
93 } |
|
2346fd501b7a
Add tests for constants and do other macro niceties.
Paul Fisher <paul@pfish.zone>
parents:
diff
changeset
|
94 }) |
|
131
a632a8874131
Get all the Linux-PAM functions into libpam-sys, and get tests right.
Paul Fisher <paul@pfish.zone>
parents:
130
diff
changeset
|
95 .filter(|&item| config.should_check_const(item)) |
|
a632a8874131
Get all the Linux-PAM functions into libpam-sys, and get tests right.
Paul Fisher <paul@pfish.zone>
parents:
130
diff
changeset
|
96 .map(|item| { |
|
a632a8874131
Get all the Linux-PAM functions into libpam-sys, and get tests right.
Paul Fisher <paul@pfish.zone>
parents:
130
diff
changeset
|
97 let name = item.ident.to_string(); |
|
a632a8874131
Get all the Linux-PAM functions into libpam-sys, and get tests right.
Paul Fisher <paul@pfish.zone>
parents:
130
diff
changeset
|
98 if let Some(stripped) = name.strip_prefix(&format!("{REDIR_FD}_")) { |
|
a632a8874131
Get all the Linux-PAM functions into libpam-sys, and get tests right.
Paul Fisher <paul@pfish.zone>
parents:
130
diff
changeset
|
99 format!("assert_eq!(generated::{name} as i32, libpam_sys::{REDIR_FD}::{stripped}.into());") |
|
a632a8874131
Get all the Linux-PAM functions into libpam-sys, and get tests right.
Paul Fisher <paul@pfish.zone>
parents:
130
diff
changeset
|
100 } else { |
|
132
0b6a17f8c894
Get constant test working again with OpenPAM.
Paul Fisher <paul@pfish.zone>
parents:
131
diff
changeset
|
101 format!("assert_eq!(generated::{name} as i32, libpam_sys::{name});") |
|
131
a632a8874131
Get all the Linux-PAM functions into libpam-sys, and get tests right.
Paul Fisher <paul@pfish.zone>
parents:
130
diff
changeset
|
102 } |
|
110
2346fd501b7a
Add tests for constants and do other macro niceties.
Paul Fisher <paul@pfish.zone>
parents:
diff
changeset
|
103 }), |
|
2346fd501b7a
Add tests for constants and do other macro niceties.
Paul Fisher <paul@pfish.zone>
parents:
diff
changeset
|
104 ); |
|
2346fd501b7a
Add tests for constants and do other macro niceties.
Paul Fisher <paul@pfish.zone>
parents:
diff
changeset
|
105 tests.push("}".into()); |
| 127 | 106 let const_test = test_file("constant_test.rs"); |
| 107 fs::write(&const_test, tests.join("\n")).unwrap(); | |
| 108 rustfmt(&const_test); | |
| 109 } | |
| 110 | |
| 111 fn generate_ctest(config: &TestConfig) { | |
| 112 let mut test = ctest::TestGenerator::new(); | |
|
131
a632a8874131
Get all the Linux-PAM functions into libpam-sys, and get tests right.
Paul Fisher <paul@pfish.zone>
parents:
130
diff
changeset
|
113 test.cfg("_hack_impl", Some(&format!("{:?}", PamImpl::CURRENT))); |
| 127 | 114 |
|
131
a632a8874131
Get all the Linux-PAM functions into libpam-sys, and get tests right.
Paul Fisher <paul@pfish.zone>
parents:
130
diff
changeset
|
115 for &header in config.headers.iter() { |
| 127 | 116 if header.starts_with('"') { |
| 117 test.include(env::var("CARGO_MANIFEST_DIR").unwrap()); | |
| 118 } | |
| 119 test.header(&header[1..header.len() - 1]); | |
| 120 } | |
| 121 // These are opaque structs. | |
| 122 test.skip_struct(|name| matches!(name, "pam_handle" | "AppData")); | |
| 123 test.skip_type(|name| matches!(name, "ConversationCallback" | "CleanupCallback")); | |
|
131
a632a8874131
Get all the Linux-PAM functions into libpam-sys, and get tests right.
Paul Fisher <paul@pfish.zone>
parents:
130
diff
changeset
|
124 test.type_name(|name, is_struct, is_union| { |
| 127 | 125 assert!(!is_union); // we scabbin' |
|
131
a632a8874131
Get all the Linux-PAM functions into libpam-sys, and get tests right.
Paul Fisher <paul@pfish.zone>
parents:
130
diff
changeset
|
126 match (name, is_struct) { |
|
a632a8874131
Get all the Linux-PAM functions into libpam-sys, and get tests right.
Paul Fisher <paul@pfish.zone>
parents:
130
diff
changeset
|
127 ("AppData", _) => "void".into(), |
|
a632a8874131
Get all the Linux-PAM functions into libpam-sys, and get tests right.
Paul Fisher <paul@pfish.zone>
parents:
130
diff
changeset
|
128 (REDIR_FD, _) => format!("enum {REDIR_FD}"), |
|
a632a8874131
Get all the Linux-PAM functions into libpam-sys, and get tests right.
Paul Fisher <paul@pfish.zone>
parents:
130
diff
changeset
|
129 ("passwd", _) => "struct passwd".into(), |
|
a632a8874131
Get all the Linux-PAM functions into libpam-sys, and get tests right.
Paul Fisher <paul@pfish.zone>
parents:
130
diff
changeset
|
130 ("group", _) => "struct group".into(), |
|
a632a8874131
Get all the Linux-PAM functions into libpam-sys, and get tests right.
Paul Fisher <paul@pfish.zone>
parents:
130
diff
changeset
|
131 ("spwd", _) => "struct spwd".into(), |
|
a632a8874131
Get all the Linux-PAM functions into libpam-sys, and get tests right.
Paul Fisher <paul@pfish.zone>
parents:
130
diff
changeset
|
132 (name, true) => format!("struct {name}"), |
|
a632a8874131
Get all the Linux-PAM functions into libpam-sys, and get tests right.
Paul Fisher <paul@pfish.zone>
parents:
130
diff
changeset
|
133 (other, false) => other.into(), |
| 127 | 134 } |
| 135 }); | |
| 136 | |
| 137 // | |
| 138 // Welcome to THE HACK ZONE. | |
| 139 // | |
| 140 | |
| 141 // Define away constness because the various PAM implementations | |
| 142 // have different const annotations and this will surely drive you crazy. | |
| 143 test.define("const", Some("")); | |
| 144 | |
| 145 // Also replace all the `const`s with `mut`s in the ffi.rs file. | |
| 146 let file_contents = include_str!(concat!(env!("CARGO_MANIFEST_DIR"), "/../src/ffi.rs")); | |
| 147 let deconsted_file = test_file("ffi.rs"); | |
| 148 remove_consts(file_contents, &deconsted_file); | |
| 149 | |
| 150 test.generate(&deconsted_file, "ctest.rs"); | |
| 151 } | |
| 152 | |
| 153 fn remove_consts(file_contents: &str, out_file: impl AsRef<Path>) { | |
| 154 let deconstified = deconstify( | |
| 155 TokenStream::from_str(file_contents).unwrap(), | |
|
130
80c07e5ab22f
Transfer over (almost) completely to using libpam-sys.
Paul Fisher <paul@pfish.zone>
parents:
127
diff
changeset
|
156 &format_ident!("mut"), |
|
110
2346fd501b7a
Add tests for constants and do other macro niceties.
Paul Fisher <paul@pfish.zone>
parents:
diff
changeset
|
157 ) |
| 127 | 158 .to_string(); |
| 159 let out_file = out_file.as_ref(); | |
| 160 fs::write(out_file, deconstified).unwrap(); | |
| 161 rustfmt(out_file) | |
| 162 } | |
| 163 | |
| 164 fn rustfmt(file: impl AsRef<Path>) { | |
| 165 let status = Command::new(env!("CARGO")) | |
| 166 .args(["fmt", "--", file.as_ref().to_str().unwrap()]) | |
| 167 .status() | |
| 168 .unwrap(); | |
| 169 assert!(status.success(), "rustfmt exited with code {status}"); | |
| 170 } | |
| 171 | |
|
130
80c07e5ab22f
Transfer over (almost) completely to using libpam-sys.
Paul Fisher <paul@pfish.zone>
parents:
127
diff
changeset
|
172 fn deconstify(stream: TokenStream, mut_token: &Ident) -> TokenStream { |
| 127 | 173 TokenStream::from_iter(stream.into_iter().map(|token| { |
| 174 match token { | |
| 175 TokenTree::Group(g) => { | |
| 176 TokenTree::Group(Group::new(g.delimiter(), deconstify(g.stream(), mut_token))) | |
| 177 .into_token_stream() | |
| 178 } | |
| 179 TokenTree::Ident(id) if id == "const" => mut_token.into_token_stream(), | |
| 180 other => other.into_token_stream(), | |
| 181 } | |
| 182 })) | |
| 183 } | |
| 184 | |
| 185 fn test_file(name: impl AsRef<str>) -> String { | |
| 186 format!("{}/{}", env::var("OUT_DIR").unwrap(), name.as_ref()) | |
|
110
2346fd501b7a
Add tests for constants and do other macro niceties.
Paul Fisher <paul@pfish.zone>
parents:
diff
changeset
|
187 } |
|
2346fd501b7a
Add tests for constants and do other macro niceties.
Paul Fisher <paul@pfish.zone>
parents:
diff
changeset
|
188 |
|
121
397743cb70e2
Make libpam-sys-tests work on Illumos!
Paul Fisher <paul@pfish.zone>
parents:
118
diff
changeset
|
189 #[derive(Default)] |
|
110
2346fd501b7a
Add tests for constants and do other macro niceties.
Paul Fisher <paul@pfish.zone>
parents:
diff
changeset
|
190 struct TestConfig { |
|
124
f469b8d9ad78
Add tests for the original X/SSO constants list.
Paul Fisher <paul@pfish.zone>
parents:
122
diff
changeset
|
191 headers: Vec<&'static str>, |
|
131
a632a8874131
Get all the Linux-PAM functions into libpam-sys, and get tests right.
Paul Fisher <paul@pfish.zone>
parents:
130
diff
changeset
|
192 allow_types: Vec<&'static str>, |
|
124
f469b8d9ad78
Add tests for the original X/SSO constants list.
Paul Fisher <paul@pfish.zone>
parents:
122
diff
changeset
|
193 ignore_consts: Vec<&'static str>, |
|
110
2346fd501b7a
Add tests for constants and do other macro niceties.
Paul Fisher <paul@pfish.zone>
parents:
diff
changeset
|
194 } |
|
2346fd501b7a
Add tests for constants and do other macro niceties.
Paul Fisher <paul@pfish.zone>
parents:
diff
changeset
|
195 |
|
2346fd501b7a
Add tests for constants and do other macro niceties.
Paul Fisher <paul@pfish.zone>
parents:
diff
changeset
|
196 impl TestConfig { |
|
2346fd501b7a
Add tests for constants and do other macro niceties.
Paul Fisher <paul@pfish.zone>
parents:
diff
changeset
|
197 fn header_contents(&self) -> String { |
|
2346fd501b7a
Add tests for constants and do other macro niceties.
Paul Fisher <paul@pfish.zone>
parents:
diff
changeset
|
198 let vec: Vec<_> = self |
|
2346fd501b7a
Add tests for constants and do other macro niceties.
Paul Fisher <paul@pfish.zone>
parents:
diff
changeset
|
199 .headers |
|
2346fd501b7a
Add tests for constants and do other macro niceties.
Paul Fisher <paul@pfish.zone>
parents:
diff
changeset
|
200 .iter() |
|
124
f469b8d9ad78
Add tests for the original X/SSO constants list.
Paul Fisher <paul@pfish.zone>
parents:
122
diff
changeset
|
201 .map(|h| format!("#include {h}\n")) |
|
110
2346fd501b7a
Add tests for constants and do other macro niceties.
Paul Fisher <paul@pfish.zone>
parents:
diff
changeset
|
202 .collect(); |
|
2346fd501b7a
Add tests for constants and do other macro niceties.
Paul Fisher <paul@pfish.zone>
parents:
diff
changeset
|
203 vec.join("") |
|
2346fd501b7a
Add tests for constants and do other macro niceties.
Paul Fisher <paul@pfish.zone>
parents:
diff
changeset
|
204 } |
|
2346fd501b7a
Add tests for constants and do other macro niceties.
Paul Fisher <paul@pfish.zone>
parents:
diff
changeset
|
205 |
|
2346fd501b7a
Add tests for constants and do other macro niceties.
Paul Fisher <paul@pfish.zone>
parents:
diff
changeset
|
206 fn should_check_const(&self, item: &ItemConst) -> bool { |
|
124
f469b8d9ad78
Add tests for the original X/SSO constants list.
Paul Fisher <paul@pfish.zone>
parents:
122
diff
changeset
|
207 !self |
|
f469b8d9ad78
Add tests for the original X/SSO constants list.
Paul Fisher <paul@pfish.zone>
parents:
122
diff
changeset
|
208 .ignore_consts |
|
f469b8d9ad78
Add tests for the original X/SSO constants list.
Paul Fisher <paul@pfish.zone>
parents:
122
diff
changeset
|
209 .contains(&item.ident.to_string().as_ref()) |
|
110
2346fd501b7a
Add tests for constants and do other macro niceties.
Paul Fisher <paul@pfish.zone>
parents:
diff
changeset
|
210 } |
|
2346fd501b7a
Add tests for constants and do other macro niceties.
Paul Fisher <paul@pfish.zone>
parents:
diff
changeset
|
211 } |
