Rust declarations for libmagic.
This cargo -sys package provides libmagic declarations for e.g. the magic binding.
magic-sys is available on crates.io so you can use it like this (in your Cargo.toml):
[dependencies]
magic-sys = "0.4"The rustdoc is available on docs.rs.
This crate requires the libmagic C library in version 5.39 or newer.
If you don't want to configure the build, libmagic has to be available in a standard location
for either pkg-config or vcpkg, see Building.
On a Debian based Linux system such as Ubuntu this can be achieved like this:
sudo apt-get install libmagic1 libmagic-devOn RHEL/Cent OS, Gentoo and others you will need to install the file package.
On Mac OS X you can use Homebrew:
brew install libmagicFeedback for Windows (issue #2) support is appreciated!
You can use Microsoft's vcpkg via cargo-vcpkg:
cargo install cargo-vcpkg
cargo vcpkg buildAfterwards, you can cargo build etc. your crate as usual.
The libmagic API is extended with new backwards-compatible features every now and then.
To use newly added libmagic functionality, you need to use a corresponding libmagic version.
You need to specify your libmagic version by activating the matching magic-sys feature.
Each API version has a crate feature like "v5-40", see Cargo.toml
If you use a different version of libmagic, adjust your configuration:
[dependencies.magic-sys]
version = "0.3"
default-features = false
features = ["v5-40"]Note that those version features are additive, so "v5-45" implies "v5-44" and other previous versions.
If you want to use a newer/different libmagic version, you will have to link it accordingly.
The Minimum Supported Rust Version (MSRV) is Rust 1.64 or higher.
This version might be changed in the future, but it will be done with a crate version bump.
To determine which libmagic to link against, this crate uses
pkg-config
and vcpkg.
The crate does not offer to link a against a bundled libmagic version, see issue #4.
In general you can link statically or dynamically against libmagic.
With static linkage your binary/library includes the libmagic code and does not have a run-time dependency.
With dynamic linkage your binary/library does not include the libmagic code and does have a run-time dependency on a libmagic.dll / libmagic.so / libmagic.dylib depending on your platform (Windows / Linux / macOS).
You might have to ship this libmagic shared library with your binary/library if you do not expect your users to have a compatible version installed on their system.
You might want to ship a copy of the default libmagic / file database with your binary/library if you do not expect your users to have a compatible libmagic installed on their system.
The pkg-config crate feature uses the pkg-config crate, so check its documentation for details.
You can use e.g. the following environment variables:
LIBMAGIC_NO_PKG_CONFIGif set, will skippkg-configLIBMAGIC_STATICif set, instructspkg-configto link staticallyLIBMAGIC_DYNAMICif set, instructspkg-configto link dynamically
By default dynamic linkage is used.
The vcpkg crate feature uses the vcpkg crate, so check its documentation for details.
You can use e.g. the following environment variables:
VCPKGRS_NO_LIBMAGICif set, will skipvcpkgVCPKGRS_DYNAMICif set, instructsvcpkgto link dynamically
By default static linkage is used.
You can use vcpkg standalone or by using cargo-vcpkg.
If you do not use cargo vcpkg build, you will have to either
vcpkg install libmagicand set theVCPKG_ROOTenvironment variable for yourvcpkgroot directoryvcpkg integrate installyourvcpkgroot user-wide
If you disable or skip both pkg-config and vcpkg the magic-sys build script will fail.
Especially linking statically to libmagic requires additional libraries that depend on your version and system.
You can skip the magic-sys build script entirely by overriding it.
This is an option if you want to use neither pkg-config nor vcpkg.
Licensed under either of
- Apache License, Version 2.0 (LICENSE-APACHE or https://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or https://opensource.org/licenses/MIT)
at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.