69 lines
1.8 KiB
Rust
69 lines
1.8 KiB
Rust
extern crate cc;
|
|
|
|
use std::fs::File;
|
|
use std::io::prelude::*;
|
|
use std::path::Path;
|
|
use std::process::Command;
|
|
|
|
fn run_rpcgen() {
|
|
let res = Command::new("rpcgen")
|
|
.arg("-c")
|
|
.arg("src/rquota.x")
|
|
.output()
|
|
.expect("failed to run rpcgen");
|
|
let csrc = String::from_utf8_lossy(&res.stdout);
|
|
let mut f = File::create("src/rquota_xdr.c").expect("src/rquota_xdr.c");
|
|
f.write_all(
|
|
csrc.replace("/usr/include/rpcsvc/rquota.h", "./rquota.h")
|
|
.replace("src/rquota.h", "./rquota.h")
|
|
.as_bytes(),
|
|
)
|
|
.unwrap();
|
|
|
|
let res = Command::new("rpcgen")
|
|
.arg("-h")
|
|
.arg("src/rquota.x")
|
|
.output()
|
|
.expect("failed to run rpcgen");
|
|
let hdr = String::from_utf8_lossy(&res.stdout);
|
|
let mut f = File::create("src/rquota.h").expect("src/rquota.h");
|
|
f.write_all(hdr.as_bytes()).unwrap();
|
|
}
|
|
|
|
fn main() {
|
|
#[cfg(feature = "nfs")]
|
|
run_rpcgen();
|
|
|
|
let mut builder = cc::Build::new();
|
|
|
|
#[cfg(target_os = "linux")]
|
|
builder.file("src/quota-linux.c");
|
|
|
|
#[cfg(feature = "nfs")]
|
|
{
|
|
if Path::new("/usr/include/tirpc").exists() {
|
|
// Fedora does not include RPC support in glibc anymore, so use tirpc instead.
|
|
builder.include("/usr/include/tirpc");
|
|
}
|
|
builder.file("src/quota-nfs.c").file("src/rquota_xdr.c");
|
|
}
|
|
builder
|
|
.flag_if_supported("-Wno-unused-variable")
|
|
.compile("fs_quota");
|
|
|
|
if Path::new("/usr/include/tirpc").exists() {
|
|
println!("cargo:rustc-link-lib=tirpc");
|
|
} else {
|
|
println!("cargo:rustc-link-lib=rpcsvc");
|
|
}
|
|
|
|
#[cfg(target_os = "linux")]
|
|
println!("cargo:rerun-if-changed=src/quota-linux.c");
|
|
|
|
#[cfg(feature = "nfs")]
|
|
{
|
|
println!("cargo:rerun-if-changed=src/rquota.x");
|
|
println!("cargo:rerun-if-changed=src/quota-nfs.c");
|
|
}
|
|
}
|