第 6 组:源码链接、构建和文档约束闭环完成
This commit is contained in:
@@ -23,6 +23,14 @@ missing_bridge_source_log=$(mktemp "${TMPDIR:-/tmp}/cnc_sim_missing_bridge_smoke
|
||||
missing_support_object_log=$(mktemp "${TMPDIR:-/tmp}/cnc_sim_missing_linuxcnc_support_object.XXXXXX.log")
|
||||
missing_source_manifest=$(mktemp "${TMPDIR:-/tmp}/cnc_sim_native_syntax_missing_source_manifest.XXXXXX.txt")
|
||||
missing_source_log=$(mktemp "${TMPDIR:-/tmp}/cnc_sim_native_syntax_missing_source.XXXXXX.log")
|
||||
bad_line_manifest=$(mktemp "${TMPDIR:-/tmp}/cnc_sim_bad_manifest_line.XXXXXX.txt")
|
||||
bad_line_log=$(mktemp "${TMPDIR:-/tmp}/cnc_sim_bad_manifest_line.XXXXXX.log")
|
||||
absolute_source_manifest=$(mktemp "${TMPDIR:-/tmp}/cnc_sim_absolute_manifest_source.XXXXXX.txt")
|
||||
absolute_source_log=$(mktemp "${TMPDIR:-/tmp}/cnc_sim_absolute_manifest_source.XXXXXX.log")
|
||||
invalid_build_jobs_log=$(mktemp "${TMPDIR:-/tmp}/cnc_sim_invalid_build_jobs.XXXXXX.log")
|
||||
invalid_build_dir_log=$(mktemp "${TMPDIR:-/tmp}/cnc_sim_invalid_build_dir.XXXXXX.log")
|
||||
empty_build_dir_log=$(mktemp "${TMPDIR:-/tmp}/cnc_sim_empty_build_dir.XXXXXX.log")
|
||||
whitespace_build_dir_log=$(mktemp "${TMPDIR:-/tmp}/cnc_sim_whitespace_build_dir.XXXXXX.log")
|
||||
|
||||
cleanup_native_test_temps() {
|
||||
rm -f \
|
||||
@@ -41,7 +49,15 @@ cleanup_native_test_temps() {
|
||||
"$missing_bridge_source_log" \
|
||||
"$missing_support_object_log" \
|
||||
"$missing_source_manifest" \
|
||||
"$missing_source_log"
|
||||
"$missing_source_log" \
|
||||
"$bad_line_manifest" \
|
||||
"$bad_line_log" \
|
||||
"$absolute_source_manifest" \
|
||||
"$absolute_source_log" \
|
||||
"$invalid_build_jobs_log" \
|
||||
"$invalid_build_dir_log" \
|
||||
"$empty_build_dir_log" \
|
||||
"$whitespace_build_dir_log"
|
||||
}
|
||||
trap cleanup_native_test_temps EXIT
|
||||
|
||||
@@ -67,12 +83,40 @@ for forbidden_manual_cleanup in \
|
||||
'rm -f "$missing_core_source_log"' \
|
||||
'rm -f "$missing_bridge_source_log"' \
|
||||
'rm -f "$missing_support_object_log"' \
|
||||
'rm -f "$missing_source_manifest" "$missing_source_log"'; do
|
||||
'rm -f "$missing_source_manifest" "$missing_source_log"' \
|
||||
'rm -f "$bad_line_manifest" "$bad_line_log"' \
|
||||
'rm -f "$absolute_source_manifest" "$absolute_source_log"' \
|
||||
'rm -f "$invalid_build_jobs_log"' \
|
||||
'rm -f "$invalid_build_dir_log"' \
|
||||
'rm -f "$empty_build_dir_log"' \
|
||||
'rm -f "$whitespace_build_dir_log"'; do
|
||||
if grep -Fx "$forbidden_manual_cleanup" test-all-native.sh >/dev/null; then
|
||||
echo "native aggregate test still relies on manual cleanup: $forbidden_manual_cleanup" >&2
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
|
||||
printf 'core:src/emc/rs274ngc/interp_arc.cc\n' >"$bad_line_manifest"
|
||||
if ./check-linuxcnc-inputs.sh "$bad_line_manifest" >"$bad_line_log" 2>&1; then
|
||||
echo "check-linuxcnc-inputs accepted a manifest line without a note" >&2
|
||||
exit 1
|
||||
fi
|
||||
if ! grep -F "bad manifest line 1: core:src/emc/rs274ngc/interp_arc.cc" "$bad_line_log" >/dev/null; then
|
||||
echo "check-linuxcnc-inputs did not report malformed manifest lines clearly" >&2
|
||||
sed -n '1,20p' "$bad_line_log" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
printf 'core:/src/emc/rs274ngc/interp_arc.cc:absolute source path\n' >"$absolute_source_manifest"
|
||||
if ./check-linuxcnc-inputs.sh "$absolute_source_manifest" >"$absolute_source_log" 2>&1; then
|
||||
echo "check-linuxcnc-inputs accepted an absolute manifest source path" >&2
|
||||
exit 1
|
||||
fi
|
||||
if ! grep -F "manifest source must be LinuxCNC-root relative: /src/emc/rs274ngc/interp_arc.cc" "$absolute_source_log" >/dev/null; then
|
||||
echo "check-linuxcnc-inputs did not report absolute manifest paths clearly" >&2
|
||||
sed -n '1,20p' "$absolute_source_log" >&2
|
||||
exit 1
|
||||
fi
|
||||
grep -F 'exec 9>"${TMPDIR:-/tmp}/cnc_sim_rs274_source_link.lock"' test-linuxcnc-source-link.sh >/dev/null
|
||||
grep -F "flock 9" test-linuxcnc-source-link.sh >/dev/null
|
||||
grep -F "missing LinuxCNC support object" list-linuxcnc-source-support-objects.sh >/dev/null
|
||||
@@ -86,7 +130,6 @@ grep -F 'exec 9>"${TMPDIR:-/tmp}/cnc_sim_linuxcnc_rs274_native.lock"' test-linux
|
||||
grep -F "flock 9" test-linuxcnc-rs274-native.sh >/dev/null
|
||||
for build_dir_probe_script in \
|
||||
test-linuxcnc-source-objects.sh \
|
||||
test-linuxcnc-source-link.sh \
|
||||
test-linuxcnc-bridge-native.sh \
|
||||
test-linuxcnc-rs274-native.sh \
|
||||
test-linuxcnc-api-native.sh; do
|
||||
@@ -99,11 +142,261 @@ for build_dir_probe_script in \
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
if ! awk '
|
||||
/cleanup_wasm_cmake_probe_temps\(\)/ { in_cleanup = 1 }
|
||||
in_cleanup && index($0, "\"$build_dir\"") { found_build_dir = 1 }
|
||||
in_cleanup && /^}/ { in_cleanup = 0 }
|
||||
END { exit found_build_dir }
|
||||
' test-linuxcnc-wasm-cmake-safe-probe.sh; then
|
||||
echo "wasm CMake safe probe cleanup no longer removes its persistent build dir" >&2
|
||||
exit 1
|
||||
fi
|
||||
grep -F 'build_dir=${CNC_SIM_SOURCE_LINK_BUILD_DIR-build/source-link-test}' test-linuxcnc-source-link.sh >/dev/null
|
||||
grep -F 'CNC_SIM_SOURCE_LINK_BUILD_DIR must not be empty' test-linuxcnc-source-link.sh >/dev/null
|
||||
grep -F 'CNC_SIM_SOURCE_LINK_BUILD_DIR must not contain whitespace: $build_dir' test-linuxcnc-source-link.sh >/dev/null
|
||||
grep -F 'CNC_SIM_SOURCE_LINK_BUILD_DIR must not be the filesystem root' test-linuxcnc-source-link.sh >/dev/null
|
||||
grep -F 'CNC_SIM_BUILD_JOBS must be a positive integer: $build_jobs' test-linuxcnc-source-link.sh >/dev/null
|
||||
grep -F 'exec 9>"${TMPDIR:-/tmp}/cnc_sim_rs274_source_link.lock"' test-linuxcnc-source-link.sh >/dev/null
|
||||
grep -F 'source_link_signature="$build_dir/source-link-build.signature"' test-linuxcnc-source-link.sh >/dev/null
|
||||
grep -F 'if [[ ! -f "$source_link_signature" ]] || ! cmp -s "$source_link_signature" "$source_link_next_signature"; then' test-linuxcnc-source-link.sh >/dev/null
|
||||
grep -F 'printf '\''PWD=%s\n'\'' "$PWD"' test-linuxcnc-source-link.sh >/dev/null
|
||||
grep -F 'printf '\''LINUXCNC_ROOT=%s\n'\'' "$(cd "$linuxcnc_root" && pwd)"' test-linuxcnc-source-link.sh >/dev/null
|
||||
grep -F 'printf '\''%s: %s\n'\'' "$build_dir/linuxcnc_${linuxcnc_index}.o" "$source"' test-linuxcnc-source-link.sh >/dev/null
|
||||
grep -F 'printf '\''%s: %s\n'\'' "$build_dir/project_${project_index}.o" "$source"' test-linuxcnc-source-link.sh >/dev/null
|
||||
grep -F 'printf '\''\t@$(CXX) $(COMMON_FLAGS) -MMD -MP -MF %s.d -c %s -o %s\n\n'\''' test-linuxcnc-source-link.sh >/dev/null
|
||||
grep -F 'build_dir=${CNC_SIM_NATIVE_BUILD_DIR-build/native-test}' test-native.sh >/dev/null
|
||||
grep -F 'CNC_SIM_NATIVE_BUILD_DIR must not be empty' test-native.sh >/dev/null
|
||||
grep -F 'CNC_SIM_NATIVE_BUILD_DIR must not contain whitespace: $build_dir' test-native.sh >/dev/null
|
||||
grep -F 'CNC_SIM_NATIVE_BUILD_DIR must not be the filesystem root' test-native.sh >/dev/null
|
||||
grep -F 'CNC_SIM_BUILD_JOBS must be a positive integer: $build_jobs' test-native.sh >/dev/null
|
||||
grep -F 'exec 9>"$build_dir/native-test.lock"' test-native.sh >/dev/null
|
||||
grep -F 'native_signature="$build_dir/native-build.signature"' test-native.sh >/dev/null
|
||||
grep -F 'if [[ ! -f "$native_signature" ]] || ! cmp -s "$native_signature" "$native_next_signature"; then' test-native.sh >/dev/null
|
||||
grep -F 'printf '\''PWD=%s\n'\'' "$PWD"' test-native.sh >/dev/null
|
||||
grep -F 'printf '\''%s: %s\n'\'' "${core_objects[$core_index]}" "$source"' test-native.sh >/dev/null
|
||||
grep -F 'printf '\''\t@$(CXX) $(SMOKE_CXXFLAGS) -MMD -MP -MF %s.d -c %s -o %s\n\n'\''' test-native.sh >/dev/null
|
||||
grep -F 'build_dir=${CNC_SIM_SOURCE_SYNTAX_BUILD_DIR-build/source-syntax-test}' test-linuxcnc-source-syntax.sh >/dev/null
|
||||
grep -F 'CNC_SIM_SOURCE_SYNTAX_BUILD_DIR must not be empty' test-linuxcnc-source-syntax.sh >/dev/null
|
||||
grep -F 'CNC_SIM_SOURCE_SYNTAX_BUILD_DIR must not contain whitespace: $build_dir' test-linuxcnc-source-syntax.sh >/dev/null
|
||||
grep -F 'CNC_SIM_SOURCE_SYNTAX_BUILD_DIR must not be the filesystem root' test-linuxcnc-source-syntax.sh >/dev/null
|
||||
grep -F 'CNC_SIM_BUILD_JOBS must be a positive integer: $build_jobs' test-linuxcnc-source-syntax.sh >/dev/null
|
||||
grep -F 'exec 9>"$build_dir/source-syntax.lock"' test-linuxcnc-source-syntax.sh >/dev/null
|
||||
grep -F 'source_list="$build_dir/linuxcnc_source_syntax_sources.txt"' test-linuxcnc-source-syntax.sh >/dev/null
|
||||
grep -F 'source_syntax_signature="$build_dir/source-syntax.signature"' test-linuxcnc-source-syntax.sh >/dev/null
|
||||
grep -F 'if [[ ! -f "$source_syntax_signature" ]] || ! cmp -s "$source_syntax_signature" "$source_syntax_next_signature"; then' test-linuxcnc-source-syntax.sh >/dev/null
|
||||
grep -F 'printf '\''LINUXCNC_ROOT=%s\n'\'' "$(cd "$linuxcnc_root" && pwd)"' test-linuxcnc-source-syntax.sh >/dev/null
|
||||
grep -F 'printf '\''MANIFEST=%s\n'\'' "$(cd "$(dirname "$manifest")" && pwd)/$(basename "$manifest")"' test-linuxcnc-source-syntax.sh >/dev/null
|
||||
grep -F 'printf '\''BUILD_JOBS=%s\n'\'' "$build_jobs"' test-linuxcnc-source-syntax.sh >/dev/null
|
||||
grep -F 'printf '\''%s/source_%s.stamp: %s\n'\'' "$build_dir" "$source_index" "$source"' test-linuxcnc-source-syntax.sh >/dev/null
|
||||
grep -F 'printf '\''\t@$(CXX) $(COMMON_FLAGS) -MMD -MP -MF %s/source_%s.d %s\n'\''' test-linuxcnc-source-syntax.sh >/dev/null
|
||||
grep -F 'make --output-sync=target -j"$build_jobs" -f "$source_syntax_makefile"' test-linuxcnc-source-syntax.sh >/dev/null
|
||||
grep -F 'build_jobs=${CNC_SIM_BUILD_JOBS:-8}' build-wasm.sh >/dev/null
|
||||
grep -F 'CNC_SIM_BUILD_JOBS must be a positive integer: $build_jobs' build-wasm.sh >/dev/null
|
||||
grep -F 'cmake --build build/wasm --target cnc_sim_wasm_runtime_probe --parallel "$build_jobs"' build-wasm.sh >/dev/null
|
||||
grep -F 'cmake --build build/wasm --target cnc_sim_wasm --parallel "$build_jobs"' build-wasm.sh >/dev/null
|
||||
grep -F 'build_jobs=${CNC_SIM_BUILD_JOBS:-8}' test-linuxcnc-wasm-cmake-safe-probe.sh >/dev/null
|
||||
grep -F 'CNC_SIM_BUILD_JOBS must be a positive integer: $build_jobs' test-linuxcnc-wasm-cmake-safe-probe.sh >/dev/null
|
||||
grep -F 'build_dir=${CNC_SIM_WASM_CMAKE_SAFE_PROBE_BUILD_DIR-build/wasm-cmake-safe-probe}' test-linuxcnc-wasm-cmake-safe-probe.sh >/dev/null
|
||||
grep -F 'CNC_SIM_WASM_CMAKE_SAFE_PROBE_BUILD_DIR must not be empty' test-linuxcnc-wasm-cmake-safe-probe.sh >/dev/null
|
||||
grep -F 'CNC_SIM_WASM_CMAKE_SAFE_PROBE_BUILD_DIR must not contain whitespace: $build_dir' test-linuxcnc-wasm-cmake-safe-probe.sh >/dev/null
|
||||
grep -F 'CNC_SIM_WASM_CMAKE_SAFE_PROBE_BUILD_DIR must not be the filesystem root' test-linuxcnc-wasm-cmake-safe-probe.sh >/dev/null
|
||||
grep -F 'build_signature="$build_dir/wasm-cmake-safe-probe.signature"' test-linuxcnc-wasm-cmake-safe-probe.sh >/dev/null
|
||||
grep -F 'build_next_signature=$(mktemp "${TMPDIR:-/tmp}/cnc_sim_wasm_cmake_safe_probe.signature.XXXXXX")' test-linuxcnc-wasm-cmake-safe-probe.sh >/dev/null
|
||||
grep -F 'if [[ ! -f "$build_signature" ]] || ! cmp -s "$build_signature" "$build_next_signature"; then' test-linuxcnc-wasm-cmake-safe-probe.sh >/dev/null
|
||||
grep -F 'printf '\''LINUXCNC_ROOT=%s\n'\'' "$linuxcnc_root"' test-linuxcnc-wasm-cmake-safe-probe.sh >/dev/null
|
||||
grep -F 'printf '\''MANIFEST=%s\n'\'' "$manifest"' test-linuxcnc-wasm-cmake-safe-probe.sh >/dev/null
|
||||
grep -F 'printf '\''BUILD_JOBS=%s\n'\'' "$build_jobs"' test-linuxcnc-wasm-cmake-safe-probe.sh >/dev/null
|
||||
grep -F 'cmake --build "$build_dir" --target linuxcnc_rs274_wasm_safe_probe_objects --parallel "$build_jobs"' test-linuxcnc-wasm-cmake-safe-probe.sh >/dev/null
|
||||
grep -F 'cmake --build "$build_dir" --target linuxcnc_rs274_wasm_safe_probe --parallel "$build_jobs"' test-linuxcnc-wasm-cmake-safe-probe.sh >/dev/null
|
||||
grep -F 'cmake --build "$build_dir" --target cnc_sim_wasm_runtime_probe --parallel "$build_jobs"' test-linuxcnc-wasm-cmake-safe-probe.sh >/dev/null
|
||||
grep -F 'CNC_SIM_NATIVE_BUILD_DIR' docs/linuxcnc-source-policy.md >/dev/null
|
||||
grep -F 'CNC_SIM_SOURCE_LINK_BUILD_DIR' docs/linuxcnc-source-policy.md >/dev/null
|
||||
grep -F 'CNC_SIM_SOURCE_SYNTAX_BUILD_DIR' docs/linuxcnc-source-policy.md >/dev/null
|
||||
grep -F 'CNC_SIM_WASM_CMAKE_SAFE_PROBE_BUILD_DIR' docs/linuxcnc-source-policy.md >/dev/null
|
||||
grep -F 'Build directory overrides must' docs/linuxcnc-source-policy.md >/dev/null
|
||||
grep -F 'copies and byte-compares `cnc_sim.js` and `cnc_sim.wasm` under' docs/linuxcnc-source-policy.md >/dev/null
|
||||
grep -F '`CNC_SIM_BUILD_JOBS` must be a positive integer and defaults to `8`.' docs/linuxcnc-source-policy.md >/dev/null
|
||||
grep -F '`test-native.sh` uses persistent `build/native-test` objects' docs/linuxcnc-source-policy.md >/dev/null
|
||||
grep -F '`test-linuxcnc-source-link.sh` uses persistent `build/source-link-test`' docs/linuxcnc-source-policy.md >/dev/null
|
||||
grep -F '`test-linuxcnc-source-syntax.sh` uses persistent' docs/linuxcnc-source-policy.md >/dev/null
|
||||
grep -F '`test-linuxcnc-wasm-cmake-safe-probe.sh` uses persistent' docs/linuxcnc-source-policy.md >/dev/null
|
||||
grep -F 'must reject empty, whitespace-containing, or filesystem-root build' docs/linuxcnc-source-policy.md >/dev/null
|
||||
grep -F 'entry points must serialize' docs/linuxcnc-source-policy.md >/dev/null
|
||||
grep -F 'shared non-concurrency-safe paths with lock files' docs/linuxcnc-source-policy.md >/dev/null
|
||||
grep -F '`-MMD -MP` dependency tracking and `make --output-sync=target`' docs/linuxcnc-source-policy.md >/dev/null
|
||||
grep -F 'must run blocker, syntax, object, CMake, tooldata,' docs/linuxcnc-source-policy.md >/dev/null
|
||||
grep -F 'must check `cmake`, `emcmake`, `emcc`, and `node`' docs/linuxcnc-source-policy.md >/dev/null
|
||||
grep -F 'must build `cnc_sim_wasm_runtime_probe` before' docs/linuxcnc-source-policy.md >/dev/null
|
||||
grep -F 'must copy `build/wasm/cnc_sim.js` and' docs/linuxcnc-source-policy.md >/dev/null
|
||||
grep -F 'must compare copied artifacts with `cmp -s` before running' docs/linuxcnc-source-policy.md >/dev/null
|
||||
grep -F 'must run the Node smoke before the browser smoke' docs/linuxcnc-source-policy.md >/dev/null
|
||||
grep -F 'explicitly checked for 25' docs/linuxcnc-source-policy.md >/dev/null
|
||||
grep -F 'wasm-safe core sources and 9 blocked sources' docs/linuxcnc-source-policy.md >/dev/null
|
||||
grep -F 'must reject malformed lines, absolute source paths,' docs/linuxcnc-source-policy.md >/dev/null
|
||||
grep -F 'must include the built LinuxCNC `lib` path and rpath' docs/linuxcnc-source-policy.md >/dev/null
|
||||
grep -F 'must surface helper failures instead of hiding them' docs/linuxcnc-source-policy.md >/dev/null
|
||||
grep -F 'Temporary probe reports must be cleaned on failure' docs/linuxcnc-source-policy.md >/dev/null
|
||||
grep -F 'Documentation-only build policy edits should still update the guardrail' docs/linuxcnc-source-policy.md >/dev/null
|
||||
grep -F 'python_include_output=$(python3.13-config --includes 2>/dev/null || python3-config --includes)' list-linuxcnc-source-common-cxxflags.sh >/dev/null
|
||||
if grep -F 'read -r -a python_includes <<<"$(' list-linuxcnc-source-common-cxxflags.sh >/dev/null; then
|
||||
echo "source common cxxflags still hides python-config failures behind read" >&2
|
||||
exit 1
|
||||
fi
|
||||
for script in test-native.sh test-linuxcnc-source-syntax.sh test-linuxcnc-source-link.sh build-wasm.sh; do
|
||||
if CNC_SIM_BUILD_JOBS=0 "./$script" >"$invalid_build_jobs_log" 2>&1; then
|
||||
echo "$script accepted invalid CNC_SIM_BUILD_JOBS" >&2
|
||||
exit 1
|
||||
fi
|
||||
if ! grep -F "CNC_SIM_BUILD_JOBS must be a positive integer: 0" "$invalid_build_jobs_log" >/dev/null; then
|
||||
echo "$script did not report invalid CNC_SIM_BUILD_JOBS clearly" >&2
|
||||
sed -n '1,20p' "$invalid_build_jobs_log" >&2
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
if CNC_SIM_BUILD_JOBS=0 ./test-linuxcnc-wasm-cmake-safe-probe.sh >"$invalid_build_jobs_log" 2>&1; then
|
||||
echo "test-linuxcnc-wasm-cmake-safe-probe.sh accepted invalid CNC_SIM_BUILD_JOBS" >&2
|
||||
exit 1
|
||||
fi
|
||||
if ! grep -F "CNC_SIM_BUILD_JOBS must be a positive integer: 0" "$invalid_build_jobs_log" >/dev/null; then
|
||||
echo "test-linuxcnc-wasm-cmake-safe-probe.sh did not report invalid CNC_SIM_BUILD_JOBS clearly" >&2
|
||||
sed -n '1,20p' "$invalid_build_jobs_log" >&2
|
||||
exit 1
|
||||
fi
|
||||
if CNC_SIM_WASM_CMAKE_SAFE_PROBE_BUILD_DIR=/ ./test-linuxcnc-wasm-cmake-safe-probe.sh >"$invalid_build_dir_log" 2>&1; then
|
||||
echo "test-linuxcnc-wasm-cmake-safe-probe.sh accepted filesystem root as build dir" >&2
|
||||
exit 1
|
||||
fi
|
||||
if ! grep -F "CNC_SIM_WASM_CMAKE_SAFE_PROBE_BUILD_DIR must not be the filesystem root" "$invalid_build_dir_log" >/dev/null; then
|
||||
echo "test-linuxcnc-wasm-cmake-safe-probe.sh did not report filesystem-root build dir clearly" >&2
|
||||
sed -n '1,20p' "$invalid_build_dir_log" >&2
|
||||
exit 1
|
||||
fi
|
||||
if CNC_SIM_WASM_CMAKE_SAFE_PROBE_BUILD_DIR= ./test-linuxcnc-wasm-cmake-safe-probe.sh >"$empty_build_dir_log" 2>&1; then
|
||||
echo "test-linuxcnc-wasm-cmake-safe-probe.sh accepted empty build dir" >&2
|
||||
exit 1
|
||||
fi
|
||||
if ! grep -F "CNC_SIM_WASM_CMAKE_SAFE_PROBE_BUILD_DIR must not be empty" "$empty_build_dir_log" >/dev/null; then
|
||||
echo "test-linuxcnc-wasm-cmake-safe-probe.sh did not report empty build dir clearly" >&2
|
||||
sed -n '1,20p' "$empty_build_dir_log" >&2
|
||||
exit 1
|
||||
fi
|
||||
if CNC_SIM_WASM_CMAKE_SAFE_PROBE_BUILD_DIR="build/wasm safe probe" ./test-linuxcnc-wasm-cmake-safe-probe.sh >"$whitespace_build_dir_log" 2>&1; then
|
||||
echo "test-linuxcnc-wasm-cmake-safe-probe.sh accepted whitespace in build dir" >&2
|
||||
exit 1
|
||||
fi
|
||||
if ! grep -F "CNC_SIM_WASM_CMAKE_SAFE_PROBE_BUILD_DIR must not contain whitespace: build/wasm safe probe" "$whitespace_build_dir_log" >/dev/null; then
|
||||
echo "test-linuxcnc-wasm-cmake-safe-probe.sh did not report whitespace build dir clearly" >&2
|
||||
sed -n '1,20p' "$whitespace_build_dir_log" >&2
|
||||
exit 1
|
||||
fi
|
||||
if CNC_SIM_NATIVE_BUILD_DIR=/ ./test-native.sh >"$invalid_build_dir_log" 2>&1; then
|
||||
echo "test-native.sh accepted filesystem root as build dir" >&2
|
||||
exit 1
|
||||
fi
|
||||
if ! grep -F "CNC_SIM_NATIVE_BUILD_DIR must not be the filesystem root" "$invalid_build_dir_log" >/dev/null; then
|
||||
echo "test-native.sh did not report filesystem-root build dir clearly" >&2
|
||||
sed -n '1,20p' "$invalid_build_dir_log" >&2
|
||||
exit 1
|
||||
fi
|
||||
if CNC_SIM_NATIVE_BUILD_DIR=/tmp/.. ./test-native.sh >"$invalid_build_dir_log" 2>&1; then
|
||||
echo "test-native.sh accepted canonical filesystem root as build dir" >&2
|
||||
exit 1
|
||||
fi
|
||||
if ! grep -F "CNC_SIM_NATIVE_BUILD_DIR must not be the filesystem root" "$invalid_build_dir_log" >/dev/null; then
|
||||
echo "test-native.sh did not report canonical filesystem-root build dir clearly" >&2
|
||||
sed -n '1,20p' "$invalid_build_dir_log" >&2
|
||||
exit 1
|
||||
fi
|
||||
if CNC_SIM_NATIVE_BUILD_DIR= ./test-native.sh >"$empty_build_dir_log" 2>&1; then
|
||||
echo "test-native.sh accepted empty build dir" >&2
|
||||
exit 1
|
||||
fi
|
||||
if ! grep -F "CNC_SIM_NATIVE_BUILD_DIR must not be empty" "$empty_build_dir_log" >/dev/null; then
|
||||
echo "test-native.sh did not report empty build dir clearly" >&2
|
||||
sed -n '1,20p' "$empty_build_dir_log" >&2
|
||||
exit 1
|
||||
fi
|
||||
if CNC_SIM_NATIVE_BUILD_DIR="build/native test" ./test-native.sh >"$whitespace_build_dir_log" 2>&1; then
|
||||
echo "test-native.sh accepted whitespace in build dir" >&2
|
||||
exit 1
|
||||
fi
|
||||
if ! grep -F "CNC_SIM_NATIVE_BUILD_DIR must not contain whitespace: build/native test" "$whitespace_build_dir_log" >/dev/null; then
|
||||
echo "test-native.sh did not report whitespace build dir clearly" >&2
|
||||
sed -n '1,20p' "$whitespace_build_dir_log" >&2
|
||||
exit 1
|
||||
fi
|
||||
if CNC_SIM_SOURCE_SYNTAX_BUILD_DIR=/ ./test-linuxcnc-source-syntax.sh >"$invalid_build_dir_log" 2>&1; then
|
||||
echo "test-linuxcnc-source-syntax.sh accepted filesystem root as build dir" >&2
|
||||
exit 1
|
||||
fi
|
||||
if ! grep -F "CNC_SIM_SOURCE_SYNTAX_BUILD_DIR must not be the filesystem root" "$invalid_build_dir_log" >/dev/null; then
|
||||
echo "test-linuxcnc-source-syntax.sh did not report filesystem-root build dir clearly" >&2
|
||||
sed -n '1,20p' "$invalid_build_dir_log" >&2
|
||||
exit 1
|
||||
fi
|
||||
if CNC_SIM_SOURCE_SYNTAX_BUILD_DIR=/tmp/.. ./test-linuxcnc-source-syntax.sh >"$invalid_build_dir_log" 2>&1; then
|
||||
echo "test-linuxcnc-source-syntax.sh accepted canonical filesystem root as build dir" >&2
|
||||
exit 1
|
||||
fi
|
||||
if ! grep -F "CNC_SIM_SOURCE_SYNTAX_BUILD_DIR must not be the filesystem root" "$invalid_build_dir_log" >/dev/null; then
|
||||
echo "test-linuxcnc-source-syntax.sh did not report canonical filesystem-root build dir clearly" >&2
|
||||
sed -n '1,20p' "$invalid_build_dir_log" >&2
|
||||
exit 1
|
||||
fi
|
||||
if CNC_SIM_SOURCE_SYNTAX_BUILD_DIR= ./test-linuxcnc-source-syntax.sh >"$empty_build_dir_log" 2>&1; then
|
||||
echo "test-linuxcnc-source-syntax.sh accepted empty build dir" >&2
|
||||
exit 1
|
||||
fi
|
||||
if ! grep -F "CNC_SIM_SOURCE_SYNTAX_BUILD_DIR must not be empty" "$empty_build_dir_log" >/dev/null; then
|
||||
echo "test-linuxcnc-source-syntax.sh did not report empty build dir clearly" >&2
|
||||
sed -n '1,20p' "$empty_build_dir_log" >&2
|
||||
exit 1
|
||||
fi
|
||||
if CNC_SIM_SOURCE_SYNTAX_BUILD_DIR="build/source syntax test" ./test-linuxcnc-source-syntax.sh >"$whitespace_build_dir_log" 2>&1; then
|
||||
echo "test-linuxcnc-source-syntax.sh accepted whitespace in build dir" >&2
|
||||
exit 1
|
||||
fi
|
||||
if ! grep -F "CNC_SIM_SOURCE_SYNTAX_BUILD_DIR must not contain whitespace: build/source syntax test" "$whitespace_build_dir_log" >/dev/null; then
|
||||
echo "test-linuxcnc-source-syntax.sh did not report whitespace build dir clearly" >&2
|
||||
sed -n '1,20p' "$whitespace_build_dir_log" >&2
|
||||
exit 1
|
||||
fi
|
||||
if CNC_SIM_SOURCE_LINK_BUILD_DIR=/ ./test-linuxcnc-source-link.sh >"$invalid_build_dir_log" 2>&1; then
|
||||
echo "test-linuxcnc-source-link.sh accepted filesystem root as build dir" >&2
|
||||
exit 1
|
||||
fi
|
||||
if ! grep -F "CNC_SIM_SOURCE_LINK_BUILD_DIR must not be the filesystem root" "$invalid_build_dir_log" >/dev/null; then
|
||||
echo "test-linuxcnc-source-link.sh did not report filesystem-root build dir clearly" >&2
|
||||
sed -n '1,20p' "$invalid_build_dir_log" >&2
|
||||
exit 1
|
||||
fi
|
||||
if CNC_SIM_SOURCE_LINK_BUILD_DIR=/tmp/.. ./test-linuxcnc-source-link.sh >"$invalid_build_dir_log" 2>&1; then
|
||||
echo "test-linuxcnc-source-link.sh accepted canonical filesystem root as build dir" >&2
|
||||
exit 1
|
||||
fi
|
||||
if ! grep -F "CNC_SIM_SOURCE_LINK_BUILD_DIR must not be the filesystem root" "$invalid_build_dir_log" >/dev/null; then
|
||||
echo "test-linuxcnc-source-link.sh did not report canonical filesystem-root build dir clearly" >&2
|
||||
sed -n '1,20p' "$invalid_build_dir_log" >&2
|
||||
exit 1
|
||||
fi
|
||||
if CNC_SIM_SOURCE_LINK_BUILD_DIR= ./test-linuxcnc-source-link.sh >"$empty_build_dir_log" 2>&1; then
|
||||
echo "test-linuxcnc-source-link.sh accepted empty build dir" >&2
|
||||
exit 1
|
||||
fi
|
||||
if ! grep -F "CNC_SIM_SOURCE_LINK_BUILD_DIR must not be empty" "$empty_build_dir_log" >/dev/null; then
|
||||
echo "test-linuxcnc-source-link.sh did not report empty build dir clearly" >&2
|
||||
sed -n '1,20p' "$empty_build_dir_log" >&2
|
||||
exit 1
|
||||
fi
|
||||
if CNC_SIM_SOURCE_LINK_BUILD_DIR="build/source link test" ./test-linuxcnc-source-link.sh >"$whitespace_build_dir_log" 2>&1; then
|
||||
echo "test-linuxcnc-source-link.sh accepted whitespace in build dir" >&2
|
||||
exit 1
|
||||
fi
|
||||
if ! grep -F "CNC_SIM_SOURCE_LINK_BUILD_DIR must not contain whitespace: build/source link test" "$whitespace_build_dir_log" >/dev/null; then
|
||||
echo "test-linuxcnc-source-link.sh did not report whitespace build dir clearly" >&2
|
||||
sed -n '1,20p' "$whitespace_build_dir_log" >&2
|
||||
exit 1
|
||||
fi
|
||||
forbidden_common_flags_process_substitution='readarray -t common_flags < <('
|
||||
forbidden_link_flags_process_substitution='readarray -t link_flags < <('
|
||||
forbidden_source_common_flags_helper='./list-linuxcnc-source-common-cxxflags.sh'
|
||||
@@ -155,8 +448,8 @@ grep -F 'CNC_SIM_ENABLE_SMOKE_BACKEND cannot be combined with CNC_SIM_ENABLE_LIN
|
||||
grep -F 'smoke backend is not compiled into this build' core/src/gcode_backend.cpp >/dev/null
|
||||
grep -F './list-linuxcnc-bridge-smoke-project-sources.sh > "$project_source_list"' test-linuxcnc-bridge-native.sh >/dev/null
|
||||
grep -F 'LINUXCNC_ROOT="$linuxcnc_root" ./list-linuxcnc-source-support-objects.sh > "$support_object_list"' test-linuxcnc-source-link.sh >/dev/null
|
||||
grep -F 'trap '\''rm -f "$source_list" "$missing_source_manifest" "$missing_source_log"'\'' EXIT' test-linuxcnc-source-syntax.sh >/dev/null
|
||||
if grep -F 'rm -f "$missing_source_manifest" "$missing_source_log"' test-linuxcnc-source-syntax.sh >/dev/null; then
|
||||
grep -Fx 'trap cleanup_source_syntax_temps EXIT' test-linuxcnc-source-syntax.sh >/dev/null
|
||||
if grep -Fx "trap 'rm -f \"\$source_list\" \"\$missing_source_manifest\" \"\$missing_source_log\"' EXIT" test-linuxcnc-source-syntax.sh >/dev/null; then
|
||||
echo "linuxcnc source syntax probe still relies on manual cleanup for missing-source temporaries" >&2
|
||||
exit 1
|
||||
fi
|
||||
@@ -421,11 +714,11 @@ fi
|
||||
|
||||
printf 'core:src/emc/rs274ngc/does_not_exist.cc:test missing source\n' >"$missing_source_manifest"
|
||||
if ./test-linuxcnc-source-syntax.sh "$missing_source_manifest" >"$missing_source_log" 2>&1; then
|
||||
echo "test-linuxcnc-source-syntax.sh accepted missing manifest file" >&2
|
||||
echo "test-linuxcnc-source-syntax.sh accepted missing manifest source" >&2
|
||||
exit 1
|
||||
fi
|
||||
if ! grep -F "missing manifest file: src/emc/rs274ngc/does_not_exist.cc" "$missing_source_log" >/dev/null; then
|
||||
echo "test-linuxcnc-source-syntax.sh did not report missing manifest file clearly" >&2
|
||||
if ! grep -F "missing manifest source: src/emc/rs274ngc/does_not_exist.cc" "$missing_source_log" >/dev/null; then
|
||||
echo "test-linuxcnc-source-syntax.sh did not report missing manifest source clearly" >&2
|
||||
sed -n '1,20p' "$missing_source_log" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
Reference in New Issue
Block a user