#!/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" 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" NAMEDPARAM_BUG424_FIXTURE="$ROOT_DIR/vendor/linuxcnc/tests/interp/namedparam-bug424/test.ngc" FLOWSNAKE_FIXTURE="$ROOT_DIR/vendor/linuxcnc/tests/interp/flowsnake/flowsnake.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" 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_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_10_M98_P001_FIXTURE="$ROOT_DIR/vendor/linuxcnc/tests/interp/m98m99/10-M98-P001/test.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" 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 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" } | 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\" ) 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" } command_matches() { local file="$1" shift local tmp tmp="$(mktemp)" write_command_file "$tmp" "$@" if [[ -f "$file" ]] && cmp -s "$tmp" "$file"; then rm -f "$tmp" return 0 fi rm -f "$tmp" return 1 } depfile_newer_than() { local depfile="$1" local output="$2" [[ -f "$depfile" ]] || return 0 local deps deps="$(tr '\\\n' ' ' < "$depfile" | sed -e 's/^[^:]*://')" local dep for dep in $deps; do if [[ -f "$dep" && "$dep" -nt "$output" ]]; then return 0 fi done return 1 } object_needs_rebuild() { local obj="$1" local depfile="$2" local cmdfile="$3" shift 3 [[ -f "$obj" ]] || return 0 command_matches "$cmdfile" "$@" || return 0 depfile_newer_than "$depfile" "$obj" && return 0 return 1 } shared_object_path() { local source="$1" shift local base key base="$(basename "$source")" key="$( { printf 'source=%q\n' "$source" printf 'arg=%q\n' "$@" } | sha256sum | awk '{ print $1 }' )" printf '%s/obj/shared/%s-%s.o\n' "$BUILD_DIR" "${base%.*}" "$key" } compile_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=("$CXX" "$@" -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: %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" ) 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_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 namedparam_bug424 "$NAMEDPARAM_BUG424_FIXTURE" run_interp_minimal_fixture flowsnake "$FLOWSNAKE_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 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_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_10_m98_p001 "$M98M99_10_M98_P001_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" 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"