# This is a fork of libudev-sys that dynamically loads its symbols with # dlopen when they are first used. This continues a precedent established # by Firefox's gamepad APIs to minimize the footprint of features when they # aren't being used. Specifically, this avoids the cost of dynamically linking # in libudev at process startup. # # "-sys" crates are a convention in the rust ecosystem for "a simple header # for a C library that Rust code can use to build a richer and safer API on # top of". In this case, libudev-sys is used by the [libudev crate]. # # As of this writing, this hack is being used by the [authenticator-rs] crate, # which uses the libudev crate. # # The libudev crate assumes libudev is being dynamically linked in, and # checks if its symbols are null before intializing anything else, so that # you can use it to detect if libudev is installed and gracefully # disable gamepads or whatever else if it's not. # # If we're missing any symbols the libudev crate needs, then rust will give # us a compilation error. It's not a problem if we export additional symbols. # # So while this is a bit of a weird hack, it works pretty robustly, and this # crate is basically just a header for libudev so it's not a particularly # significant maintenance burden. # # authenticator-rs: https://github.com/mozilla/authenticator-rs # libudev crate: https://crates.io/crates/libudev [package] name = "libudev-sys" version = "0.1.3" authors = ["Tim Taubert "] description = "FFI bindings to libudev" license = "MPL-2.0" [dependencies] lazy_static = "1.0" libc = "0.2"