#!/usr/bin/env bash set -euo pipefail ROOT_DIR="$(cd "$(dirname "$0")/.." && pwd)" LINUXCNC_ROOT="${LINUXCNC_ROOT:-$ROOT_DIR/../linuxcnc}" UPSTREAM="$LINUXCNC_ROOT/src/emc/task/taskintf.cc" SUBSET_SRC="$ROOT_DIR/vendor/linuxcnc/src/emc/task/taskintf_wasm_subset.cc" SUBSET_HDR="$ROOT_DIR/vendor/linuxcnc/src/emc/task/taskintf_wasm_subset.hh" BUILD_SCRIPT="$ROOT_DIR/tools/build_task_hal_wasm.sh" print_kv() { printf '%s=%s\n' "$1" "$2" } require_file() { local key="$1" local path="$2" if [[ ! -f "$path" ]]; then print_kv "$key" missing print_kv "${key}_path" "$path" exit 1 fi print_kv "$key" ok print_kv "${key}_path" "$path" } require_pattern() { local key="$1" local pattern="$2" local path="$3" if ! rg -q "$pattern" "$path"; then print_kv "$key" missing print_kv "${key}_pattern" "$pattern" print_kv "${key}_path" "$path" exit 1 fi print_kv "$key" ok } require_file task_taskintf_subset_upstream "$UPSTREAM" require_file task_taskintf_subset_source "$SUBSET_SRC" require_file task_taskintf_subset_header "$SUBSET_HDR" for fn in \ emcMotionInit \ emcMotionUpdate \ emcMotionAbort \ emcTrajSetMotionId \ emcTrajEnable \ emcTrajDisable \ emcTrajAbort \ emcTrajPause \ emcTrajStep \ emcTrajResume \ emcTrajLinearMove \ emcJogIncr \ emcJointHome \ emcJointUnhome \ emcMotionSetAout do require_pattern "task_taskintf_subset_upstream_$fn" "int $fn\\(" "$UPSTREAM" require_pattern "task_taskintf_subset_origin_$fn" "$fn" "$SUBSET_SRC" done require_pattern task_taskintf_subset_origin_path "src/emc/task/taskintf.cc" "$SUBSET_SRC" require_pattern task_taskintf_subset_build_included "taskintf_wasm_subset.cc" "$BUILD_SCRIPT" require_pattern task_taskintf_subset_motion_bridge_anchors "emcMotionInit,emcMotionUpdate,emcMotionAbort" "$SUBSET_SRC" require_pattern task_taskintf_subset_traj_control_anchors "emcTrajSetMotionId,emcTrajEnable,emcTrajDisable,emcTrajAbort,emcTrajPause,emcTrajStep,emcTrajResume" "$SUBSET_SRC" require_pattern task_taskintf_subset_linear_move_ex "lc_taskintf_subset_linear_move_ex" "$SUBSET_HDR" require_pattern task_taskintf_subset_linear_move_anchors "emcTrajLinearMove,EMCMOT_SET_LINE,usrmotWriteEmcmotCommand" "$SUBSET_SRC" require_pattern task_taskintf_subset_jog_home_switchkins_anchors "emcJogIncr,emcJointHome,emcJointUnhome,emcMotionSetAout" "$SUBSET_SRC" print_kv task_taskintf_subset_source_reuse ok