You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
nudt-compiler-cpp/fix_includes.sh

48 lines
1.7 KiB

#!/bin/bash
# fix_includes.sh - 修改所有include路径为相对于项目根目录
set -euo pipefail
cd "$(dirname "$0")"
echo "Fixing include paths in all source files..."
# 处理 src/ 下所有层级的文件
for dir in src src/frontend src/ir src/ir/passes src/ir/analysis src/irgen src/sem src/mir src/mir/passes src/utils; do
[[ ! -d "$dir" ]] && continue
# 计算相对前缀
case "$dir" in
src) prefix="." ;;
src/frontend|src/utils) prefix=".." ;;
src/ir|src/irgen|src/sem|src/mir) prefix="../.." ;;
src/ir/passes|src/ir/analysis|src/mir/passes) prefix="../../.." ;;
*) continue ;;
esac
find "$dir" -maxdepth 1 -name '*.cpp' -o -name '*.h' | while read -r f; do
[ "$f" = "src/main.cpp" ] && continue
# 修改 include 路径
sed -i "s|#include \"ir/|#include \"${prefix}/include/ir/|g" "$f"
sed -i "s|#include \"irgen/|#include \"${prefix}/include/irgen/|g" "$f"
sed -i "s|#include \"sem/|#include \"${prefix}/include/sem/|g" "$f"
sed -i "s|#include \"mir/|#include \"${prefix}/include/mir/|g" "$f"
sed -i "s|#include \"utils/|#include \"${prefix}/include/utils/|g" "$f"
sed -i "s|#include \"frontend/|#include \"${prefix}/src/frontend/|g" "$f"
echo " Fixed: $f"
done
done
# 处理 include/ 下的文件
for dir in include include/ir include/irgen include/sem include/mir include/utils; do
[[ ! -d "$dir" ]] && continue
find "$dir" -maxdepth 1 -name '*.h' | while read -r f; do
sed -i "s|#include \"ir/|#include \"ir/|g" "$f" # include下的不用改
sed -i "s|#include \"frontend/|#include \"../src/frontend/|g" "$f"
echo " Fixed: $f"
done
done
echo "Done!"