feat(ffi): Initial C API for hyper
This commit is contained in:
72
capi/gen_header.sh
Executable file
72
capi/gen_header.sh
Executable file
@@ -0,0 +1,72 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
CAPI_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||
|
||||
WORK_DIR=`mktemp -d`
|
||||
|
||||
|
||||
# check if tmp dir was created
|
||||
if [[ ! "$WORK_DIR" || ! -d "$WORK_DIR" ]]; then
|
||||
echo "Could not create temp dir"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
header_file_backup="$CAPI_DIR/include/hyper.h.backup"
|
||||
|
||||
function cleanup {
|
||||
#echo "$WORK_DIR"
|
||||
rm -rf "$WORK_DIR"
|
||||
rm "$header_file_backup"
|
||||
}
|
||||
|
||||
trap cleanup EXIT
|
||||
|
||||
mkdir "$WORK_DIR/src"
|
||||
|
||||
# Fake a library
|
||||
cat > "$WORK_DIR/src/lib.rs" << EOF
|
||||
#[path = "$CAPI_DIR/../src/ffi/mod.rs"]
|
||||
pub mod ffi;
|
||||
EOF
|
||||
|
||||
# And its Cargo.toml
|
||||
cat > "$WORK_DIR/Cargo.toml" << EOF
|
||||
[package]
|
||||
name = "hyper"
|
||||
version = "0.0.0"
|
||||
edition = "2018"
|
||||
publish = false
|
||||
|
||||
[dependencies]
|
||||
EOF
|
||||
|
||||
cp "$CAPI_DIR/include/hyper.h" "$header_file_backup"
|
||||
|
||||
#cargo metadata --no-default-features --features ffi --format-version 1 > "$WORK_DIR/metadata.json"
|
||||
|
||||
cd $WORK_DIR
|
||||
|
||||
# Expand just the ffi module
|
||||
cargo rustc -- -Z unstable-options --pretty=expanded > expanded.rs 2>/dev/null
|
||||
|
||||
# Replace the previous copy with the single expanded file
|
||||
rm -rf ./src
|
||||
mkdir src
|
||||
mv expanded.rs src/lib.rs
|
||||
|
||||
|
||||
# Bindgen!
|
||||
cbindgen\
|
||||
-c "$CAPI_DIR/cbindgen.toml"\
|
||||
--lockfile "$CAPI_DIR/../Cargo.lock"\
|
||||
-o "$CAPI_DIR/include/hyper.h"\
|
||||
$1
|
||||
|
||||
bindgen_exit_code=$?
|
||||
|
||||
if [[ "--verify" == "$1" && "$bindgen_exit_code" != 0 ]]; then
|
||||
echo "diff generated (<) vs backup (>)"
|
||||
diff "$CAPI_DIR/include/hyper.h" "$header_file_backup"
|
||||
fi
|
||||
|
||||
exit $bindgen_exit_code
|
||||
Reference in New Issue
Block a user