diff --git a/.github/workflows/build-and-test.yml b/.github/workflows/build-and-test.yml index 507172595..aae7f2fb2 100644 --- a/.github/workflows/build-and-test.yml +++ b/.github/workflows/build-and-test.yml @@ -90,3 +90,8 @@ jobs: path: ${{ runner.temp }}/dashd-test-logs/ retention-days: 7 if-no-files-found: ignore + - name: Validate headers + if: matrix.group == 'ffi' && inputs.os == 'ubuntu-latest' + run: | + sudo apt update && sudo apt install -y build-essential + bash ffi-c-tests/validate-headers.sh ./target/llvm-cov-target/debug/include diff --git a/dash-spv-ffi/cbindgen.toml b/dash-spv-ffi/cbindgen.toml index 24a71f877..d7f277efe 100644 --- a/dash-spv-ffi/cbindgen.toml +++ b/dash-spv-ffi/cbindgen.toml @@ -4,6 +4,7 @@ include_guard = "DASH_SPV_FFI_H" autogen_warning = "/* Warning: This file is auto-generated by cbindgen. Do not modify manually. */" include_version = true cpp_compat = true +includes = ["../key-wallet-ffi/key-wallet-ffi.h"] [export] include = ["FFI"] @@ -26,6 +27,7 @@ postfix = "" rename_fields = "None" [enum] +prefix_with_name = true rename_variants = "None" [parse] diff --git a/ffi-c-tests/header-tests/dash-spv.c b/ffi-c-tests/header-tests/dash-spv.c new file mode 100644 index 000000000..4ae27378e --- /dev/null +++ b/ffi-c-tests/header-tests/dash-spv.c @@ -0,0 +1,3 @@ +#include "dash-spv-ffi/dash-spv-ffi.h" + +int main() { return 0; } diff --git a/ffi-c-tests/header-tests/key-wallet.c b/ffi-c-tests/header-tests/key-wallet.c new file mode 100644 index 000000000..94dd4076c --- /dev/null +++ b/ffi-c-tests/header-tests/key-wallet.c @@ -0,0 +1,3 @@ +#include "key-wallet-ffi/key-wallet-ffi.h" + +int main() { return 0; } diff --git a/ffi-c-tests/header-tests/spv_and_key_wallet.c b/ffi-c-tests/header-tests/spv_and_key_wallet.c new file mode 100644 index 000000000..aef34a3f3 --- /dev/null +++ b/ffi-c-tests/header-tests/spv_and_key_wallet.c @@ -0,0 +1,4 @@ +#include "dash-spv-ffi/dash-spv-ffi.h" +#include "key-wallet-ffi/key-wallet-ffi.h" + +int main() { return 0; } diff --git a/ffi-c-tests/validate-headers.sh b/ffi-c-tests/validate-headers.sh new file mode 100755 index 000000000..4dfdc86d2 --- /dev/null +++ b/ffi-c-tests/validate-headers.sh @@ -0,0 +1,34 @@ +#!/bin/bash +set -euo pipefail + +RED='\033[0;31m' +GREEN='\033[0;32m' +NC='\033[0m' + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +HEADER_TESTS_DIR="$SCRIPT_DIR/header-tests" + +if [ $# -lt 1 ]; then + echo "Usage: $0 " + exit 1 +fi + +INCLUDE_DIR="$1" + +if [ ! -d "$INCLUDE_DIR" ]; then + echo "Error: INCLUDE_DIR '$INCLUDE_DIR' does not exist or is not a directory." + exit 1 +fi + +EXIT_CODE=0 + +for file in "$HEADER_TESTS_DIR"/*.c; do + if gcc -c "$file" -I"$INCLUDE_DIR" -o /dev/null; then + echo -e "${GREEN}Passed: $file${NC}" + else + echo -e "${RED}Failed: $file${NC}" + EXIT_CODE=1 + fi +done + +exit $EXIT_CODE diff --git a/key-wallet-ffi/cbindgen.toml b/key-wallet-ffi/cbindgen.toml index e674abf64..6c1591592 100644 --- a/key-wallet-ffi/cbindgen.toml +++ b/key-wallet-ffi/cbindgen.toml @@ -55,6 +55,7 @@ item_types = ["functions", "enums", "structs", "typedefs", "opaque", "constants" [enum] # Configure enum generation +prefix_with_name = true rename_variants = "ScreamingSnakeCase" add_sentinel = false derive_helper_methods = false