Skip to content

Commit 68087c8

Browse files
committed
API no longer compiles in custom OS information, allowing for cross-compilation
1 parent cd37d11 commit 68087c8

File tree

10 files changed

+412
-235
lines changed

10 files changed

+412
-235
lines changed

Cargo.toml

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,6 @@ local-run = []
2020
# Run API endpoints against a remote agent
2121
remote-run = ["czmq"]
2222

23-
[build-dependencies]
24-
25-
regex = "0.1.*"
26-
2723
[dev-dependencies]
2824

2925
tempdir = "0.3"

build.rs

Lines changed: 0 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,6 @@
66
// https://www.tldrlegal.com/l/mpl-2.0>. This file may not be copied,
77
// modified, or distributed except according to those terms.
88

9-
extern crate regex;
10-
11-
#[cfg(all(feature = "local-run", not(feature = "remote-run")))]
12-
use regex::Regex;
13-
#[cfg(all(feature = "local-run", not(feature = "remote-run")))]
14-
use std::{env, fs};
15-
#[cfg(all(feature = "local-run", not(feature = "remote-run")))]
16-
use std::io::Read;
17-
189
#[cfg(all(feature = "local-run", feature = "remote-run"))]
1910
fn main() {
2011
panic!("Mutually exclusive features `local-run` and `remote-run`. You must only enable one.");
@@ -27,67 +18,8 @@ fn main() {
2718

2819
#[cfg(all(feature = "local-run", not(feature = "remote-run")))]
2920
fn main() {
30-
let os = fingerprint_os();
31-
println!("cargo:rustc-cfg=in_os_family=\"{}\"", os.family);
32-
println!("cargo:rustc-cfg=in_os_platform=\"{}\"", os.platform);
3321
}
3422

3523
#[cfg(all(feature = "remote-run", not(feature = "local-run")))]
3624
fn main() {
37-
println!("cargo:rustc-link-search=native=/usr/local/lib");
38-
}
39-
40-
#[cfg(all(feature = "local-run", not(feature = "remote-run")))]
41-
struct Os {
42-
family: String,
43-
platform: String,
44-
}
45-
46-
/// Fingerprint the OS more granularly than Rust to ensure we build
47-
/// the right modules.
48-
#[cfg(all(feature = "local-run", not(feature = "remote-run")))]
49-
fn fingerprint_os() -> Os {
50-
if cfg!(target_os = "linux") {
51-
// Red Hat family
52-
if let Ok(mut fh) = fs::File::open("/etc/redhat-release") {
53-
let mut fc = String::new();
54-
fh.read_to_string(&mut fc).unwrap();
55-
56-
let regex = Regex::new(r"^([A-Za-z ]+?)(?: AS)? release").unwrap();
57-
if let Some(cap) = regex.captures(&fc) {
58-
let platform = match cap.at(1).unwrap() {
59-
"Red Hat Enterprise Linux" => "rhel".to_string(),
60-
_ => cap.at(1).unwrap().to_string().to_lowercase(),
61-
};
62-
63-
return Os {
64-
family: "redhat".to_string(),
65-
platform: platform,
66-
};
67-
}
68-
}
69-
// Ubuntu
70-
else if let Ok(_) = fs::metadata("/etc/lsb-release") {
71-
return Os {
72-
family: "debian".to_string(),
73-
platform: "ubuntu".to_string(),
74-
};
75-
}
76-
// Debian
77-
else if let Ok(_) = fs::metadata("/etc/debian_version") {
78-
return Os {
79-
family: "debian".to_string(),
80-
platform: "debian".to_string(),
81-
};
82-
}
83-
84-
panic!("Unknown Linux distro");
85-
} else if cfg!(any(target_os = "macos", target_os = "freebsd")) {
86-
return Os {
87-
family: env::consts::FAMILY.to_string(),
88-
platform: env::consts::OS.to_string(),
89-
};
90-
}
91-
92-
panic!("Unsupported distro");
9325
}

src/target/centos.rs

Lines changed: 9 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,16 @@ use file::{FileTarget, FileOwner};
1919
use package::PackageTarget;
2020
use service::ServiceTarget;
2121
use std::env;
22-
use super::{default_base as default, linux_base as linux, redhat_base as redhat, Target};
22+
use super::{default_base as default, linux_base as linux, redhat_base as redhat};
2323
use telemetry::TelemetryTarget;
2424

25+
pub struct CentosTarget;
26+
2527
//
2628
// Command
2729
//
2830

29-
impl CommandTarget for Target {
31+
impl CommandTarget for CentosTarget {
3032
#[allow(unused_variables)]
3133
fn exec(host: &mut Host, cmd: &str) -> Result<CommandResult> {
3234
default::command_exec(cmd)
@@ -37,7 +39,7 @@ impl CommandTarget for Target {
3739
// Directory
3840
//
3941

40-
impl DirectoryTarget for Target {
42+
impl DirectoryTarget for CentosTarget {
4143
#[allow(unused_variables)]
4244
fn directory_is_directory(host: &mut Host, path: &str) -> Result<bool> {
4345
default::directory_is_directory(path)
@@ -88,7 +90,7 @@ impl DirectoryTarget for Target {
8890
// File
8991
//
9092

91-
impl FileTarget for Target {
93+
impl FileTarget for CentosTarget {
9294
#[allow(unused_variables)]
9395
fn file_is_file(host: &mut Host, path: &str) -> Result<bool> {
9496
default::file_is_file(path)
@@ -139,7 +141,7 @@ impl FileTarget for Target {
139141
// Package
140142
//
141143

142-
impl PackageTarget for Target {
144+
impl PackageTarget for CentosTarget {
143145
fn default_provider(host: &mut Host) -> Result<Providers> {
144146
default::default_provider(host, vec![Providers::Yum])
145147
}
@@ -149,7 +151,7 @@ impl PackageTarget for Target {
149151
// Service
150152
//
151153

152-
impl ServiceTarget for Target {
154+
impl ServiceTarget for CentosTarget {
153155
#[allow(unused_variables)]
154156
fn service_action(host: &mut Host, name: &str, action: &str) -> Result<CommandResult> {
155157
if try!(linux::using_systemd()) {
@@ -164,7 +166,7 @@ impl ServiceTarget for Target {
164166
// Telemetry
165167
//
166168

167-
impl TelemetryTarget for Target {
169+
impl TelemetryTarget for CentosTarget {
168170
#[allow(unused_variables)]
169171
fn telemetry_init(host: &mut Host) -> Result<Telemetry> {
170172
let cpu_vendor = try!(linux::cpu_vendor());
@@ -186,25 +188,3 @@ impl TelemetryTarget for Target {
186188
))
187189
}
188190
}
189-
190-
#[cfg(test)]
191-
mod tests {
192-
use Host;
193-
use package::PackageTarget;
194-
use target::Target;
195-
use telemetry::TelemetryTarget;
196-
197-
#[test]
198-
fn test_package_default_provider() {
199-
let mut host = Host::new();
200-
let result = Target::default_provider(&mut host);
201-
assert!(result.is_ok());
202-
}
203-
204-
#[test]
205-
fn test_telemetry_init() {
206-
let mut host = Host::new();
207-
let result = Target::telemetry_init(&mut host);
208-
assert!(result.is_ok());
209-
}
210-
}

src/target/debian.rs

Lines changed: 9 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -21,14 +21,16 @@ use service::ServiceTarget;
2121
use std::env;
2222
use std::fs::File;
2323
use std::io::Read;
24-
use super::{debian_base as debian, default_base as default, linux_base as linux, Target};
24+
use super::{debian_base as debian, default_base as default, linux_base as linux};
2525
use telemetry::TelemetryTarget;
2626

27+
pub struct DebianTarget;
28+
2729
//
2830
// Command
2931
//
3032

31-
impl CommandTarget for Target {
33+
impl CommandTarget for DebianTarget {
3234
#[allow(unused_variables)]
3335
fn exec(host: &mut Host, cmd: &str) -> Result<CommandResult> {
3436
default::command_exec(cmd)
@@ -39,7 +41,7 @@ impl CommandTarget for Target {
3941
// Directory
4042
//
4143

42-
impl DirectoryTarget for Target {
44+
impl DirectoryTarget for DebianTarget {
4345
#[allow(unused_variables)]
4446
fn directory_is_directory(host: &mut Host, path: &str) -> Result<bool> {
4547
default::directory_is_directory(path)
@@ -90,7 +92,7 @@ impl DirectoryTarget for Target {
9092
// File
9193
//
9294

93-
impl FileTarget for Target {
95+
impl FileTarget for DebianTarget {
9496
#[allow(unused_variables)]
9597
fn file_is_file(host: &mut Host, path: &str) -> Result<bool> {
9698
default::file_is_file(path)
@@ -141,7 +143,7 @@ impl FileTarget for Target {
141143
// Package
142144
//
143145

144-
impl PackageTarget for Target {
146+
impl PackageTarget for DebianTarget {
145147
fn default_provider(host: &mut Host) -> Result<Providers> {
146148
default::default_provider(host, vec![Providers::Apt])
147149
}
@@ -151,7 +153,7 @@ impl PackageTarget for Target {
151153
// Service
152154
//
153155

154-
impl ServiceTarget for Target {
156+
impl ServiceTarget for DebianTarget {
155157
#[allow(unused_variables)]
156158
fn service_action(host: &mut Host, name: &str, action: &str) -> Result<CommandResult> {
157159
if try!(linux::using_systemd()) {
@@ -166,7 +168,7 @@ impl ServiceTarget for Target {
166168
// Telemetry
167169
//
168170

169-
impl TelemetryTarget for Target {
171+
impl TelemetryTarget for DebianTarget {
170172
#[allow(unused_variables)]
171173
fn telemetry_init(host: &mut Host) -> Result<Telemetry> {
172174
let cpu_vendor = try!(linux::cpu_vendor());
@@ -195,25 +197,3 @@ fn telemetry_version() -> Result<String> {
195197
fh.read_to_string(&mut fc).unwrap();
196198
Ok(fc)
197199
}
198-
199-
#[cfg(test)]
200-
mod tests {
201-
use Host;
202-
use package::PackageTarget;
203-
use target::Target;
204-
use telemetry::TelemetryTarget;
205-
206-
#[test]
207-
fn test_package_default_provider() {
208-
let mut host = Host::new();
209-
let result = Target::default_provider(&mut host);
210-
assert!(result.is_ok());
211-
}
212-
213-
#[test]
214-
fn test_telemetry_init() {
215-
let mut host = Host::new();
216-
let result = Target::telemetry_init(&mut host);
217-
assert!(result.is_ok());
218-
}
219-
}

src/target/fedora.rs

Lines changed: 9 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,16 @@ use file::{FileTarget, FileOwner};
1919
use package::PackageTarget;
2020
use service::ServiceTarget;
2121
use std::env;
22-
use super::{default_base as default, linux_base as linux, redhat_base as redhat, Target};
22+
use super::{default_base as default, linux_base as linux, redhat_base as redhat};
2323
use telemetry::TelemetryTarget;
2424

25+
pub struct FedoraTarget;
26+
2527
//
2628
// Command
2729
//
2830

29-
impl CommandTarget for Target {
31+
impl CommandTarget for FedoraTarget {
3032
#[allow(unused_variables)]
3133
fn exec(host: &mut Host, cmd: &str) -> Result<CommandResult> {
3234
default::command_exec(cmd)
@@ -37,7 +39,7 @@ impl CommandTarget for Target {
3739
// Directory
3840
//
3941

40-
impl DirectoryTarget for Target {
42+
impl DirectoryTarget for FedoraTarget {
4143
#[allow(unused_variables)]
4244
fn directory_is_directory(host: &mut Host, path: &str) -> Result<bool> {
4345
default::directory_is_directory(path)
@@ -88,7 +90,7 @@ impl DirectoryTarget for Target {
8890
// File
8991
//
9092

91-
impl FileTarget for Target {
93+
impl FileTarget for FedoraTarget {
9294
#[allow(unused_variables)]
9395
fn file_is_file(host: &mut Host, path: &str) -> Result<bool> {
9496
default::file_is_file(path)
@@ -139,7 +141,7 @@ impl FileTarget for Target {
139141
// Package
140142
//
141143

142-
impl PackageTarget for Target {
144+
impl PackageTarget for FedoraTarget {
143145
fn default_provider(host: &mut Host) -> Result<Providers> {
144146
default::default_provider(host, vec![Providers::Dnf, Providers::Yum])
145147
}
@@ -149,7 +151,7 @@ impl PackageTarget for Target {
149151
// Service
150152
//
151153

152-
impl ServiceTarget for Target {
154+
impl ServiceTarget for FedoraTarget {
153155
#[allow(unused_variables)]
154156
fn service_action(host: &mut Host, name: &str, action: &str) -> Result<CommandResult> {
155157
if try!(linux::using_systemd()) {
@@ -164,7 +166,7 @@ impl ServiceTarget for Target {
164166
// Telemetry
165167
//
166168

167-
impl TelemetryTarget for Target {
169+
impl TelemetryTarget for FedoraTarget {
168170
#[allow(unused_variables)]
169171
fn telemetry_init(host: &mut Host) -> Result<Telemetry> {
170172
let cpu_vendor = try!(linux::cpu_vendor());
@@ -186,25 +188,3 @@ impl TelemetryTarget for Target {
186188
))
187189
}
188190
}
189-
190-
#[cfg(test)]
191-
mod tests {
192-
use Host;
193-
use package::PackageTarget;
194-
use target::Target;
195-
use telemetry::TelemetryTarget;
196-
197-
#[test]
198-
fn test_package_default_provider() {
199-
let mut host = Host::new();
200-
let result = Target::default_provider(&mut host);
201-
assert!(result.is_ok());
202-
}
203-
204-
#[test]
205-
fn test_telemetry_init() {
206-
let mut host = Host::new();
207-
let result = Target::telemetry_init(&mut host);
208-
assert!(result.is_ok());
209-
}
210-
}

0 commit comments

Comments
 (0)