Skip to content

Commit

Permalink
Progressing ajrcarey#137
Browse files Browse the repository at this point in the history
  • Loading branch information
Alastair Carey committed Aug 25, 2024
1 parent 3dab114 commit 4708272
Show file tree
Hide file tree
Showing 57 changed files with 23,388 additions and 606 deletions.
53 changes: 53 additions & 0 deletions .github/scripts/api_coverage_test.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
#!/bin/bash

get_api_listing() {
# $1 contains the term to search for

grep -E -r -i "${1}\S+\(" include/pdfium_future/*.h
}

check_api_coverage() {
# $1 contains the list of candidate functions to check
# $2 contains the function prefix to search for

prefix="(${2}.+)\("

while IFS= read -r line ; do
fn=""

if [[ $line != *"// "* ]] ; then
IFS=" " read -r -a tokens <<< $line

for token in ${tokens[@]} ; do
if [[ $token =~ $prefix ]] ; then
fn=${BASH_REMATCH[1]}
fi
done

if [[ $fn != "" ]] ; then
# echo "Checking bindings contains $fn"

if [[ $(grep "fn $fn(" src/bindings.rs | wc -l) == 0 ]]; then
echo "$fn missing from bindings"

let "missing_count++"
fi

let "api_count++"
fi
fi
done <<< "$1"
}

api_count=0
missing_count=0

fpdf_candidates=$(get_api_listing "FPDF")
check_api_coverage "$fpdf_candidates" "FPDF"

form_candidates=$(get_api_listing "FORM_Get")
check_api_coverage "$form_candidates" "FORM_"

echo "$api_count total functions in Pdfium API, $missing_count missing from bindings"

exit $missing_count # Any non-zero value indicates failure
17 changes: 17 additions & 0 deletions .github/scripts/wasm_api_compat_test.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
#!/bin/bash

# $1 contains the pdfium_* API feature to check

cp examples/Cargo.toml examples/Cargo.bak

features='"image", "pdfium_use_skia", "pdfium_enable_xfa", "pdfium_enable_v8", "'$1'"'
crate_path='"../"'
sed "s|pdfium-render = .*|pdfium-render = { path = ${crate_path}, default-features = false, features = [${features}] }|g" examples/Cargo.bak > examples/Cargo.toml

wasm-pack build examples/ --target no-modules
result=$?

rm examples/Cargo.toml
mv examples/Cargo.bak examples/Cargo.toml

exit $result
121 changes: 61 additions & 60 deletions .github/workflows/build_test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ on:

env:
CARGO_TERM_COLOR: always
PDFIUM_RELEASE_TAG: 6611 # July 2024, https://github.com/bblanchon/pdfium-binaries/releases/tag/chromium%2F6611
PDFIUM_RELEASE_TAG: 6666 # August 2024, https://github.com/bblanchon/pdfium-binaries/releases/tag/chromium%2F6666

jobs:
build:
Expand All @@ -38,117 +38,118 @@ jobs:
- name: Generate documentation
run: cargo doc

# Check to make sure we have complete Pdfium API coverage in bindings

- name: Check bindings API coverage
run: bash .github/scripts/api_coverage_test.sh

# Compatibility checks for dynamic and thread safe bindings

- name: Check forward compatibility with pdfium_future and dynamic bindings
run: cargo check --no-default-features --features="image, thread_safe, pdfium_future"
run: cargo check --no-default-features --features="image, thread_safe, pdfium_use_skia, pdfium_enable_xfa, pdfium_enable_v8, pdfium_future"
- name: Check backward compatibility with pdfium_5961 and dynamic bindings
run: cargo check --no-default-features --features="image, thread_safe, pdfium_5961"
run: cargo check --no-default-features --features="image, thread_safe, pdfium_use_skia, pdfium_enable_xfa, pdfium_enable_v8, pdfium_5961"
- name: Check backward compatibility with pdfium_6015 and dynamic bindings
run: cargo check --no-default-features --features="image, thread_safe, pdfium_6015"
run: cargo check --no-default-features --features="image, thread_safe, pdfium_use_skia, pdfium_enable_xfa, pdfium_enable_v8, pdfium_6015"
- name: Check backward compatibility with pdfium_6043 and dynamic bindings
run: cargo check --no-default-features --features="image, thread_safe, pdfium_6043"
run: cargo check --no-default-features --features="image, thread_safe, pdfium_use_skia, pdfium_enable_xfa, pdfium_enable_v8, pdfium_6043"
- name: Check backward compatibility with pdfium_6084 and dynamic bindings
run: cargo check --no-default-features --features="image, thread_safe, pdfium_6084"
run: cargo check --no-default-features --features="image, thread_safe, pdfium_use_skia, pdfium_enable_xfa, pdfium_enable_v8, pdfium_6084"
- name: Check backward compatibility with pdfium_6110 and dynamic bindings
run: cargo check --no-default-features --features="image, thread_safe, pdfium_6110"
run: cargo check --no-default-features --features="image, thread_safe, pdfium_use_skia, pdfium_enable_xfa, pdfium_enable_v8, pdfium_6110"
- name: Check backward compatibility with pdfium_6124 and dynamic bindings
run: cargo check --no-default-features --features="image, thread_safe, pdfium_6124"
run: cargo check --no-default-features --features="image, thread_safe, pdfium_use_skia, pdfium_enable_xfa, pdfium_enable_v8, pdfium_6124"
- name: Check backward compatibility with pdfium_6164 and dynamic bindings
run: cargo check --no-default-features --features="image, thread_safe, pdfium_6164"
run: cargo check --no-default-features --features="image, thread_safe, pdfium_use_skia, pdfium_enable_xfa, pdfium_enable_v8, pdfium_6164"
- name: Check backward compatibility with pdfium_6259 and dynamic bindings
run: cargo check --no-default-features --features="image, thread_safe, pdfium_6259"
run: cargo check --no-default-features --features="image, thread_safe, pdfium_use_skia, pdfium_enable_xfa, pdfium_enable_v8, pdfium_6259"
- name: Check backward compatibility with pdfium_6295 and dynamic bindings
run: cargo check --no-default-features --features="image, thread_safe, pdfium_6295"
run: cargo check --no-default-features --features="image, thread_safe, pdfium_use_skia, pdfium_enable_xfa, pdfium_enable_v8, pdfium_6295"
- name: Check backward compatibility with pdfium_6337 and dynamic bindings
run: cargo check --no-default-features --features="image, thread_safe, pdfium_6337"
run: cargo check --no-default-features --features="image, thread_safe, pdfium_use_skia, pdfium_enable_xfa, pdfium_enable_v8, pdfium_6337"
- name: Check backward compatibility with pdfium_6406 and dynamic bindings
run: cargo check --no-default-features --features="image, thread_safe, pdfium_6406"
run: cargo check --no-default-features --features="image, thread_safe, pdfium_use_skia, pdfium_enable_xfa, pdfium_enable_v8, pdfium_6406"
- name: Check backward compatibility with pdfium_6490 and dynamic bindings
run: cargo check --no-default-features --features="image, thread_safe, pdfium_6490"
run: cargo check --no-default-features --features="image, thread_safe, pdfium_use_skia, pdfium_enable_xfa, pdfium_enable_v8, pdfium_6490"
- name: Check backward compatibility with pdfium_6555 and dynamic bindings
run: cargo check --no-default-features --features="image, thread_safe, pdfium_6555"
run: cargo check --no-default-features --features="image, thread_safe, pdfium_use_skia, pdfium_enable_xfa, pdfium_enable_v8, pdfium_6555"
- name: Check backward compatibility with pdfium_6569 and dynamic bindings
run: cargo check --no-default-features --features="image, thread_safe, pdfium_6569"
run: cargo check --no-default-features --features="image, thread_safe, pdfium_use_skia, pdfium_enable_xfa, pdfium_enable_v8, pdfium_6569"
- name: Check backward compatibility with pdfium_6611 and dynamic bindings
run: cargo check --no-default-features --features="image, thread_safe, pdfium_6611"
run: cargo check --no-default-features --features="image, thread_safe, pdfium_use_skia, pdfium_enable_xfa, pdfium_enable_v8, pdfium_6611"
- name: Check backward compatibility with pdfium_6666 and dynamic bindings
run: cargo check --no-default-features --features="image, thread_safe, pdfium_use_skia, pdfium_enable_xfa, pdfium_enable_v8, pdfium_6666"

# Compatibility checks for static bindings

- name: Check forward compatibility with pdfium_future and static bindings
run: cargo check --no-default-features --features="image, static, pdfium_future"
run: cargo check --no-default-features --features="image, static, pdfium_use_skia, pdfium_enable_xfa, pdfium_enable_v8, pdfium_future"
- name: Check backward compatibility with pdfium_5961 and static bindings
run: cargo check --no-default-features --features="image, static, pdfium_5961"
run: cargo check --no-default-features --features="image, static, pdfium_use_skia, pdfium_enable_xfa, pdfium_enable_v8, pdfium_5961"
- name: Check backward compatibility with pdfium_6015 and static bindings
run: cargo check --no-default-features --features="image, static, pdfium_6015"
run: cargo check --no-default-features --features="image, static, pdfium_use_skia, pdfium_enable_xfa, pdfium_enable_v8, pdfium_6015"
- name: Check backward compatibility with pdfium_6043 and static bindings
run: cargo check --no-default-features --features="image, static, pdfium_6043"
run: cargo check --no-default-features --features="image, static, pdfium_use_skia, pdfium_enable_xfa, pdfium_enable_v8, pdfium_6043"
- name: Check backward compatibility with pdfium_6084 and static bindings
run: cargo check --no-default-features --features="image, static, pdfium_6084"
run: cargo check --no-default-features --features="image, static, pdfium_use_skia, pdfium_enable_xfa, pdfium_enable_v8, pdfium_6084"
- name: Check backward compatibility with pdfium_6110 and static bindings
run: cargo check --no-default-features --features="image, static, pdfium_6110"
run: cargo check --no-default-features --features="image, static, pdfium_use_skia, pdfium_enable_xfa, pdfium_enable_v8, pdfium_6110"
- name: Check backward compatibility with pdfium_6124 and static bindings
run: cargo check --no-default-features --features="image, static, pdfium_6124"
run: cargo check --no-default-features --features="image, static, pdfium_use_skia, pdfium_enable_xfa, pdfium_enable_v8, pdfium_6124"
- name: Check backward compatibility with pdfium_6164 and static bindings
run: cargo check --no-default-features --features="image, static, pdfium_6164"
run: cargo check --no-default-features --features="image, static, pdfium_use_skia, pdfium_enable_xfa, pdfium_enable_v8, pdfium_6164"
- name: Check backward compatibility with pdfium_6259 and static bindings
run: cargo check --no-default-features --features="image, static, pdfium_6259"
run: cargo check --no-default-features --features="image, static, pdfium_use_skia, pdfium_enable_xfa, pdfium_enable_v8, pdfium_6259"
- name: Check backward compatibility with pdfium_6295 and static bindings
run: cargo check --no-default-features --features="image, static, pdfium_6295"
run: cargo check --no-default-features --features="image, static, pdfium_use_skia, pdfium_enable_xfa, pdfium_enable_v8, pdfium_6295"
- name: Check backward compatibility with pdfium_6337 and static bindings
run: cargo check --no-default-features --features="image, static, pdfium_6337"
run: cargo check --no-default-features --features="image, static, pdfium_use_skia, pdfium_enable_xfa, pdfium_enable_v8, pdfium_6337"
- name: Check backward compatibility with pdfium_6406 and static bindings
run: cargo check --no-default-features --features="image, static, pdfium_6406"
run: cargo check --no-default-features --features="image, static, pdfium_use_skia, pdfium_enable_xfa, pdfium_enable_v8, pdfium_6406"
- name: Check backward compatibility with pdfium_6490 and static bindings
run: cargo check --no-default-features --features="image, static, pdfium_6490"
run: cargo check --no-default-features --features="image, static, pdfium_use_skia, pdfium_enable_xfa, pdfium_enable_v8, pdfium_6490"
- name: Check backward compatibility with pdfium_6555 and static bindings
run: cargo check --no-default-features --features="image, static, pdfium_6555"
run: cargo check --no-default-features --features="image, static, pdfium_use_skia, pdfium_enable_xfa, pdfium_enable_v8, pdfium_6555"
- name: Check backward compatibility with pdfium_6569 and static bindings
run: cargo check --no-default-features --features="image, static, pdfium_6569"
run: cargo check --no-default-features --features="image, static, pdfium_use_skia, pdfium_enable_xfa, pdfium_enable_v8, pdfium_6569"
- name: Check backward compatibility with pdfium_6611 and static bindings
run: cargo check --no-default-features --features="image, static, pdfium_6611"
run: cargo check --no-default-features --features="image, static, pdfium_use_skia, pdfium_enable_xfa, pdfium_enable_v8, pdfium_6611"
- name: Check backward compatibility with pdfium_6666 and static bindings
run: cargo check --no-default-features --features="image, static, pdfium_use_skia, pdfium_enable_xfa, pdfium_enable_v8, pdfium_6666"

# Compatibility checks for WASM bindings. This is not as easy to test as with
# the other binding types, since we must construct a unique Cargo.toml for use
# with wasm-pack for each API version. We'll write a simple script to do it.
# wasm-pack should already be installed from earlier, so we don't need to
# install it again.
# Compatibility checks for WASM bindings

- name: Prepare WASM compatibility test harness
run: |
cp examples/Cargo.toml examples/Cargo.bak && echo $' \n
sed "s|pdfium-render = .*|pdfium-render = { path = \\"../\\", default-features = false, features = [\\"image\\", \\"$1\\"] }|g" examples/Cargo.bak > examples/Cargo.toml \n
wasm-pack build examples/ --target no-modules \n
' >> ./test-wasm-compat.sh
- name: Check forward compatibility with pdfium_future and WASM bindings
run: sh ./test-wasm-compat.sh pdfium_future
run: bash .github/scripts/wasm_api_compat_test.sh pdfium_future
- name: Check backward compatibility with pdfium_5961 and WASM bindings
run: sh ./test-wasm-compat.sh pdfium_5961
run: bash .github/scripts/wasm_api_compat_test.sh pdfium_5961
- name: Check backward compatibility with pdfium_6015 and WASM bindings
run: sh ./test-wasm-compat.sh pdfium_6015
run: bash .github/scripts/wasm_api_compat_test.sh pdfium_6015
- name: Check backward compatibility with pdfium_6043 and WASM bindings
run: sh ./test-wasm-compat.sh pdfium_6043
run: bash .github/scripts/wasm_api_compat_test.sh pdfium_6043
- name: Check backward compatibility with pdfium_6084 and WASM bindings
run: sh ./test-wasm-compat.sh pdfium_6084
run: bash .github/scripts/wasm_api_compat_test.sh pdfium_6084
- name: Check backward compatibility with pdfium_6110 and WASM bindings
run: sh ./test-wasm-compat.sh pdfium_6110
run: bash .github/scripts/wasm_api_compat_test.sh pdfium_6110
- name: Check backward compatibility with pdfium_6124 and WASM bindings
run: sh ./test-wasm-compat.sh pdfium_6124
run: bash .github/scripts/wasm_api_compat_test.sh pdfium_6124
- name: Check backward compatibility with pdfium_6164 and WASM bindings
run: sh ./test-wasm-compat.sh pdfium_6164
run: bash .github/scripts/wasm_api_compat_test.sh pdfium_6164
- name: Check backward compatibility with pdfium_6259 and WASM bindings
run: sh ./test-wasm-compat.sh pdfium_6259
run: bash .github/scripts/wasm_api_compat_test.sh pdfium_6259
- name: Check backward compatibility with pdfium_6295 and WASM bindings
run: sh ./test-wasm-compat.sh pdfium_6295
run: bash .github/scripts/wasm_api_compat_test.sh pdfium_6295
- name: Check backward compatibility with pdfium_6337 and WASM bindings
run: sh ./test-wasm-compat.sh pdfium_6337
run: bash .github/scripts/wasm_api_compat_test.sh pdfium_6337
- name: Check backward compatibility with pdfium_6406 and WASM bindings
run: sh ./test-wasm-compat.sh pdfium_6406
run: bash .github/scripts/wasm_api_compat_test.sh pdfium_6406
- name: Check backward compatibility with pdfium_6490 and WASM bindings
run: sh ./test-wasm-compat.sh pdfium_6490
run: bash .github/scripts/wasm_api_compat_test.sh pdfium_6490
- name: Check backward compatibility with pdfium_6555 and WASM bindings
run: sh ./test-wasm-compat.sh pdfium_6555
run: bash .github/scripts/wasm_api_compat_test.sh pdfium_6555
- name: Check backward compatibility with pdfium_6569 and WASM bindings
run: sh ./test-wasm-compat.sh pdfium_6569
run: bash .github/scripts/wasm_api_compat_test.sh pdfium_6569
- name: Check backward compatibility with pdfium_6611 and WASM bindings
run: sh ./test-wasm-compat.sh pdfium_6611
run: bash .github/scripts/wasm_api_compat_test.sh pdfium_6611
- name: Check backward compatibility with pdfium_6666 and WASM bindings
run: bash .github/scripts/wasm_api_compat_test.sh pdfium_6666
30 changes: 22 additions & 8 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
name = "pdfium-render"
version = "0.8.25"
edition = "2018"
rust-version = "1.60"
publish = true
description = "A high-level idiomatic Rust wrapper around Pdfium, the C++ PDF library used by the Google Chromium project."
readme = "README.md"
Expand Down Expand Up @@ -48,6 +49,9 @@ web-sys = { version = "0", features = [
[target.'cfg(not(target_arch = "wasm32"))'.dependencies]
libloading = "0.8.1"

[target.'cfg(target_os = "windows")'.dependencies]
windows = { version = "0", optional = true }

[build-dependencies]
bindgen = { version = "0" }

Expand All @@ -58,12 +62,9 @@ rand = "0" # Used by examples/create.rs, examples/matrix.rs
rayon = "1" # Used by examples/thread_safe.rs

[features]
default = [
"pdfium_latest",
"thread_safe",
"image",
] # The image feature is implicit because the image dependency is optional.
bindings = []
default = ["pdfium_latest", "thread_safe", "image"]
image = ["dep:image"]
bindings = ["dep:bindgen"]
static = []
thread_safe = []
"libstdc++" = ["static"]
Expand All @@ -80,9 +81,13 @@ flatten = []
# To explicitly bind against an older version, select one of the feature flags below when
# taking `pdfium-render` as a dependency in your project's Cargo.toml.

pdfium_latest = ["pdfium_6611"]
pdfium_latest = ["pdfium_6666"]
pdfium_future = [
] # For testing changes in Pdfium source control that are yet to be released
# For testing changes in Pdfium source control that are yet to be released
"pdfium_use_skia",
"pdfium_enable_xfa",
]
pdfium_6666 = []
pdfium_6611 = []
pdfium_6569 = []
pdfium_6555 = []
Expand All @@ -98,3 +103,12 @@ pdfium_6084 = []
pdfium_6043 = []
pdfium_6015 = []
pdfium_5961 = []

# Certain Pdfium API functions are only made available when compile time flags are set
# when the Pdfium binary is compiled. The feature flags below make these functions available
# in PdfiumLibraryBindings.

pdfium_use_win32 = ["dep:windows"]
pdfium_use_skia = []
pdfium_enable_xfa = []
pdfium_enable_v8 = []
Loading

0 comments on commit 4708272

Please sign in to comment.