#!/usr/bin/env bash set -euo pipefail ROOT_DIR="$(cd "$(dirname "$0")/.." && pwd)" VENDOR_DIR="$ROOT_DIR/vendor/linuxcnc" BUILD_DIR="$ROOT_DIR/build/native" WRAP_DIR="$ROOT_DIR/runtime/core/linuxcnc_wrap" SHIM_DIR="$ROOT_DIR/runtime/core/shims" INCLUDE_DIR="$ROOT_DIR/runtime/core/include" SOURCE_PROBE_MAP="$BUILD_DIR/source-probes.tsv" NATIVE_SOURCE_PROOF_SUMMARY="$BUILD_DIR/native-source-proof-summary.tsv" NATIVE_RUNTIME_PROBE_SUMMARY="$BUILD_DIR/native-runtime-probe-summary.tsv" MILLTURN_USER_M_RUNTIME_PROBE="$ROOT_DIR/tests/native/probe_millturn_user_m_runtime.sh" TOOL_DB_RUNTIME_PROBE="$ROOT_DIR/tests/native/probe_tool_db_runtime.sh" PYTHON_REMAP_RUNTIME_PROBE="$ROOT_DIR/tests/native/probe_python_remap_runtime.sh" MINIMAL_GCODE_FIXTURE="$ROOT_DIR/tests/fixtures/gcode/minimal_linear.ngc" DO_WHILE_BREAK_FIXTURE="$ROOT_DIR/vendor/linuxcnc/tests/interp/do-while-break/test.ngc" OWORD_BUG315_FIXTURE="$ROOT_DIR/vendor/linuxcnc/tests/interp/oword-bug315/test.ngc" OWORD_BUG315_P2_FIXTURE="$ROOT_DIR/vendor/linuxcnc/tests/interp/oword-bug315-p2/test.ngc" EXISTS_FIXTURE="$ROOT_DIR/vendor/linuxcnc/tests/interp/exists/test.ngc" RETURN_VALUE_FIXTURE="$ROOT_DIR/vendor/linuxcnc/tests/interp/return-value/test.ngc" SUBS_FOLLOW_MAIN_FIXTURE="$ROOT_DIR/vendor/linuxcnc/tests/interp/subs-follow-main/test.ngc" FRACTIONAL_LINENUMBERS_FIXTURE="$ROOT_DIR/vendor/linuxcnc/tests/interp/fractional-linenumbers/test.ngc" CAM_NISLEY_FIXTURE="$ROOT_DIR/vendor/linuxcnc/tests/interp/cam-nisley/cam.ngc" CAM_NISLEY_TOOL_TABLE="$ROOT_DIR/vendor/linuxcnc/tests/interp/cam-nisley/test.tbl" CAM_NISLEY_INI="$BUILD_DIR/cam-nisley.ini" CRAZY_PATHS_FIXTURE="$ROOT_DIR/vendor/linuxcnc/tests/interp/crazy-paths/test.ngc" NAMEDPARAM_BUG424_FIXTURE="$ROOT_DIR/vendor/linuxcnc/tests/interp/namedparam-bug424/test.ngc" FLOWSNAKE_FIXTURE="$ROOT_DIR/vendor/linuxcnc/tests/interp/flowsnake/flowsnake.ngc" INSIDE_CORNERS_FIXTURE="$ROOT_DIR/vendor/linuxcnc/tests/interp/inside-corners/test.ngc" INVERSE_TIME_WITH_COMP_FIXTURE="$ROOT_DIR/vendor/linuxcnc/tests/interp/inverse-time-with-comp/inverse.ngc" CCOMP_LATHE_COMP_FIXTURE="$ROOT_DIR/vendor/linuxcnc/tests/ccomp/lathe-comp/test.ngc" CCOMP_LATHE_COMP_TOOL_TABLE="$ROOT_DIR/vendor/linuxcnc/tests/ccomp/lathe-comp/test.tbl" CCOMP_LATHE_COMP_INI="$BUILD_DIR/ccomp-lathe-comp.ini" CCOMP_MILL_G90G91G92_FIXTURE="$ROOT_DIR/vendor/linuxcnc/tests/ccomp/mill-g90g91g92/test.ngc" CCOMP_MILL_G90G91G92_TOOL_TABLE="$ROOT_DIR/vendor/linuxcnc/tests/ccomp/mill-g90g91g92/test.tbl" CCOMP_MILL_G90G91G92_INI="$BUILD_DIR/ccomp-mill-g90g91g92.ini" CCOMP_MILL_LINE_ARC_ENTRY_FIXTURE="$ROOT_DIR/vendor/linuxcnc/tests/ccomp/mill-line-arc-entry/test.ngc" CCOMP_MILL_LINE_ARC_ENTRY_TOOL_TABLE="$ROOT_DIR/vendor/linuxcnc/tests/ccomp/mill-line-arc-entry/test.tbl" CCOMP_MILL_LINE_ARC_ENTRY_INI="$BUILD_DIR/ccomp-mill-line-arc-entry.ini" CCOMP_MILL_ZCHANGES_FIXTURE="$ROOT_DIR/vendor/linuxcnc/tests/ccomp/mill-zchanges/test.ngc" CCOMP_MILL_ZCHANGES_TOOL_TABLE="$ROOT_DIR/vendor/linuxcnc/tests/ccomp/mill-zchanges/test.tbl" CCOMP_MILL_ZCHANGES_INI="$BUILD_DIR/ccomp-mill-zchanges.ini" BAD_A_IN_CANNED_CYCLE_FIXTURE="$ROOT_DIR/vendor/linuxcnc/tests/interp/bad/a-in-canned-cycle.ngc" BAD_A_IN_CANNED_CYCLE2_FIXTURE="$ROOT_DIR/vendor/linuxcnc/tests/interp/bad/a-in-canned-cycle2.ngc" BAD_ARC_BIG_IMPERIAL_CENTER_FORMAT_FIXTURE="$ROOT_DIR/vendor/linuxcnc/tests/interp/bad/bad-arc.big.imperial.center-format.ngc" BAD_ARC_BIG_METRIC_CENTER_FORMAT_FIXTURE="$ROOT_DIR/vendor/linuxcnc/tests/interp/bad/bad-arc.big.metric.center-format.ngc" BAD_ARC_MEDIUM_IMPERIAL_CENTER_FORMAT_FIXTURE="$ROOT_DIR/vendor/linuxcnc/tests/interp/bad/bad-arc.medium.imperial.center-format.ngc" BAD_ARC_MEDIUM_METRIC_CENTER_FORMAT_FIXTURE="$ROOT_DIR/vendor/linuxcnc/tests/interp/bad/bad-arc.medium.metric.center-format.ngc" BAD_ARC_SMALL_IMPERIAL_CENTER_FORMAT_FIXTURE="$ROOT_DIR/vendor/linuxcnc/tests/interp/bad/bad-arc.small.imperial.center-format.ngc" BAD_ARC_SMALL_METRIC_CENTER_FORMAT_FIXTURE="$ROOT_DIR/vendor/linuxcnc/tests/interp/bad/bad-arc.small.metric.center-format.ngc" BAD_CCOMP_ARCEXIT_FIXTURE="$ROOT_DIR/vendor/linuxcnc/tests/interp/bad/ccomp-arcexit.ngc" BAD_CCOMP_GOUGING_FIXTURE="$ROOT_DIR/vendor/linuxcnc/tests/interp/bad/ccomp-gouging.ngc" BAD_EXISTS_1_FIXTURE="$ROOT_DIR/vendor/linuxcnc/tests/interp/bad/exists-1.ngc" BAD_EXISTS_2_FIXTURE="$ROOT_DIR/vendor/linuxcnc/tests/interp/bad/exists-2.ngc" BAD_EXISTS_3_FIXTURE="$ROOT_DIR/vendor/linuxcnc/tests/interp/bad/exists-3.ngc" BAD_EXISTS_4_FIXTURE="$ROOT_DIR/vendor/linuxcnc/tests/interp/bad/exists-4.ngc" BAD_EXISTS_5_FIXTURE="$ROOT_DIR/vendor/linuxcnc/tests/interp/bad/exists-5.ngc" BAD_EXISTS_6_FIXTURE="$ROOT_DIR/vendor/linuxcnc/tests/interp/bad/exists-6.ngc" BAD_EXISTS_7_FIXTURE="$ROOT_DIR/vendor/linuxcnc/tests/interp/bad/exists-7.ngc" BAD_NESTED_FIXTURE="$ROOT_DIR/vendor/linuxcnc/tests/interp/bad/nested.ngc" BAD_NO_FEED_RATE_FIXTURE="$ROOT_DIR/vendor/linuxcnc/tests/interp/bad/no-feed-rate.ngc" BAD_NO_IJR_FIXTURE="$ROOT_DIR/vendor/linuxcnc/tests/interp/bad/no-ijr.ngc" BAD_PROBE_NO_AXES_FIXTURE="$ROOT_DIR/vendor/linuxcnc/tests/interp/bad/probe-no-axes.ngc" G33_1_FIXTURE="$ROOT_DIR/vendor/linuxcnc/tests/interp/g33.1/g33.1.ngc" G6164_FIXTURE="$ROOT_DIR/vendor/linuxcnc/tests/interp/g6164/test.ngc" GOOD_ARC_BIG_IMPERIAL_CENTER_FORMAT_FIXTURE="$ROOT_DIR/vendor/linuxcnc/tests/interp/good/good-arc.big.imperial.center-format.ngc" GOOD_ARC_BIG_METRIC_CENTER_FORMAT_FIXTURE="$ROOT_DIR/vendor/linuxcnc/tests/interp/good/good-arc.big.metric.center-format.ngc" GOOD_ARC_MEDIUM_IMPERIAL_CENTER_FORMAT_FIXTURE="$ROOT_DIR/vendor/linuxcnc/tests/interp/good/good-arc.medium.imperial.center-format.ngc" GOOD_ARC_MEDIUM_METRIC_CENTER_FORMAT_FIXTURE="$ROOT_DIR/vendor/linuxcnc/tests/interp/good/good-arc.medium.metric.center-format.ngc" GOOD_ARC_SMALL_IMPERIAL_CENTER_FORMAT_FIXTURE="$ROOT_DIR/vendor/linuxcnc/tests/interp/good/good-arc.small.imperial.center-format.ngc" GOOD_ARC_SMALL_METRIC_CENTER_FORMAT_FIXTURE="$ROOT_DIR/vendor/linuxcnc/tests/interp/good/good-arc.small.metric.center-format.ngc" G72_FACING_FIXTURE="$ROOT_DIR/vendor/linuxcnc/tests/interp/g72-facing/g72-iterations-present.ngc" G72_MISSING_ITERATION_FIXTURE="$ROOT_DIR/vendor/linuxcnc/tests/interp/g72-missing-iteration/g72-iterations-missing.ngc" G71_ENDLESS_LOOP_FIXTURE="$ROOT_DIR/vendor/linuxcnc/tests/interp/g71-endless-loop/g71-endless-loop.ngc" G71_ENDLESS_LOOP2_FIXTURE="$ROOT_DIR/vendor/linuxcnc/tests/interp/g71-endless-loop2/g71-endless-loop2.ngc" G71_ENDLESS_LOOP_2_FIXTURE="$ROOT_DIR/vendor/linuxcnc/tests/interp/g71-endless-loop_2/g71-endless-loop_2.ngc" G71_WITH_G70_FIXTURE="$ROOT_DIR/vendor/linuxcnc/tests/interp/g71-with-g70/g71-with-g70.ngc" G76_FIXTURE="$ROOT_DIR/vendor/linuxcnc/tests/interp/g76/g76only.ngc" G76_TOOL_TABLE="$ROOT_DIR/vendor/linuxcnc/tests/interp/g76/test.tbl" G76_INI="$BUILD_DIR/g76.ini" ROTATION_ABS_PTS_FIXTURE="$ROOT_DIR/vendor/linuxcnc/tests/interp/rotation/abs-pts/test.ngc" ROTATION_G28_FIXTURE="$ROOT_DIR/vendor/linuxcnc/tests/interp/rotation/g28/g28.ngc" ROTATION_G53_FIXTURE="$ROOT_DIR/vendor/linuxcnc/tests/interp/rotation/g53/g53.ngc" INIPARAM_FIXTURE="$ROOT_DIR/vendor/linuxcnc/tests/interp/iniparam/test.ngc" INIPARAM_INI="$ROOT_DIR/vendor/linuxcnc/tests/interp/iniparam/test.ini" INIPARAM_FAILASSIGN_FIXTURE="$ROOT_DIR/vendor/linuxcnc/tests/interp/iniparam-failassign/test.ngc" INIPARAM_FAILASSIGN_INI="$ROOT_DIR/vendor/linuxcnc/tests/interp/iniparam-failassign/test.ini" SUB_CALL_FROM_SUB_FIXTURE="$ROOT_DIR/vendor/linuxcnc/tests/interp/sub-call-from-sub/test.ngc" SUB_CALL_FROM_SUB_INI="$ROOT_DIR/vendor/linuxcnc/tests/interp/sub-call-from-sub/test.ini" SEQUENCE_NUMBER_FIXTURE="$ROOT_DIR/vendor/linuxcnc/tests/interp/sequence-number/test.ngc" SEQUENCE_NUMBER_INI="$ROOT_DIR/vendor/linuxcnc/tests/interp/sequence-number/test.ini" NESTED_SUB_ERROR_FIXTURE="$ROOT_DIR/vendor/linuxcnc/tests/interp/nested-sub-error/test.ngc" NESTED_SUB_ERROR_INI="$ROOT_DIR/vendor/linuxcnc/tests/interp/nested-sub-error/test.ini" NESTED_SUB_IN_FILE_ERROR_FIXTURE="$ROOT_DIR/vendor/linuxcnc/tests/interp/nested-sub-in-file-error/test.ngc" NESTED_SUB_IN_FILE_ERROR_INI="$ROOT_DIR/vendor/linuxcnc/tests/interp/nested-sub-in-file-error/test.ini" OWORD_UNWIND_FIXTURE="$ROOT_DIR/vendor/linuxcnc/tests/interp/oword-unwind/test.ngc" OWORD_UNWIND_INI="$ROOT_DIR/vendor/linuxcnc/tests/interp/oword-unwind/test.ini" ABORT_HOT_COMMENT_FIXTURE="$ROOT_DIR/vendor/linuxcnc/tests/interp/abort-hot-comment/test.ngc" ABORT_HOT_COMMENT_INI="$ROOT_DIR/vendor/linuxcnc/tests/interp/abort-hot-comment/test.ini" M19_FIXTURE="$ROOT_DIR/vendor/linuxcnc/tests/interp/m19/test.ngc" M19_INI="$ROOT_DIR/vendor/linuxcnc/tests/interp/m19/test.ini" MAGIC_COMMENTS_PARAM_FORMAT_FIXTURE="$ROOT_DIR/vendor/linuxcnc/tests/interp/magic_comments/param_format_printing/test.ngc" M98M99_01_BASICS_FIXTURE="$ROOT_DIR/vendor/linuxcnc/tests/interp/m98m99/01-basics/test.ngc" M98M99_02_VARIABLES_FIXTURE="$ROOT_DIR/vendor/linuxcnc/tests/interp/m98m99/02-variables/test.ngc" M98M99_03_ERROR_M98_NO_P_WORD_FIXTURE="$ROOT_DIR/vendor/linuxcnc/tests/interp/m98m99/03-error-M98-no-P-word/test.ngc" M98M99_04_M98_BUT_NO_SUB_FIXTURE="$ROOT_DIR/vendor/linuxcnc/tests/interp/m98m99/04-M98-but-no-sub/test.ngc" M98M99_05_M98_LOOPS_FIXTURE="$ROOT_DIR/vendor/linuxcnc/tests/interp/m98m99/05-M98-loops/test.ngc" M98M99_06_CALLED_WITH_O_CALL_FIXTURE="$ROOT_DIR/vendor/linuxcnc/tests/interp/m98m99/06-error-mixed-sub-styles/O...-called-with-O..._call.ngc" M98M99_06_ENDED_WITH_O_ENDSUB_FIXTURE="$ROOT_DIR/vendor/linuxcnc/tests/interp/m98m99/06-error-mixed-sub-styles/O...-ended-with-O..._endsub.ngc" M98M99_06_SUB_CALLED_WITH_M98_FIXTURE="$ROOT_DIR/vendor/linuxcnc/tests/interp/m98m99/06-error-mixed-sub-styles/O...-sub-called-with-M98.ngc" M98M99_06_SUB_ENDED_WITH_M99_FIXTURE="$ROOT_DIR/vendor/linuxcnc/tests/interp/m98m99/06-error-mixed-sub-styles/O...-sub-ended-with-M99.ngc" M98M99_07_NESTED_SUBS_FIXTURE="$ROOT_DIR/vendor/linuxcnc/tests/interp/m98m99/07-nested-subs/test.ngc" M98M99_08_SUB_FOLLOWS_MAIN_FIXTURE="$ROOT_DIR/vendor/linuxcnc/tests/interp/m98m99/08-sub-follows-main/test.ngc" M98M99_09_FANUC_FIXTURE="$ROOT_DIR/vendor/linuxcnc/tests/interp/m98m99/09-disable-fanuc-subs/test-fanuc.ngc" M98M99_09_RS274NGC_FIXTURE="$ROOT_DIR/vendor/linuxcnc/tests/interp/m98m99/09-disable-fanuc-subs/test-rs274ngc.ngc" M98M99_09_FANUC_INI="$ROOT_DIR/vendor/linuxcnc/tests/interp/m98m99/09-disable-fanuc-subs/test-fanuc.ini" M98M99_09_NO_FANUC_INI="$ROOT_DIR/vendor/linuxcnc/tests/interp/m98m99/09-disable-fanuc-subs/test-no-fanuc.ini" M98M99_10_M98_P001_FIXTURE="$ROOT_DIR/vendor/linuxcnc/tests/interp/m98m99/10-M98-P001/test.ngc" M98M99_11_LEGAL_M2_FIXTURE="$ROOT_DIR/vendor/linuxcnc/tests/interp/m98m99/11-main-program-oword/test-legal-end-main-with-m2.ngc" M98M99_11_LEGAL_M02_FIXTURE="$ROOT_DIR/vendor/linuxcnc/tests/interp/m98m99/11-main-program-oword/test-legal-end-main-with-m02.ngc" M98M99_11_LEGAL_M30_FIXTURE="$ROOT_DIR/vendor/linuxcnc/tests/interp/m98m99/11-main-program-oword/test-legal-end-main-with-m30.ngc" M98M99_11_LEGAL_PERCENT_FIXTURE="$ROOT_DIR/vendor/linuxcnc/tests/interp/m98m99/11-main-program-oword/test-legal-end-main-with-percent.ngc" M98M99_11_ILLEGAL_EOF_FIXTURE="$ROOT_DIR/vendor/linuxcnc/tests/interp/m98m99/11-main-program-oword/test-illegal-end-main-with-eof.ngc" M98M99_11_ILLEGAL_NO_M30_FIXTURE="$ROOT_DIR/vendor/linuxcnc/tests/interp/m98m99/11-main-program-oword/test-illegal-no-m30-before-osub.ngc" M98M99_11_ILLEGAL_SUB_AFTER_PERCENT_FIXTURE="$ROOT_DIR/vendor/linuxcnc/tests/interp/m98m99/11-main-program-oword/test-illegal-sub-after-percent.ngc" M98M99_13_NAMED_PROGRAM_NAMED_FIXTURE="$ROOT_DIR/vendor/linuxcnc/tests/interp/m98m99/13-named-program/test-named.ngc" M98M99_13_NAMED_PROGRAM_NUMBERED_FIXTURE="$ROOT_DIR/vendor/linuxcnc/tests/interp/m98m99/13-named-program/test-numbered.ngc" M98M99_14_O_EXPRESSION_CALL_FIXTURE="$ROOT_DIR/vendor/linuxcnc/tests/interp/m98m99/14-o-expression-call/test.ngc" G10_L1_L10_FIXTURE="$ROOT_DIR/vendor/linuxcnc/tests/interp/g10/g10-l1-l10/test.ngc" G10_L1_L10_TOOL_TABLE="$ROOT_DIR/vendor/linuxcnc/tests/interp/g10/g10-l1-l10/test.tbl" G10_L1_L10_INI="$BUILD_DIR/g10-l1-l10.ini" G10_L11_FIXTURE="$ROOT_DIR/vendor/linuxcnc/tests/interp/g10/g10-l11/test.ngc" G10_L11_TOOL_TABLE="$ROOT_DIR/vendor/linuxcnc/tests/interp/g10/g10-l11/test.tbl" G10_L11_INI="$BUILD_DIR/g10-l11.ini" G10_L2_WHILE_ACTIVE_FIXTURE="$ROOT_DIR/vendor/linuxcnc/tests/interp/g10/g10-l2-while-active/test.ngc" G10_L20_WHILE_ACTIVE_FIXTURE="$ROOT_DIR/vendor/linuxcnc/tests/interp/g10/g10-l20-while-active/test.ngc" G10_WITH_G92_FIXTURE="$ROOT_DIR/vendor/linuxcnc/tests/interp/g10/g10-with-g92/test.ngc" G10_WITH_G92_TOOL_TABLE="$ROOT_DIR/vendor/linuxcnc/tests/interp/g10/g10-with-g92/test.tbl" G10_WITH_G92_INI="$BUILD_DIR/g10-with-g92.ini" G52_G92_INTERACTION_FIXTURE="$ROOT_DIR/vendor/linuxcnc/tests/interp/g52/g52-g92-interaction/g52-g92-interaction.ngc" G92_PERSISTENCE_FIXTURE="$BUILD_DIR/g92-persistence.ngc" G92_PERSISTENCE_PARAMETER_FILE="$BUILD_DIR/g92-persistence.var" G92_PERSISTENCE_INI="$BUILD_DIR/g92-persistence.ini" G92_PERSISTENCE_DISABLED_INI="$BUILD_DIR/g92-persistence-disabled.ini" SIM_AXIS_FOAM_FIXTURE="$ROOT_DIR/../linuxcnc/configs/sim/axis/foam/foam.ngc" SIM_AXIS_FOAM_INI="$ROOT_DIR/../linuxcnc/configs/sim/axis/foam/axis_foam.ini" SIM_BRIDGEMILL_FIXTURE="$ROOT_DIR/../linuxcnc/configs/sim/axis/vismach/5axis/bridgemill/5axisgui.ngc" SIM_BRIDGEMILL_INI="$ROOT_DIR/../linuxcnc/configs/sim/axis/vismach/5axis/bridgemill/5axis.ini" SIM_GEOMETRY_XYZC_FIXTURE="$ROOT_DIR/../linuxcnc/configs/sim/axis/geometry/xyzc.ngc" SIM_GEOMETRY_XYZC_INI="$ROOT_DIR/../linuxcnc/configs/sim/axis/geometry/xyzc.ini" SIM_EXTERNAL_OFFSETS_DYN_FIXTURE="$ROOT_DIR/../linuxcnc/configs/sim/axis/external_offsets/dyn_demo.ngc" SIM_EXTERNAL_OFFSETS_DYN_INI="$ROOT_DIR/../linuxcnc/configs/sim/axis/external_offsets/dynamic_offsets.ini" NAMEDPARAM_INI_FIXTURE="$ROOT_DIR/tests/fixtures/ini/namedparams.ini" CXX="${CXX:-g++}" CC="${CC:-gcc}" CACHE_KEY_FILE="$BUILD_DIR/native-probes.input.sha256" CACHE_OK_FILE="$BUILD_DIR/native-probes.ok" CACHE_OUTPUT_MANIFEST="$BUILD_DIR/native-probes.outputs" NATIVE_PROBE_RUN_TIMEOUT_SECONDS="${NATIVE_PROBE_RUN_TIMEOUT_SECONDS:-60}" mkdir -p "$BUILD_DIR" hash_tree() { find "$@" -type f -print0 | sort -z | xargs -0 -r sha256sum } native_input_fingerprint() { { printf 'CXX=%s\n' "$CXX" "$CXX" --version 2>/dev/null | sed -n '1p' || true printf 'CC=%s\n' "$CC" "$CC" --version 2>/dev/null | sed -n '1p' || true printf 'ENABLE_MILLTURN_USER_M_RUNTIME_PROBE=%s\n' "${ENABLE_MILLTURN_USER_M_RUNTIME_PROBE:-0}" printf 'ENABLE_TOOL_DB_RUNTIME_PROBE=%s\n' "${ENABLE_TOOL_DB_RUNTIME_PROBE:-0}" printf 'ENABLE_PYTHON_REMAP_RUNTIME_PROBE=%s\n' "${ENABLE_PYTHON_REMAP_RUNTIME_PROBE:-0}" sha256sum \ "$ROOT_DIR/tools/build_native_probes.sh" \ "$ROOT_DIR/tools/source-manifest.txt" hash_tree \ "$VENDOR_DIR" \ "$WRAP_DIR" \ "$SHIM_DIR" \ "$INCLUDE_DIR" \ "$ROOT_DIR/tests/fixtures" hash_tree \ "$ROOT_DIR/../linuxcnc/configs/sim/axis/vismach/millturn/mcodes" \ "$ROOT_DIR/../linuxcnc/configs/sim/axis/vismach/millturn/remap_subs" sha256sum \ "$MILLTURN_USER_M_RUNTIME_PROBE" \ "$ROOT_DIR/../linuxcnc/configs/sim/axis/vismach/millturn/millturn.ini" hash_tree \ "$ROOT_DIR/../linuxcnc/configs/sim/axis/db_demo" sha256sum \ "$TOOL_DB_RUNTIME_PROBE" \ "$ROOT_DIR/../linuxcnc/src/emc/task/taskclass.cc" \ "$ROOT_DIR/../linuxcnc/src/emc/tooldata/tooldata_db.cc" \ "$ROOT_DIR/../linuxcnc/src/emc/tooldata/tooldata_common.cc" hash_tree \ "$ROOT_DIR/../linuxcnc/configs/sim/axis/laser" \ "$ROOT_DIR/../linuxcnc/configs/sim/axis/remap/cycle" \ "$ROOT_DIR/../linuxcnc/configs/sim/axis/nc_files/remap_lib/python-stdglue" \ "$ROOT_DIR/../linuxcnc/configs/sim/axis/vismach/5axis/table-rotary_spindle-rotary-nutating" \ "$ROOT_DIR/../linuxcnc/configs/sim/gmoccapy/python" sha256sum \ "$ROOT_DIR/../linuxcnc/src/emc/rs274ngc/interp_python.cc" \ "$ROOT_DIR/../linuxcnc/src/emc/pythonplugin/python_plugin.cc" \ "$PYTHON_REMAP_RUNTIME_PROBE" hash_tree \ "$ROOT_DIR/../linuxcnc/configs/sim/axis/remap/stop-lookahead" } | sha256sum | awk '{ print $1 }' } cached_native_outputs_exist() { [[ -f "$CACHE_OUTPUT_MANIFEST" ]] || return 1 [[ -s "$SOURCE_PROBE_MAP" ]] || return 1 local file while IFS= read -r file; do [[ -z "$file" ]] && continue [[ -f "$file" ]] || return 1 done < "$CACHE_OUTPUT_MANIFEST" } write_native_cache_stamp() { local key="$1" printf '%s\n' "$key" > "$CACHE_KEY_FILE" find "$BUILD_DIR" -maxdepth 1 -type f \ ! -name 'native-probes.input.sha256' \ ! -name 'native-probes.ok' \ ! -name 'native-probes.outputs' \ -print | sort > "$CACHE_OUTPUT_MANIFEST" printf '%s\n' "$key" > "$CACHE_OK_FILE" } NATIVE_INPUT_FINGERPRINT="$(native_input_fingerprint)" if [[ -f "$CACHE_KEY_FILE" && -f "$CACHE_OK_FILE" ]] && [[ "$(tr -d '[:space:]' < "$CACHE_KEY_FILE")" == "$NATIVE_INPUT_FINGERPRINT" ]] && [[ "$(tr -d '[:space:]' < "$CACHE_OK_FILE")" == "$NATIVE_INPUT_FINGERPRINT" ]] && cached_native_outputs_exist; then echo "native probes up to date" exit 0 fi : > "$SOURCE_PROBE_MAP" COMMON_FLAGS=( -std=c++20 -O2 -D_GNU_SOURCE -DM_PI=3.14159265358979323846 -DOBJECT_FWD_DWA2002724_HPP -I"$WRAP_DIR" -I"$SHIM_DIR" -I"$INCLUDE_DIR" -I"$VENDOR_DIR/src" -I"$VENDOR_DIR/src/rtapi" -I"$VENDOR_DIR/src/emc" -I"$VENDOR_DIR/src/emc/nml_intf" -I"$VENDOR_DIR/src/emc/motion" -I"$VENDOR_DIR/src/emc/tp" -I"$VENDOR_DIR/src/emc/kinematics" -I"$VENDOR_DIR/src/libnml/posemath" ) COMMON_INI_FLAGS=( "${COMMON_FLAGS[@]}" -I"$VENDOR_DIR/src/emc/ini" ) REMAP_SOURCE_FLAGS=( "${COMMON_INI_FLAGS[@]}" -include "$SHIM_DIR/linuxcnc_remap_compile_compat.hh" ) VENDOR_ASSET_FLAGS=( "${COMMON_INI_FLAGS[@]}" -DLINUXCNC_VENDOR_DIR=\"$VENDOR_DIR\" ) SOURCE_CONFIG_ASSET_FLAGS=( "${COMMON_INI_FLAGS[@]}" -DLINUXCNC_SOURCE_DIR=\"$ROOT_DIR/../linuxcnc\" -DLINUXCNC_SOURCE_CONFIG_DIR=\"$ROOT_DIR/../linuxcnc/configs/sim\" ) MINIMAL_FLAGS=( "${COMMON_INI_FLAGS[@]}" -ffunction-sections -fdata-sections -DUNIT_TEST -DLINUXCNC_STANDALONE_USE_RS274_PRE_STATE ) REMAP_RUNTIME_FLAGS=( "${MINIMAL_FLAGS[@]}" -DLINUXCNC_VENDOR_DIR=\"$VENDOR_DIR\" -include "$SHIM_DIR/linuxcnc_remap_compile_compat.hh" ) INTERP_BASE_FLAGS=( "${MINIMAL_FLAGS[@]}" -DEMC2_HOME=\"/standalone\" ) MINIMAL_LINK_FLAGS=( -Wl,--gc-sections ) TP_FLAGS=( "${COMMON_FLAGS[@]}" -fpermissive ) C_FLAGS=( -std=gnu11 -O2 -D_GNU_SOURCE -DM_PI=3.14159265358979323846 -I"$WRAP_DIR" -I"$SHIM_DIR" -I"$INCLUDE_DIR" -I"$VENDOR_DIR/src" -I"$VENDOR_DIR/src/rtapi" -I"$VENDOR_DIR/src/emc" -I"$VENDOR_DIR/src/emc/nml_intf" -I"$VENDOR_DIR/src/emc/motion" -I"$VENDOR_DIR/src/emc/tp" -I"$VENDOR_DIR/src/emc/kinematics" -I"$VENDOR_DIR/src/libnml/posemath" ) write_command_file() { local file="$1" shift printf '%q\n' "$@" > "$file" } write_file_if_changed() { local file="$1" local tmp tmp="$(mktemp)" cat > "$tmp" if [[ -f "$file" ]] && cmp -s "$tmp" "$file"; then rm -f "$tmp" return 0 fi mv "$tmp" "$file" } stdout_value() { local file="$1" local key="$2" awk -F= -v key="$key" '$1 == key { value = substr($0, length(key) + 2) } END { print value }' "$file" } append_native_source_proof_summary_row() { local tmp="$1" local boundary="$2" local proof_key="$3" local execution_key="$4" local promotion_key="$5" local stdout_log="$6" local proof_value local execution_enabled local promotion_allowed proof_value="$(stdout_value "$stdout_log" "$proof_key")" execution_enabled="$(stdout_value "$stdout_log" "$execution_key")" promotion_allowed="$(stdout_value "$stdout_log" "$promotion_key")" printf '%s\t%s\t%s\t%s\t%s\t%s\n' \ "$boundary" \ "$proof_key" \ "$proof_value" \ "$execution_enabled" \ "$promotion_allowed" \ "${stdout_log#"$BUILD_DIR"/}" >> "$tmp" } write_native_source_proof_summary() { local tmp tmp="$(mktemp)" printf '%s\t%s\t%s\t%s\t%s\t%s\n' \ boundary_class \ proof_key \ proof_value \ execution_enabled \ promotion_allowed \ stdout_log > "$tmp" append_native_source_proof_summary_row \ "$tmp" \ L4-USER-M-PROCESS \ millturn_user_m_native_source_state_proof \ millturn_user_m_execution_enabled \ millturn_user_m_promotion_allowed \ "$BUILD_DIR/linuxcnc_millturn_user_m_boundary_probe.run.stdout.log" append_native_source_proof_summary_row \ "$tmp" \ L4-TOOL-DB \ tool_db_native_source_protocol_proof \ tool_db_execution_enabled \ tool_db_promotion_allowed \ "$BUILD_DIR/linuxcnc_tool_db_boundary_probe.run.stdout.log" append_native_source_proof_summary_row \ "$tmp" \ L4-PYTHON-REMAP \ python_remap_native_source_inventory_proof \ python_remap_execution_enabled \ python_remap_promotion_allowed \ "$BUILD_DIR/linuxcnc_python_remap_boundary_probe.run.stdout.log" if [[ -f "$NATIVE_SOURCE_PROOF_SUMMARY" ]] && cmp -s "$tmp" "$NATIVE_SOURCE_PROOF_SUMMARY"; then rm -f "$tmp" return 0 fi mv "$tmp" "$NATIVE_SOURCE_PROOF_SUMMARY" } append_native_runtime_probe_summary_row() { local tmp="$1" local boundary_class="$2" local boundary_kind="$3" local target="$4" local runtime_probe="$5" local required_native_proof="$6" local opt_in_env="$7" local prefix="$8" local stdout_log="$9" local runtime_ready local source_proof_ready local probe_status local execution_enabled local promotion_allowed local missing_requirements local probe_note runtime_ready="$(stdout_value "$stdout_log" "${prefix}_runtime_ready")" source_proof_ready="$(stdout_value "$stdout_log" "${prefix}_source_proof_ready")" probe_status="$(stdout_value "$stdout_log" "${prefix}_runtime_probe_status")" execution_enabled="$(stdout_value "$stdout_log" "${prefix}_execution_enabled")" promotion_allowed="$(stdout_value "$stdout_log" "${prefix}_promotion_allowed")" missing_requirements="$(stdout_value "$stdout_log" "${prefix}_missing_requirements")" probe_note="$(stdout_value "$stdout_log" "${prefix}_runtime_probe_note")" printf '%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n' \ "$boundary_class" \ "$boundary_kind" \ "$target" \ "$runtime_probe" \ "$required_native_proof" \ "$opt_in_env" \ "$runtime_ready" \ "$source_proof_ready" \ "$probe_status" \ "$execution_enabled" \ "$promotion_allowed" \ "${missing_requirements:-"-"}" \ "${probe_note:-"-"}" \ "${stdout_log#"$BUILD_DIR"/}" >> "$tmp" } write_native_runtime_probe_summary() { local tmp tmp="$(mktemp)" printf '%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n' \ boundary_class \ boundary_kind \ target \ runtime_probe \ required_native_proof \ opt_in_env \ runtime_ready \ source_proof_ready \ probe_status \ execution_enabled \ promotion_allowed \ missing_requirements \ probe_note \ stdout_log > "$tmp" append_native_runtime_probe_summary_row \ "$tmp" \ L4-USER-M-PROCESS \ external_user_m_process \ axis/vismach/millturn/example.ngc \ linuxcnc_millturn_user_m_runtime_probe \ native_runtime_state_probe_required \ ENABLE_MILLTURN_USER_M_RUNTIME_PROBE=1 \ millturn_user_m \ "$BUILD_DIR/linuxcnc_millturn_user_m_runtime_probe.run.stdout.log" append_native_runtime_probe_summary_row \ "$tmp" \ L4-TOOL-DB \ tool_database_process \ axis/db_demo/base.ngc \ linuxcnc_tool_db_runtime_probe \ native_db_process_protocol_probe_required \ ENABLE_TOOL_DB_RUNTIME_PROBE=1 \ tool_db \ "$BUILD_DIR/linuxcnc_tool_db_runtime_probe.run.stdout.log" append_native_runtime_probe_summary_row \ "$tmp" \ L4-PYTHON-REMAP \ python_runtime \ axis/remap/stop-lookahead/nc_files \ linuxcnc_python_remap_runtime_probe \ linuxcnc_python_runtime_lifecycle_probe_required \ ENABLE_PYTHON_REMAP_RUNTIME_PROBE=1 \ python_remap \ "$BUILD_DIR/linuxcnc_python_remap_runtime_probe.run.stdout.log" if [[ -f "$NATIVE_RUNTIME_PROBE_SUMMARY" ]] && cmp -s "$tmp" "$NATIVE_RUNTIME_PROBE_SUMMARY"; then rm -f "$tmp" return 0 fi mv "$tmp" "$NATIVE_RUNTIME_PROBE_SUMMARY" } write_ccomp_ini() { local file="$1" local tool_table="$2" write_file_if_changed "$file" <> "$stdout_log" return 0 fi printf 'compile: %s\n' "$source" >> "$stdout_log" if "${cmd[@]}" >> "$stdout_log" 2>> "$stderr_log"; then write_command_file "$cmdfile" "${cmd[@]}" return 0 fi return 1 } compile_c_object() { local target="$1" local source="$2" local obj="$3" shift 3 local stdout_log="$BUILD_DIR/$target.stdout.log" local stderr_log="$BUILD_DIR/$target.stderr.log" local depfile="$obj.d" local cmdfile="$obj.cmd" local cmd=("$CC" "$@" -MMD -MP -MF "$depfile" -c "$source" -o "$obj") mkdir -p "$(dirname "$obj")" if ! object_needs_rebuild "$obj" "$depfile" "$cmdfile" "${cmd[@]}"; then printf 'up to date: %s\n' "$source" >> "$stdout_log" return 0 fi printf 'compile-c: %s\n' "$source" >> "$stdout_log" if "${cmd[@]}" >> "$stdout_log" 2>> "$stderr_log"; then write_command_file "$cmdfile" "${cmd[@]}" return 0 fi return 1 } record_source_probe() { local target="$1" local source="$2" [[ "$target" == *_source_probe ]] || return 0 [[ "$source" == "$VENDOR_DIR/"* ]] || return 0 printf '%s\t%s\n' "${source#"$VENDOR_DIR"/}" "$target" >> "$SOURCE_PROBE_MAP" } link_needs_rebuild() { local output="$1" local cmdfile="$2" shift 2 [[ -f "$output" ]] || return 0 command_matches "$cmdfile" "$@" || return 0 local arg for arg in "$@"; do if [[ -f "$arg" && "$arg" -nt "$output" ]]; then return 0 fi done return 1 } link_binary() { local target="$1" local output="$2" shift 2 local stdout_log="$BUILD_DIR/$target.stdout.log" local stderr_log="$BUILD_DIR/$target.stderr.log" local cmdfile="$output.cmd" local cmd=("$CXX" "$@" -o "$output") if ! link_needs_rebuild "$output" "$cmdfile" "${cmd[@]}"; then printf 'up to date: %s\n' "$output" >> "$stdout_log" return 0 fi printf 'link: %s\n' "$output" >> "$stdout_log" if "${cmd[@]}" >> "$stdout_log" 2>> "$stderr_log"; then write_command_file "$cmdfile" "${cmd[@]}" return 0 fi return 1 } compile_target_objects() { local target="$1" local flags_name="$2" local sources_name="$3" local objs_name="$4" local -n flags="$flags_name" local -n sources="$sources_name" local -n objs="$objs_name" local status=0 objs=() local source for source in "${sources[@]}"; do local obj obj="$(shared_object_path "$source" "${flags[@]}")" objs+=("$obj") if ! compile_object "$target" "$source" "$obj" "${flags[@]}"; then status=1 fi done return "$status" } build_binary_target() { local target="$1" local output="$2" local flags_name="$3" local sources_name="$4" local link_flags_name="$5" shift 5 local stdout_log="$BUILD_DIR/$target.stdout.log" local stderr_log="$BUILD_DIR/$target.stderr.log" : > "$stdout_log" : > "$stderr_log" local target_objs=() local status=0 if ! compile_target_objects "$target" "$flags_name" "$sources_name" target_objs; then status=1 fi if [[ "$status" -eq 0 ]]; then local -n link_flags="$link_flags_name" if ! link_binary "$target" "$output" "${link_flags[@]}" "${target_objs[@]}" "$@"; then status=1 fi fi echo "$status" > "$BUILD_DIR/$target.exitcode" return "$status" } build_object_target() { local target="$1" local output="$2" local source="$3" local flags_name="$4" local stdout_log="$BUILD_DIR/$target.stdout.log" local stderr_log="$BUILD_DIR/$target.stderr.log" : > "$stdout_log" : > "$stderr_log" local -n flags="$flags_name" local status=0 if ! compile_object "$target" "$source" "$output" "${flags[@]}"; then status=1 fi record_source_probe "$target" "$source" echo "$status" > "$BUILD_DIR/$target.exitcode" return "$status" } build_c_object_target() { local target="$1" local output="$2" local source="$3" local flags_name="$4" local stdout_log="$BUILD_DIR/$target.stdout.log" local stderr_log="$BUILD_DIR/$target.stderr.log" : > "$stdout_log" : > "$stderr_log" local -n flags="$flags_name" local status=0 if ! compile_c_object "$target" "$source" "$output" "${flags[@]}"; then status=1 fi record_source_probe "$target" "$source" echo "$status" > "$BUILD_DIR/$target.exitcode" return "$status" } run_command_needs_update() { local exitfile="$1" local stdout_log="$2" local stderr_log="$3" local cmdfile="$4" shift 4 [[ -f "$exitfile" && -f "$stdout_log" && -f "$stderr_log" ]] || return 0 command_matches "$cmdfile" "$@" || return 0 local arg for arg in "$@"; do if [[ -f "$arg" && "$arg" -nt "$exitfile" ]]; then return 0 fi done return 1 } run_logged_command() { local label="$1" shift local exitfile="$BUILD_DIR/$label.run.exitcode" local stdout_log="$BUILD_DIR/$label.run.stdout.log" local stderr_log="$BUILD_DIR/$label.run.stderr.log" local cmdfile="$BUILD_DIR/$label.run.cmd" if ! run_command_needs_update "$exitfile" "$stdout_log" "$stderr_log" "$cmdfile" "$@"; then return 0 fi set +e if command -v timeout >/dev/null 2>&1; then timeout "$NATIVE_PROBE_RUN_TIMEOUT_SECONDS" "$@" >"$stdout_log" 2>"$stderr_log" else "$@" >"$stdout_log" 2>"$stderr_log" fi local run_rc=$? set -e if [[ "$run_rc" == "124" ]]; then printf 'run timed out after %s seconds\n' "$NATIVE_PROBE_RUN_TIMEOUT_SECONDS" >>"$stderr_log" fi write_command_file "$cmdfile" "$@" echo "$run_rc" > "$exitfile" } clear_logged_command() { local label="$1" rm -f \ "$BUILD_DIR/$label.run.exitcode" \ "$BUILD_DIR/$label.run.stdout.log" \ "$BUILD_DIR/$label.run.stderr.log" \ "$BUILD_DIR/$label.run.cmd" } NO_LINK_FLAGS=() INI_PROBE_SOURCES=( "$VENDOR_DIR/src/emc/ini/inifile.cc" "$WRAP_DIR/linuxcnc_ini_probe.cpp" ) FIVEAXIS_REMAP_ASSET_PROBE_SOURCES=( "$VENDOR_DIR/src/emc/ini/inifile.cc" "$WRAP_DIR/linuxcnc_5axis_remap_asset_probe.cpp" ) MILLTURN_USER_M_BOUNDARY_PROBE_SOURCES=( "$VENDOR_DIR/src/emc/ini/inifile.cc" "$WRAP_DIR/linuxcnc_millturn_user_m_boundary_probe.cpp" ) TOOL_DB_BOUNDARY_PROBE_SOURCES=( "$VENDOR_DIR/src/emc/ini/inifile.cc" "$WRAP_DIR/linuxcnc_tool_db_boundary_probe.cpp" ) PYTHON_REMAP_BOUNDARY_PROBE_SOURCES=( "$WRAP_DIR/linuxcnc_python_remap_boundary_probe.cpp" ) STATE_PROBE_SOURCES=( "$WRAP_DIR/linuxcnc_interp_state_probe.cpp" ) EMC_STATUS_PROBE_SOURCES=( "$WRAP_DIR/linuxcnc_emc_status_runtime.cpp" "$WRAP_DIR/linuxcnc_emc_status_probe.cpp" ) TP_API_PROBE_SOURCES=( "$WRAP_DIR/linuxcnc_tp_api_probe.cpp" ) KINEMATICS_PROBE_SOURCES=( "$VENDOR_DIR/src/emc/kinematics/kins_util.c" "$VENDOR_DIR/src/emc/kinematics/trivkins.c" "$WRAP_DIR/linuxcnc_hal_adapter.cpp" "$WRAP_DIR/linuxcnc_kinematics_probe.cpp" ) FIVEAXIS_KINEMATICS_PROBE_SOURCES=( "$VENDOR_DIR/src/emc/kinematics/kins_util.c" "$VENDOR_DIR/src/emc/kinematics/switchkins.c" "$VENDOR_DIR/src/emc/kinematics/userkfuncs.c" "$VENDOR_DIR/src/emc/kinematics/5axiskins.c" "$WRAP_DIR/linuxcnc_hal_adapter.cpp" "$WRAP_DIR/linuxcnc_5axis_kinematics_probe.cpp" ) XYZAC_TRT_KINEMATICS_PROBE_SOURCES=( "$VENDOR_DIR/src/emc/kinematics/kins_util.c" "$VENDOR_DIR/src/emc/kinematics/switchkins.c" "$VENDOR_DIR/src/emc/kinematics/userkfuncs.c" "$VENDOR_DIR/src/emc/kinematics/trtfuncs.c" "$VENDOR_DIR/src/emc/kinematics/xyzac-trt-kins.c" "$WRAP_DIR/linuxcnc_hal_adapter.cpp" "$WRAP_DIR/linuxcnc_xyzac_trt_kinematics_probe.cpp" ) XYZBC_TRT_KINEMATICS_PROBE_SOURCES=( "$VENDOR_DIR/src/emc/kinematics/kins_util.c" "$VENDOR_DIR/src/emc/kinematics/switchkins.c" "$VENDOR_DIR/src/emc/kinematics/userkfuncs.c" "$VENDOR_DIR/src/emc/kinematics/trtfuncs.c" "$VENDOR_DIR/src/emc/kinematics/xyzbc-trt-kins.c" "$WRAP_DIR/linuxcnc_hal_adapter.cpp" "$WRAP_DIR/linuxcnc_xyzbc_trt_kinematics_probe.cpp" ) COREXY_KINEMATICS_PROBE_SOURCES=( "$VENDOR_DIR/src/emc/kinematics/corexykins.c" "$WRAP_DIR/linuxcnc_hal_adapter.cpp" "$WRAP_DIR/linuxcnc_corexy_kinematics_probe.cpp" ) ROTATE_KINEMATICS_PROBE_SOURCES=( "$VENDOR_DIR/src/emc/kinematics/rotatekins.c" "$WRAP_DIR/linuxcnc_hal_adapter.cpp" "$WRAP_DIR/linuxcnc_rotate_kinematics_probe.cpp" ) ROSE_KINEMATICS_PROBE_SOURCES=( "$VENDOR_DIR/src/emc/kinematics/rosekins.c" "$WRAP_DIR/linuxcnc_hal_adapter.cpp" "$WRAP_DIR/linuxcnc_rose_kinematics_probe.cpp" ) MAX_KINEMATICS_PROBE_SOURCES=( "$VENDOR_DIR/src/emc/kinematics/maxkins.c" "$WRAP_DIR/linuxcnc_hal_adapter.cpp" "$WRAP_DIR/linuxcnc_max_kinematics_probe.cpp" ) LINEARDELTA_KINEMATICS_PROBE_SOURCES=( "$VENDOR_DIR/src/emc/kinematics/lineardeltakins.c" "$WRAP_DIR/linuxcnc_hal_adapter.cpp" "$WRAP_DIR/linuxcnc_lineardelta_kinematics_probe.cpp" ) ROTARYDELTA_KINEMATICS_PROBE_SOURCES=( "$VENDOR_DIR/src/emc/kinematics/rotarydeltakins.c" "$WRAP_DIR/linuxcnc_hal_adapter.cpp" "$WRAP_DIR/linuxcnc_rotarydelta_kinematics_probe.cpp" ) SCORBOT_KINEMATICS_PROBE_SOURCES=( "$VENDOR_DIR/src/emc/kinematics/scorbot-kins.c" "$WRAP_DIR/linuxcnc_hal_adapter.cpp" "$WRAP_DIR/linuxcnc_scorbot_kinematics_probe.cpp" ) TRIPOD_KINEMATICS_PROBE_SOURCES=( "$VENDOR_DIR/src/emc/kinematics/tripodkins.c" "$WRAP_DIR/linuxcnc_hal_adapter.cpp" "$WRAP_DIR/linuxcnc_tripod_kinematics_probe.cpp" ) SCARA_KINEMATICS_PROBE_SOURCES=( "$VENDOR_DIR/src/emc/kinematics/kins_util.c" "$VENDOR_DIR/src/emc/kinematics/switchkins.c" "$VENDOR_DIR/src/emc/kinematics/userkfuncs.c" "$VENDOR_DIR/src/emc/kinematics/scarakins.c" "$WRAP_DIR/linuxcnc_hal_adapter.cpp" "$WRAP_DIR/linuxcnc_scara_kinematics_probe.cpp" ) PUMA_KINEMATICS_PROBE_SOURCES=( "$VENDOR_DIR/src/emc/kinematics/kins_util.c" "$VENDOR_DIR/src/emc/kinematics/switchkins.c" "$VENDOR_DIR/src/emc/kinematics/userkfuncs.c" "$VENDOR_DIR/src/emc/kinematics/pumakins.c" "$VENDOR_DIR/src/libnml/posemath/posemath.cc" "$VENDOR_DIR/src/libnml/posemath/_posemath.c" "$VENDOR_DIR/src/libnml/posemath/sincos.c" "$WRAP_DIR/linuxcnc_hal_adapter.cpp" "$WRAP_DIR/linuxcnc_puma_kinematics_probe.cpp" ) GENSER_KINEMATICS_PROBE_SOURCES=( "$VENDOR_DIR/src/emc/kinematics/kins_util.c" "$VENDOR_DIR/src/emc/kinematics/switchkins.c" "$VENDOR_DIR/src/emc/kinematics/userkfuncs.c" "$VENDOR_DIR/src/emc/kinematics/genserfuncs.c" "$VENDOR_DIR/src/emc/kinematics/genserkins.c" "$WRAP_DIR/linuxcnc_gomath_cxx.cpp" "$VENDOR_DIR/src/libnml/posemath/sincos.c" "$WRAP_DIR/linuxcnc_hal_adapter.cpp" "$WRAP_DIR/linuxcnc_genser_kinematics_probe.cpp" ) GENHEX_KINEMATICS_PROBE_SOURCES=( "$VENDOR_DIR/src/emc/kinematics/kins_util.c" "$VENDOR_DIR/src/emc/kinematics/switchkins.c" "$VENDOR_DIR/src/emc/kinematics/userkfuncs.c" "$VENDOR_DIR/src/emc/kinematics/genhexkins.c" "$VENDOR_DIR/src/libnml/posemath/posemath.cc" "$VENDOR_DIR/src/libnml/posemath/_posemath.c" "$VENDOR_DIR/src/libnml/posemath/sincos.c" "$WRAP_DIR/linuxcnc_hal_adapter.cpp" "$WRAP_DIR/linuxcnc_genhex_kinematics_probe.cpp" ) PENTAKINS_KINEMATICS_PROBE_SOURCES=( "$VENDOR_DIR/src/emc/kinematics/pentakins.c" "$VENDOR_DIR/src/libnml/posemath/posemath.cc" "$VENDOR_DIR/src/libnml/posemath/_posemath.c" "$VENDOR_DIR/src/libnml/posemath/sincos.c" "$WRAP_DIR/linuxcnc_hal_adapter.cpp" "$WRAP_DIR/linuxcnc_pentakins_kinematics_probe.cpp" ) TP_CORE_SOURCES=( "$VENDOR_DIR/src/emc/tp/tp.c" "$VENDOR_DIR/src/emc/tp/tc.c" "$VENDOR_DIR/src/emc/tp/tcq.c" "$VENDOR_DIR/src/emc/tp/spherical_arc.c" "$VENDOR_DIR/src/emc/tp/blendmath.c" "$VENDOR_DIR/src/emc/tp/sp_scurve.c" "$VENDOR_DIR/src/emc/tp/ruckig_wrapper.c" "$VENDOR_DIR/src/emc/tp/cruckig/block.c" "$VENDOR_DIR/src/emc/tp/cruckig/brake.c" "$VENDOR_DIR/src/emc/tp/cruckig/calculator.c" "$VENDOR_DIR/src/emc/tp/cruckig/cruckig.c" "$VENDOR_DIR/src/emc/tp/cruckig/input_parameter.c" "$VENDOR_DIR/src/emc/tp/cruckig/output_parameter.c" "$VENDOR_DIR/src/emc/tp/cruckig/profile.c" "$VENDOR_DIR/src/emc/tp/cruckig/roots.c" "$VENDOR_DIR/src/emc/tp/cruckig/trajectory.c" "$VENDOR_DIR/src/emc/tp/cruckig/position_first_step1.c" "$VENDOR_DIR/src/emc/tp/cruckig/position_first_step2.c" "$VENDOR_DIR/src/emc/tp/cruckig/position_second_step1.c" "$VENDOR_DIR/src/emc/tp/cruckig/position_second_step2.c" "$VENDOR_DIR/src/emc/tp/cruckig/position_third_step1.c" "$VENDOR_DIR/src/emc/tp/cruckig/position_third_step2.c" "$VENDOR_DIR/src/emc/tp/cruckig/velocity_second_step1.c" "$VENDOR_DIR/src/emc/tp/cruckig/velocity_second_step2.c" "$VENDOR_DIR/src/emc/tp/cruckig/velocity_third_step1.c" "$VENDOR_DIR/src/emc/tp/cruckig/velocity_third_step2.c" "$VENDOR_DIR/src/emc/nml_intf/emcpose.c" "$VENDOR_DIR/src/libnml/posemath/posemath.cc" "$VENDOR_DIR/src/libnml/posemath/_posemath.c" "$VENDOR_DIR/src/libnml/posemath/sincos.c" ) TP_RUNTIME_PROBE_SOURCES=( "${TP_CORE_SOURCES[@]}" "$WRAP_DIR/linuxcnc_tp_api_probe.cpp" ) TP_SOURCE_PROBE_NAMES=( linuxcnc_tp_tp_source_probe linuxcnc_tp_tc_source_probe linuxcnc_tp_tcq_source_probe linuxcnc_tp_spherical_arc_source_probe linuxcnc_tp_blendmath_source_probe linuxcnc_tp_sp_scurve_source_probe linuxcnc_tp_ruckig_wrapper_source_probe linuxcnc_cruckig_block_source_probe linuxcnc_cruckig_brake_source_probe linuxcnc_cruckig_calculator_source_probe linuxcnc_cruckig_cruckig_source_probe linuxcnc_cruckig_input_parameter_source_probe linuxcnc_cruckig_output_parameter_source_probe linuxcnc_cruckig_profile_source_probe linuxcnc_cruckig_roots_source_probe linuxcnc_cruckig_trajectory_source_probe linuxcnc_cruckig_position_first_step1_source_probe linuxcnc_cruckig_position_first_step2_source_probe linuxcnc_cruckig_position_second_step1_source_probe linuxcnc_cruckig_position_second_step2_source_probe linuxcnc_cruckig_position_third_step1_source_probe linuxcnc_cruckig_position_third_step2_source_probe linuxcnc_cruckig_velocity_second_step1_source_probe linuxcnc_cruckig_velocity_second_step2_source_probe linuxcnc_cruckig_velocity_third_step1_source_probe linuxcnc_cruckig_velocity_third_step2_source_probe linuxcnc_emcpose_source_probe linuxcnc_posemath_source_probe linuxcnc_posemath_c_source_probe linuxcnc_sincos_source_probe ) TP_SOURCE_PROBE_SOURCES=( "$VENDOR_DIR/src/emc/tp/tp.c" "$VENDOR_DIR/src/emc/tp/tc.c" "$VENDOR_DIR/src/emc/tp/tcq.c" "$VENDOR_DIR/src/emc/tp/spherical_arc.c" "$VENDOR_DIR/src/emc/tp/blendmath.c" "$VENDOR_DIR/src/emc/tp/sp_scurve.c" "$VENDOR_DIR/src/emc/tp/ruckig_wrapper.c" "$VENDOR_DIR/src/emc/tp/cruckig/block.c" "$VENDOR_DIR/src/emc/tp/cruckig/brake.c" "$VENDOR_DIR/src/emc/tp/cruckig/calculator.c" "$VENDOR_DIR/src/emc/tp/cruckig/cruckig.c" "$VENDOR_DIR/src/emc/tp/cruckig/input_parameter.c" "$VENDOR_DIR/src/emc/tp/cruckig/output_parameter.c" "$VENDOR_DIR/src/emc/tp/cruckig/profile.c" "$VENDOR_DIR/src/emc/tp/cruckig/roots.c" "$VENDOR_DIR/src/emc/tp/cruckig/trajectory.c" "$VENDOR_DIR/src/emc/tp/cruckig/position_first_step1.c" "$VENDOR_DIR/src/emc/tp/cruckig/position_first_step2.c" "$VENDOR_DIR/src/emc/tp/cruckig/position_second_step1.c" "$VENDOR_DIR/src/emc/tp/cruckig/position_second_step2.c" "$VENDOR_DIR/src/emc/tp/cruckig/position_third_step1.c" "$VENDOR_DIR/src/emc/tp/cruckig/position_third_step2.c" "$VENDOR_DIR/src/emc/tp/cruckig/velocity_second_step1.c" "$VENDOR_DIR/src/emc/tp/cruckig/velocity_second_step2.c" "$VENDOR_DIR/src/emc/tp/cruckig/velocity_third_step1.c" "$VENDOR_DIR/src/emc/tp/cruckig/velocity_third_step2.c" "$VENDOR_DIR/src/emc/nml_intf/emcpose.c" "$VENDOR_DIR/src/libnml/posemath/posemath.cc" "$VENDOR_DIR/src/libnml/posemath/_posemath.c" "$VENDOR_DIR/src/libnml/posemath/sincos.c" ) INTERP_CORE_SOURCES=( "$VENDOR_DIR/src/emc/rs274ngc/modal_state.cc" "$VENDOR_DIR/src/emc/rs274ngc/interp_array.cc" "$VENDOR_DIR/src/emc/rs274ngc/interp_internal.cc" "$VENDOR_DIR/src/emc/rs274ngc/interp_read.cc" "$VENDOR_DIR/src/emc/rs274ngc/interp_check.cc" "$VENDOR_DIR/src/emc/rs274ngc/interp_arc.cc" "$VENDOR_DIR/src/emc/rs274ngc/interp_inverse.cc" "$VENDOR_DIR/src/emc/rs274ngc/interp_execute.cc" "$VENDOR_DIR/src/emc/rs274ngc/interp_convert.cc" "$VENDOR_DIR/src/emc/rs274ngc/interp_cycles.cc" "$VENDOR_DIR/src/emc/rs274ngc/interp_g7x.cc" "$VENDOR_DIR/src/emc/rs274ngc/interp_queue.cc" "$VENDOR_DIR/src/emc/rs274ngc/interp_find.cc" "$VENDOR_DIR/src/emc/rs274ngc/interp_namedparams.cc" "$VENDOR_DIR/src/emc/rs274ngc/interp_write.cc" "$VENDOR_DIR/src/emc/rs274ngc/interp_o_word.cc" "$VENDOR_DIR/src/emc/rs274ngc/rs274ngc_pre.cc" "$VENDOR_DIR/src/emc/tooldata/tooldata_common.cc" "$WRAP_DIR/linuxcnc_hal_adapter.cpp" "$WRAP_DIR/linuxcnc_emc_status_runtime.cpp" "$WRAP_DIR/linuxcnc_interp_edge_stubs.cpp" "$WRAP_DIR/linuxcnc_machine_config.cpp" "$WRAP_DIR/linuxcnc_runtime_state_stubs.cpp" "$WRAP_DIR/linuxcnc_tool_adapter.cpp" "$WRAP_DIR/linuxcnc_interp_minimal_runtime.cpp" "$VENDOR_DIR/src/emc/ini/inifile.cc" ) NAMEDPARAM_SOURCES=( "${INTERP_CORE_SOURCES[@]}" "$WRAP_DIR/linuxcnc_namedparam_harness.cpp" ) MINIMAL_SOURCES=( "${INTERP_CORE_SOURCES[@]}" "$WRAP_DIR/linuxcnc_interp_minimal_harness.cpp" ) PARAMETER_FILE_SOURCES=( "${INTERP_CORE_SOURCES[@]}" "$WRAP_DIR/linuxcnc_parameter_file_harness.cpp" ) INIT_HARNESS_SOURCES=( "${INTERP_CORE_SOURCES[@]}" "$WRAP_DIR/linuxcnc_interp_init_harness.cpp" ) INDEXER_HARNESS_SOURCES=( "${INTERP_CORE_SOURCES[@]}" "$WRAP_DIR/linuxcnc_indexer_harness.cpp" ) REMAP_RUNTIME_CORE_SOURCES=( "$VENDOR_DIR/src/emc/rs274ngc/modal_state.cc" "$VENDOR_DIR/src/emc/rs274ngc/interp_array.cc" "$VENDOR_DIR/src/emc/rs274ngc/interp_internal.cc" "$VENDOR_DIR/src/emc/rs274ngc/interp_read.cc" "$VENDOR_DIR/src/emc/rs274ngc/interp_check.cc" "$VENDOR_DIR/src/emc/rs274ngc/interp_arc.cc" "$VENDOR_DIR/src/emc/rs274ngc/interp_inverse.cc" "$VENDOR_DIR/src/emc/rs274ngc/interp_execute.cc" "$VENDOR_DIR/src/emc/rs274ngc/interp_convert.cc" "$VENDOR_DIR/src/emc/rs274ngc/interp_cycles.cc" "$VENDOR_DIR/src/emc/rs274ngc/interp_g7x.cc" "$VENDOR_DIR/src/emc/rs274ngc/interp_queue.cc" "$VENDOR_DIR/src/emc/rs274ngc/interp_find.cc" "$VENDOR_DIR/src/emc/rs274ngc/interp_namedparams.cc" "$VENDOR_DIR/src/emc/rs274ngc/interp_write.cc" "$VENDOR_DIR/src/emc/rs274ngc/interp_o_word.cc" "$VENDOR_DIR/src/emc/rs274ngc/interp_remap.cc" "$VENDOR_DIR/src/emc/rs274ngc/rs274ngc_pre.cc" "$VENDOR_DIR/src/emc/tooldata/tooldata_common.cc" "$WRAP_DIR/linuxcnc_hal_adapter.cpp" "$WRAP_DIR/linuxcnc_emc_status_runtime.cpp" "$WRAP_DIR/linuxcnc_interp_python_edge_stubs.cpp" "$WRAP_DIR/linuxcnc_machine_config.cpp" "$WRAP_DIR/linuxcnc_runtime_state_stubs.cpp" "$WRAP_DIR/linuxcnc_tool_adapter.cpp" "$WRAP_DIR/linuxcnc_interp_minimal_runtime.cpp" "$VENDOR_DIR/src/emc/ini/inifile.cc" ) REMAP_PARSE_SOURCES=( "${REMAP_RUNTIME_CORE_SOURCES[@]}" "$WRAP_DIR/linuxcnc_remap_parse_harness.cpp" ) REMAP_HAL_SYNC_SOURCES=( "${INTERP_CORE_SOURCES[@]}" "$WRAP_DIR/linuxcnc_remap_hal_sync_harness.cpp" ) FIVEAXIS_REMAP_EXECUTE_SOURCES=( "${REMAP_RUNTIME_CORE_SOURCES[@]}" "$WRAP_DIR/linuxcnc_5axis_remap_execute_harness.cpp" ) DUPLICATE_OWORD_REMAP_SOURCES=( "${REMAP_RUNTIME_CORE_SOURCES[@]}" "$WRAP_DIR/linuxcnc_duplicate_oword_remap_harness.cpp" ) if [[ "${NATIVE_PROBE_ONLY:-}" == "linuxcnc_duplicate_oword_remap_harness" ]]; then build_binary_target \ linuxcnc_duplicate_oword_remap_harness \ "$BUILD_DIR/linuxcnc_duplicate_oword_remap_harness" \ REMAP_RUNTIME_FLAGS \ DUPLICATE_OWORD_REMAP_SOURCES \ MINIMAL_LINK_FLAGS if [[ "$(tr -d '[:space:]' < "$BUILD_DIR/linuxcnc_duplicate_oword_remap_harness.exitcode")" == "0" ]]; then run_logged_command \ linuxcnc_duplicate_oword_remap_harness \ "$BUILD_DIR/linuxcnc_duplicate_oword_remap_harness" else clear_logged_command linuxcnc_duplicate_oword_remap_harness fi echo "native probe target complete: linuxcnc_duplicate_oword_remap_harness" exit 0 fi build_binary_target \ linuxcnc_ini_probe \ "$BUILD_DIR/linuxcnc_ini_probe" \ COMMON_FLAGS \ INI_PROBE_SOURCES \ NO_LINK_FLAGS \ -lfmt build_binary_target \ linuxcnc_5axis_remap_asset_probe \ "$BUILD_DIR/linuxcnc_5axis_remap_asset_probe" \ VENDOR_ASSET_FLAGS \ FIVEAXIS_REMAP_ASSET_PROBE_SOURCES \ NO_LINK_FLAGS \ -lfmt if [[ "$(tr -d '[:space:]' < "$BUILD_DIR/linuxcnc_5axis_remap_asset_probe.exitcode")" == "0" ]]; then set +e "$BUILD_DIR/linuxcnc_5axis_remap_asset_probe" \ >"$BUILD_DIR/linuxcnc_5axis_remap_asset_probe.run.stdout.log" \ 2>"$BUILD_DIR/linuxcnc_5axis_remap_asset_probe.run.stderr.log" FIVEAXIS_REMAP_ASSET_RUN_RC=$? set -e echo "$FIVEAXIS_REMAP_ASSET_RUN_RC" > "$BUILD_DIR/linuxcnc_5axis_remap_asset_probe.run.exitcode" else rm -f \ "$BUILD_DIR/linuxcnc_5axis_remap_asset_probe.run.exitcode" \ "$BUILD_DIR/linuxcnc_5axis_remap_asset_probe.run.stdout.log" \ "$BUILD_DIR/linuxcnc_5axis_remap_asset_probe.run.stderr.log" fi build_binary_target \ linuxcnc_millturn_user_m_boundary_probe \ "$BUILD_DIR/linuxcnc_millturn_user_m_boundary_probe" \ SOURCE_CONFIG_ASSET_FLAGS \ MILLTURN_USER_M_BOUNDARY_PROBE_SOURCES \ NO_LINK_FLAGS \ -lfmt if [[ "$(tr -d '[:space:]' < "$BUILD_DIR/linuxcnc_millturn_user_m_boundary_probe.exitcode")" == "0" ]]; then run_logged_command \ linuxcnc_millturn_user_m_boundary_probe \ "$BUILD_DIR/linuxcnc_millturn_user_m_boundary_probe" run_logged_command \ linuxcnc_millturn_user_m_runtime_probe \ env \ ENABLE_MILLTURN_USER_M_RUNTIME_PROBE="${ENABLE_MILLTURN_USER_M_RUNTIME_PROBE:-0}" \ bash \ "$MILLTURN_USER_M_RUNTIME_PROBE" else clear_logged_command linuxcnc_millturn_user_m_boundary_probe clear_logged_command linuxcnc_millturn_user_m_runtime_probe fi build_binary_target \ linuxcnc_tool_db_boundary_probe \ "$BUILD_DIR/linuxcnc_tool_db_boundary_probe" \ SOURCE_CONFIG_ASSET_FLAGS \ TOOL_DB_BOUNDARY_PROBE_SOURCES \ NO_LINK_FLAGS \ -lfmt if [[ "$(tr -d '[:space:]' < "$BUILD_DIR/linuxcnc_tool_db_boundary_probe.exitcode")" == "0" ]]; then run_logged_command \ linuxcnc_tool_db_boundary_probe \ "$BUILD_DIR/linuxcnc_tool_db_boundary_probe" run_logged_command \ linuxcnc_tool_db_runtime_probe \ env \ ENABLE_TOOL_DB_RUNTIME_PROBE="${ENABLE_TOOL_DB_RUNTIME_PROBE:-0}" \ bash \ "$TOOL_DB_RUNTIME_PROBE" else clear_logged_command linuxcnc_tool_db_boundary_probe clear_logged_command linuxcnc_tool_db_runtime_probe fi build_binary_target \ linuxcnc_python_remap_boundary_probe \ "$BUILD_DIR/linuxcnc_python_remap_boundary_probe" \ SOURCE_CONFIG_ASSET_FLAGS \ PYTHON_REMAP_BOUNDARY_PROBE_SOURCES \ NO_LINK_FLAGS if [[ "$(tr -d '[:space:]' < "$BUILD_DIR/linuxcnc_python_remap_boundary_probe.exitcode")" == "0" ]]; then run_logged_command \ linuxcnc_python_remap_boundary_probe \ "$BUILD_DIR/linuxcnc_python_remap_boundary_probe" run_logged_command \ linuxcnc_python_remap_runtime_probe \ env \ ENABLE_PYTHON_REMAP_RUNTIME_PROBE="${ENABLE_PYTHON_REMAP_RUNTIME_PROBE:-0}" \ bash \ "$PYTHON_REMAP_RUNTIME_PROBE" else clear_logged_command linuxcnc_python_remap_boundary_probe clear_logged_command linuxcnc_python_remap_runtime_probe fi write_native_source_proof_summary write_native_runtime_probe_summary build_object_target \ linuxcnc_inifile_source_probe \ "$BUILD_DIR/linuxcnc_inifile_source_probe.o" \ "$VENDOR_DIR/src/emc/ini/inifile.cc" \ COMMON_INI_FLAGS build_binary_target \ linuxcnc_interp_state_probe \ "$BUILD_DIR/linuxcnc_interp_state_probe" \ COMMON_FLAGS \ STATE_PROBE_SOURCES \ NO_LINK_FLAGS build_binary_target \ linuxcnc_emc_status_probe \ "$BUILD_DIR/linuxcnc_emc_status_probe" \ COMMON_FLAGS \ EMC_STATUS_PROBE_SOURCES \ NO_LINK_FLAGS if [[ "$(tr -d '[:space:]' < "$BUILD_DIR/linuxcnc_emc_status_probe.exitcode")" == "0" ]]; then set +e "$BUILD_DIR/linuxcnc_emc_status_probe" \ >"$BUILD_DIR/linuxcnc_emc_status_probe.run.stdout.log" \ 2>"$BUILD_DIR/linuxcnc_emc_status_probe.run.stderr.log" EMC_STATUS_RUN_RC=$? set -e echo "$EMC_STATUS_RUN_RC" > "$BUILD_DIR/linuxcnc_emc_status_probe.run.exitcode" else rm -f \ "$BUILD_DIR/linuxcnc_emc_status_probe.run.exitcode" \ "$BUILD_DIR/linuxcnc_emc_status_probe.run.stdout.log" \ "$BUILD_DIR/linuxcnc_emc_status_probe.run.stderr.log" fi build_binary_target \ linuxcnc_tp_api_probe \ "$BUILD_DIR/linuxcnc_tp_api_probe" \ TP_FLAGS \ TP_RUNTIME_PROBE_SOURCES \ NO_LINK_FLAGS build_binary_target \ linuxcnc_kinematics_probe \ "$BUILD_DIR/linuxcnc_kinematics_probe" \ TP_FLAGS \ KINEMATICS_PROBE_SOURCES \ NO_LINK_FLAGS build_binary_target \ linuxcnc_5axis_kinematics_probe \ "$BUILD_DIR/linuxcnc_5axis_kinematics_probe" \ TP_FLAGS \ FIVEAXIS_KINEMATICS_PROBE_SOURCES \ NO_LINK_FLAGS build_binary_target \ linuxcnc_xyzac_trt_kinematics_probe \ "$BUILD_DIR/linuxcnc_xyzac_trt_kinematics_probe" \ TP_FLAGS \ XYZAC_TRT_KINEMATICS_PROBE_SOURCES \ NO_LINK_FLAGS build_binary_target \ linuxcnc_xyzbc_trt_kinematics_probe \ "$BUILD_DIR/linuxcnc_xyzbc_trt_kinematics_probe" \ TP_FLAGS \ XYZBC_TRT_KINEMATICS_PROBE_SOURCES \ NO_LINK_FLAGS build_binary_target \ linuxcnc_corexy_kinematics_probe \ "$BUILD_DIR/linuxcnc_corexy_kinematics_probe" \ TP_FLAGS \ COREXY_KINEMATICS_PROBE_SOURCES \ NO_LINK_FLAGS build_binary_target \ linuxcnc_rotate_kinematics_probe \ "$BUILD_DIR/linuxcnc_rotate_kinematics_probe" \ TP_FLAGS \ ROTATE_KINEMATICS_PROBE_SOURCES \ NO_LINK_FLAGS build_binary_target \ linuxcnc_rose_kinematics_probe \ "$BUILD_DIR/linuxcnc_rose_kinematics_probe" \ TP_FLAGS \ ROSE_KINEMATICS_PROBE_SOURCES \ NO_LINK_FLAGS build_binary_target \ linuxcnc_max_kinematics_probe \ "$BUILD_DIR/linuxcnc_max_kinematics_probe" \ TP_FLAGS \ MAX_KINEMATICS_PROBE_SOURCES \ NO_LINK_FLAGS build_binary_target \ linuxcnc_lineardelta_kinematics_probe \ "$BUILD_DIR/linuxcnc_lineardelta_kinematics_probe" \ TP_FLAGS \ LINEARDELTA_KINEMATICS_PROBE_SOURCES \ NO_LINK_FLAGS build_binary_target \ linuxcnc_rotarydelta_kinematics_probe \ "$BUILD_DIR/linuxcnc_rotarydelta_kinematics_probe" \ TP_FLAGS \ ROTARYDELTA_KINEMATICS_PROBE_SOURCES \ NO_LINK_FLAGS build_binary_target \ linuxcnc_scorbot_kinematics_probe \ "$BUILD_DIR/linuxcnc_scorbot_kinematics_probe" \ TP_FLAGS \ SCORBOT_KINEMATICS_PROBE_SOURCES \ NO_LINK_FLAGS build_binary_target \ linuxcnc_tripod_kinematics_probe \ "$BUILD_DIR/linuxcnc_tripod_kinematics_probe" \ TP_FLAGS \ TRIPOD_KINEMATICS_PROBE_SOURCES \ NO_LINK_FLAGS build_binary_target \ linuxcnc_scara_kinematics_probe \ "$BUILD_DIR/linuxcnc_scara_kinematics_probe" \ TP_FLAGS \ SCARA_KINEMATICS_PROBE_SOURCES \ NO_LINK_FLAGS build_binary_target \ linuxcnc_puma_kinematics_probe \ "$BUILD_DIR/linuxcnc_puma_kinematics_probe" \ TP_FLAGS \ PUMA_KINEMATICS_PROBE_SOURCES \ NO_LINK_FLAGS build_binary_target \ linuxcnc_genser_kinematics_probe \ "$BUILD_DIR/linuxcnc_genser_kinematics_probe" \ TP_FLAGS \ GENSER_KINEMATICS_PROBE_SOURCES \ NO_LINK_FLAGS build_binary_target \ linuxcnc_genhex_kinematics_probe \ "$BUILD_DIR/linuxcnc_genhex_kinematics_probe" \ TP_FLAGS \ GENHEX_KINEMATICS_PROBE_SOURCES \ NO_LINK_FLAGS build_binary_target \ linuxcnc_pentakins_kinematics_probe \ "$BUILD_DIR/linuxcnc_pentakins_kinematics_probe" \ TP_FLAGS \ PENTAKINS_KINEMATICS_PROBE_SOURCES \ NO_LINK_FLAGS if [[ "$(tr -d '[:space:]' < "$BUILD_DIR/linuxcnc_kinematics_probe.exitcode")" == "0" ]]; then set +e "$BUILD_DIR/linuxcnc_kinematics_probe" \ >"$BUILD_DIR/linuxcnc_kinematics_probe.run.stdout.log" \ 2>"$BUILD_DIR/linuxcnc_kinematics_probe.run.stderr.log" KINEMATICS_RUN_RC=$? set -e echo "$KINEMATICS_RUN_RC" > "$BUILD_DIR/linuxcnc_kinematics_probe.run.exitcode" else rm -f \ "$BUILD_DIR/linuxcnc_kinematics_probe.run.exitcode" \ "$BUILD_DIR/linuxcnc_kinematics_probe.run.stdout.log" \ "$BUILD_DIR/linuxcnc_kinematics_probe.run.stderr.log" fi if [[ "$(tr -d '[:space:]' < "$BUILD_DIR/linuxcnc_5axis_kinematics_probe.exitcode")" == "0" ]]; then set +e "$BUILD_DIR/linuxcnc_5axis_kinematics_probe" \ >"$BUILD_DIR/linuxcnc_5axis_kinematics_probe.run.stdout.log" \ 2>"$BUILD_DIR/linuxcnc_5axis_kinematics_probe.run.stderr.log" FIVEAXIS_KINEMATICS_RUN_RC=$? set -e echo "$FIVEAXIS_KINEMATICS_RUN_RC" > "$BUILD_DIR/linuxcnc_5axis_kinematics_probe.run.exitcode" else rm -f \ "$BUILD_DIR/linuxcnc_5axis_kinematics_probe.run.exitcode" \ "$BUILD_DIR/linuxcnc_5axis_kinematics_probe.run.stdout.log" \ "$BUILD_DIR/linuxcnc_5axis_kinematics_probe.run.stderr.log" fi if [[ "$(tr -d '[:space:]' < "$BUILD_DIR/linuxcnc_xyzac_trt_kinematics_probe.exitcode")" == "0" ]]; then set +e "$BUILD_DIR/linuxcnc_xyzac_trt_kinematics_probe" \ >"$BUILD_DIR/linuxcnc_xyzac_trt_kinematics_probe.run.stdout.log" \ 2>"$BUILD_DIR/linuxcnc_xyzac_trt_kinematics_probe.run.stderr.log" XYZAC_TRT_KINEMATICS_RUN_RC=$? set -e echo "$XYZAC_TRT_KINEMATICS_RUN_RC" > "$BUILD_DIR/linuxcnc_xyzac_trt_kinematics_probe.run.exitcode" else rm -f \ "$BUILD_DIR/linuxcnc_xyzac_trt_kinematics_probe.run.exitcode" \ "$BUILD_DIR/linuxcnc_xyzac_trt_kinematics_probe.run.stdout.log" \ "$BUILD_DIR/linuxcnc_xyzac_trt_kinematics_probe.run.stderr.log" fi if [[ "$(tr -d '[:space:]' < "$BUILD_DIR/linuxcnc_xyzbc_trt_kinematics_probe.exitcode")" == "0" ]]; then set +e "$BUILD_DIR/linuxcnc_xyzbc_trt_kinematics_probe" \ >"$BUILD_DIR/linuxcnc_xyzbc_trt_kinematics_probe.run.stdout.log" \ 2>"$BUILD_DIR/linuxcnc_xyzbc_trt_kinematics_probe.run.stderr.log" XYZBC_TRT_KINEMATICS_RUN_RC=$? set -e echo "$XYZBC_TRT_KINEMATICS_RUN_RC" > "$BUILD_DIR/linuxcnc_xyzbc_trt_kinematics_probe.run.exitcode" else rm -f \ "$BUILD_DIR/linuxcnc_xyzbc_trt_kinematics_probe.run.exitcode" \ "$BUILD_DIR/linuxcnc_xyzbc_trt_kinematics_probe.run.stdout.log" \ "$BUILD_DIR/linuxcnc_xyzbc_trt_kinematics_probe.run.stderr.log" fi if [[ "$(tr -d '[:space:]' < "$BUILD_DIR/linuxcnc_corexy_kinematics_probe.exitcode")" == "0" ]]; then set +e "$BUILD_DIR/linuxcnc_corexy_kinematics_probe" \ >"$BUILD_DIR/linuxcnc_corexy_kinematics_probe.run.stdout.log" \ 2>"$BUILD_DIR/linuxcnc_corexy_kinematics_probe.run.stderr.log" COREXY_KINEMATICS_RUN_RC=$? set -e echo "$COREXY_KINEMATICS_RUN_RC" > "$BUILD_DIR/linuxcnc_corexy_kinematics_probe.run.exitcode" else rm -f \ "$BUILD_DIR/linuxcnc_corexy_kinematics_probe.run.exitcode" \ "$BUILD_DIR/linuxcnc_corexy_kinematics_probe.run.stdout.log" \ "$BUILD_DIR/linuxcnc_corexy_kinematics_probe.run.stderr.log" fi if [[ "$(tr -d '[:space:]' < "$BUILD_DIR/linuxcnc_rotate_kinematics_probe.exitcode")" == "0" ]]; then set +e "$BUILD_DIR/linuxcnc_rotate_kinematics_probe" \ >"$BUILD_DIR/linuxcnc_rotate_kinematics_probe.run.stdout.log" \ 2>"$BUILD_DIR/linuxcnc_rotate_kinematics_probe.run.stderr.log" ROTATE_KINEMATICS_RUN_RC=$? set -e echo "$ROTATE_KINEMATICS_RUN_RC" > "$BUILD_DIR/linuxcnc_rotate_kinematics_probe.run.exitcode" else rm -f \ "$BUILD_DIR/linuxcnc_rotate_kinematics_probe.run.exitcode" \ "$BUILD_DIR/linuxcnc_rotate_kinematics_probe.run.stdout.log" \ "$BUILD_DIR/linuxcnc_rotate_kinematics_probe.run.stderr.log" fi if [[ "$(tr -d '[:space:]' < "$BUILD_DIR/linuxcnc_rose_kinematics_probe.exitcode")" == "0" ]]; then set +e "$BUILD_DIR/linuxcnc_rose_kinematics_probe" \ >"$BUILD_DIR/linuxcnc_rose_kinematics_probe.run.stdout.log" \ 2>"$BUILD_DIR/linuxcnc_rose_kinematics_probe.run.stderr.log" ROSE_KINEMATICS_RUN_RC=$? set -e echo "$ROSE_KINEMATICS_RUN_RC" > "$BUILD_DIR/linuxcnc_rose_kinematics_probe.run.exitcode" else rm -f \ "$BUILD_DIR/linuxcnc_rose_kinematics_probe.run.exitcode" \ "$BUILD_DIR/linuxcnc_rose_kinematics_probe.run.stdout.log" \ "$BUILD_DIR/linuxcnc_rose_kinematics_probe.run.stderr.log" fi if [[ "$(tr -d '[:space:]' < "$BUILD_DIR/linuxcnc_max_kinematics_probe.exitcode")" == "0" ]]; then set +e "$BUILD_DIR/linuxcnc_max_kinematics_probe" \ >"$BUILD_DIR/linuxcnc_max_kinematics_probe.run.stdout.log" \ 2>"$BUILD_DIR/linuxcnc_max_kinematics_probe.run.stderr.log" MAX_KINEMATICS_RUN_RC=$? set -e echo "$MAX_KINEMATICS_RUN_RC" > "$BUILD_DIR/linuxcnc_max_kinematics_probe.run.exitcode" else rm -f \ "$BUILD_DIR/linuxcnc_max_kinematics_probe.run.exitcode" \ "$BUILD_DIR/linuxcnc_max_kinematics_probe.run.stdout.log" \ "$BUILD_DIR/linuxcnc_max_kinematics_probe.run.stderr.log" fi if [[ "$(tr -d '[:space:]' < "$BUILD_DIR/linuxcnc_lineardelta_kinematics_probe.exitcode")" == "0" ]]; then set +e "$BUILD_DIR/linuxcnc_lineardelta_kinematics_probe" \ >"$BUILD_DIR/linuxcnc_lineardelta_kinematics_probe.run.stdout.log" \ 2>"$BUILD_DIR/linuxcnc_lineardelta_kinematics_probe.run.stderr.log" LINEARDELTA_KINEMATICS_RUN_RC=$? set -e echo "$LINEARDELTA_KINEMATICS_RUN_RC" > "$BUILD_DIR/linuxcnc_lineardelta_kinematics_probe.run.exitcode" else rm -f \ "$BUILD_DIR/linuxcnc_lineardelta_kinematics_probe.run.exitcode" \ "$BUILD_DIR/linuxcnc_lineardelta_kinematics_probe.run.stdout.log" \ "$BUILD_DIR/linuxcnc_lineardelta_kinematics_probe.run.stderr.log" fi if [[ "$(tr -d '[:space:]' < "$BUILD_DIR/linuxcnc_rotarydelta_kinematics_probe.exitcode")" == "0" ]]; then set +e "$BUILD_DIR/linuxcnc_rotarydelta_kinematics_probe" \ >"$BUILD_DIR/linuxcnc_rotarydelta_kinematics_probe.run.stdout.log" \ 2>"$BUILD_DIR/linuxcnc_rotarydelta_kinematics_probe.run.stderr.log" ROTARYDELTA_KINEMATICS_RUN_RC=$? set -e echo "$ROTARYDELTA_KINEMATICS_RUN_RC" > "$BUILD_DIR/linuxcnc_rotarydelta_kinematics_probe.run.exitcode" else rm -f \ "$BUILD_DIR/linuxcnc_rotarydelta_kinematics_probe.run.exitcode" \ "$BUILD_DIR/linuxcnc_rotarydelta_kinematics_probe.run.stdout.log" \ "$BUILD_DIR/linuxcnc_rotarydelta_kinematics_probe.run.stderr.log" fi if [[ "$(tr -d '[:space:]' < "$BUILD_DIR/linuxcnc_scorbot_kinematics_probe.exitcode")" == "0" ]]; then set +e "$BUILD_DIR/linuxcnc_scorbot_kinematics_probe" \ >"$BUILD_DIR/linuxcnc_scorbot_kinematics_probe.run.stdout.log" \ 2>"$BUILD_DIR/linuxcnc_scorbot_kinematics_probe.run.stderr.log" SCORBOT_KINEMATICS_RUN_RC=$? set -e echo "$SCORBOT_KINEMATICS_RUN_RC" > "$BUILD_DIR/linuxcnc_scorbot_kinematics_probe.run.exitcode" else rm -f \ "$BUILD_DIR/linuxcnc_scorbot_kinematics_probe.run.exitcode" \ "$BUILD_DIR/linuxcnc_scorbot_kinematics_probe.run.stdout.log" \ "$BUILD_DIR/linuxcnc_scorbot_kinematics_probe.run.stderr.log" fi if [[ "$(tr -d '[:space:]' < "$BUILD_DIR/linuxcnc_tripod_kinematics_probe.exitcode")" == "0" ]]; then set +e "$BUILD_DIR/linuxcnc_tripod_kinematics_probe" \ >"$BUILD_DIR/linuxcnc_tripod_kinematics_probe.run.stdout.log" \ 2>"$BUILD_DIR/linuxcnc_tripod_kinematics_probe.run.stderr.log" TRIPOD_KINEMATICS_RUN_RC=$? set -e echo "$TRIPOD_KINEMATICS_RUN_RC" > "$BUILD_DIR/linuxcnc_tripod_kinematics_probe.run.exitcode" else rm -f \ "$BUILD_DIR/linuxcnc_tripod_kinematics_probe.run.exitcode" \ "$BUILD_DIR/linuxcnc_tripod_kinematics_probe.run.stdout.log" \ "$BUILD_DIR/linuxcnc_tripod_kinematics_probe.run.stderr.log" fi if [[ "$(tr -d '[:space:]' < "$BUILD_DIR/linuxcnc_scara_kinematics_probe.exitcode")" == "0" ]]; then set +e "$BUILD_DIR/linuxcnc_scara_kinematics_probe" \ >"$BUILD_DIR/linuxcnc_scara_kinematics_probe.run.stdout.log" \ 2>"$BUILD_DIR/linuxcnc_scara_kinematics_probe.run.stderr.log" SCARA_KINEMATICS_RUN_RC=$? set -e echo "$SCARA_KINEMATICS_RUN_RC" > "$BUILD_DIR/linuxcnc_scara_kinematics_probe.run.exitcode" else rm -f \ "$BUILD_DIR/linuxcnc_scara_kinematics_probe.run.exitcode" \ "$BUILD_DIR/linuxcnc_scara_kinematics_probe.run.stdout.log" \ "$BUILD_DIR/linuxcnc_scara_kinematics_probe.run.stderr.log" fi if [[ "$(tr -d '[:space:]' < "$BUILD_DIR/linuxcnc_puma_kinematics_probe.exitcode")" == "0" ]]; then set +e "$BUILD_DIR/linuxcnc_puma_kinematics_probe" \ >"$BUILD_DIR/linuxcnc_puma_kinematics_probe.run.stdout.log" \ 2>"$BUILD_DIR/linuxcnc_puma_kinematics_probe.run.stderr.log" PUMA_KINEMATICS_RUN_RC=$? set -e echo "$PUMA_KINEMATICS_RUN_RC" > "$BUILD_DIR/linuxcnc_puma_kinematics_probe.run.exitcode" else rm -f \ "$BUILD_DIR/linuxcnc_puma_kinematics_probe.run.exitcode" \ "$BUILD_DIR/linuxcnc_puma_kinematics_probe.run.stdout.log" \ "$BUILD_DIR/linuxcnc_puma_kinematics_probe.run.stderr.log" fi if [[ "$(tr -d '[:space:]' < "$BUILD_DIR/linuxcnc_genser_kinematics_probe.exitcode")" == "0" ]]; then set +e "$BUILD_DIR/linuxcnc_genser_kinematics_probe" \ >"$BUILD_DIR/linuxcnc_genser_kinematics_probe.run.stdout.log" \ 2>"$BUILD_DIR/linuxcnc_genser_kinematics_probe.run.stderr.log" GENSER_KINEMATICS_RUN_RC=$? set -e echo "$GENSER_KINEMATICS_RUN_RC" > "$BUILD_DIR/linuxcnc_genser_kinematics_probe.run.exitcode" else rm -f \ "$BUILD_DIR/linuxcnc_genser_kinematics_probe.run.exitcode" \ "$BUILD_DIR/linuxcnc_genser_kinematics_probe.run.stdout.log" \ "$BUILD_DIR/linuxcnc_genser_kinematics_probe.run.stderr.log" fi if [[ "$(tr -d '[:space:]' < "$BUILD_DIR/linuxcnc_genhex_kinematics_probe.exitcode")" == "0" ]]; then set +e "$BUILD_DIR/linuxcnc_genhex_kinematics_probe" \ >"$BUILD_DIR/linuxcnc_genhex_kinematics_probe.run.stdout.log" \ 2>"$BUILD_DIR/linuxcnc_genhex_kinematics_probe.run.stderr.log" GENHEX_KINEMATICS_RUN_RC=$? set -e echo "$GENHEX_KINEMATICS_RUN_RC" > "$BUILD_DIR/linuxcnc_genhex_kinematics_probe.run.exitcode" else rm -f \ "$BUILD_DIR/linuxcnc_genhex_kinematics_probe.run.exitcode" \ "$BUILD_DIR/linuxcnc_genhex_kinematics_probe.run.stdout.log" \ "$BUILD_DIR/linuxcnc_genhex_kinematics_probe.run.stderr.log" fi if [[ "$(tr -d '[:space:]' < "$BUILD_DIR/linuxcnc_pentakins_kinematics_probe.exitcode")" == "0" ]]; then set +e "$BUILD_DIR/linuxcnc_pentakins_kinematics_probe" \ >"$BUILD_DIR/linuxcnc_pentakins_kinematics_probe.run.stdout.log" \ 2>"$BUILD_DIR/linuxcnc_pentakins_kinematics_probe.run.stderr.log" PENTAKINS_KINEMATICS_RUN_RC=$? set -e echo "$PENTAKINS_KINEMATICS_RUN_RC" > "$BUILD_DIR/linuxcnc_pentakins_kinematics_probe.run.exitcode" else rm -f \ "$BUILD_DIR/linuxcnc_pentakins_kinematics_probe.run.exitcode" \ "$BUILD_DIR/linuxcnc_pentakins_kinematics_probe.run.stdout.log" \ "$BUILD_DIR/linuxcnc_pentakins_kinematics_probe.run.stderr.log" fi if [[ "$(tr -d '[:space:]' < "$BUILD_DIR/linuxcnc_tp_api_probe.exitcode")" == "0" ]]; then set +e "$BUILD_DIR/linuxcnc_tp_api_probe" \ >"$BUILD_DIR/linuxcnc_tp_api_probe.run.stdout.log" \ 2>"$BUILD_DIR/linuxcnc_tp_api_probe.run.stderr.log" TP_API_RUN_RC=$? set -e echo "$TP_API_RUN_RC" > "$BUILD_DIR/linuxcnc_tp_api_probe.run.exitcode" else rm -f \ "$BUILD_DIR/linuxcnc_tp_api_probe.run.exitcode" \ "$BUILD_DIR/linuxcnc_tp_api_probe.run.stdout.log" \ "$BUILD_DIR/linuxcnc_tp_api_probe.run.stderr.log" fi for index in "${!TP_SOURCE_PROBE_NAMES[@]}"; do build_object_target \ "${TP_SOURCE_PROBE_NAMES[$index]}" \ "$BUILD_DIR/${TP_SOURCE_PROBE_NAMES[$index]}.o" \ "${TP_SOURCE_PROBE_SOURCES[$index]}" \ TP_FLAGS done build_binary_target \ linuxcnc_namedparam_harness \ "$BUILD_DIR/linuxcnc_namedparam_harness" \ MINIMAL_FLAGS \ NAMEDPARAM_SOURCES \ MINIMAL_LINK_FLAGS \ -lfmt if [[ "$(tr -d '[:space:]' < "$BUILD_DIR/linuxcnc_namedparam_harness.exitcode")" == "0" ]]; then run_logged_command \ linuxcnc_namedparam_harness \ "$BUILD_DIR/linuxcnc_namedparam_harness" "$NAMEDPARAM_INI_FIXTURE" else clear_logged_command linuxcnc_namedparam_harness fi build_binary_target \ linuxcnc_interp_minimal_harness \ "$BUILD_DIR/linuxcnc_interp_minimal_harness" \ MINIMAL_FLAGS \ MINIMAL_SOURCES \ MINIMAL_LINK_FLAGS \ -lfmt if [[ "$(tr -d '[:space:]' < "$BUILD_DIR/linuxcnc_interp_minimal_harness.exitcode")" == "0" ]]; then run_logged_command \ linuxcnc_interp_minimal_harness \ "$BUILD_DIR/linuxcnc_interp_minimal_harness" "$MINIMAL_GCODE_FIXTURE" else clear_logged_command linuxcnc_interp_minimal_harness fi if [[ "$(tr -d '[:space:]' < "$BUILD_DIR/linuxcnc_interp_minimal_harness.exitcode")" == "0" ]]; then run_logged_command \ linuxcnc_interp_minimal_harness.do_while_break \ "$BUILD_DIR/linuxcnc_interp_minimal_harness" "$DO_WHILE_BREAK_FIXTURE" else clear_logged_command linuxcnc_interp_minimal_harness.do_while_break fi if [[ "$(tr -d '[:space:]' < "$BUILD_DIR/linuxcnc_interp_minimal_harness.exitcode")" == "0" ]]; then run_logged_command \ linuxcnc_interp_minimal_harness.oword_bug315 \ "$BUILD_DIR/linuxcnc_interp_minimal_harness" "$OWORD_BUG315_FIXTURE" else clear_logged_command linuxcnc_interp_minimal_harness.oword_bug315 fi if [[ "$(tr -d '[:space:]' < "$BUILD_DIR/linuxcnc_interp_minimal_harness.exitcode")" == "0" ]]; then run_logged_command \ linuxcnc_interp_minimal_harness.oword_bug315_p2 \ "$BUILD_DIR/linuxcnc_interp_minimal_harness" "$OWORD_BUG315_P2_FIXTURE" else clear_logged_command linuxcnc_interp_minimal_harness.oword_bug315_p2 fi run_interp_minimal_fixture() { local label="$1" local fixture="$2" local ini="${3:-}" local mode="${4:-}" if [[ "$(tr -d '[:space:]' < "$BUILD_DIR/linuxcnc_interp_minimal_harness.exitcode")" == "0" ]]; then if [[ "$mode" == "continue_on_error" ]]; then run_logged_command \ "linuxcnc_interp_minimal_harness.$label" \ "$BUILD_DIR/linuxcnc_interp_minimal_harness" --continue-on-error "$fixture" "$ini" else run_logged_command \ "linuxcnc_interp_minimal_harness.$label" \ "$BUILD_DIR/linuxcnc_interp_minimal_harness" "$fixture" "$ini" fi else clear_logged_command "linuxcnc_interp_minimal_harness.$label" fi } run_interp_minimal_fixture interp_exists "$EXISTS_FIXTURE" run_interp_minimal_fixture return_value "$RETURN_VALUE_FIXTURE" run_interp_minimal_fixture subs_follow_main "$SUBS_FOLLOW_MAIN_FIXTURE" run_interp_minimal_fixture fractional_linenumbers "$FRACTIONAL_LINENUMBERS_FIXTURE" run_interp_minimal_fixture cam_nisley_bare "$CAM_NISLEY_FIXTURE" write_tool_table_ini "$CAM_NISLEY_INI" "$CAM_NISLEY_TOOL_TABLE" run_interp_minimal_fixture cam_nisley "$CAM_NISLEY_FIXTURE" "$CAM_NISLEY_INI" run_interp_minimal_fixture crazy_paths "$CRAZY_PATHS_FIXTURE" run_interp_minimal_fixture namedparam_bug424 "$NAMEDPARAM_BUG424_FIXTURE" run_interp_minimal_fixture flowsnake "$FLOWSNAKE_FIXTURE" run_interp_minimal_fixture inside_corners "$INSIDE_CORNERS_FIXTURE" run_interp_minimal_fixture inverse_time_with_comp "$INVERSE_TIME_WITH_COMP_FIXTURE" write_ccomp_ini "$CCOMP_LATHE_COMP_INI" "$CCOMP_LATHE_COMP_TOOL_TABLE" write_ccomp_ini "$CCOMP_MILL_G90G91G92_INI" "$CCOMP_MILL_G90G91G92_TOOL_TABLE" write_ccomp_ini "$CCOMP_MILL_LINE_ARC_ENTRY_INI" "$CCOMP_MILL_LINE_ARC_ENTRY_TOOL_TABLE" write_ccomp_ini "$CCOMP_MILL_ZCHANGES_INI" "$CCOMP_MILL_ZCHANGES_TOOL_TABLE" run_interp_minimal_fixture ccomp_lathe_comp "$CCOMP_LATHE_COMP_FIXTURE" "$CCOMP_LATHE_COMP_INI" run_interp_minimal_fixture ccomp_mill_g90g91g92 "$CCOMP_MILL_G90G91G92_FIXTURE" "$CCOMP_MILL_G90G91G92_INI" run_interp_minimal_fixture ccomp_mill_line_arc_entry "$CCOMP_MILL_LINE_ARC_ENTRY_FIXTURE" "$CCOMP_MILL_LINE_ARC_ENTRY_INI" run_interp_minimal_fixture ccomp_mill_zchanges "$CCOMP_MILL_ZCHANGES_FIXTURE" "$CCOMP_MILL_ZCHANGES_INI" run_interp_minimal_fixture bad_a_in_canned_cycle "$BAD_A_IN_CANNED_CYCLE_FIXTURE" run_interp_minimal_fixture bad_a_in_canned_cycle2 "$BAD_A_IN_CANNED_CYCLE2_FIXTURE" run_interp_minimal_fixture bad_arc_big_imperial_center_format "$BAD_ARC_BIG_IMPERIAL_CENTER_FORMAT_FIXTURE" run_interp_minimal_fixture bad_arc_big_metric_center_format "$BAD_ARC_BIG_METRIC_CENTER_FORMAT_FIXTURE" run_interp_minimal_fixture bad_arc_medium_imperial_center_format "$BAD_ARC_MEDIUM_IMPERIAL_CENTER_FORMAT_FIXTURE" run_interp_minimal_fixture bad_arc_medium_metric_center_format "$BAD_ARC_MEDIUM_METRIC_CENTER_FORMAT_FIXTURE" run_interp_minimal_fixture bad_arc_small_imperial_center_format "$BAD_ARC_SMALL_IMPERIAL_CENTER_FORMAT_FIXTURE" run_interp_minimal_fixture bad_arc_small_metric_center_format "$BAD_ARC_SMALL_METRIC_CENTER_FORMAT_FIXTURE" run_interp_minimal_fixture bad_ccomp_arcexit "$BAD_CCOMP_ARCEXIT_FIXTURE" run_interp_minimal_fixture bad_ccomp_gouging "$BAD_CCOMP_GOUGING_FIXTURE" run_interp_minimal_fixture bad_exists_1 "$BAD_EXISTS_1_FIXTURE" run_interp_minimal_fixture bad_exists_2 "$BAD_EXISTS_2_FIXTURE" run_interp_minimal_fixture bad_exists_3 "$BAD_EXISTS_3_FIXTURE" run_interp_minimal_fixture bad_exists_4 "$BAD_EXISTS_4_FIXTURE" run_interp_minimal_fixture bad_exists_5 "$BAD_EXISTS_5_FIXTURE" run_interp_minimal_fixture bad_exists_6 "$BAD_EXISTS_6_FIXTURE" run_interp_minimal_fixture bad_exists_7 "$BAD_EXISTS_7_FIXTURE" run_interp_minimal_fixture bad_nested "$BAD_NESTED_FIXTURE" run_interp_minimal_fixture bad_no_feed_rate "$BAD_NO_FEED_RATE_FIXTURE" run_interp_minimal_fixture bad_no_ijr "$BAD_NO_IJR_FIXTURE" run_interp_minimal_fixture bad_probe_no_axes "$BAD_PROBE_NO_AXES_FIXTURE" run_interp_minimal_fixture g33_1 "$G33_1_FIXTURE" run_interp_minimal_fixture g6164 "$G6164_FIXTURE" run_interp_minimal_fixture g72_facing "$G72_FACING_FIXTURE" run_interp_minimal_fixture g72_missing_iteration "$G72_MISSING_ITERATION_FIXTURE" run_interp_minimal_fixture g71_endless_loop "$G71_ENDLESS_LOOP_FIXTURE" run_interp_minimal_fixture g71_endless_loop2 "$G71_ENDLESS_LOOP2_FIXTURE" run_interp_minimal_fixture g71_endless_loop_2 "$G71_ENDLESS_LOOP_2_FIXTURE" run_interp_minimal_fixture g71_with_g70 "$G71_WITH_G70_FIXTURE" write_tool_table_ini "$G76_INI" "$G76_TOOL_TABLE" run_interp_minimal_fixture g76 "$G76_FIXTURE" "$G76_INI" run_interp_minimal_fixture good_arc_big_imperial_center_format "$GOOD_ARC_BIG_IMPERIAL_CENTER_FORMAT_FIXTURE" run_interp_minimal_fixture good_arc_big_metric_center_format "$GOOD_ARC_BIG_METRIC_CENTER_FORMAT_FIXTURE" run_interp_minimal_fixture good_arc_medium_imperial_center_format "$GOOD_ARC_MEDIUM_IMPERIAL_CENTER_FORMAT_FIXTURE" run_interp_minimal_fixture good_arc_medium_metric_center_format "$GOOD_ARC_MEDIUM_METRIC_CENTER_FORMAT_FIXTURE" run_interp_minimal_fixture good_arc_small_imperial_center_format "$GOOD_ARC_SMALL_IMPERIAL_CENTER_FORMAT_FIXTURE" run_interp_minimal_fixture good_arc_small_metric_center_format "$GOOD_ARC_SMALL_METRIC_CENTER_FORMAT_FIXTURE" run_interp_minimal_fixture rotation_abs_pts "$ROTATION_ABS_PTS_FIXTURE" run_interp_minimal_fixture rotation_g28 "$ROTATION_G28_FIXTURE" run_interp_minimal_fixture rotation_g53 "$ROTATION_G53_FIXTURE" run_interp_minimal_fixture iniparam "$INIPARAM_FIXTURE" "$INIPARAM_INI" continue_on_error run_interp_minimal_fixture iniparam_failassign "$INIPARAM_FAILASSIGN_FIXTURE" "$INIPARAM_FAILASSIGN_INI" run_interp_minimal_fixture sub_call_from_sub "$SUB_CALL_FROM_SUB_FIXTURE" "$SUB_CALL_FROM_SUB_INI" run_interp_minimal_fixture sequence_number "$SEQUENCE_NUMBER_FIXTURE" "$SEQUENCE_NUMBER_INI" run_interp_minimal_fixture nested_sub_error "$NESTED_SUB_ERROR_FIXTURE" "$NESTED_SUB_ERROR_INI" run_interp_minimal_fixture nested_sub_in_file_error "$NESTED_SUB_IN_FILE_ERROR_FIXTURE" "$NESTED_SUB_IN_FILE_ERROR_INI" run_interp_minimal_fixture oword_unwind "$OWORD_UNWIND_FIXTURE" "$OWORD_UNWIND_INI" continue_on_error run_interp_minimal_fixture abort_hot_comment "$ABORT_HOT_COMMENT_FIXTURE" "$ABORT_HOT_COMMENT_INI" continue_on_error run_interp_minimal_fixture m19 "$M19_FIXTURE" "$M19_INI" run_interp_minimal_fixture magic_comments_param_format "$MAGIC_COMMENTS_PARAM_FORMAT_FIXTURE" run_interp_minimal_fixture m98m99_01_basics "$M98M99_01_BASICS_FIXTURE" run_interp_minimal_fixture m98m99_02_variables "$M98M99_02_VARIABLES_FIXTURE" run_interp_minimal_fixture m98m99_03_error_m98_no_p_word "$M98M99_03_ERROR_M98_NO_P_WORD_FIXTURE" run_interp_minimal_fixture m98m99_04_m98_but_no_sub "$M98M99_04_M98_BUT_NO_SUB_FIXTURE" run_interp_minimal_fixture m98m99_05_m98_loops "$M98M99_05_M98_LOOPS_FIXTURE" run_interp_minimal_fixture m98m99_06_called_with_o_call "$M98M99_06_CALLED_WITH_O_CALL_FIXTURE" run_interp_minimal_fixture m98m99_06_ended_with_o_endsub "$M98M99_06_ENDED_WITH_O_ENDSUB_FIXTURE" run_interp_minimal_fixture m98m99_06_sub_called_with_m98 "$M98M99_06_SUB_CALLED_WITH_M98_FIXTURE" run_interp_minimal_fixture m98m99_06_sub_ended_with_m99 "$M98M99_06_SUB_ENDED_WITH_M99_FIXTURE" run_interp_minimal_fixture m98m99_07_nested_subs "$M98M99_07_NESTED_SUBS_FIXTURE" run_interp_minimal_fixture m98m99_08_sub_follows_main "$M98M99_08_SUB_FOLLOWS_MAIN_FIXTURE" run_interp_minimal_fixture m98m99_09_fanuc_ini "$M98M99_09_FANUC_FIXTURE" "$M98M99_09_FANUC_INI" run_interp_minimal_fixture m98m99_09_rs274ngc_ini "$M98M99_09_RS274NGC_FIXTURE" "$M98M99_09_FANUC_INI" run_interp_minimal_fixture m98m99_09_fanuc_no_fanuc "$M98M99_09_FANUC_FIXTURE" "$M98M99_09_NO_FANUC_INI" run_interp_minimal_fixture m98m99_09_rs274ngc_no_fanuc "$M98M99_09_RS274NGC_FIXTURE" "$M98M99_09_NO_FANUC_INI" run_interp_minimal_fixture m98m99_09_fanuc_default "$M98M99_09_FANUC_FIXTURE" run_interp_minimal_fixture m98m99_09_rs274ngc_default "$M98M99_09_RS274NGC_FIXTURE" run_interp_minimal_fixture m98m99_10_m98_p001 "$M98M99_10_M98_P001_FIXTURE" run_interp_minimal_fixture m98m99_11_legal_m2 "$M98M99_11_LEGAL_M2_FIXTURE" run_interp_minimal_fixture m98m99_11_legal_m02 "$M98M99_11_LEGAL_M02_FIXTURE" run_interp_minimal_fixture m98m99_11_legal_m30 "$M98M99_11_LEGAL_M30_FIXTURE" run_interp_minimal_fixture m98m99_11_legal_percent "$M98M99_11_LEGAL_PERCENT_FIXTURE" run_interp_minimal_fixture m98m99_11_illegal_eof "$M98M99_11_ILLEGAL_EOF_FIXTURE" run_interp_minimal_fixture m98m99_11_illegal_no_m30 "$M98M99_11_ILLEGAL_NO_M30_FIXTURE" run_interp_minimal_fixture m98m99_11_illegal_sub_after_percent "$M98M99_11_ILLEGAL_SUB_AFTER_PERCENT_FIXTURE" run_interp_minimal_fixture m98m99_13_named_program_named "$M98M99_13_NAMED_PROGRAM_NAMED_FIXTURE" run_interp_minimal_fixture m98m99_13_named_program_numbered "$M98M99_13_NAMED_PROGRAM_NUMBERED_FIXTURE" run_interp_minimal_fixture m98m99_14_o_expression_call "$M98M99_14_O_EXPRESSION_CALL_FIXTURE" write_tool_table_ini "$G10_L1_L10_INI" "$G10_L1_L10_TOOL_TABLE" write_tool_table_ini "$G10_L11_INI" "$G10_L11_TOOL_TABLE" write_tool_table_ini "$G10_WITH_G92_INI" "$G10_WITH_G92_TOOL_TABLE" run_interp_minimal_fixture g10_l1_l10 "$G10_L1_L10_FIXTURE" "$G10_L1_L10_INI" run_interp_minimal_fixture g10_l11 "$G10_L11_FIXTURE" "$G10_L11_INI" run_interp_minimal_fixture g10_l2_while_active "$G10_L2_WHILE_ACTIVE_FIXTURE" run_interp_minimal_fixture g10_l20_while_active "$G10_L20_WHILE_ACTIVE_FIXTURE" run_interp_minimal_fixture g10_with_g92 "$G10_WITH_G92_FIXTURE" "$G10_WITH_G92_INI" run_interp_minimal_fixture g52_g92_interaction "$G52_G92_INTERACTION_FIXTURE" write_g92_persistence_files run_interp_minimal_fixture g92_persistence_enabled "$G92_PERSISTENCE_FIXTURE" "$G92_PERSISTENCE_INI" run_interp_minimal_fixture g92_persistence_disabled "$G92_PERSISTENCE_FIXTURE" "$G92_PERSISTENCE_DISABLED_INI" run_interp_minimal_fixture sim_axis_foam "$SIM_AXIS_FOAM_FIXTURE" "$SIM_AXIS_FOAM_INI" continue_on_error run_interp_minimal_fixture sim_bridgemill "$SIM_BRIDGEMILL_FIXTURE" "$SIM_BRIDGEMILL_INI" continue_on_error run_interp_minimal_fixture sim_geometry_xyzc "$SIM_GEOMETRY_XYZC_FIXTURE" "$SIM_GEOMETRY_XYZC_INI" continue_on_error run_interp_minimal_fixture sim_external_offsets_dyn "$SIM_EXTERNAL_OFFSETS_DYN_FIXTURE" "$SIM_EXTERNAL_OFFSETS_DYN_INI" continue_on_error build_binary_target \ linuxcnc_parameter_file_harness \ "$BUILD_DIR/linuxcnc_parameter_file_harness" \ MINIMAL_FLAGS \ PARAMETER_FILE_SOURCES \ MINIMAL_LINK_FLAGS \ -lfmt if [[ "$(tr -d '[:space:]' < "$BUILD_DIR/linuxcnc_parameter_file_harness.exitcode")" == "0" ]]; then run_logged_command \ linuxcnc_parameter_file_harness \ "$BUILD_DIR/linuxcnc_parameter_file_harness" else clear_logged_command linuxcnc_parameter_file_harness fi build_binary_target \ linuxcnc_interp_init_harness \ "$BUILD_DIR/linuxcnc_interp_init_harness" \ MINIMAL_FLAGS \ INIT_HARNESS_SOURCES \ MINIMAL_LINK_FLAGS \ -lfmt if [[ "$(tr -d '[:space:]' < "$BUILD_DIR/linuxcnc_interp_init_harness.exitcode")" == "0" ]]; then run_logged_command \ linuxcnc_interp_init_harness \ "$BUILD_DIR/linuxcnc_interp_init_harness" else clear_logged_command linuxcnc_interp_init_harness fi build_binary_target \ linuxcnc_remap_parse_harness \ "$BUILD_DIR/linuxcnc_remap_parse_harness" \ REMAP_RUNTIME_FLAGS \ REMAP_PARSE_SOURCES \ MINIMAL_LINK_FLAGS \ -lfmt if [[ "$(tr -d '[:space:]' < "$BUILD_DIR/linuxcnc_remap_parse_harness.exitcode")" == "0" ]]; then run_logged_command \ linuxcnc_remap_parse_harness \ "$BUILD_DIR/linuxcnc_remap_parse_harness" else clear_logged_command linuxcnc_remap_parse_harness fi build_binary_target \ linuxcnc_remap_hal_sync_harness \ "$BUILD_DIR/linuxcnc_remap_hal_sync_harness" \ REMAP_RUNTIME_FLAGS \ REMAP_HAL_SYNC_SOURCES \ MINIMAL_LINK_FLAGS if [[ "$(tr -d '[:space:]' < "$BUILD_DIR/linuxcnc_remap_hal_sync_harness.exitcode")" == "0" ]]; then run_logged_command \ linuxcnc_remap_hal_sync_harness \ "$BUILD_DIR/linuxcnc_remap_hal_sync_harness" else clear_logged_command linuxcnc_remap_hal_sync_harness fi build_binary_target \ linuxcnc_5axis_remap_execute_harness \ "$BUILD_DIR/linuxcnc_5axis_remap_execute_harness" \ REMAP_RUNTIME_FLAGS \ FIVEAXIS_REMAP_EXECUTE_SOURCES \ MINIMAL_LINK_FLAGS if [[ "$(tr -d '[:space:]' < "$BUILD_DIR/linuxcnc_5axis_remap_execute_harness.exitcode")" == "0" ]]; then run_logged_command \ linuxcnc_5axis_remap_execute_harness \ "$BUILD_DIR/linuxcnc_5axis_remap_execute_harness" else clear_logged_command linuxcnc_5axis_remap_execute_harness fi build_binary_target \ linuxcnc_duplicate_oword_remap_harness \ "$BUILD_DIR/linuxcnc_duplicate_oword_remap_harness" \ REMAP_RUNTIME_FLAGS \ DUPLICATE_OWORD_REMAP_SOURCES \ MINIMAL_LINK_FLAGS if [[ "$(tr -d '[:space:]' < "$BUILD_DIR/linuxcnc_duplicate_oword_remap_harness.exitcode")" == "0" ]]; then run_logged_command \ linuxcnc_duplicate_oword_remap_harness \ "$BUILD_DIR/linuxcnc_duplicate_oword_remap_harness" else clear_logged_command linuxcnc_duplicate_oword_remap_harness fi build_binary_target \ linuxcnc_indexer_harness \ "$BUILD_DIR/linuxcnc_indexer_harness" \ MINIMAL_FLAGS \ INDEXER_HARNESS_SOURCES \ MINIMAL_LINK_FLAGS \ -lfmt if [[ "$(tr -d '[:space:]' < "$BUILD_DIR/linuxcnc_indexer_harness.exitcode")" == "0" ]]; then run_logged_command \ linuxcnc_indexer_harness \ "$BUILD_DIR/linuxcnc_indexer_harness" else clear_logged_command linuxcnc_indexer_harness fi build_object_target \ linuxcnc_rs274_compile_probe \ "$BUILD_DIR/linuxcnc_rs274_compile_probe.o" \ "$WRAP_DIR/linuxcnc_rs274_compile_probe.cpp" \ COMMON_FLAGS build_object_target \ linuxcnc_kins_util_source_probe \ "$BUILD_DIR/linuxcnc_kins_util_source_probe.o" \ "$VENDOR_DIR/src/emc/kinematics/kins_util.c" \ TP_FLAGS build_object_target \ linuxcnc_cubic_source_probe \ "$BUILD_DIR/linuxcnc_cubic_source_probe.o" \ "$VENDOR_DIR/src/emc/kinematics/cubic.c" \ TP_FLAGS build_object_target \ linuxcnc_trivkins_source_probe \ "$BUILD_DIR/linuxcnc_trivkins_source_probe.o" \ "$VENDOR_DIR/src/emc/kinematics/trivkins.c" \ TP_FLAGS build_object_target \ linuxcnc_switchkins_source_probe \ "$BUILD_DIR/linuxcnc_switchkins_source_probe.o" \ "$VENDOR_DIR/src/emc/kinematics/switchkins.c" \ TP_FLAGS build_object_target \ linuxcnc_userkfuncs_source_probe \ "$BUILD_DIR/linuxcnc_userkfuncs_source_probe.o" \ "$VENDOR_DIR/src/emc/kinematics/userkfuncs.c" \ TP_FLAGS build_object_target \ linuxcnc_5axiskins_source_probe \ "$BUILD_DIR/linuxcnc_5axiskins_source_probe.o" \ "$VENDOR_DIR/src/emc/kinematics/5axiskins.c" \ TP_FLAGS build_object_target \ linuxcnc_trtfuncs_source_probe \ "$BUILD_DIR/linuxcnc_trtfuncs_source_probe.o" \ "$VENDOR_DIR/src/emc/kinematics/trtfuncs.c" \ TP_FLAGS build_object_target \ linuxcnc_xyzac_trt_kins_source_probe \ "$BUILD_DIR/linuxcnc_xyzac_trt_kins_source_probe.o" \ "$VENDOR_DIR/src/emc/kinematics/xyzac-trt-kins.c" \ TP_FLAGS build_object_target \ linuxcnc_xyzbc_trt_kins_source_probe \ "$BUILD_DIR/linuxcnc_xyzbc_trt_kins_source_probe.o" \ "$VENDOR_DIR/src/emc/kinematics/xyzbc-trt-kins.c" \ TP_FLAGS build_object_target \ linuxcnc_corexykins_source_probe \ "$BUILD_DIR/linuxcnc_corexykins_source_probe.o" \ "$VENDOR_DIR/src/emc/kinematics/corexykins.c" \ TP_FLAGS build_object_target \ linuxcnc_rotatekins_source_probe \ "$BUILD_DIR/linuxcnc_rotatekins_source_probe.o" \ "$VENDOR_DIR/src/emc/kinematics/rotatekins.c" \ TP_FLAGS build_object_target \ linuxcnc_rosekins_source_probe \ "$BUILD_DIR/linuxcnc_rosekins_source_probe.o" \ "$VENDOR_DIR/src/emc/kinematics/rosekins.c" \ TP_FLAGS build_object_target \ linuxcnc_maxkins_source_probe \ "$BUILD_DIR/linuxcnc_maxkins_source_probe.o" \ "$VENDOR_DIR/src/emc/kinematics/maxkins.c" \ TP_FLAGS build_object_target \ linuxcnc_lineardeltakins_source_probe \ "$BUILD_DIR/linuxcnc_lineardeltakins_source_probe.o" \ "$VENDOR_DIR/src/emc/kinematics/lineardeltakins.c" \ TP_FLAGS build_object_target \ linuxcnc_rotarydeltakins_source_probe \ "$BUILD_DIR/linuxcnc_rotarydeltakins_source_probe.o" \ "$VENDOR_DIR/src/emc/kinematics/rotarydeltakins.c" \ TP_FLAGS build_object_target \ linuxcnc_scorbot_kins_source_probe \ "$BUILD_DIR/linuxcnc_scorbot_kins_source_probe.o" \ "$VENDOR_DIR/src/emc/kinematics/scorbot-kins.c" \ TP_FLAGS build_object_target \ linuxcnc_tripodkins_source_probe \ "$BUILD_DIR/linuxcnc_tripodkins_source_probe.o" \ "$VENDOR_DIR/src/emc/kinematics/tripodkins.c" \ TP_FLAGS build_object_target \ linuxcnc_scarakins_source_probe \ "$BUILD_DIR/linuxcnc_scarakins_source_probe.o" \ "$VENDOR_DIR/src/emc/kinematics/scarakins.c" \ TP_FLAGS build_object_target \ linuxcnc_pumakins_source_probe \ "$BUILD_DIR/linuxcnc_pumakins_source_probe.o" \ "$VENDOR_DIR/src/emc/kinematics/pumakins.c" \ TP_FLAGS build_object_target \ linuxcnc_genhexkins_source_probe \ "$BUILD_DIR/linuxcnc_genhexkins_source_probe.o" \ "$VENDOR_DIR/src/emc/kinematics/genhexkins.c" \ TP_FLAGS build_object_target \ linuxcnc_genserfuncs_source_probe \ "$BUILD_DIR/linuxcnc_genserfuncs_source_probe.o" \ "$VENDOR_DIR/src/emc/kinematics/genserfuncs.c" \ TP_FLAGS build_object_target \ linuxcnc_genserkins_source_probe \ "$BUILD_DIR/linuxcnc_genserkins_source_probe.o" \ "$VENDOR_DIR/src/emc/kinematics/genserkins.c" \ TP_FLAGS build_object_target \ linuxcnc_ugenserkins_source_probe \ "$BUILD_DIR/linuxcnc_ugenserkins_source_probe.o" \ "$VENDOR_DIR/src/emc/kinematics/ugenserkins.c" \ TP_FLAGS build_object_target \ linuxcnc_pentakins_source_probe \ "$BUILD_DIR/linuxcnc_pentakins_source_probe.o" \ "$VENDOR_DIR/src/emc/kinematics/pentakins.c" \ TP_FLAGS build_object_target \ linuxcnc_interp_convert_source_probe \ "$BUILD_DIR/linuxcnc_interp_convert_source_probe.o" \ "$VENDOR_DIR/src/emc/rs274ngc/interp_convert.cc" \ COMMON_FLAGS build_object_target \ linuxcnc_interp_read_source_probe \ "$BUILD_DIR/linuxcnc_interp_read_source_probe.o" \ "$VENDOR_DIR/src/emc/rs274ngc/interp_read.cc" \ COMMON_FLAGS build_object_target \ linuxcnc_interp_check_source_probe \ "$BUILD_DIR/linuxcnc_interp_check_source_probe.o" \ "$VENDOR_DIR/src/emc/rs274ngc/interp_check.cc" \ COMMON_FLAGS build_object_target \ linuxcnc_interp_execute_source_probe \ "$BUILD_DIR/linuxcnc_interp_execute_source_probe.o" \ "$VENDOR_DIR/src/emc/rs274ngc/interp_execute.cc" \ COMMON_FLAGS build_object_target \ linuxcnc_modal_state_source_probe \ "$BUILD_DIR/linuxcnc_modal_state_source_probe.o" \ "$VENDOR_DIR/src/emc/rs274ngc/modal_state.cc" \ COMMON_FLAGS build_object_target \ linuxcnc_interp_array_source_probe \ "$BUILD_DIR/linuxcnc_interp_array_source_probe.o" \ "$VENDOR_DIR/src/emc/rs274ngc/interp_array.cc" \ COMMON_FLAGS build_object_target \ linuxcnc_interp_internal_source_probe \ "$BUILD_DIR/linuxcnc_interp_internal_source_probe.o" \ "$VENDOR_DIR/src/emc/rs274ngc/interp_internal.cc" \ COMMON_FLAGS build_object_target \ linuxcnc_interp_arc_source_probe \ "$BUILD_DIR/linuxcnc_interp_arc_source_probe.o" \ "$VENDOR_DIR/src/emc/rs274ngc/interp_arc.cc" \ COMMON_FLAGS build_object_target \ linuxcnc_interp_inverse_source_probe \ "$BUILD_DIR/linuxcnc_interp_inverse_source_probe.o" \ "$VENDOR_DIR/src/emc/rs274ngc/interp_inverse.cc" \ COMMON_FLAGS build_object_target \ linuxcnc_interp_cycles_source_probe \ "$BUILD_DIR/linuxcnc_interp_cycles_source_probe.o" \ "$VENDOR_DIR/src/emc/rs274ngc/interp_cycles.cc" \ COMMON_FLAGS build_object_target \ linuxcnc_interp_g7x_source_probe \ "$BUILD_DIR/linuxcnc_interp_g7x_source_probe.o" \ "$VENDOR_DIR/src/emc/rs274ngc/interp_g7x.cc" \ COMMON_FLAGS build_object_target \ linuxcnc_interp_queue_source_probe \ "$BUILD_DIR/linuxcnc_interp_queue_source_probe.o" \ "$VENDOR_DIR/src/emc/rs274ngc/interp_queue.cc" \ COMMON_FLAGS build_object_target \ linuxcnc_interp_find_source_probe \ "$BUILD_DIR/linuxcnc_interp_find_source_probe.o" \ "$VENDOR_DIR/src/emc/rs274ngc/interp_find.cc" \ COMMON_FLAGS build_object_target \ linuxcnc_interp_namedparams_source_probe \ "$BUILD_DIR/linuxcnc_interp_namedparams_source_probe.o" \ "$VENDOR_DIR/src/emc/rs274ngc/interp_namedparams.cc" \ COMMON_INI_FLAGS build_object_target \ linuxcnc_interp_write_source_probe \ "$BUILD_DIR/linuxcnc_interp_write_source_probe.o" \ "$VENDOR_DIR/src/emc/rs274ngc/interp_write.cc" \ COMMON_INI_FLAGS build_object_target \ linuxcnc_interp_o_word_source_probe \ "$BUILD_DIR/linuxcnc_interp_o_word_source_probe.o" \ "$VENDOR_DIR/src/emc/rs274ngc/interp_o_word.cc" \ COMMON_INI_FLAGS build_object_target \ linuxcnc_interp_remap_source_probe \ "$BUILD_DIR/linuxcnc_interp_remap_source_probe.o" \ "$VENDOR_DIR/src/emc/rs274ngc/interp_remap.cc" \ REMAP_SOURCE_FLAGS build_object_target \ linuxcnc_rs274ngc_pre_source_probe \ "$BUILD_DIR/linuxcnc_rs274ngc_pre_source_probe.o" \ "$VENDOR_DIR/src/emc/rs274ngc/rs274ngc_pre.cc" \ MINIMAL_FLAGS build_object_target \ linuxcnc_interp_base_source_probe \ "$BUILD_DIR/linuxcnc_interp_base_source_probe.o" \ "$VENDOR_DIR/src/emc/rs274ngc/interp_base.cc" \ INTERP_BASE_FLAGS build_c_object_target \ linuxcnc_gomath_source_probe \ "$BUILD_DIR/linuxcnc_gomath_source_probe.o" \ "$VENDOR_DIR/src/libnml/posemath/gomath.c" \ C_FLAGS build_object_target \ linuxcnc_tooldata_common_source_probe \ "$BUILD_DIR/linuxcnc_tooldata_common_source_probe.o" \ "$VENDOR_DIR/src/emc/tooldata/tooldata_common.cc" \ MINIMAL_FLAGS write_native_cache_stamp "$NATIVE_INPUT_FINGERPRINT" echo "native probes complete"