| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- #!/bin/sh
- # run_gir_check.sh - generate bindings with gir2def.py, parse-check every
- # generated module, then compile/link/run a small program against a few.
- #
- # Usage: tools/run_gir_check.sh (default GIR=Gtk-4.0)
- # GIR=Adw-1 tools/run_gir_check.sh
- set -e
- CDIR=$(dirname "$0")
- ROOT=$(cd "$CDIR/.." && pwd)
- GM2="${GM2:-gm2}"
- GM2FLAGS="${GM2FLAGS:--fiso}"
- GIR="${GIR:-Gtk-4.0}"
- GEN="$ROOT/build/gir"
- TMP="$ROOT/build/girparse"
- mkdir -p "$GEN" "$TMP"
- python3 "$ROOT/tools/gir2def.py" "$GIR" -o "$GEN"
- # Parse-check: import every generated module from a tiny stub.
- fail=0
- total=0
- for f in "$GEN"/*.def; do
- name=$(basename "$f" .def)
- total=$((total + 1))
- printf 'MODULE parse_%s ; IMPORT %s ; BEGIN END parse_%s.\n' \
- "$name" "$name" "$name" > "$TMP/parse_$name.mod"
- # shellcheck disable=SC2086
- if ! $GM2 $GM2FLAGS -I"$GEN" -c "$TMP/parse_$name.mod" \
- -o "$TMP/parse_$name.o" 2>"$TMP/parse_$name.err"; then
- fail=$((fail + 1))
- echo "PARSE FAIL: $name"
- sed -n '1,4p' "$TMP/parse_$name.err"
- fi
- done
- echo "gir-check: parsed $total modules from $GIR, $fail failed"
- if [ "$GIR" = "Gtk-4.0" ]; then
- # Link-check: reference a generated (namespace) function and enum.
- cat > "$TMP/gircheck.mod" <<'EOF'
- MODULE gircheck ;
- FROM GtkFunctions IMPORT gtk_get_major_version, gtk_get_minor_version;
- FROM GtkButton IMPORT GtkButton;
- FROM GtkEnums IMPORT GTK_ALIGN_FILL;
- FROM SYSTEM IMPORT ADDRESS;
- FROM libc IMPORT printf;
- VAR b: GtkButton;
- BEGIN
- b := NIL;
- printf("generated: gtk=%d.%d align=%d\n",
- gtk_get_major_version(), gtk_get_minor_version(), GTK_ALIGN_FILL);
- IF (b = NIL) AND (GTK_ALIGN_FILL = 0) THEN
- printf("gircheck: PASS\n"); HALT(0)
- ELSE
- printf("gircheck: FAIL\n"); HALT(1)
- END
- END gircheck.
- EOF
- # shellcheck disable=SC2086
- $GM2 $GM2FLAGS -I"$GEN" "$TMP/gircheck.mod" -o "$TMP/gircheck" \
- $(pkg-config --cflags --libs gtk4)
- "$TMP/gircheck"
- fi
- [ "$fail" -eq 0 ]
|