From c1aeae015a1359453432789445f7466eed2a3d3a Mon Sep 17 00:00:00 2001 From: Georg Semmler Date: Wed, 10 Apr 2024 08:06:57 +0200 Subject: [PATCH] Also include the vendored copy of explicit_bzero to the linux build Older glibc versions do not have that function. Also prepare a 0.1.5 release for this. --- pq-src/Cargo.toml | 5 +++- pq-src/README.md | 68 +++++++++++++++++++++++++++++++++++++++++++++++ pq-src/build.rs | 4 +-- 3 files changed, 74 insertions(+), 3 deletions(-) create mode 100644 pq-src/README.md diff --git a/pq-src/Cargo.toml b/pq-src/Cargo.toml index a791fd9..2842e47 100644 --- a/pq-src/Cargo.toml +++ b/pq-src/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "pq-src" -version = "0.1.4" +version = "0.1.5" edition = "2021" include = [ "src/*", @@ -18,6 +18,9 @@ description = "Bundled version of libpq" license = "MIT OR Apache-2.0" repository = "https://github.com/sgrif/pq-sys" links = "pq_sys_src" +keywords = ["bindings", "libpq", "pq-sys", "bundled"] +categories = ["database", "external-ffi-bindings"] +readme = "README.md" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html diff --git a/pq-src/README.md b/pq-src/README.md new file mode 100644 index 0000000..f1fd977 --- /dev/null +++ b/pq-src/README.md @@ -0,0 +1,68 @@ +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 it will look for an environment variable in the format of `PQ_LIB_DIR_{TARGET}` +where `{TARGET}` gets replaced by the Target environment variable set for cross-compilation +* Second, 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](https://docs.rs/pkg-config/) +apply. +* Then, 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`), set VCPKGRS_DYNAMIC=1, and run +`vcpkg install libpq:x64-windows`. See the documentation for the [vcpkg](https://docs.rs/vcpkg/) crate for more. +* 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. diff --git a/pq-src/build.rs b/pq-src/build.rs index 1d6631d..8b91a20 100644 --- a/pq-src/build.rs +++ b/pq-src/build.rs @@ -22,15 +22,15 @@ const LIBPORTS_BASE: &[&str] = &[ "quotes.c", "strerror.c", "tar.c", + "explicit_bzero.c", ]; const LIBPORTS_LINUX: &[&str] = &["getpeereid.c", "thread.c"]; -const LIBPORTS_MACOS: &[&str] = &["explicit_bzero.c", "thread.c"]; +const LIBPORTS_MACOS: &[&str] = &["thread.c"]; const LIBPORTS_WINDOWS: &[&str] = &[ "getpeereid.c", - "explicit_bzero.c", "win32common.c", "win32dlopen.c", "win32env.c",