annotate libpam-sys/libpam-sys-test/build.rs @ 137:88627c057709 default tip

Add Sun PAM functions from Illumos headers.
author Paul Fisher <paul@pfish.zone>
date Thu, 03 Jul 2025 17:33:13 -0400
parents efbc235f01d3
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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;
136
efbc235f01d3 Separate libpam-sys-helpers from libpam-sys.
Paul Fisher <paul@pfish.zone>
parents: 134
diff changeset
2 use libpam_sys_helpers::pam_impl::PamImpl;
efbc235f01d3 Separate libpam-sys-helpers from libpam-sys.
Paul Fisher <paul@pfish.zone>
parents: 134
diff changeset
3 use libpam_sys_helpers::{pam_impl, pam_impl_name};
130
80c07e5ab22f Transfer over (almost) completely to using libpam-sys.
Paul Fisher <paul@pfish.zone>
parents: 127
diff changeset
4 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
5 use quote::{format_ident, ToTokens};
127
c77846f3a979 GET CTEST WORKING.
Paul Fisher <paul@pfish.zone>
parents: 125
diff changeset
6 use std::path::Path;
c77846f3a979 GET CTEST WORKING.
Paul Fisher <paul@pfish.zone>
parents: 125
diff changeset
7 use std::process::Command;
c77846f3a979 GET CTEST WORKING.
Paul Fisher <paul@pfish.zone>
parents: 125
diff changeset
8 use std::str::FromStr;
110
2346fd501b7a Add tests for constants and do other macro niceties.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
9 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
10 use syn::{Item, ItemConst};
110
2346fd501b7a Add tests for constants and do other macro niceties.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
11
131
a632a8874131 Get all the Linux-PAM functions into libpam-sys, and get tests right.
Paul Fisher <paul@pfish.zone>
parents: 130
diff changeset
12 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
13
110
2346fd501b7a Add tests for constants and do other macro niceties.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
14 fn main() {
136
efbc235f01d3 Separate libpam-sys-helpers from libpam-sys.
Paul Fisher <paul@pfish.zone>
parents: 134
diff changeset
15 pam_impl::enable_pam_impl_cfg();
121
397743cb70e2 Make libpam-sys-tests work on Illumos!
Paul Fisher <paul@pfish.zone>
parents: 118
diff changeset
16 let config = match PamImpl::CURRENT {
397743cb70e2 Make libpam-sys-tests work on Illumos!
Paul Fisher <paul@pfish.zone>
parents: 118
diff changeset
17 PamImpl::LinuxPam => TestConfig {
397743cb70e2 Make libpam-sys-tests work on Illumos!
Paul Fisher <paul@pfish.zone>
parents: 118
diff changeset
18 headers: vec![
124
f469b8d9ad78 Add tests for the original X/SSO constants list.
Paul Fisher <paul@pfish.zone>
parents: 122
diff changeset
19 "<security/_pam_types.h>",
f469b8d9ad78 Add tests for the original X/SSO constants list.
Paul Fisher <paul@pfish.zone>
parents: 122
diff changeset
20 "<security/pam_appl.h>",
f469b8d9ad78 Add tests for the original X/SSO constants list.
Paul Fisher <paul@pfish.zone>
parents: 122
diff changeset
21 "<security/pam_ext.h>",
f469b8d9ad78 Add tests for the original X/SSO constants list.
Paul Fisher <paul@pfish.zone>
parents: 122
diff changeset
22 "<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
23 "<security/pam_modutil.h>",
121
397743cb70e2 Make libpam-sys-tests work on Illumos!
Paul Fisher <paul@pfish.zone>
parents: 118
diff changeset
24 ],
131
a632a8874131 Get all the Linux-PAM functions into libpam-sys, and get tests right.
Paul Fisher <paul@pfish.zone>
parents: 130
diff changeset
25 allow_types: vec![REDIR_FD],
121
397743cb70e2 Make libpam-sys-tests work on Illumos!
Paul Fisher <paul@pfish.zone>
parents: 118
diff changeset
26 ignore_consts: vec![
124
f469b8d9ad78 Add tests for the original X/SSO constants list.
Paul Fisher <paul@pfish.zone>
parents: 122
diff changeset
27 "__LINUX_PAM__",
f469b8d9ad78 Add tests for the original X/SSO constants list.
Paul Fisher <paul@pfish.zone>
parents: 122
diff changeset
28 "__LINUX_PAM_MINOR__",
f469b8d9ad78 Add tests for the original X/SSO constants list.
Paul Fisher <paul@pfish.zone>
parents: 122
diff changeset
29 "PAM_AUTHTOK_RECOVER_ERR",
121
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 ..Default::default()
397743cb70e2 Make libpam-sys-tests work on Illumos!
Paul Fisher <paul@pfish.zone>
parents: 118
diff changeset
32 },
397743cb70e2 Make libpam-sys-tests work on Illumos!
Paul Fisher <paul@pfish.zone>
parents: 118
diff changeset
33 PamImpl::OpenPam => TestConfig {
397743cb70e2 Make libpam-sys-tests work on Illumos!
Paul Fisher <paul@pfish.zone>
parents: 118
diff changeset
34 headers: vec![
124
f469b8d9ad78 Add tests for the original X/SSO constants list.
Paul Fisher <paul@pfish.zone>
parents: 122
diff changeset
35 "<security/pam_types.h>",
f469b8d9ad78 Add tests for the original X/SSO constants list.
Paul Fisher <paul@pfish.zone>
parents: 122
diff changeset
36 "<security/openpam.h>",
f469b8d9ad78 Add tests for the original X/SSO constants list.
Paul Fisher <paul@pfish.zone>
parents: 122
diff changeset
37 "<security/pam_appl.h>",
f469b8d9ad78 Add tests for the original X/SSO constants list.
Paul Fisher <paul@pfish.zone>
parents: 122
diff changeset
38 "<security/pam_constants.h>",
121
397743cb70e2 Make libpam-sys-tests work on Illumos!
Paul Fisher <paul@pfish.zone>
parents: 118
diff changeset
39 ],
124
f469b8d9ad78 Add tests for the original X/SSO constants list.
Paul Fisher <paul@pfish.zone>
parents: 122
diff changeset
40 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
41 ..Default::default()
397743cb70e2 Make libpam-sys-tests work on Illumos!
Paul Fisher <paul@pfish.zone>
parents: 118
diff changeset
42 },
397743cb70e2 Make libpam-sys-tests work on Illumos!
Paul Fisher <paul@pfish.zone>
parents: 118
diff changeset
43 PamImpl::Sun => TestConfig {
137
88627c057709 Add Sun PAM functions from Illumos headers.
Paul Fisher <paul@pfish.zone>
parents: 136
diff changeset
44 headers: vec![
88627c057709 Add Sun PAM functions from Illumos headers.
Paul Fisher <paul@pfish.zone>
parents: 136
diff changeset
45 "<security/pam_appl.h>",
88627c057709 Add Sun PAM functions from Illumos headers.
Paul Fisher <paul@pfish.zone>
parents: 136
diff changeset
46 "<security/pam_modules.h>",
88627c057709 Add Sun PAM functions from Illumos headers.
Paul Fisher <paul@pfish.zone>
parents: 136
diff changeset
47 "\"illumos_pam_impl.h\"",
88627c057709 Add Sun PAM functions from Illumos headers.
Paul Fisher <paul@pfish.zone>
parents: 136
diff changeset
48 ],
121
397743cb70e2 Make libpam-sys-tests work on Illumos!
Paul Fisher <paul@pfish.zone>
parents: 118
diff changeset
49 ..Default::default()
397743cb70e2 Make libpam-sys-tests work on Illumos!
Paul Fisher <paul@pfish.zone>
parents: 118
diff changeset
50 },
124
f469b8d9ad78 Add tests for the original X/SSO constants list.
Paul Fisher <paul@pfish.zone>
parents: 122
diff changeset
51 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
52 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
53 ..Default::default()
f469b8d9ad78 Add tests for the original X/SSO constants list.
Paul Fisher <paul@pfish.zone>
parents: 122
diff changeset
54 },
134
6c1e1bdb4164 Use standard #[cfg] directives rather than custom proc macros.
Paul Fisher <paul@pfish.zone>
parents: 132
diff changeset
55 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
56 };
397743cb70e2 Make libpam-sys-tests work on Illumos!
Paul Fisher <paul@pfish.zone>
parents: 118
diff changeset
57 generate_const_test(&config);
127
c77846f3a979 GET CTEST WORKING.
Paul Fisher <paul@pfish.zone>
parents: 125
diff changeset
58 generate_ctest(&config);
110
2346fd501b7a Add tests for constants and do other macro niceties.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
59 }
2346fd501b7a Add tests for constants and do other macro niceties.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
60
121
397743cb70e2 Make libpam-sys-tests work on Illumos!
Paul Fisher <paul@pfish.zone>
parents: 118
diff changeset
61 fn generate_const_test(config: &TestConfig) {
397743cb70e2 Make libpam-sys-tests work on Illumos!
Paul Fisher <paul@pfish.zone>
parents: 118
diff changeset
62 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
63 .header_contents("_.h", &config.header_contents())
2346fd501b7a Add tests for constants and do other macro niceties.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
64 .merge_extern_blocks(true)
2346fd501b7a Add tests for constants and do other macro niceties.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
65 .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
66 .allowlist_var("(OPEN)?PAM_.*")
114
93d423b65555 Ignore version-specific OpenPAM constants; generate signed ints.
Paul Fisher <paul@pfish.zone>
parents: 113
diff changeset
67 .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
68
a632a8874131 Get all the Linux-PAM functions into libpam-sys, and get tests right.
Paul Fisher <paul@pfish.zone>
parents: 130
diff changeset
69 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
70 builder = builder.allowlist_type(typ);
121
397743cb70e2 Make libpam-sys-tests work on Illumos!
Paul Fisher <paul@pfish.zone>
parents: 118
diff changeset
71 }
110
2346fd501b7a Add tests for constants and do other macro niceties.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
72
131
a632a8874131 Get all the Linux-PAM functions into libpam-sys, and get tests right.
Paul Fisher <paul@pfish.zone>
parents: 130
diff changeset
73 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
74 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
75 let file = syn::parse_file(&generated.to_string()).unwrap();
137
88627c057709 Add Sun PAM functions from Illumos headers.
Paul Fisher <paul@pfish.zone>
parents: 136
diff changeset
76 let mut tests = vec![
88627c057709 Add Sun PAM functions from Illumos headers.
Paul Fisher <paul@pfish.zone>
parents: 136
diff changeset
77 "#[allow(deprecated, overflowing_literals)]".into(),
88627c057709 Add Sun PAM functions from Illumos headers.
Paul Fisher <paul@pfish.zone>
parents: 136
diff changeset
78 "fn main() {".into(),
127
c77846f3a979 GET CTEST WORKING.
Paul Fisher <paul@pfish.zone>
parents: 125
diff changeset
79 format!(
136
efbc235f01d3 Separate libpam-sys-helpers from libpam-sys.
Paul Fisher <paul@pfish.zone>
parents: 134
diff changeset
80 "assert_eq!(libpam_sys::pam_impl::PamImpl::CURRENT, libpam_sys::pam_impl::PamImpl::{:?});",
127
c77846f3a979 GET CTEST WORKING.
Paul Fisher <paul@pfish.zone>
parents: 125
diff changeset
81 PamImpl::CURRENT
c77846f3a979 GET CTEST WORKING.
Paul Fisher <paul@pfish.zone>
parents: 125
diff changeset
82 ),
c77846f3a979 GET CTEST WORKING.
Paul Fisher <paul@pfish.zone>
parents: 125
diff changeset
83 ];
110
2346fd501b7a Add tests for constants and do other macro niceties.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
84 tests.extend(
2346fd501b7a Add tests for constants and do other macro niceties.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
85 file.items
2346fd501b7a Add tests for constants and do other macro niceties.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
86 .iter()
2346fd501b7a Add tests for constants and do other macro niceties.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
87 .filter_map(|item| {
2346fd501b7a Add tests for constants and do other macro niceties.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
88 if let Item::Const(item) = item {
2346fd501b7a Add tests for constants and do other macro niceties.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
89 Some(item)
2346fd501b7a Add tests for constants and do other macro niceties.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
90 } else {
2346fd501b7a Add tests for constants and do other macro niceties.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
91 None
2346fd501b7a Add tests for constants and do other macro niceties.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
92 }
2346fd501b7a Add tests for constants and do other macro niceties.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
93 })
131
a632a8874131 Get all the Linux-PAM functions into libpam-sys, and get tests right.
Paul Fisher <paul@pfish.zone>
parents: 130
diff changeset
94 .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
95 .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
96 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
97 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
98 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
99 } else {
132
0b6a17f8c894 Get constant test working again with OpenPAM.
Paul Fisher <paul@pfish.zone>
parents: 131
diff changeset
100 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
101 }
110
2346fd501b7a Add tests for constants and do other macro niceties.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
102 }),
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 tests.push("}".into());
127
c77846f3a979 GET CTEST WORKING.
Paul Fisher <paul@pfish.zone>
parents: 125
diff changeset
105 let const_test = test_file("constant_test.rs");
c77846f3a979 GET CTEST WORKING.
Paul Fisher <paul@pfish.zone>
parents: 125
diff changeset
106 fs::write(&const_test, tests.join("\n")).unwrap();
c77846f3a979 GET CTEST WORKING.
Paul Fisher <paul@pfish.zone>
parents: 125
diff changeset
107 rustfmt(&const_test);
c77846f3a979 GET CTEST WORKING.
Paul Fisher <paul@pfish.zone>
parents: 125
diff changeset
108 }
c77846f3a979 GET CTEST WORKING.
Paul Fisher <paul@pfish.zone>
parents: 125
diff changeset
109
c77846f3a979 GET CTEST WORKING.
Paul Fisher <paul@pfish.zone>
parents: 125
diff changeset
110 fn generate_ctest(config: &TestConfig) {
c77846f3a979 GET CTEST WORKING.
Paul Fisher <paul@pfish.zone>
parents: 125
diff changeset
111 let mut test = ctest::TestGenerator::new();
136
efbc235f01d3 Separate libpam-sys-helpers from libpam-sys.
Paul Fisher <paul@pfish.zone>
parents: 134
diff changeset
112 test.cfg("pam_impl", Some(pam_impl_name!()));
127
c77846f3a979 GET CTEST WORKING.
Paul Fisher <paul@pfish.zone>
parents: 125
diff changeset
113
131
a632a8874131 Get all the Linux-PAM functions into libpam-sys, and get tests right.
Paul Fisher <paul@pfish.zone>
parents: 130
diff changeset
114 for &header in config.headers.iter() {
127
c77846f3a979 GET CTEST WORKING.
Paul Fisher <paul@pfish.zone>
parents: 125
diff changeset
115 if header.starts_with('"') {
c77846f3a979 GET CTEST WORKING.
Paul Fisher <paul@pfish.zone>
parents: 125
diff changeset
116 test.include(env::var("CARGO_MANIFEST_DIR").unwrap());
c77846f3a979 GET CTEST WORKING.
Paul Fisher <paul@pfish.zone>
parents: 125
diff changeset
117 }
c77846f3a979 GET CTEST WORKING.
Paul Fisher <paul@pfish.zone>
parents: 125
diff changeset
118 test.header(&header[1..header.len() - 1]);
c77846f3a979 GET CTEST WORKING.
Paul Fisher <paul@pfish.zone>
parents: 125
diff changeset
119 }
c77846f3a979 GET CTEST WORKING.
Paul Fisher <paul@pfish.zone>
parents: 125
diff changeset
120 // These are opaque structs.
c77846f3a979 GET CTEST WORKING.
Paul Fisher <paul@pfish.zone>
parents: 125
diff changeset
121 test.skip_struct(|name| matches!(name, "pam_handle" | "AppData"));
c77846f3a979 GET CTEST WORKING.
Paul Fisher <paul@pfish.zone>
parents: 125
diff changeset
122 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
123 test.type_name(|name, is_struct, is_union| {
127
c77846f3a979 GET CTEST WORKING.
Paul Fisher <paul@pfish.zone>
parents: 125
diff changeset
124 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
125 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
126 ("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
127 (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
128 ("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
129 ("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
130 ("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
131 (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
132 (other, false) => other.into(),
127
c77846f3a979 GET CTEST WORKING.
Paul Fisher <paul@pfish.zone>
parents: 125
diff changeset
133 }
c77846f3a979 GET CTEST WORKING.
Paul Fisher <paul@pfish.zone>
parents: 125
diff changeset
134 });
137
88627c057709 Add Sun PAM functions from Illumos headers.
Paul Fisher <paul@pfish.zone>
parents: 136
diff changeset
135 test.field_name(|_, name| {
88627c057709 Add Sun PAM functions from Illumos headers.
Paul Fisher <paul@pfish.zone>
parents: 136
diff changeset
136 match name {
88627c057709 Add Sun PAM functions from Illumos headers.
Paul Fisher <paul@pfish.zone>
parents: 136
diff changeset
137 "type_" => "type",
88627c057709 Add Sun PAM functions from Illumos headers.
Paul Fisher <paul@pfish.zone>
parents: 136
diff changeset
138 other => other,
88627c057709 Add Sun PAM functions from Illumos headers.
Paul Fisher <paul@pfish.zone>
parents: 136
diff changeset
139 }
88627c057709 Add Sun PAM functions from Illumos headers.
Paul Fisher <paul@pfish.zone>
parents: 136
diff changeset
140 .into()
88627c057709 Add Sun PAM functions from Illumos headers.
Paul Fisher <paul@pfish.zone>
parents: 136
diff changeset
141 });
127
c77846f3a979 GET CTEST WORKING.
Paul Fisher <paul@pfish.zone>
parents: 125
diff changeset
142
c77846f3a979 GET CTEST WORKING.
Paul Fisher <paul@pfish.zone>
parents: 125
diff changeset
143 //
c77846f3a979 GET CTEST WORKING.
Paul Fisher <paul@pfish.zone>
parents: 125
diff changeset
144 // Welcome to THE HACK ZONE.
c77846f3a979 GET CTEST WORKING.
Paul Fisher <paul@pfish.zone>
parents: 125
diff changeset
145 //
c77846f3a979 GET CTEST WORKING.
Paul Fisher <paul@pfish.zone>
parents: 125
diff changeset
146
c77846f3a979 GET CTEST WORKING.
Paul Fisher <paul@pfish.zone>
parents: 125
diff changeset
147 // Define away constness because the various PAM implementations
c77846f3a979 GET CTEST WORKING.
Paul Fisher <paul@pfish.zone>
parents: 125
diff changeset
148 // have different const annotations and this will surely drive you crazy.
c77846f3a979 GET CTEST WORKING.
Paul Fisher <paul@pfish.zone>
parents: 125
diff changeset
149 test.define("const", Some(""));
c77846f3a979 GET CTEST WORKING.
Paul Fisher <paul@pfish.zone>
parents: 125
diff changeset
150
c77846f3a979 GET CTEST WORKING.
Paul Fisher <paul@pfish.zone>
parents: 125
diff changeset
151 // Also replace all the `const`s with `mut`s in the ffi.rs file.
136
efbc235f01d3 Separate libpam-sys-helpers from libpam-sys.
Paul Fisher <paul@pfish.zone>
parents: 134
diff changeset
152 let file_contents = include_str!("../src/lib.rs");
127
c77846f3a979 GET CTEST WORKING.
Paul Fisher <paul@pfish.zone>
parents: 125
diff changeset
153 let deconsted_file = test_file("ffi.rs");
c77846f3a979 GET CTEST WORKING.
Paul Fisher <paul@pfish.zone>
parents: 125
diff changeset
154 remove_consts(file_contents, &deconsted_file);
c77846f3a979 GET CTEST WORKING.
Paul Fisher <paul@pfish.zone>
parents: 125
diff changeset
155
c77846f3a979 GET CTEST WORKING.
Paul Fisher <paul@pfish.zone>
parents: 125
diff changeset
156 test.generate(&deconsted_file, "ctest.rs");
c77846f3a979 GET CTEST WORKING.
Paul Fisher <paul@pfish.zone>
parents: 125
diff changeset
157 }
c77846f3a979 GET CTEST WORKING.
Paul Fisher <paul@pfish.zone>
parents: 125
diff changeset
158
c77846f3a979 GET CTEST WORKING.
Paul Fisher <paul@pfish.zone>
parents: 125
diff changeset
159 fn remove_consts(file_contents: &str, out_file: impl AsRef<Path>) {
c77846f3a979 GET CTEST WORKING.
Paul Fisher <paul@pfish.zone>
parents: 125
diff changeset
160 let deconstified = deconstify(
c77846f3a979 GET CTEST WORKING.
Paul Fisher <paul@pfish.zone>
parents: 125
diff changeset
161 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
162 &format_ident!("mut"),
110
2346fd501b7a Add tests for constants and do other macro niceties.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
163 )
127
c77846f3a979 GET CTEST WORKING.
Paul Fisher <paul@pfish.zone>
parents: 125
diff changeset
164 .to_string();
c77846f3a979 GET CTEST WORKING.
Paul Fisher <paul@pfish.zone>
parents: 125
diff changeset
165 let out_file = out_file.as_ref();
c77846f3a979 GET CTEST WORKING.
Paul Fisher <paul@pfish.zone>
parents: 125
diff changeset
166 fs::write(out_file, deconstified).unwrap();
c77846f3a979 GET CTEST WORKING.
Paul Fisher <paul@pfish.zone>
parents: 125
diff changeset
167 rustfmt(out_file)
c77846f3a979 GET CTEST WORKING.
Paul Fisher <paul@pfish.zone>
parents: 125
diff changeset
168 }
c77846f3a979 GET CTEST WORKING.
Paul Fisher <paul@pfish.zone>
parents: 125
diff changeset
169
c77846f3a979 GET CTEST WORKING.
Paul Fisher <paul@pfish.zone>
parents: 125
diff changeset
170 fn rustfmt(file: impl AsRef<Path>) {
c77846f3a979 GET CTEST WORKING.
Paul Fisher <paul@pfish.zone>
parents: 125
diff changeset
171 let status = Command::new(env!("CARGO"))
c77846f3a979 GET CTEST WORKING.
Paul Fisher <paul@pfish.zone>
parents: 125
diff changeset
172 .args(["fmt", "--", file.as_ref().to_str().unwrap()])
c77846f3a979 GET CTEST WORKING.
Paul Fisher <paul@pfish.zone>
parents: 125
diff changeset
173 .status()
c77846f3a979 GET CTEST WORKING.
Paul Fisher <paul@pfish.zone>
parents: 125
diff changeset
174 .unwrap();
c77846f3a979 GET CTEST WORKING.
Paul Fisher <paul@pfish.zone>
parents: 125
diff changeset
175 assert!(status.success(), "rustfmt exited with code {status}");
c77846f3a979 GET CTEST WORKING.
Paul Fisher <paul@pfish.zone>
parents: 125
diff changeset
176 }
c77846f3a979 GET CTEST WORKING.
Paul Fisher <paul@pfish.zone>
parents: 125
diff changeset
177
130
80c07e5ab22f Transfer over (almost) completely to using libpam-sys.
Paul Fisher <paul@pfish.zone>
parents: 127
diff changeset
178 fn deconstify(stream: TokenStream, mut_token: &Ident) -> TokenStream {
127
c77846f3a979 GET CTEST WORKING.
Paul Fisher <paul@pfish.zone>
parents: 125
diff changeset
179 TokenStream::from_iter(stream.into_iter().map(|token| {
c77846f3a979 GET CTEST WORKING.
Paul Fisher <paul@pfish.zone>
parents: 125
diff changeset
180 match token {
c77846f3a979 GET CTEST WORKING.
Paul Fisher <paul@pfish.zone>
parents: 125
diff changeset
181 TokenTree::Group(g) => {
c77846f3a979 GET CTEST WORKING.
Paul Fisher <paul@pfish.zone>
parents: 125
diff changeset
182 TokenTree::Group(Group::new(g.delimiter(), deconstify(g.stream(), mut_token)))
c77846f3a979 GET CTEST WORKING.
Paul Fisher <paul@pfish.zone>
parents: 125
diff changeset
183 .into_token_stream()
c77846f3a979 GET CTEST WORKING.
Paul Fisher <paul@pfish.zone>
parents: 125
diff changeset
184 }
c77846f3a979 GET CTEST WORKING.
Paul Fisher <paul@pfish.zone>
parents: 125
diff changeset
185 TokenTree::Ident(id) if id == "const" => mut_token.into_token_stream(),
c77846f3a979 GET CTEST WORKING.
Paul Fisher <paul@pfish.zone>
parents: 125
diff changeset
186 other => other.into_token_stream(),
c77846f3a979 GET CTEST WORKING.
Paul Fisher <paul@pfish.zone>
parents: 125
diff changeset
187 }
c77846f3a979 GET CTEST WORKING.
Paul Fisher <paul@pfish.zone>
parents: 125
diff changeset
188 }))
c77846f3a979 GET CTEST WORKING.
Paul Fisher <paul@pfish.zone>
parents: 125
diff changeset
189 }
c77846f3a979 GET CTEST WORKING.
Paul Fisher <paul@pfish.zone>
parents: 125
diff changeset
190
c77846f3a979 GET CTEST WORKING.
Paul Fisher <paul@pfish.zone>
parents: 125
diff changeset
191 fn test_file(name: impl AsRef<str>) -> String {
c77846f3a979 GET CTEST WORKING.
Paul Fisher <paul@pfish.zone>
parents: 125
diff changeset
192 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
193 }
2346fd501b7a Add tests for constants and do other macro niceties.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
194
121
397743cb70e2 Make libpam-sys-tests work on Illumos!
Paul Fisher <paul@pfish.zone>
parents: 118
diff changeset
195 #[derive(Default)]
110
2346fd501b7a Add tests for constants and do other macro niceties.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
196 struct TestConfig {
124
f469b8d9ad78 Add tests for the original X/SSO constants list.
Paul Fisher <paul@pfish.zone>
parents: 122
diff changeset
197 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
198 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
199 ignore_consts: Vec<&'static str>,
110
2346fd501b7a Add tests for constants and do other macro niceties.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
200 }
2346fd501b7a Add tests for constants and do other macro niceties.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
201
2346fd501b7a Add tests for constants and do other macro niceties.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
202 impl TestConfig {
2346fd501b7a Add tests for constants and do other macro niceties.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
203 fn header_contents(&self) -> String {
2346fd501b7a Add tests for constants and do other macro niceties.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
204 let vec: Vec<_> = self
2346fd501b7a Add tests for constants and do other macro niceties.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
205 .headers
2346fd501b7a Add tests for constants and do other macro niceties.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
206 .iter()
124
f469b8d9ad78 Add tests for the original X/SSO constants list.
Paul Fisher <paul@pfish.zone>
parents: 122
diff changeset
207 .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
208 .collect();
2346fd501b7a Add tests for constants and do other macro niceties.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
209 vec.join("")
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
2346fd501b7a Add tests for constants and do other macro niceties.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
212 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
213 !self
f469b8d9ad78 Add tests for the original X/SSO constants list.
Paul Fisher <paul@pfish.zone>
parents: 122
diff changeset
214 .ignore_consts
f469b8d9ad78 Add tests for the original X/SSO constants list.
Paul Fisher <paul@pfish.zone>
parents: 122
diff changeset
215 .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
216 }
2346fd501b7a Add tests for constants and do other macro niceties.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
217 }