Mercurial > crates > nonstick
annotate libpam-sys/libpam-sys-impls/build.rs @ 183:4f46681b3f54 default tip
Catch a few stray cargo fmt things.
author | Paul Fisher <paul@pfish.zone> |
---|---|
date | Wed, 30 Jul 2025 18:43:07 -0400 |
parents | 0730f5f2ee2a |
children |
rev | line source |
---|---|
134
6c1e1bdb4164
Use standard #[cfg] directives rather than custom proc macros.
Paul Fisher <paul@pfish.zone>
parents:
131
diff
changeset
|
1 #![allow(unexpected_cfgs)] |
127 | 2 |
134
6c1e1bdb4164
Use standard #[cfg] directives rather than custom proc macros.
Paul Fisher <paul@pfish.zone>
parents:
131
diff
changeset
|
3 use std::ffi::{c_void, CString}; |
6c1e1bdb4164
Use standard #[cfg] directives rather than custom proc macros.
Paul Fisher <paul@pfish.zone>
parents:
131
diff
changeset
|
4 use std::ptr::NonNull; |
136
efbc235f01d3
Separate libpam-sys-helpers from libpam-sys.
Paul Fisher <paul@pfish.zone>
parents:
134
diff
changeset
|
5 use std::{env, fs}; |
134
6c1e1bdb4164
Use standard #[cfg] directives rather than custom proc macros.
Paul Fisher <paul@pfish.zone>
parents:
131
diff
changeset
|
6 |
6c1e1bdb4164
Use standard #[cfg] directives rather than custom proc macros.
Paul Fisher <paul@pfish.zone>
parents:
131
diff
changeset
|
7 include!("src/pam_impl.rs"); |
127 | 8 |
158
d5b7b28d754e
Add `__TARGET_DEFAULT__` PamImpl and set up for docsrs build.
Paul Fisher <paul@pfish.zone>
parents:
148
diff
changeset
|
9 /// The strategy to use to detect PAM. |
d5b7b28d754e
Add `__TARGET_DEFAULT__` PamImpl and set up for docsrs build.
Paul Fisher <paul@pfish.zone>
parents:
148
diff
changeset
|
10 enum Detect { |
160
09dff285ff5e
Switch default PAM detection strategy to target-based.
Paul Fisher <paul@pfish.zone>
parents:
158
diff
changeset
|
11 /// Use the default PAM implementation based on the OS, |
09dff285ff5e
Switch default PAM detection strategy to target-based.
Paul Fisher <paul@pfish.zone>
parents:
158
diff
changeset
|
12 /// or the currently-installed version if the OS is not recognized. |
158
d5b7b28d754e
Add `__TARGET_DEFAULT__` PamImpl and set up for docsrs build.
Paul Fisher <paul@pfish.zone>
parents:
148
diff
changeset
|
13 TargetDefault, |
160
09dff285ff5e
Switch default PAM detection strategy to target-based.
Paul Fisher <paul@pfish.zone>
parents:
158
diff
changeset
|
14 /// Detect the installed implementation. |
09dff285ff5e
Switch default PAM detection strategy to target-based.
Paul Fisher <paul@pfish.zone>
parents:
158
diff
changeset
|
15 Installed, |
158
d5b7b28d754e
Add `__TARGET_DEFAULT__` PamImpl and set up for docsrs build.
Paul Fisher <paul@pfish.zone>
parents:
148
diff
changeset
|
16 /// Use the named version of PAM. |
d5b7b28d754e
Add `__TARGET_DEFAULT__` PamImpl and set up for docsrs build.
Paul Fisher <paul@pfish.zone>
parents:
148
diff
changeset
|
17 Specified(PamImpl), |
d5b7b28d754e
Add `__TARGET_DEFAULT__` PamImpl and set up for docsrs build.
Paul Fisher <paul@pfish.zone>
parents:
148
diff
changeset
|
18 } |
d5b7b28d754e
Add `__TARGET_DEFAULT__` PamImpl and set up for docsrs build.
Paul Fisher <paul@pfish.zone>
parents:
148
diff
changeset
|
19 |
160
09dff285ff5e
Switch default PAM detection strategy to target-based.
Paul Fisher <paul@pfish.zone>
parents:
158
diff
changeset
|
20 const INSTALLED: &str = "__installed__"; |
158
d5b7b28d754e
Add `__TARGET_DEFAULT__` PamImpl and set up for docsrs build.
Paul Fisher <paul@pfish.zone>
parents:
148
diff
changeset
|
21 |
106
49d9e2b5c189
An irresponsible mix of implementing libpam-sys and other stuff.
Paul Fisher <paul@pfish.zone>
parents:
diff
changeset
|
22 fn main() { |
158
d5b7b28d754e
Add `__TARGET_DEFAULT__` PamImpl and set up for docsrs build.
Paul Fisher <paul@pfish.zone>
parents:
148
diff
changeset
|
23 let detection = match option_env!("LIBPAMSYS_IMPL") { |
160
09dff285ff5e
Switch default PAM detection strategy to target-based.
Paul Fisher <paul@pfish.zone>
parents:
158
diff
changeset
|
24 Some("") | None => Detect::TargetDefault, |
09dff285ff5e
Switch default PAM detection strategy to target-based.
Paul Fisher <paul@pfish.zone>
parents:
158
diff
changeset
|
25 Some(INSTALLED) => Detect::Installed, |
158
d5b7b28d754e
Add `__TARGET_DEFAULT__` PamImpl and set up for docsrs build.
Paul Fisher <paul@pfish.zone>
parents:
148
diff
changeset
|
26 Some(val) => Detect::Specified(PamImpl::try_from(val).unwrap_or_else(|_| { |
d5b7b28d754e
Add `__TARGET_DEFAULT__` PamImpl and set up for docsrs build.
Paul Fisher <paul@pfish.zone>
parents:
148
diff
changeset
|
27 panic!( |
d5b7b28d754e
Add `__TARGET_DEFAULT__` PamImpl and set up for docsrs build.
Paul Fisher <paul@pfish.zone>
parents:
148
diff
changeset
|
28 "unknown PAM implementation {val:?}. \ |
d5b7b28d754e
Add `__TARGET_DEFAULT__` PamImpl and set up for docsrs build.
Paul Fisher <paul@pfish.zone>
parents:
148
diff
changeset
|
29 valid LIBPAMSYS_IMPLs are {:?}, \ |
173
46e8ce5cd5d1
Miscellaneous doc and code cleanups.
Paul Fisher <paul@pfish.zone>
parents:
160
diff
changeset
|
30 {INSTALLED:?} to use the currently-installed version, \ |
46e8ce5cd5d1
Miscellaneous doc and code cleanups.
Paul Fisher <paul@pfish.zone>
parents:
160
diff
changeset
|
31 or unset to use the OS default", |
158
d5b7b28d754e
Add `__TARGET_DEFAULT__` PamImpl and set up for docsrs build.
Paul Fisher <paul@pfish.zone>
parents:
148
diff
changeset
|
32 PamImpl::items() |
d5b7b28d754e
Add `__TARGET_DEFAULT__` PamImpl and set up for docsrs build.
Paul Fisher <paul@pfish.zone>
parents:
148
diff
changeset
|
33 ) |
d5b7b28d754e
Add `__TARGET_DEFAULT__` PamImpl and set up for docsrs build.
Paul Fisher <paul@pfish.zone>
parents:
148
diff
changeset
|
34 })), |
d5b7b28d754e
Add `__TARGET_DEFAULT__` PamImpl and set up for docsrs build.
Paul Fisher <paul@pfish.zone>
parents:
148
diff
changeset
|
35 }; |
d5b7b28d754e
Add `__TARGET_DEFAULT__` PamImpl and set up for docsrs build.
Paul Fisher <paul@pfish.zone>
parents:
148
diff
changeset
|
36 let pam_impl = match detection { |
160
09dff285ff5e
Switch default PAM detection strategy to target-based.
Paul Fisher <paul@pfish.zone>
parents:
158
diff
changeset
|
37 Detect::TargetDefault => LibPam::target_default(), |
09dff285ff5e
Switch default PAM detection strategy to target-based.
Paul Fisher <paul@pfish.zone>
parents:
158
diff
changeset
|
38 Detect::Installed => LibPam::probe_detect(), |
158
d5b7b28d754e
Add `__TARGET_DEFAULT__` PamImpl and set up for docsrs build.
Paul Fisher <paul@pfish.zone>
parents:
148
diff
changeset
|
39 Detect::Specified(other) => other, |
134
6c1e1bdb4164
Use standard #[cfg] directives rather than custom proc macros.
Paul Fisher <paul@pfish.zone>
parents:
131
diff
changeset
|
40 }; |
6c1e1bdb4164
Use standard #[cfg] directives rather than custom proc macros.
Paul Fisher <paul@pfish.zone>
parents:
131
diff
changeset
|
41 let impl_str = format!("{pam_impl:?}"); |
136
efbc235f01d3
Separate libpam-sys-helpers from libpam-sys.
Paul Fisher <paul@pfish.zone>
parents:
134
diff
changeset
|
42 println!("{}", generate_cfg(&impl_str)); |
efbc235f01d3
Separate libpam-sys-helpers from libpam-sys.
Paul Fisher <paul@pfish.zone>
parents:
134
diff
changeset
|
43 // We set this environment variable to substitute into docstrings. |
134
6c1e1bdb4164
Use standard #[cfg] directives rather than custom proc macros.
Paul Fisher <paul@pfish.zone>
parents:
131
diff
changeset
|
44 println!("cargo:rustc-env=LIBPAMSYS_IMPL={impl_str}"); |
6c1e1bdb4164
Use standard #[cfg] directives rather than custom proc macros.
Paul Fisher <paul@pfish.zone>
parents:
131
diff
changeset
|
45 fs::write( |
6c1e1bdb4164
Use standard #[cfg] directives rather than custom proc macros.
Paul Fisher <paul@pfish.zone>
parents:
131
diff
changeset
|
46 format!("{}/pam_impl_const.rs", env::var("OUT_DIR").unwrap()), |
136
efbc235f01d3
Separate libpam-sys-helpers from libpam-sys.
Paul Fisher <paul@pfish.zone>
parents:
134
diff
changeset
|
47 generate_consts(&impl_str), |
134
6c1e1bdb4164
Use standard #[cfg] directives rather than custom proc macros.
Paul Fisher <paul@pfish.zone>
parents:
131
diff
changeset
|
48 ) |
6c1e1bdb4164
Use standard #[cfg] directives rather than custom proc macros.
Paul Fisher <paul@pfish.zone>
parents:
131
diff
changeset
|
49 .unwrap(); |
106
49d9e2b5c189
An irresponsible mix of implementing libpam-sys and other stuff.
Paul Fisher <paul@pfish.zone>
parents:
diff
changeset
|
50 } |
134
6c1e1bdb4164
Use standard #[cfg] directives rather than custom proc macros.
Paul Fisher <paul@pfish.zone>
parents:
131
diff
changeset
|
51 |
136
efbc235f01d3
Separate libpam-sys-helpers from libpam-sys.
Paul Fisher <paul@pfish.zone>
parents:
134
diff
changeset
|
52 fn generate_consts(impl_str: &str) -> String { |
efbc235f01d3
Separate libpam-sys-helpers from libpam-sys.
Paul Fisher <paul@pfish.zone>
parents:
134
diff
changeset
|
53 format!( |
efbc235f01d3
Separate libpam-sys-helpers from libpam-sys.
Paul Fisher <paul@pfish.zone>
parents:
134
diff
changeset
|
54 "\ |
efbc235f01d3
Separate libpam-sys-helpers from libpam-sys.
Paul Fisher <paul@pfish.zone>
parents:
134
diff
changeset
|
55 impl PamImpl {{ |
efbc235f01d3
Separate libpam-sys-helpers from libpam-sys.
Paul Fisher <paul@pfish.zone>
parents:
134
diff
changeset
|
56 /// The implementation of libpam this was built for (`{impl_str}`). |
efbc235f01d3
Separate libpam-sys-helpers from libpam-sys.
Paul Fisher <paul@pfish.zone>
parents:
134
diff
changeset
|
57 pub const CURRENT: Self = Self::{impl_str}; |
efbc235f01d3
Separate libpam-sys-helpers from libpam-sys.
Paul Fisher <paul@pfish.zone>
parents:
134
diff
changeset
|
58 }} |
efbc235f01d3
Separate libpam-sys-helpers from libpam-sys.
Paul Fisher <paul@pfish.zone>
parents:
134
diff
changeset
|
59 |
efbc235f01d3
Separate libpam-sys-helpers from libpam-sys.
Paul Fisher <paul@pfish.zone>
parents:
134
diff
changeset
|
60 /// String name of [`PamImpl::CURRENT`], for substituting into docs. |
efbc235f01d3
Separate libpam-sys-helpers from libpam-sys.
Paul Fisher <paul@pfish.zone>
parents:
134
diff
changeset
|
61 #[macro_export] |
efbc235f01d3
Separate libpam-sys-helpers from libpam-sys.
Paul Fisher <paul@pfish.zone>
parents:
134
diff
changeset
|
62 macro_rules! pam_impl_name {{ () => ({impl_str:?}) }} |
efbc235f01d3
Separate libpam-sys-helpers from libpam-sys.
Paul Fisher <paul@pfish.zone>
parents:
134
diff
changeset
|
63 " |
efbc235f01d3
Separate libpam-sys-helpers from libpam-sys.
Paul Fisher <paul@pfish.zone>
parents:
134
diff
changeset
|
64 ) |
134
6c1e1bdb4164
Use standard #[cfg] directives rather than custom proc macros.
Paul Fisher <paul@pfish.zone>
parents:
131
diff
changeset
|
65 } |
6c1e1bdb4164
Use standard #[cfg] directives rather than custom proc macros.
Paul Fisher <paul@pfish.zone>
parents:
131
diff
changeset
|
66 |
6c1e1bdb4164
Use standard #[cfg] directives rather than custom proc macros.
Paul Fisher <paul@pfish.zone>
parents:
131
diff
changeset
|
67 struct LibPam(NonNull<c_void>); |
6c1e1bdb4164
Use standard #[cfg] directives rather than custom proc macros.
Paul Fisher <paul@pfish.zone>
parents:
131
diff
changeset
|
68 |
6c1e1bdb4164
Use standard #[cfg] directives rather than custom proc macros.
Paul Fisher <paul@pfish.zone>
parents:
131
diff
changeset
|
69 impl LibPam { |
158
d5b7b28d754e
Add `__TARGET_DEFAULT__` PamImpl and set up for docsrs build.
Paul Fisher <paul@pfish.zone>
parents:
148
diff
changeset
|
70 /// Guess the PAM implementation based on the current OS. |
160
09dff285ff5e
Switch default PAM detection strategy to target-based.
Paul Fisher <paul@pfish.zone>
parents:
158
diff
changeset
|
71 fn target_default() -> PamImpl { |
136
efbc235f01d3
Separate libpam-sys-helpers from libpam-sys.
Paul Fisher <paul@pfish.zone>
parents:
134
diff
changeset
|
72 if cfg!(target_os = "linux") { |
efbc235f01d3
Separate libpam-sys-helpers from libpam-sys.
Paul Fisher <paul@pfish.zone>
parents:
134
diff
changeset
|
73 PamImpl::LinuxPam |
efbc235f01d3
Separate libpam-sys-helpers from libpam-sys.
Paul Fisher <paul@pfish.zone>
parents:
134
diff
changeset
|
74 } else if cfg!(any( |
efbc235f01d3
Separate libpam-sys-helpers from libpam-sys.
Paul Fisher <paul@pfish.zone>
parents:
134
diff
changeset
|
75 target_os = "macos", |
efbc235f01d3
Separate libpam-sys-helpers from libpam-sys.
Paul Fisher <paul@pfish.zone>
parents:
134
diff
changeset
|
76 target_os = "freebsd", |
efbc235f01d3
Separate libpam-sys-helpers from libpam-sys.
Paul Fisher <paul@pfish.zone>
parents:
134
diff
changeset
|
77 target_os = "netbsd", |
efbc235f01d3
Separate libpam-sys-helpers from libpam-sys.
Paul Fisher <paul@pfish.zone>
parents:
134
diff
changeset
|
78 target_os = "dragonfly", |
efbc235f01d3
Separate libpam-sys-helpers from libpam-sys.
Paul Fisher <paul@pfish.zone>
parents:
134
diff
changeset
|
79 target_os = "openbsd", |
efbc235f01d3
Separate libpam-sys-helpers from libpam-sys.
Paul Fisher <paul@pfish.zone>
parents:
134
diff
changeset
|
80 )) { |
efbc235f01d3
Separate libpam-sys-helpers from libpam-sys.
Paul Fisher <paul@pfish.zone>
parents:
134
diff
changeset
|
81 PamImpl::OpenPam |
efbc235f01d3
Separate libpam-sys-helpers from libpam-sys.
Paul Fisher <paul@pfish.zone>
parents:
134
diff
changeset
|
82 } else if cfg!(any(target_os = "illumos", target_os = "solaris")) { |
efbc235f01d3
Separate libpam-sys-helpers from libpam-sys.
Paul Fisher <paul@pfish.zone>
parents:
134
diff
changeset
|
83 PamImpl::Sun |
efbc235f01d3
Separate libpam-sys-helpers from libpam-sys.
Paul Fisher <paul@pfish.zone>
parents:
134
diff
changeset
|
84 } else { |
160
09dff285ff5e
Switch default PAM detection strategy to target-based.
Paul Fisher <paul@pfish.zone>
parents:
158
diff
changeset
|
85 Self::probe_detect() |
136
efbc235f01d3
Separate libpam-sys-helpers from libpam-sys.
Paul Fisher <paul@pfish.zone>
parents:
134
diff
changeset
|
86 } |
efbc235f01d3
Separate libpam-sys-helpers from libpam-sys.
Paul Fisher <paul@pfish.zone>
parents:
134
diff
changeset
|
87 } |
efbc235f01d3
Separate libpam-sys-helpers from libpam-sys.
Paul Fisher <paul@pfish.zone>
parents:
134
diff
changeset
|
88 |
160
09dff285ff5e
Switch default PAM detection strategy to target-based.
Paul Fisher <paul@pfish.zone>
parents:
158
diff
changeset
|
89 /// Look at the currently-installed LibPAM. |
09dff285ff5e
Switch default PAM detection strategy to target-based.
Paul Fisher <paul@pfish.zone>
parents:
158
diff
changeset
|
90 fn probe_detect() -> PamImpl { |
09dff285ff5e
Switch default PAM detection strategy to target-based.
Paul Fisher <paul@pfish.zone>
parents:
158
diff
changeset
|
91 if let Some(lib) = Self::open() { |
09dff285ff5e
Switch default PAM detection strategy to target-based.
Paul Fisher <paul@pfish.zone>
parents:
158
diff
changeset
|
92 if lib.has("pam_syslog") { |
09dff285ff5e
Switch default PAM detection strategy to target-based.
Paul Fisher <paul@pfish.zone>
parents:
158
diff
changeset
|
93 return PamImpl::LinuxPam; |
09dff285ff5e
Switch default PAM detection strategy to target-based.
Paul Fisher <paul@pfish.zone>
parents:
158
diff
changeset
|
94 } else if lib.has("_openpam_log") { |
09dff285ff5e
Switch default PAM detection strategy to target-based.
Paul Fisher <paul@pfish.zone>
parents:
158
diff
changeset
|
95 return PamImpl::OpenPam; |
09dff285ff5e
Switch default PAM detection strategy to target-based.
Paul Fisher <paul@pfish.zone>
parents:
158
diff
changeset
|
96 } else if lib.has("__pam_get_authtok") { |
09dff285ff5e
Switch default PAM detection strategy to target-based.
Paul Fisher <paul@pfish.zone>
parents:
158
diff
changeset
|
97 return PamImpl::Sun; |
09dff285ff5e
Switch default PAM detection strategy to target-based.
Paul Fisher <paul@pfish.zone>
parents:
158
diff
changeset
|
98 } |
09dff285ff5e
Switch default PAM detection strategy to target-based.
Paul Fisher <paul@pfish.zone>
parents:
158
diff
changeset
|
99 } |
09dff285ff5e
Switch default PAM detection strategy to target-based.
Paul Fisher <paul@pfish.zone>
parents:
158
diff
changeset
|
100 // idk |
09dff285ff5e
Switch default PAM detection strategy to target-based.
Paul Fisher <paul@pfish.zone>
parents:
158
diff
changeset
|
101 PamImpl::XSso |
09dff285ff5e
Switch default PAM detection strategy to target-based.
Paul Fisher <paul@pfish.zone>
parents:
158
diff
changeset
|
102 } |
09dff285ff5e
Switch default PAM detection strategy to target-based.
Paul Fisher <paul@pfish.zone>
parents:
158
diff
changeset
|
103 |
134
6c1e1bdb4164
Use standard #[cfg] directives rather than custom proc macros.
Paul Fisher <paul@pfish.zone>
parents:
131
diff
changeset
|
104 fn open() -> Option<Self> { |
158
d5b7b28d754e
Add `__TARGET_DEFAULT__` PamImpl and set up for docsrs build.
Paul Fisher <paul@pfish.zone>
parents:
148
diff
changeset
|
105 let dlopen = |s: &[u8]| unsafe { libc::dlopen(s.as_ptr().cast(), libc::RTLD_LAZY) }; |
d5b7b28d754e
Add `__TARGET_DEFAULT__` PamImpl and set up for docsrs build.
Paul Fisher <paul@pfish.zone>
parents:
148
diff
changeset
|
106 NonNull::new(dlopen(b"libpam.so\0")) |
d5b7b28d754e
Add `__TARGET_DEFAULT__` PamImpl and set up for docsrs build.
Paul Fisher <paul@pfish.zone>
parents:
148
diff
changeset
|
107 .or_else(|| NonNull::new(dlopen(b"libpam.dylib\0"))) |
134
6c1e1bdb4164
Use standard #[cfg] directives rather than custom proc macros.
Paul Fisher <paul@pfish.zone>
parents:
131
diff
changeset
|
108 .map(Self) |
6c1e1bdb4164
Use standard #[cfg] directives rather than custom proc macros.
Paul Fisher <paul@pfish.zone>
parents:
131
diff
changeset
|
109 } |
6c1e1bdb4164
Use standard #[cfg] directives rather than custom proc macros.
Paul Fisher <paul@pfish.zone>
parents:
131
diff
changeset
|
110 |
6c1e1bdb4164
Use standard #[cfg] directives rather than custom proc macros.
Paul Fisher <paul@pfish.zone>
parents:
131
diff
changeset
|
111 fn has(&self, name: &str) -> bool { |
6c1e1bdb4164
Use standard #[cfg] directives rather than custom proc macros.
Paul Fisher <paul@pfish.zone>
parents:
131
diff
changeset
|
112 let name = CString::new(name).unwrap(); |
6c1e1bdb4164
Use standard #[cfg] directives rather than custom proc macros.
Paul Fisher <paul@pfish.zone>
parents:
131
diff
changeset
|
113 let symbol = unsafe { libc::dlsym(self.0.as_ptr(), name.as_ptr()) }; |
6c1e1bdb4164
Use standard #[cfg] directives rather than custom proc macros.
Paul Fisher <paul@pfish.zone>
parents:
131
diff
changeset
|
114 !symbol.is_null() |
6c1e1bdb4164
Use standard #[cfg] directives rather than custom proc macros.
Paul Fisher <paul@pfish.zone>
parents:
131
diff
changeset
|
115 } |
6c1e1bdb4164
Use standard #[cfg] directives rather than custom proc macros.
Paul Fisher <paul@pfish.zone>
parents:
131
diff
changeset
|
116 } |
6c1e1bdb4164
Use standard #[cfg] directives rather than custom proc macros.
Paul Fisher <paul@pfish.zone>
parents:
131
diff
changeset
|
117 |
6c1e1bdb4164
Use standard #[cfg] directives rather than custom proc macros.
Paul Fisher <paul@pfish.zone>
parents:
131
diff
changeset
|
118 impl Drop for LibPam { |
6c1e1bdb4164
Use standard #[cfg] directives rather than custom proc macros.
Paul Fisher <paul@pfish.zone>
parents:
131
diff
changeset
|
119 fn drop(&mut self) { |
6c1e1bdb4164
Use standard #[cfg] directives rather than custom proc macros.
Paul Fisher <paul@pfish.zone>
parents:
131
diff
changeset
|
120 unsafe { |
6c1e1bdb4164
Use standard #[cfg] directives rather than custom proc macros.
Paul Fisher <paul@pfish.zone>
parents:
131
diff
changeset
|
121 libc::dlclose(self.0.as_ptr()); |
6c1e1bdb4164
Use standard #[cfg] directives rather than custom proc macros.
Paul Fisher <paul@pfish.zone>
parents:
131
diff
changeset
|
122 } |
6c1e1bdb4164
Use standard #[cfg] directives rather than custom proc macros.
Paul Fisher <paul@pfish.zone>
parents:
131
diff
changeset
|
123 } |
6c1e1bdb4164
Use standard #[cfg] directives rather than custom proc macros.
Paul Fisher <paul@pfish.zone>
parents:
131
diff
changeset
|
124 } |