diff options
| -rw-r--r-- | FASSUNGEN.txt | 38 | ||||
| -rw-r--r-- | README.md | 6 | ||||
| -rwxr-xr-x | deploy/webpaket.sh | 32 |
3 files changed, 69 insertions, 7 deletions
diff --git a/FASSUNGEN.txt b/FASSUNGEN.txt index 5e8327c..5d6a782 100644 --- a/FASSUNGEN.txt +++ b/FASSUNGEN.txt @@ -27,7 +27,10 @@ Vorbemerkung zur Führung dieses Verzeichnisses Die Sprachfassung des Bausatzes wird von 21 auf 25 angehoben (Artikel 1); der Wasm-Zweig folgt (Artikel 2). Der Enforcer wacht fortan über die vorausgesetzte -Fassung (Artikel 3). Das Handbuch weist dies aus (Artikel 4). +Fassung (Artikel 3). Das Handbuch weist dies aus (Artikel 4). Die Liste der dem +Nachoptimierer zugelassenen Wasm-Merkmale wird fortan an der vorgefundenen +Binaryen-Fassung gemessen, damit ein unbekannter Schalter den Bau nicht mehr +abbricht (Artikel 5); auch dies weist das Handbuch aus (Artikel 6). Artikel 1 @@ -67,11 +70,44 @@ den Wasm-Bau ist weiterhin Oracle GraalVM 25.1 oder neuer erforderlich. Artikel 5 +Anpassung der Wasm-Merkmalsliste an die vorgefundene Binaryen-Fassung + +„deploy/webpaket.sh“ zählt die dem Nachoptimierer (wasm-opt) zugelassenen +Wasm-Merkmale einzeln auf. Die selbsttätige Prüfung brach an dieser Stelle ab: +„Unknown option '--enable-bulk-memory-opt'“. Das Merkmal ist erst in jüngeren +Binaryen-Fassungen vorhanden; die Paketfassung der Verteilung (Ubuntu 26.04) +kennt es nicht, und wasm-opt bricht bei einem unbekannten Schalter ab, statt ihn +zu übergehen. + +(1) Vor dem Aufruf wird die Hilfeausgabe des vorgefundenen „wasm-opt“ erhoben. + Jedes Merkmal der Liste wird an ihr gemessen; die dort nicht aufgeführten + werden ausgesondert. Die Messung achtet auf Wortgrenzen, damit + „--enable-bulk-memory“ nicht schon durch „--enable-bulk-memory-opt“ als + vorhanden gilt. + +(2) Die Aussonderung bleibt unschädlich: Was eine Fassung nicht kennt, gibt sie + auch nicht aus; das Modul bleibt gültig und wird allenfalls um einige Bytes + größer. Die ausgesonderten Merkmale werden benannt. + +(3) Unberührt bleibt der Grundsatz, die Merkmale einzeln aufzuzählen und nicht + „--all-features“ zu erteilen (§ 14 Absatz 7 Nummer 4 des Handbuchs). + + +Artikel 6 +Handbuch + +§ 14 Absatz 7 Nummer 4 des Handbuchs (README.md) weist die Messung an der +Hilfeausgabe und ihren Anlass aus. + + +Artikel 7 Prüfung Der Bau geht auf einem Oracle GraalVM 25.0.4 auf: „./mvnw verify“ meldet BUILD SUCCESS mit 456 von 456 Tests, Spotless beanstandet nichts, und der Enforcer lässt die neue Regel durchgehen. Auch das Profil „wasm“ übersetzt („target 25“). +Die Merkmalsmessung sondert auf dem hiesigen Binaryen 132 nichts aus; gegen eine +verkürzte Hilfeausgabe geprüft, sondert sie genau die fehlenden Schalter aus. ════════════════════════════════════════════════════════════════════════════════ @@ -956,7 +956,11 @@ handelt sich die Megabyte wieder ein: 4. `wasm-opt -Oz` als Nachlauf. Die zugelassenen Wasm-Merkmale sind in `webpaket.sh` einzeln aufgezählt und nicht als `--all-features` erteilt: Sonst nutzt Binaryen auch Vorschläge, die noch kein Browser annimmt, und das Modul - scheitert erst beim Instanziieren. + scheitert erst beim Instanziieren. Die Liste wird vor dem Aufruf an der + Hilfeausgabe des vorgefundenen `wasm-opt` gemessen und um das gekürzt, was + ältere Fassungen nicht kennen — die Paketfassungen der Verteilungen kennen + etwa `--enable-bulk-memory-opt` nicht und brächen sonst mit „Unknown option“ + ab. (8) Im Quelltextarchiv fehlt der Beispielkorpus; `.gitattributes` nimmt `src/test/resources/sampledata` von `git archive` aus. Es sind Gesetzes- und diff --git a/deploy/webpaket.sh b/deploy/webpaket.sh index ba47ea5..ce99633 100755 --- a/deploy/webpaket.sh +++ b/deploy/webpaket.sh @@ -57,15 +57,37 @@ rm -f "$ziel/aendggner.js.wat" # was Web Image braucht: WasmGC samt Referenztypen, das Ausnahmen-Proposal, endständige # Aufrufe. Fehlt wasm-opt, bleibt das Modul, wie es ist — der Bau soll daran nicht # scheitern. -wasm_merkmale="--enable-gc --enable-reference-types --enable-exception-handling - --enable-tail-call --enable-bulk-memory --enable-bulk-memory-opt - --enable-nontrapping-float-to-int --enable-sign-ext - --enable-mutable-globals --enable-multivalue --enable-extended-const - --enable-simd --enable-call-indirect-overlong" +# +# Jüngere Merkmale kennt nicht jedes Binaryen: „--enable-bulk-memory-opt“ etwa +# fehlt den Paketfassungen der Linux-Verteilungen, und wasm-opt bricht dann mit +# „Unknown option“ ab. Darum wird die Liste an der Hilfeausgabe gemessen und um +# das gekürzt, was die vorgefundene Fassung nicht kennt: Was sie nicht kennt, +# gibt sie auch nicht aus, das Ergebnis bleibt mithin gültig — nur womöglich um +# ein paar Bytes größer. +wasm_merkmale_alle="--enable-gc --enable-reference-types --enable-exception-handling + --enable-tail-call --enable-bulk-memory --enable-bulk-memory-opt + --enable-nontrapping-float-to-int --enable-sign-ext + --enable-mutable-globals --enable-multivalue --enable-extended-const + --enable-simd --enable-call-indirect-overlong" if [ -f "$ziel/aendggner.js.wasm" ]; then vorher="$(groesse "$ziel/aendggner.js.wasm")" if command -v wasm-opt >/dev/null 2>&1; then + wasm_hilfe="$(wasm-opt --help 2>&1)" + wasm_merkmale="" + wasm_fehlend="" + for merkmal in $wasm_merkmale_alle; do + if printf '%s\n' "$wasm_hilfe" \ + | grep -qE -- "(^|[^A-Za-z0-9-])$merkmal([^A-Za-z0-9-]|\$)"; then + wasm_merkmale="$wasm_merkmale $merkmal" + else + wasm_fehlend="$wasm_fehlend $merkmal" + fi + done + if [ -n "$wasm_fehlend" ]; then + echo "webpaket: wasm-opt kennt diese Merkmale nicht und läuft ohne sie:" \ + "$wasm_fehlend" >&2 + fi # shellcheck disable=SC2086 # die Merkmalsliste soll in Wörter zerfallen wasm-opt $wasm_merkmale -Oz \ -o "$ziel/aendggner.js.wasm.neu" "$ziel/aendggner.js.wasm" |
