Files
yiliao2026/src/mtran/test/test_cmake_preparation.sh

54 lines
1.8 KiB
Bash

#!/usr/bin/env bash
set -euo pipefail
root=$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd -P)
fixture_root=$(mktemp -d)
trap 'rm -rf "${fixture_root}"' EXIT
fixture="${fixture_root}/mtran"
rsync -a \
--exclude '.build/' \
--exclude 'build/' \
--exclude 'install/' \
--exclude 'log/' \
--exclude 'vendor/' \
--exclude 'dependencies/tools/' \
--exclude 'runtime/' \
--exclude 'models/en_zh-Hans/' \
"${root}/" "${fixture}/"
if [[ "${ROS_DISTRO:-}" != "humble" ]]; then
echo "ROS2 Humble environment must be sourced before running this test" >&2
exit 1
fi
if missing_output=$(cmake -S "${fixture}" -B "${fixture}/build-missing" 2>&1); then
echo "CMake unexpectedly configured without prepared runtime files" >&2
exit 1
fi
grep -Fq './dependencies/auto_install.sh' <<< "${missing_output}"
grep -Fq 'runtime/bin/mtranserver' <<< "${missing_output}"
mkdir -p "${fixture}/runtime/bin" \
"${fixture}/runtime/config" \
"${fixture}/models/en_zh-Hans"
printf '#!/usr/bin/env bash\nexit 0\n' > "${fixture}/runtime/bin/mtranserver"
chmod +x "${fixture}/runtime/bin/mtranserver"
printf '{"data":[]}\n' > "${fixture}/runtime/config/records.json"
for model_file in \
model.enzh.intgemm.alphas.bin \
lex.50.50.enzh.s2t.bin \
srcvocab.enzh.spm \
trgvocab.enzh.spm; do
printf 'fixture\n' > "${fixture}/models/en_zh-Hans/${model_file}"
done
cmake -S "${fixture}" -B "${fixture}/build-ready" -DBUILD_TESTING=OFF >/dev/null
grep -Fq 'runtime/bin/mtranserver DESTINATION lib/${PROJECT_NAME}' "${fixture}/CMakeLists.txt"
grep -Fq 'models/en_zh-Hans DESTINATION share/${PROJECT_NAME}/models' "${fixture}/CMakeLists.txt"
grep -Fq 'runtime/config/records.json DESTINATION share/${PROJECT_NAME}/mtranserver_config' \
"${fixture}/CMakeLists.txt"
printf 'CMake preparation tests passed\n'