Skip to content

Commit

Permalink
Add a pq-src crate for a bundled feature flag
Browse files Browse the repository at this point in the history
  • Loading branch information
weiznich committed Dec 6, 2023
1 parent 0f6f0b1 commit ff69536
Show file tree
Hide file tree
Showing 14 changed files with 1,522 additions and 913 deletions.
47 changes: 39 additions & 8 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,13 @@ jobs:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-latest, windows-2019]
features: [default, bundled]
runs-on: ${{ matrix.os }}
steps:
- name: Checkout sources
uses: actions/checkout@v3

with:
submodules: recursive
- name: Cache cargo registry
uses: actions/cache@v3
with:
Expand All @@ -32,7 +34,7 @@ jobs:
echo "RUSTFLAGS=-D warnings" >> $GITHUB_ENV
echo "RUSTDOCFLAGS=-D warnings" >> $GITHUB_ENV
- name: Install postgres (Linux)
if: runner.os == 'Linux'
if: runner.os == 'Linux' && matrix.features == 'default'
run: |
sudo apt-get update
sudo apt-get install -y libpq-dev postgresql
Expand All @@ -42,42 +44,71 @@ jobs:
sudo service postgresql restart && sleep 3
- name: Install postgres (MacOS)
if: runner.os == 'macOS'
if: runner.os == 'macOS' && matrix.features == 'default'
run: |
initdb -D /usr/local/var/postgres
pg_ctl -D /usr/local/var/postgres start
sleep 3
createuser -s postgres
- name: Install postgres (Windows)
if: runner.os == 'Windows'
if: runner.os == 'Windows' && matrix.features == 'default'
shell: bash
run: |
choco install postgresql12 --force --params '/Password:root'
echo "C:\Program Files\PostgreSQL\12\bin" >> $GITHUB_PATH
echo "C:\Program Files\PostgreSQL\12\lib" >> $GITHUB_PATH
echo "PQ_LIB_DIR=C:\Program Files\PostgreSQL\12\lib" >> $GITHUB_ENV
# - name: Add msbuild to PATH
# if: runner.os == 'Windows' && matrix.features == 'bundled'
# uses: microsoft/[email protected]
# with:
# msbuild-architecture: x64
# - uses: ilammy/msvc-dev-cmd@v1
# if: runner.os == 'Windows' && matrix.features == 'bundled'
- name: Windows setup (bundled)
if: runner.os == 'Windows' && matrix.features == 'bundled'
shell: bash
run: |
echo "OPENSSL_RUST_USE_NASM=0" >> $GITHUB_ENV
echo OPENSSL_SRC_PERL=C:/Strawberry/perl/bin/perl >> $GITHUB_ENV
# - name: Windows setup (bundled)
# if: runner.os == 'Windows' && matrix.features == 'bundled'
# shell: cmd
# run: |
# cd pq-src/source/
# src\tools\msvc\build.bat libpq
- name: Install rust toolchain
uses: dtolnay/rust-toolchain@stable

- name: Check
shell: bash
run: |
cargo check
cargo check --no-default-features --features "${{ matrix.features }}"
- name: Tests
shell: bash
run: |
cargo test
cargo test --no-default-features --features "${{ matrix.features }}"
- name: Test compile diesel
shell: bash
run: |
cargo new test_diesel
cd test_diesel
echo "[workspace]" >> Cargo.toml
cargo add diesel --no-default-features --features "postgres"
cargo add pq-sys
echo "[patch.crates-io]" >> Cargo.toml
echo "pq-sys = { path = \"..\" }" >> Cargo.toml
cat Cargo.toml
echo "use diesel::prelude::*;" > src/main.rs
echo "fn main() { PgConnection::establish(\"foo\").unwrap(); }" >> src/main.rs
cat src/main.rs
cargo build
cargo build --features "pq-sys/${{ matrix.features }}"
- name: Test all files included
shell: bash
if: matrix.features == 'bundled'
run: |
cd pq-src
cargo publish --dry-run
3 changes: 3 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
[submodule "pq-src/source"]
path = pq-src/source
url = https://github.com/postgres/postgres
12 changes: 11 additions & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,24 @@ version = "0.4.8"
description = "Auto-generated rust bindings for libpq"
license = "MIT OR Apache-2.0"
repository = "https://github.com/sgrif/pq-sys"
links = "pq"
build = "build.rs"
link = "pq"

[workspace]
members = ["pq-src"]

[lib]
name = "pq_sys"

[dependencies]
pq-src = { path = "pq-src", optional = true }

[build-dependencies]
pkg-config = { version = "0.3.0", optional = true }

[target.'cfg(target_env = "msvc")'.build-dependencies]
vcpkg = "0.2.6"

[features]
default = []
bundled = ["pq-src"]
10 changes: 10 additions & 0 deletions build.rs
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,16 @@ impl Display for LinkingOptions {
}

fn main() {
if cfg!(feature = "bundled") {
// everything else is handled
// by pq-src
return;
}

#[cfg(target_os = "windows")]
println!("cargo:rustc-link-lib=libpq");
#[cfg(not(target_os = "windows"))]
println!("cargo:rustc-link-lib=pq");
println!("cargo:rerun-if-env-changed=PQ_LIB_STATIC");
println!("cargo:rerun-if-env-changed=TARGET");

Expand Down
1 change: 1 addition & 0 deletions pq-src/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
/target
27 changes: 27 additions & 0 deletions pq-src/Cargo.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
[package]
name = "pq-src"
version = "0.1.0"
edition = "2021"
include = [
"src/*",
"build.rs",
"additional_include/pg_config.h",
"additional_include/pg_config_paths.h",
"additional_include/pg_config_ext.h",

"source/src/include/*",
"source/src/port/*",
"source/src/common/*",
"source/src/interfaces/libpq/*",
]

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[target.'cfg(not(target_os = "windows"))'.dependencies]
openssl-sys = { version = "0.9.93", features = ["vendored"] }

[build-dependencies]
cc = "1.0.83"

[target.'cfg(not(target_os = "windows"))'.build-dependencies]
openssl-src = "300"
Loading

0 comments on commit ff69536

Please sign in to comment.