run_gir_check.sh 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. #!/bin/sh
  2. # run_gir_check.sh - generate bindings with gir2def.py, parse-check every
  3. # generated module, then compile/link/run a small program against a few.
  4. #
  5. # Usage: tools/run_gir_check.sh (default GIR=Gtk-4.0)
  6. # GIR=Adw-1 tools/run_gir_check.sh
  7. set -e
  8. CDIR=$(dirname "$0")
  9. ROOT=$(cd "$CDIR/.." && pwd)
  10. GM2="${GM2:-gm2}"
  11. GM2FLAGS="${GM2FLAGS:--fiso}"
  12. GIR="${GIR:-Gtk-4.0}"
  13. GEN="$ROOT/build/gir"
  14. TMP="$ROOT/build/girparse"
  15. mkdir -p "$GEN" "$TMP"
  16. python3 "$ROOT/tools/gir2def.py" "$GIR" -o "$GEN"
  17. # Parse-check: import every generated module from a tiny stub.
  18. fail=0
  19. total=0
  20. for f in "$GEN"/*.def; do
  21. name=$(basename "$f" .def)
  22. total=$((total + 1))
  23. printf 'MODULE parse_%s ; IMPORT %s ; BEGIN END parse_%s.\n' \
  24. "$name" "$name" "$name" > "$TMP/parse_$name.mod"
  25. # shellcheck disable=SC2086
  26. if ! $GM2 $GM2FLAGS -I"$GEN" -c "$TMP/parse_$name.mod" \
  27. -o "$TMP/parse_$name.o" 2>"$TMP/parse_$name.err"; then
  28. fail=$((fail + 1))
  29. echo "PARSE FAIL: $name"
  30. sed -n '1,4p' "$TMP/parse_$name.err"
  31. fi
  32. done
  33. echo "gir-check: parsed $total modules from $GIR, $fail failed"
  34. if [ "$GIR" = "Gtk-4.0" ]; then
  35. # Link-check: reference a generated (namespace) function and enum.
  36. cat > "$TMP/gircheck.mod" <<'EOF'
  37. MODULE gircheck ;
  38. FROM GtkFunctions IMPORT gtk_get_major_version, gtk_get_minor_version;
  39. FROM GtkButton IMPORT GtkButton;
  40. FROM GtkEnums IMPORT GTK_ALIGN_FILL;
  41. FROM SYSTEM IMPORT ADDRESS;
  42. FROM libc IMPORT printf;
  43. VAR b: GtkButton;
  44. BEGIN
  45. b := NIL;
  46. printf("generated: gtk=%d.%d align=%d\n",
  47. gtk_get_major_version(), gtk_get_minor_version(), GTK_ALIGN_FILL);
  48. IF (b = NIL) AND (GTK_ALIGN_FILL = 0) THEN
  49. printf("gircheck: PASS\n"); HALT(0)
  50. ELSE
  51. printf("gircheck: FAIL\n"); HALT(1)
  52. END
  53. END gircheck.
  54. EOF
  55. # shellcheck disable=SC2086
  56. $GM2 $GM2FLAGS -I"$GEN" "$TMP/gircheck.mod" -o "$TMP/gircheck" \
  57. $(pkg-config --cflags --libs gtk4)
  58. "$TMP/gircheck"
  59. fi
  60. [ "$fail" -eq 0 ]