apriltag-sys 0.2.0

Rust bindings for AprilTag library
Documentation
# apriltag-sys

[![Crates.io](https://img.shields.io/crates/v/apriltag-sys.svg)](https://crates.io/crates/apriltag-sys)
[![Documentation](https://docs.rs/apriltag-sys/badge.svg)](https://docs.rs/apriltag-sys/)
[![Crate License](https://img.shields.io/crates/l/apriltag-sys.svg)](https://crates.io/crates/apriltag-sys)
[![Dependency status](https://deps.rs/repo/github/jerry73204/apriltag-sys/status.svg)](https://deps.rs/repo/github/jerry73204/apriltag-sys)
[![build](https://github.com/jerry73204/apriltag-sys/workflows/build/badge.svg?branch=master)](https://github.com/jerry73204/apriltag-sys/actions?query=branch%3Amaster)

This crate provides Rust bindings for AprilTag C library.

## Usage

Install AprilTag library from official [repository](https://github.com/AprilRobotics/apriltag).

Import `apriltag-sys` dependency in your `Cargo.toml`

```toml
[dependencies]
apriltag-sys = "0.2"
```

### Specifying how to compile and link the apriltag C library.

There are currently four options to specify how apriltag-sys will compile and
link the apriltag C library. These are specified by setting the
`APRILTAG_SYS_METHOD` environment variable to one of the following values:

- `pkg-config-then-static` (default) - This will try pkg-config first, then
   will fallback to `raw,static`.
- `pkg-config` - This will use pkg-config. Panic upon failure.
- `raw,static` - The environment variable `APRILTAG_SRC` must be set to a
  directory with the April Tag C library source code. The .c files will be
  compiled by directly calling the C compiler and statically linked.
- `cmake,dynamic` - The environment variable `APRILTAG_SRC` must be set to a
  directory with the April Tag C library source code. The cmake command will be
  invoked to call the C compiler and the resulting library will be dynamically
  linked.

The location of the apriltag source is specified by the `APRILTAG_SRC`
environment variable. If this is not set, a local git submodule checkout of the
apriltag source will be used.

#### Building under Windows

Strictly speaking, using apriltag on Microsoft Windows is not *officially* supported by the developers. In practice, the library works well even on this operating system. 
The only additional complexity emerges during the building process. The C library requires *pthread.h* not shipped with Windows by default.
Consequently, different shims like [pthreads4w](https://sourceforge.net/projects/pthreads4w/) and [Pthreads-w32](https://www.sourceware.org/pthreads-win32/) are required.
If one of them is installed, setting the environment variables `APRILTAG_SYS_WINDOWS_PTHREAD_INCLUDE_DIR` to its include directory and `APRILTAG_SYS_WINDOWS_PTHREAD_STATIC_LIB` to the compiled static library allows a successful build under Windows with `APRILTAG_SYS_METHOD=raw,static`.

As an example using [vcpkg](https://github.com/microsoft/vcpkg), building under Windows consists of three additional steps:
1. Install the shim using `vcpkg install pthread:x64-windows-static`
2. Specify the include directoy (here in PowerShell): `$env:APRILTAG_SYS_WINDOWS_PTHREAD_INCLUDE_DIR="%SPECIFY VCPKG DIRECTORY HERE%\installed\x64-windows-static\include"`
3. Specify the path to the static library (again in PowerShell): `$env:APRILTAG_SYS_WINDOWS_PTHREAD_STATIC_LIB="%SPECIFY VCPKG DIRECTORY HERE%\installed\x64-windows-static\lib\pthreadVC3.lib""`

Some shims require `winmm.dll` for high-precision timing shipped by default with all Windows installations. If this linking is not necessary, it can be omitted by setting `APRILTAG_SYS_WINDOWS_NO_WINMM=1`.

## License

BSD-2-Clause. Please see the [license file](LICENSE).