pq-sys
======

Autogenerated Rust bindings for libpq

Building
--------

This repository contains direct, one-to-one mappings to the C functions provided
in `libpq-fe.h` and `postgres_ext.h`. This library expects that libpq be
installed on the system.

The build script of crate will attempt to find the lib path of libpq using the
following methods:

* First, if the environment variable `PQ_LIB_DIR` is set, it will use its value
* If the environment variable isn't set, it tries to use pkg-config to locate it.
All the config options, such as `PKG_CONFIG_ALLOW_CROSS`, `PKG_CONFIG_ALL_STATIC`
etc., of the crate [pkg-config](http://alexcrichton.com/pkg-config-rs/pkg_config/index.html)
apply.
* For MSVC ABI builds the build script will attempt use the library from a 
[vcpkg](https://github.com/Microsoft/vcpkg) installation if there is one available.
You may need to set VCPKG_ROOT (or run `vcpkg integrate install`) and run
`vcpkg install libpq:x64-windows`.
* If it still can't locate the library, it will invoke the Postgres command
`pg_config --libdir`

The build script instructs Cargo to link the library statically if the environmental
variable `PQ_LIB_STATIC` is set. This can be useful, if targeting for a musl target.
If pkg-config is being used, it's configuration options will apply.

## FAQ

### I'm seeing `dyld: Symbol not found __cg_jpeg_resync_to_restart` on macOS

This is caused when the output of `pg_config --libdir` is a directory that also
contains `libjpeg.dylib` which differs from the system libjpeg. This is usually
caused by install postgres via homebrew, or using postgresapp.com.

If you've installed via homebrew, you should not see this issue unless you've
provided `features = ["pkg-config"]`. You can work around the issue by exporting
`PQ_LIB_DIR="$(brew --prefix postgres)/lib"`.

If you've installed postgresql using postgresapp.com, you will not be able to
run your binaries using `cargo run` or `cargo test`. You can compile the binary
manually via `cargo build` and then run `/target/debug/yourapp`. You can also
manually create a directory that contains only a symlink to `libpq.dylib` and
nothing else, then export `PQ_LIB_DIR` to that directory. It is recommended that
you do not use postgresapp.com.

## License

Licensed under either of

 * Apache License, Version 2.0, ([LICENSE-APACHE](LICENSE-APACHE) or
   http://www.apache.org/licenses/LICENSE-2.0)
 * MIT license ([LICENSE-MIT](LICENSE-MIT) or
   http://opensource.org/licenses/MIT)

at your option.

### Contribution

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.
