diff --git a/analyze-linuxcnc-wasm-blockers.sh b/analyze-linuxcnc-wasm-blockers.sh index a21e465..57328c0 100755 --- a/analyze-linuxcnc-wasm-blockers.sh +++ b/analyze-linuxcnc-wasm-blockers.sh @@ -63,11 +63,21 @@ wasm_safe_shim_in_build() { core_sources=() blocked_sources=() -while IFS=: read -r group path note extra; do - case "$group" in +manifest_line_number=0 +while IFS= read -r manifest_line || [[ -n "$manifest_line" ]]; do + manifest_line_number=$((manifest_line_number + 1)) + case "$manifest_line" in ""|\#*) continue ;; + esac + + IFS=: read -r group path note extra <<<"$manifest_line" + if [[ -z "$group" || -z "$path" || -z "$note" || -n "${extra:-}" ]]; then + echo "bad manifest line $manifest_line_number: $manifest_line" >&2 + exit 1 + fi + case "$group" in core) core_sources+=("$path") ;; diff --git a/test-linuxcnc-wasm-blockers.sh b/test-linuxcnc-wasm-blockers.sh index 4fa7877..36570f1 100755 --- a/test-linuxcnc-wasm-blockers.sh +++ b/test-linuxcnc-wasm-blockers.sh @@ -43,11 +43,13 @@ missing_source_manifest=$(mktemp "${TMPDIR:-/tmp}/cnc_sim_missing_wasm_blocker_m missing_source_log=$(mktemp "${TMPDIR:-/tmp}/cnc_sim_missing_wasm_blocker_manifest_source.XXXXXX.log") duplicate_manifest=$(mktemp "${TMPDIR:-/tmp}/cnc_sim_duplicate_wasm_blocker_manifest.XXXXXX.txt") duplicate_manifest_log=$(mktemp "${TMPDIR:-/tmp}/cnc_sim_duplicate_wasm_blocker_manifest.XXXXXX.log") +bad_line_manifest=$(mktemp "${TMPDIR:-/tmp}/cnc_sim_bad_wasm_blocker_manifest_line.XXXXXX.txt") +bad_line_log=$(mktemp "${TMPDIR:-/tmp}/cnc_sim_bad_wasm_blocker_manifest_line.XXXXXX.log") missing_replacement_manifest=$(mktemp "${TMPDIR:-/tmp}/cnc_sim_missing_wasm_blocked_replacement.XXXXXX.txt") missing_replacement_log=$(mktemp "${TMPDIR:-/tmp}/cnc_sim_missing_wasm_blocked_replacement.XXXXXX.log") -trap 'rm -f "$missing_manifest" "$missing_manifest_log" "$missing_root_log" "$missing_source_manifest" "$missing_source_log" "$duplicate_manifest" "$duplicate_manifest_log" "$missing_replacement_manifest" "$missing_replacement_log"' EXIT +trap 'rm -f "$missing_manifest" "$missing_manifest_log" "$missing_root_log" "$missing_source_manifest" "$missing_source_log" "$duplicate_manifest" "$duplicate_manifest_log" "$bad_line_manifest" "$bad_line_log" "$missing_replacement_manifest" "$missing_replacement_log"' EXIT if ! awk ' - /^trap '\''rm -f "\$missing_manifest" "\$missing_manifest_log" "\$missing_root_log" "\$missing_source_manifest" "\$missing_source_log" "\$duplicate_manifest" "\$duplicate_manifest_log" "\$missing_replacement_manifest" "\$missing_replacement_log"'\'' EXIT$/ { found_trap = 1 } + /^trap '\''rm -f "\$missing_manifest" "\$missing_manifest_log" "\$missing_root_log" "\$missing_source_manifest" "\$missing_source_log" "\$duplicate_manifest" "\$duplicate_manifest_log" "\$bad_line_manifest" "\$bad_line_log" "\$missing_replacement_manifest" "\$missing_replacement_log"'\'' EXIT$/ { found_trap = 1 } END { exit !found_trap } ' test-linuxcnc-wasm-blockers.sh; then echo "wasm blocker scan cleanup trap no longer covers fixed blocker temporaries" >&2 @@ -106,6 +108,17 @@ if ! grep -F "duplicate manifest source: src/emc/rs274ngc/interp_arc.cc" "$dupli exit 1 fi +printf 'core:src/emc/rs274ngc/interp_arc.cc\n' >"$bad_line_manifest" +if ./analyze-linuxcnc-wasm-blockers.sh "$bad_line_manifest" >"$bad_line_log" 2>&1; then + echo "wasm blocker analyzer accepted bad manifest line" >&2 + exit 1 +fi +if ! grep -F "bad manifest line 1: core:src/emc/rs274ngc/interp_arc.cc" "$bad_line_log" >/dev/null; then + echo "wasm blocker analyzer did not report bad manifest line clearly" >&2 + sed -n '1,20p' "$bad_line_log" >&2 + exit 1 +fi + cat >"$missing_replacement_manifest" <<'EOF' core:src/emc/rs274ngc/interp_arc.cc:core entry blocked:src/emc/tooldata/tooldata_db.cc:blocked entry without wasm replacement